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 '
| '."\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 ' '."\n";
$ii=0;
- foreach ($boxarray as $key => $box)
+ foreach ($boxactivated as $key => $box)
{
if (preg_match('/^B/i',$box->box_order)) // colonne B
{
$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(); @@ -143,6 +135,7 @@ function printBoxesArea($user,$areacode) { print "\n"; print ''."\n"; } } - return count($boxarray); + return count($boxactivated); } @@ -199,7 +199,7 @@ class InfoBox * @param string $mode 'available' or 'activated' * @param string $zone Name or area (-1 for all, 0 for Homepage, 1 for xxx, ...) * @param User $user Objet user to filter (used only if $zone >= 0) - * @param array $excludelist Array of box.box_id = boxes_def.rowid to exclude + * @param array $excludelist Array of box id (box.box_id = boxes_def.rowid) to exclude * @return array Array of boxes */ function listBoxes($mode,$zone,$user,$excludelist=array()) @@ -259,6 +259,7 @@ class InfoBox // box properties $box->rowid=$obj->rowid; + $box->id=$obj->box_id; $box->position=$obj->position; $box->box_order=$obj->box_order; $box->fk_user=$obj->fk_user; @@ -302,14 +303,13 @@ class InfoBox } - /** - * Save order of boxes for area and user + * Save order of boxes for area and user * - * @param string $zone Name of area (0 for Homepage, ...) - * @param string $boxorder List of boxes with correct order 'A:123,456,...-B:789,321...' - * @param int $userid Id of user - * @return int <0 if KO, >= 0 if OK + * @param string $zone Name of area (0 for Homepage, ...) + * @param string $boxorder List of boxes with correct order 'A:123,456,...-B:789,321...' + * @param int $userid Id of user + * @return int <0 if KO, >= 0 if OK */ function saveboxorder($zone,$boxorder,$userid=0) { @@ -319,7 +319,7 @@ class InfoBox require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php"); - dol_syslog(get_class($this)."::saveboxorder zone=".$zone." user=".$userid); + dol_syslog(get_class($this)."::saveboxorder zone=".$zone." userid=".$userid); if (! $userid || $userid == 0) return 0; @@ -328,7 +328,7 @@ class InfoBox $this->db->begin(); - // Sauve parametre indiquant que le user a une + // Sauve parametre indiquant que le user a une config dediee $confuserzone='MAIN_BOXES_'.$zone; $tab[$confuserzone]=1; if (dol_set_user_param($this->db, $conf, $user, $tab) < 0) @@ -338,6 +338,7 @@ class InfoBox return -3; } + // Delete all lines $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes"; $sql.= " USING ".MAIN_DB_PREFIX."boxes, ".MAIN_DB_PREFIX."boxes_def"; $sql.= " WHERE ".MAIN_DB_PREFIX."boxes.box_id = ".MAIN_DB_PREFIX."boxes_def.rowid"; @@ -355,7 +356,7 @@ class InfoBox $part=explode(':',$collist); $colonne=$part[0]; $list=$part[1]; - dol_syslog('InfoBox::saveboxorder column='.$colonne.' list='.$list); + dol_syslog(get_class($this)."::saveboxorder column=".$colonne.' list='.$list); $i=0; $listarray=explode(',',$list); diff --git a/htdocs/core/ajax/box.php b/htdocs/core/ajax/box.php index 0ee675434b9..4e424a605c1 100644 --- a/htdocs/core/ajax/box.php +++ b/htdocs/core/ajax/box.php @@ -1,6 +1,6 @@ - * Copyright (C) 2007-2010 Laurent Destailleur | '; + 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 ' |