diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php
index a90a89e32a7..ed9f7847701 100644
--- a/htdocs/admin/boxes.php
+++ b/htdocs/admin/boxes.php
@@ -27,6 +27,8 @@
*/
require("./pre.inc.php");
+include_once(DOL_DOCUMENT_ROOT."/includes/boxes/modules_boxes.php");
+
$langs->load("admin");
if (!$user->admin)
@@ -43,25 +45,42 @@ $boxes = array();
if ($_POST["action"] == 'add')
{
- $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."boxes WHERE box_id=".$_POST["boxid"]." AND position=".$_POST["pos"];
- $result = $db->query($sql);
-
- $num = $db->num_rows($result);
- if ($num == 0)
+ $sql = "SELECT rowid";
+ $sql.= " FROM ".MAIN_DB_PREFIX."boxes";
+ $sql.= " WHERE fk_user=0 AND box_id=".$_POST["boxid"]." AND position=".$_POST["pos"];
+ $resql = $db->query($sql);
+ if ($resql)
{
- // Si la boite n'est pas deja active
- $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (box_id, position) values (".$_POST["boxid"].",".$_POST["pos"].");";
- $result = $db->query($sql);
- }
-
- Header("Location: boxes.php");
- exit;
+ $num = $db->num_rows($result);
+ if ($num == 0)
+ {
+ // Si la boite n'est pas deja active
+ $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (box_id, position, fk_user) values (".$_POST["boxid"].",".$_POST["pos"].", 0)";
+ $result = $db->query($sql);
+ }
+
+ Header("Location: boxes.php");
+ exit;
+ }
+ else
+ {
+ dolibarr_print_error($db);
+ }
}
if ($_GET["action"] == 'delete')
{
- $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes WHERE rowid=".$_GET["rowid"];
- $result = $db->query($sql);
+ $db->begin();
+
+ $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes";
+ $sql.= " WHERE rowid=".$_GET["rowid"];
+ $resql = $db->query($sql);
+
+ $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_param";
+ $sql.= " WHERE param like 'MAIN_BOXES_%'";
+ $resql = $db->query($sql);
+
+ $db->commit();
}
if ($_GET["action"] == 'switch')
@@ -69,34 +88,20 @@ if ($_GET["action"] == 'switch')
// On permute les valeur du champ box_order des 2 lignes de la table boxes
$db->begin();
- $sql="SELECT box_order FROM ".MAIN_DB_PREFIX."boxes WHERE rowid=".$_GET["switchfrom"];
- $resultfrom = $db->query($sql);
- if ($resultfrom)
- {
- $objfrom = $db->fetch_object($resultfrom);
- }
- else
- {
- dolibarr_print_error($db);
- }
+ $objfrom=new ModeleBoxes($db);
+ $objfrom->fetch($_GET["switchfrom"]);
- $sql="SELECT box_order FROM ".MAIN_DB_PREFIX."boxes WHERE rowid=".$_GET["switchto"];
- $resultto = $db->query($sql);
-
- if ($resultto)
+ $objto=new ModeleBoxes($db);
+ $objto->fetch($_GET["switchto"]);
+
+ if (is_object($objfrom) && is_object($objto))
{
- $objto = $db->fetch_object($resultto);
- }
- else
- {
- dolibarr_print_error($db);
- }
-
- if ($objfrom && $objto) {
- $sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order=".$objto->box_order." WHERE rowid=".$_GET["switchfrom"];
+ $sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order=".$objto->box_order." WHERE rowid=".$objfrom->rowid;
+ //print "xx".$sql;
$resultupdatefrom = $db->query($sql);
if (! $resultupdatefrom) { dolibarr_print_error($db); }
- $sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order=".$objfrom->box_order." WHERE rowid=".$_GET["switchto"];
+ $sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order=".$objfrom->box_order." WHERE rowid=".$objto->rowid;
+ //print "xx".$sql;
$resultupdateto = $db->query($sql);
if (! $resultupdateto) { dolibarr_print_error($db); }
}
@@ -126,7 +131,7 @@ print $langs->trans("BoxesDesc")."
\n";
$sql = "SELECT b.rowid, b.box_id, b.position, b.box_order, d.name, d.rowid as boxid";
$sql .= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as d";
-$sql .= " where b.box_id = d.rowid";
+$sql .= " WHERE b.box_id = d.rowid AND fk_user=0";
$sql .= " ORDER by position, box_order";
$resql = $db->query($sql);
@@ -174,7 +179,8 @@ print '
'.$langs->trans("SourceFile").' | ';
print ''.$langs->trans("ActivateOn").' | ';
print "\n";
-$sql = "SELECT rowid, name, file, note FROM ".MAIN_DB_PREFIX."boxes_def";
+$sql = "SELECT rowid, name, file, note";
+$sql.= " FROM ".MAIN_DB_PREFIX."boxes_def";
$resql = $db->query($sql);
$var=True;
@@ -243,14 +249,16 @@ print '';
print '| '.$langs->trans("Box").' | ';
print ''.$langs->trans("Note").'/'.$langs->trans("Parameters").' | ';
print ''.$langs->trans("ActiveOn").' | ';
-print ''.$langs->trans("Position").' | ';
+print ''.$langs->trans("PositionByDefault").' | ';
print ''.$langs->trans("Disable").' | ';
print "
\n";
-$sql = "SELECT b.rowid, b.box_id, b.position, d.name, d.file, d.note";
-$sql .= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as d";
-$sql .= " where b.box_id = d.rowid";
-$sql .= " ORDER by position, box_order";
+$sql = "SELECT b.rowid, b.box_id, b.position,";
+$sql.= " d.name, d.file, d.note";
+$sql.= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as d";
+$sql.= " WHERE b.box_id = d.rowid";
+$sql.= " AND b.fk_user=0";
+$sql.= " ORDER by position, box_order";
$resql = $db->query($sql);
diff --git a/htdocs/boxes.php b/htdocs/boxes.php
index a9c86b1e778..5b4979903d7 100644
--- a/htdocs/boxes.php
+++ b/htdocs/boxes.php
@@ -1,6 +1,6 @@
- * Copyright (C) 2004-2005 Laurent Destailleur
+ * Copyright (C) 2004-2006 Laurent Destailleur
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -66,7 +66,7 @@ class InfoBox
if ($user->id && $user->conf->$confuserzone)
{
// Recupere liste des boites d'un user si ce dernier a sa propre liste
- $sql = "SELECT b.rowid, b.box_id,";
+ $sql = "SELECT b.rowid, b.box_id, b.position, b.box_order, b.fk_user,";
$sql.= " d.file, d.note";
$sql.= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as d";
$sql.= " WHERE b.box_id = d.rowid";
@@ -86,6 +86,11 @@ class InfoBox
$boxname=eregi_replace('\.php$','',$obj->file);
include_once(DOL_DOCUMENT_ROOT."/includes/boxes/".$boxname.".php");
$box=new $boxname($this->db,$obj->note);
+ $box->rowid=$obj->rowid;
+ $box->box_id=$obj->box_id;
+ $box->position=$obj->position;
+ $box->box_order=$obj->box_order;
+ $box->fk_user=$obj->fk_user;
$boxes[$j]=$box;
$j++;
}
@@ -99,7 +104,7 @@ class InfoBox
else
{
// Recupere liste des boites active par defaut pour tous
- $sql = "SELECT b.rowid, b.box_id,";
+ $sql = "SELECT b.rowid, b.box_id, b.position, b.box_order, b.fk_user,";
$sql.= " d.file, d.note";
$sql.= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as d";
$sql.= " WHERE b.box_id = d.rowid";
@@ -119,6 +124,11 @@ class InfoBox
$boxname=eregi_replace('\.php$','',$obj->file);
include_once(DOL_DOCUMENT_ROOT."/includes/boxes/".$boxname.".php");
$box=new $boxname($this->db,$obj->note);
+ $box->rowid=$obj->rowid;
+ $box->box_id=$obj->box_id;
+ $box->position=$obj->position;
+ $box->box_order=$obj->box_order;
+ $box->fk_user=$obj->fk_user;
$boxes[$j]=$box;
$j++;
}
@@ -132,6 +142,78 @@ class InfoBox
return $boxes;
}
-
+
+
+ /**
+ * \brief Sauvegarde sequencement des boites pour la zone et le user
+ * \param $zone ID de la zone (0 pour la Homepage, ...)
+ * \param $boxarray Tableau des boites dans le bon ordre
+ * \param $user Objet user
+ * \return int <0 si ko, >= 0 si ok
+ */
+ function saveboxorder($zone,$boxarray,$user)
+ {
+ dolibarr_syslog("InfoBoxes::saveboxorder zone=$zone user=$user");
+
+ if (! is_object($user) || ! $user->id) return 0;
+
+ $this->db->begin();
+
+ // Sauve parametre indiquant que le user a une
+ $confuserzone='MAIN_BOXES_'.$zone;
+ $tab[$confuserzone]=1;
+ if (! dolibarr_set_user_page_param($this->db, $user, '', $tab))
+ {
+ $this->error=$this->db->error();
+ $this->db->rollback();
+ return -3;
+ }
+
+ $sql ="DELETE FROM ".MAIN_DB_PREFIX."boxes";
+ $sql.=" WHERE fk_user = ".$user->id;
+ $sql.=" AND position = ".$zone;
+ $result = $this->db->query($sql);
+ if ($result)
+ {
+ for ($ii=0, $ni=sizeof($boxarray); $ii < $ni; $ii++)
+ {
+ //print "box_id".$boxarray[$ii]->box_id.'
';
+ //print "box_order".$boxarray[$ii]->box_order.'
';
+ $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes";
+ $sql.= "(box_id, position, box_order, fk_user)";
+ $sql.= " values (";
+ $sql.= " ".$boxarray[$ii]->box_id.",";
+ $sql.= " ".$zone.",";
+ $sql.= " ".$boxarray[$ii]->box_order.",";
+ $sql.= " ".$user->id;
+ $sql.= ")";
+ $result = $this->db->query($sql);
+ if ($result < 0)
+ {
+ $error++;
+ break;
+ }
+ }
+
+ if ($error)
+ {
+ $this->error=$this->db->error();
+ $this->db->rollback();
+ return -2;
+ }
+ else
+ {
+ $this->db->commit();
+ return 1;
+ }
+ }
+ else
+ {
+ $this->error=$this->db->error();
+ $this->db->rollback();
+ return -1;
+ }
+
+ }
}
?>
diff --git a/htdocs/includes/boxes/modules_boxes.php b/htdocs/includes/boxes/modules_boxes.php
index 5dbfc33c341..608467251d2 100644
--- a/htdocs/includes/boxes/modules_boxes.php
+++ b/htdocs/includes/boxes/modules_boxes.php
@@ -1,5 +1,5 @@
+/* Copyright (C) 2004-2006 Laurent Destailleur
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -37,9 +37,19 @@ class ModeleBoxes
{
var $MAXLENGTHBOX=60; // Mettre 0 pour pas de limite
+ var $db;
var $error='';
+
-
+ /*
+ * \brief Constructeur
+ */
+ function ModeleBoxes($DB)
+ {
+ $this->db=$DB;
+ }
+
+
/**
\brief Renvoi le dernier message d'erreur de création de facture
*/
@@ -49,6 +59,42 @@ class ModeleBoxes
}
+ /**
+ \brief Charge une ligne boxe depuis son rowid
+ */
+ function fetch($rowid)
+ {
+ // Recupere liste des boites d'un user si ce dernier a sa propre liste
+ $sql = "SELECT b.rowid, b.box_id, b.position, b.box_order, b.fk_user";
+ $sql.= " FROM ".MAIN_DB_PREFIX."boxes as b";
+ $sql.= " WHERE b.rowid = ".$rowid;
+ dolibarr_syslog("ModeleBoxes::fetch rowid=".$rowid);
+
+ $resql = $this->db->query($sql);
+ if ($resql)
+ {
+ $obj = $this->db->fetch_object($resql);
+ if ($obj)
+ {
+ $this->rowid=$obj->rowid;
+ $this->box_id=$obj->box_id;
+ $this->position=$obj->position;
+ $this->box_order=$obj->box_order;
+ $this->fk_user=$obj->fk_user;
+ return 1;
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ else
+ {
+ return -1;
+ }
+ }
+
+
/**
\brief Methode standard d'affichage des boites
\param $head tableau des caractéristiques du titre
@@ -91,7 +137,7 @@ class ModeleBoxes
print img_picto($langs->trans("Move"),'uparrow','style="cursor:move;"');
print '';
}
-
+
print '';
print '';
diff --git a/htdocs/index.php b/htdocs/index.php
index ed0d0042b94..7fe0a6a48c5 100644
--- a/htdocs/index.php
+++ b/htdocs/index.php
@@ -491,11 +491,42 @@ print '';
$boxarray=$infobox->listboxes("0",$user); // 0=valeur pour la page accueil
$boxjavascriptids=array();
+// Gestion deplacement des boxes
if (eregi('boxobject_([0-9]+)',$_GET["switchfrom"],$regfrom)
&& eregi('boxto_([0-9]+)',$_GET["switchto"],$regto))
{
- //print "Modif ordre box: ".$regfrom[1]." <-> ".$regto[1];
-// print_r($boxarray);
+ /*
+ print "Modif ordre box: ";
+ print $boxarray[$regfrom[1]]->box_id."(".$boxarray[$regfrom[1]]->box_order.")";
+ print " <-> ";
+ print $boxarray[$regto[1]]->box_id."(".$boxarray[$regto[1]]->box_order.")";
+ print "
\n";
+ */
+
+ // Permutation boites
+ $switchii=$boxarray[$regto[1]];
+ $boxarray[$regto[1]]=$boxarray[$regfrom[1]];
+ $boxarray[$regfrom[1]]=$switchii;
+
+ // Permutation box_order
+ $switchbox_order=$boxarray[$regto[1]]->box_order;
+ $boxarray[$regto[1]]->box_order=$boxarray[$regfrom[1]]->box_order;
+ $boxarray[$regfrom[1]]->box_order=$switchbox_order;
+
+ /*
+ print "Modif ordre box: ";
+ print $boxarray[$regfrom[1]]->box_id."(".$boxarray[$regfrom[1]]->box_order.")";
+ print " <-> ";
+ print $boxarray[$regto[1]]->box_id."(".$boxarray[$regto[1]]->box_order.")";
+ print "
\n";
+ */
+
+ // Sauvegarde nouvel ordre pour l'utilisateur
+ $result=$infobox->saveboxorder("0",$boxarray,$user);
+ if ($result < 0)
+ {
+ dolibarr_print_error($db,$infobox->error);
+ }
}
@@ -563,9 +594,10 @@ if ($conf->use_ajax && $conf->browser->firefox && $conf->global->MAIN_SHOW_DEVEL
}
// Juste pour éviter bug IE qui réorganise mal div précédents si celui-ci absent
-print '';
-print ' ';
-print '
';
+if (! $conf->browser->firefox)
+{
+ print '
';
+}
$db->close();
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 8c8683b39d9..32929c0ed02 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -41,6 +41,8 @@ CurrentDolibarrLanguage=Dolibarr current language
OSEnv=OS Environment
Box=Box
Boxes=Boxes
+PositionByDefault=Default order
+Position=Order
System=System
SystemInfo=System informations
SystemTools=System tools
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index 3ed7c13ac8f..83f89b5590a 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -41,6 +41,8 @@ CurrentDolibarrLanguage=Langue Dolibarr courante
OSEnv=Environnement OS
Box=Boîte
Boxes=Boîtes
+PositionByDefault=Position par défaut
+Position=Ordre
System=Système
SystemInfo=Infos Système
SystemTools=Outils Système
diff --git a/htdocs/lib/functions.inc.php b/htdocs/lib/functions.inc.php
index 4525f8172f1..090f69b695e 100644
--- a/htdocs/lib/functions.inc.php
+++ b/htdocs/lib/functions.inc.php
@@ -369,6 +369,57 @@ function dolibarr_del_const($db, $name)
}
}
+
+/**
+ \brief Sauvegarde parametrage personnel
+ \param db Handler d'accès base
+ \param user Objet utilisateur
+ \param url Si defini, on sauve parametre du tableau tab dont clé = sortfield, sortorder, begin et page
+ Si non defini on sauve tous parametres du tableau tab
+ \param tab Tableau (clé=>valeur) des paramètres à sauvegarder
+ \return int <0 si ko, >0 si ok
+*/
+function dolibarr_set_user_page_param($db, &$user, $url='', $tab)
+{
+ $db->begin();
+
+ // On efface paramètres anciens
+ $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_param";
+ $sql.= " WHERE fk_user = ".$user->id;
+ if ($url) $sql.=" AND page='".$url."'";
+ else $sql.=" AND page=''";
+ dolibarr_syslog("functions.inc.php::dolibarr_set_user_page_param $sql");
+
+ $resql=$db->query($sql);
+ if (! $resql)
+ {
+ dolibarr_print_error($db);
+ exit;
+ }
+
+ foreach ($tab as $key=>$value)
+ {
+ // On positionne nouveaux paramètres
+ if ($value && (! $url || in_array($key,array('sortfield','sortorder','begin','page'))))
+ {
+ $sql = "INSERT INTO ".MAIN_DB_PREFIX."user_param(fk_user,page,param,value)";
+ $sql.= " VALUES (".$user->id.",";
+ if ($url) $sql.= " '".urlencode($url)."',";
+ else $sql.= " '',";
+ $sql.= " '".$key."','".addslashes($value)."');";
+ dolibarr_syslog("functions.inc.php::dolibarr_set_user_page_param $sql");
+
+ $db->query($sql);
+
+ $user->page_param[$key] = $value;
+ }
+ }
+
+ $db->commit();
+ return 1;
+}
+
+
/**
\brief Formattage des nombres
\param ca valeur a formater
@@ -603,10 +654,10 @@ function img_object($alt, $object)
\param picto Nom de l'image a afficher
\return string Retourne tag img
*/
-function img_picto($alt, $picto)
+function img_picto($alt, $picto, $options='')
{
global $conf,$langs;
- return '
';
+ return '
';
}
/**
@@ -1261,51 +1312,6 @@ function doliMoveFileUpload($src_file, $dest_file)
}
-/**
- \brief Sauvegarde parametrage personnel
- \param db Handler d'accès base
- \param user Objet utilisateur
- \param url Si defini, on sauve parametre du tableau tab dont clé = sortfield, sortorder, begin et page
- Si non defini on sauve tous parametres du tableau tab
- \param tab Tableau (clé=>valeur) des paramètres à sauvegarder
-*/
-function dolibarr_set_user_page_param($db, &$user, $url='', $tab)
-{
- $db->begin();
-
- // On efface paramètres anciens
- $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_param";
- $sql.= " WHERE fk_user = ".$user->id;
- if ($url) $sql.=" AND page='".$url."'";
- else $sql.=" AND page=''";
- $sql.=";";
- $resql=$db->query($sql);
- if (! $resql)
- {
- dolibarr_print_error($db);
- }
- dolibarr_syslog("functions.inc.php::dolibarr_set_user_page_param $sql");
-
- foreach ($tab as $key=>$value)
- {
- // On positionne nouveaux paramètres
- if ($value && (! $url || in_array($key,array('sortfield','sortorder','begin','page'))))
- {
- $sql = "INSERT INTO ".MAIN_DB_PREFIX."user_param(fk_user,page,param,value)";
- $sql.= " VALUES (".$user->id.",";
- if ($url) $sql.= " '".urlencode($url)."',";
- else $sql.= " '',";
- $sql.= " '".$key."','".addslashes($value)."');";
- dolibarr_syslog("functions.inc.php::dolibarr_set_user_page_param $sql");
- $db->query($sql);
-
- $user->page_param[$key] = $value;
- }
- }
-
- $db->commit();
-}
-
/**
\brief Transcodage de francs en euros
\param zonein zone de depart