diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php index 3651a98857b..fff4bab9491 100644 --- a/htdocs/admin/boxes.php +++ b/htdocs/admin/boxes.php @@ -52,55 +52,85 @@ if ($action == 'addconst') if ($action == 'add') { - $sql = "SELECT rowid"; - $sql.= " FROM ".MAIN_DB_PREFIX."boxes"; - $sql.= " WHERE fk_user = 0"; - $sql.= " AND box_id = ".$_POST["boxid"]; - $sql.= " AND position = ".$_POST["pos"]; + $error=0; - $resql = $db->query($sql); - dol_syslog("boxes.php::search if box active sql=".$sql); - if ($resql) + $db->begin(); + + // Initialize distinctfkuser with all already existing values of fk_user (user that use a personalized view of boxes for pos) + $distinctfkuser=array(); + if (! $error) { - $num = $db->num_rows($resql); - if ($num == 0) + $sql = "SELECT fk_user"; + $sql.= " FROM ".MAIN_DB_PREFIX."user_param"; + $sql.= " WHERE param = 'MAIN_BOXES_".$db->escape(GETPOST("pos","alpha"))."' AND value = '1'"; + $sql.= " AND entity = ".$conf->entity; + $resql = $db->query($sql); + dol_syslog("boxes.php search fk_user to activate box for sql=".$sql); + if ($resql) { - $db->begin(); - - // Si la boite n'est pas deja active, insert with box_order='' - $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes ("; - $sql.= "box_id"; - $sql.= ", position"; - $sql.= ", box_order"; - $sql.= ", fk_user"; - $sql.= ") values ("; - $sql.= $_POST["boxid"]; - $sql.= ", ".$_POST["pos"]; - $sql.= ", ''"; - $sql.= ", 0"; - $sql.= ")"; - - dol_syslog("boxes.php activate box sql=".$sql); - $resql = $db->query($sql); - - // Remove all personalized setup when a box is activated or disabled (to be sure user see new box) - // TODO Disable this when adding combo will be available on home page for each user. - $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_param WHERE param LIKE 'MAIN_BOXES_%'"; - dol_syslog("boxes.php delete user_param sql=".$sql); - $resql = $db->query($sql); - $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes WHERE fk_user != 0"; - dol_syslog("boxes.php delete user_param sql=".$sql); - $resql = $db->query($sql); - - $db->commit(); + $num = $db->num_rows($resql); + $i=0; + while ($i < $num) + { + $obj=$db->fetch_object($resql); + $distinctfkuser[$obj->fk_user]=$obj->fk_user; + $i++; + } } + else + { + $errmesg=$db->lasterror(); + $error++; + } + } + foreach($distinctfkuser as $fk_user) + { + if (! $error && $fk_user != 0) // We will add fk_user = 0 later. + { + $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes ("; + $sql.= "box_id, position, box_order, fk_user"; + $sql.= ") values ("; + $sql.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", 'A01', ".$fk_user; + $sql.= ")"; + + dol_syslog("boxes.php activate box sql=".$sql); + $resql = $db->query($sql); + if (! $resql) + { + $errmesg=$db->lasterror(); + $error++; + } + } + } + + // If value 0 was not included, we add it. + if (! $error) + { + $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes ("; + $sql.= "box_id, position, box_order, fk_user"; + $sql.= ") values ("; + $sql.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", 'A01', 0"; + $sql.= ")"; + + dol_syslog("boxes.php activate box sql=".$sql); + $resql = $db->query($sql); + if (! $resql) + { + $errmesg=$db->lasterror(); + $error++; + } + } + + if (! $error) + { Header("Location: boxes.php"); + $db->commit(); exit; } else { - dol_print_error($db); + $db->rollback(); } } @@ -176,6 +206,8 @@ print_fiche_titre($langs->trans("Boxes"),'','setup'); print $langs->trans("BoxesDesc")." ".$langs->trans("OnlyActiveElementsAreShown")."
\n"; +dol_htmloutput_errors($errmesg); + /* * Recherche des boites actives par defaut pour chaque position possible @@ -212,7 +244,7 @@ if ($resql) // This occurs just after an insert. if ($decalage) { - $sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order=".$decalage." WHERE rowid=".$obj->rowid; + $sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order='".$decalage."' WHERE rowid=".$obj->rowid; $db->query($sql); } } @@ -236,13 +268,13 @@ if ($resql) if (preg_match("/[13579]{1}/",substr($record['box_order'],-1))) { $box_order = "A0".$record['box_order']; - $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE box_order = ".$record['box_order']; + $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE box_order = '".$record['box_order']."'"; $resql = $db->query($sql); } else if (preg_match("/[02468]{1}/",substr($record['box_order'],-1))) { $box_order = "B0".$record['box_order']; - $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE box_order = ".$record['box_order']; + $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE box_order = '".$record['box_order']."'"; $resql = $db->query($sql); } } @@ -251,13 +283,13 @@ if ($resql) if (preg_match("/[13579]{1}/",substr($record['box_order'],-1))) { $box_order = "A".$record['box_order']; - $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE box_order = ".$record['box_order']; + $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE box_order = '".$record['box_order']."'"; $resql = $db->query($sql); } else if (preg_match("/[02468]{1}/",substr($record['box_order'],-1))) { $box_order = "B".$record['box_order']; - $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE box_order = ".$record['box_order']; + $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE box_order = '".$record['box_order']."'"; $resql = $db->query($sql); } } diff --git a/htdocs/boxes.php b/htdocs/boxes.php index 6f78d65075e..b9652de140a 100644 --- a/htdocs/boxes.php +++ b/htdocs/boxes.php @@ -27,49 +27,41 @@ /** - * Show a HTML Tab with boxes of a particular area including personalized choices of user + * Show a HTML Tab with boxes of a particular area including personalized choices of user * - * @param User $user Object User - * @param String $areacode Code of area for pages (0=value for Home page) - * @return int <0 if KO, Nb of boxes shown of OK (0 to n) + * @param User $user Object User + * @param String $areacode Code of area for pages (0=value for Home page) + * @return int <0 if KO, Nb of boxes shown of OK (0 to n) */ function printBoxesArea($user,$areacode) { global $conf,$langs,$db; $infobox=new InfoBox($db); - $boxarray=$infobox->listboxes('activated',$areacode,$user); + $boxactivated=$infobox->listboxes('activated',$areacode,$user); + $arrayboxactivatedid=array(); + foreach($boxactivated as $box) $arrayboxactivatedid[$box->id]=$box->id; $selectboxlist=''; - /* if ($conf->use_javascript_ajax) { - $sql = "SELECT rowid, file, note, tms"; - $sql.= " FROM ".MAIN_DB_PREFIX."boxes_def"; - $sql.= " WHERE entity = ".$conf->entity; - $resql = $db->query($sql); - $var=true; + $emptyuser=new User($db); + $boxavailable=$infobox->listboxes('available',$areacode,$emptyuser,$arrayboxactivatedid); - if ($resql) + $arrayboxtoactivatelabel=array(); + foreach($boxavailable as $box) { - $num = $db->num_rows($resql); - $i = 0; - - // Boucle sur toutes les boites - while ($i < $num) - { - $obj = $db->fetch_object($resql); - - - - } + $arrayboxtoactivatelabel[$box->id]=$box->boxlabel; } - }*/ + $form=new Form($db); + // TODO enable + //$selectboxlist=$form->selectarray('boxcombo', $arrayboxtoactivatelabel); + } - if (count($boxarray)) + print load_fiche_titre($langs->trans("OtherInformationsBoxes"),$selectboxlist,'','','otherboxes'); + + if (count($boxactivated)) { - print load_fiche_titre($langs->trans("OtherInformationsBoxes"),$selectboxlist,'','','otherboxes'); - print ''; print '
'."\n"; @@ -83,13 +75,13 @@ function printBoxesArea($user,$areacode) if (! empty($conf->global->MAIN_BOXES_MAXLINES)) $box_max_lines=$conf->global->MAIN_BOXES_MAXLINES; $ii=0; - foreach ($boxarray as $key => $box) + foreach ($boxactivated as $key => $box) { if (preg_match('/^A/i',$box->box_order)) // column A { $ii++; - //print 'box_id '.$boxarray[$ii]->box_id.' '; - //print 'box_order '.$boxarray[$ii]->box_order.'
'; + //print 'box_id '.$boxactivated[$ii]->box_id.' '; + //print 'box_order '.$boxactivated[$ii]->box_order.'
'; // Affichage boite key $box->loadBox($box_max_lines); $box->showBox(); @@ -111,13 +103,13 @@ function printBoxesArea($user,$areacode) print '
'; + print ''; // The image must have the class 'boxhandle' beause it's value used in DOM draggable objects to define the area used to catch the full object - print img_picto($langs->trans("MoveBox",$this->box_id),'uparrow','class="boxhandle" style="cursor:move;"'); + print img_picto($langs->trans("MoveBox",$this->box_id),'grip','class="boxhandle" style="cursor:move;"'); + print img_picto($langs->trans("Close",$this->box_id),'close','class="boxclose" style="cursor:pointer;" id="imgclose'.$this->box_id.'"'); print '
'; } print ''; @@ -226,17 +227,6 @@ class ModeleBoxes // Can't be abtract as it is instanciated to build "empty" print "\n"; } } - - // Complete line to max - /* - while ($i < $this->max) - { - $var=!$var; - print ' '; - $i++; - }*/ - - //print "\n"; } if (! empty($head['text']) || ! empty($head['sublink']) || $nblines) diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php index 8dddbd2c2a1..5ba0935124f 100644 --- a/htdocs/core/modules/DolibarrModules.class.php +++ b/htdocs/core/modules/DolibarrModules.class.php @@ -613,7 +613,7 @@ abstract class DolibarrModules $lastid=$this->db->last_insert_id(MAIN_DB_PREFIX."boxes_def","rowid"); $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (box_id,position,box_order,fk_user)"; - $sql.= " VALUES (".$lastid.", 0, 0, 0)"; + $sql.= " VALUES (".$lastid.", 0, '0', 0)"; dol_syslog(get_class($this)."::insert_boxes sql=".$sql); $resql=$this->db->query($sql); diff --git a/htdocs/theme/auguria/img/close.png b/htdocs/theme/auguria/img/close.png new file mode 100644 index 00000000000..aacac9fc423 Binary files /dev/null and b/htdocs/theme/auguria/img/close.png differ diff --git a/htdocs/theme/bureau2crea/img/close.png b/htdocs/theme/bureau2crea/img/close.png new file mode 100644 index 00000000000..aacac9fc423 Binary files /dev/null and b/htdocs/theme/bureau2crea/img/close.png differ diff --git a/htdocs/theme/cameleo/img/close.png b/htdocs/theme/cameleo/img/close.png new file mode 100644 index 00000000000..aacac9fc423 Binary files /dev/null and b/htdocs/theme/cameleo/img/close.png differ diff --git a/htdocs/theme/eldy/img/close.png b/htdocs/theme/eldy/img/close.png new file mode 100644 index 00000000000..aacac9fc423 Binary files /dev/null and b/htdocs/theme/eldy/img/close.png differ diff --git a/htdocs/theme/phones/smartphone/theme/default/img/close.png b/htdocs/theme/phones/smartphone/theme/default/img/close.png new file mode 100644 index 00000000000..aacac9fc423 Binary files /dev/null and b/htdocs/theme/phones/smartphone/theme/default/img/close.png differ