diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php index a90a89e32a70aca05817ad7edaf7d3e2ccde53ac..ed9f784770197ddb25329c50f510ca80b0b86110 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); - } - - $sql="SELECT box_order FROM ".MAIN_DB_PREFIX."boxes WHERE rowid=".$_GET["switchto"]; - $resultto = $db->query($sql); + $objfrom=new ModeleBoxes($db); + $objfrom->fetch($_GET["switchfrom"]); - if ($resultto) - { - $objto = $db->fetch_object($resultto); - } - else + $objto=new ModeleBoxes($db); + $objto->fetch($_GET["switchto"]); + + if (is_object($objfrom) && is_object($objto)) { - 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")."<br>\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 '<td>'.$langs->trans("SourceFile").'</td>'; print '<td align="center" width="160">'.$langs->trans("ActivateOn").'</td>'; print "</tr>\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 '<tr class="liste_titre">'; print '<td width="300">'.$langs->trans("Box").'</td>'; print '<td>'.$langs->trans("Note").'/'.$langs->trans("Parameters").'</td>'; print '<td align="center" width="160">'.$langs->trans("ActiveOn").'</td>'; -print '<td align="center" width="60" colspan="2">'.$langs->trans("Position").'</td>'; +print '<td align="center" width="60" colspan="2">'.$langs->trans("PositionByDefault").'</td>'; print '<td align="center" width="80">'.$langs->trans("Disable").'</td>'; print "</tr>\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 a9c86b1e7780a7f894f11232288270e1eaecc418..5b4979903d75739392eae97e3678dd007cfa3319 100644 --- a/htdocs/boxes.php +++ b/htdocs/boxes.php @@ -1,6 +1,6 @@ <?php /* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org> - * Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net> * * 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.'<br>'; + //print "box_order".$boxarray[$ii]->box_order.'<br>'; + $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 5dbfc33c3414802b15eda9f7a73f4cf7d98aedad..608467251d29d0070b4fc179fc73ff40b269c4d9 100644 --- a/htdocs/includes/boxes/modules_boxes.php +++ b/htdocs/includes/boxes/modules_boxes.php @@ -1,5 +1,5 @@ <?php -/* Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net> +/* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net> * * 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 '</td></tr></table>'; } - + print '</td>'; print '</tr>'; diff --git a/htdocs/index.php b/htdocs/index.php index ed0d0042b94f4fe094a8cbdb7911189bc6c27e6e..7fe0a6a48c5582fabb07d28e8c5143cdcb90fe75 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -491,11 +491,42 @@ print '</td></tr></table>'; $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 "<br>\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 "<br>\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 '<div class="tabsAction">'; -print ' '; -print '</div>'; +if (! $conf->browser->firefox) +{ + print '<div class="tabsAction"> </div>'; +} $db->close(); diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 8c8683b39d9bd07756a5c4edfb650f65ca188805..32929c0ed026a4383617fbaa6e9f17ed3473fbe9 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 3ed7c13ac8f23c8ca3363dfd9b869360ca516213..83f89b5590adb1564193d28608e55017ae3ca3b2 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 4525f8172f100cd2e6c67c6d60ecef616f67bf7d..090f69b695e03bc836bc076efb98ca107667b734 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 '<img src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/'.$picto.'.png" border="0" alt="'.$alt.'" title="'.$alt.'">'; + return '<img src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/'.$picto.'.png" border="0" alt="'.$alt.'" title="'.$alt.'"'.($options?' '.$options:'').'>'; } /** @@ -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