From f6d9f456440ac31043765e355ae8d9abfcb21204 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur <eldy@users.sourceforge.net> Date: Thu, 2 Aug 2007 22:02:58 +0000 Subject: [PATCH] Modification codification ordre d'une boite afin de gerer independemment les colonnes (on met une lettre A, B, ... au debut du champ ordre) --- htdocs/admin/boxes.php | 73 ++++++++++++++----------- htdocs/ajaxbox.php | 17 ++---- htdocs/boxes.php | 64 +++++++++++++--------- htdocs/includes/boxes/modules_boxes.php | 2 +- htdocs/index.php | 59 ++++++++++---------- htdocs/lib/lib_head.js | 2 +- htdocs/theme/eldy/eldy.css.php | 6 ++ mysql/migration/2.1.0-2.2.0.sql | 9 ++- 8 files changed, 132 insertions(+), 100 deletions(-) diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php index 15ad2bc4257..6f2f1225dd3 100644 --- a/htdocs/admin/boxes.php +++ b/htdocs/admin/boxes.php @@ -1,6 +1,6 @@ <?php /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> - * Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2004-2007 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 @@ -35,8 +35,8 @@ if (!$user->admin) accessforbidden(); // D�finition des positions possibles pour les boites -$pos_array = array(0); // Positions possibles pour une boite (0,1,2,...) -$pos_name = array($langs->trans("Home")); // Nom des positions 0=Homepage, 1=... +$pos_array = array(0); // Positions possibles pour une boite (0,1,2,...) +$pos_name = array(0=>$langs->trans("Home")); // Nom des positions 0=Homepage, 1=... $boxes = array(); /* @@ -59,12 +59,13 @@ if ($_POST["action"] == 'add') // 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)"; - dolibarr_syslog("boxes.php::activation boite sql=".$sql); + dolibarr_syslog("boxes.php activate box sql=".$sql); $resql = $db->query($sql); // Remove all personalized setup when a box is activated or disabled $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_param"; $sql.= " WHERE param like 'MAIN_BOXES_%'"; + dolibarr_syslog("boxes.php delete user_param sql=".$sql); $resql = $db->query($sql); $db->commit(); @@ -108,11 +109,11 @@ if ($_GET["action"] == 'switch') if (is_object($objfrom) && is_object($objto)) { - $sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order=".$objto->box_order." WHERE rowid=".$objfrom->rowid; + $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=".$objto->rowid; + $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); } @@ -137,43 +138,53 @@ print_fiche_titre($langs->trans("Boxes"),'','setup'); print $langs->trans("BoxesDesc")."<br>\n"; /* - * Recherche des boites actives par position possible - * On stocke les boites actives par $boxes[position][id_boite]=1 + * Recherche des boites actives par defaut pour chaque position possible + * On stocke les boites actives par defaut dans $boxes[position][id_boite]=1 */ +$actives = array(); + $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 AND fk_user=0"; $sql .= " ORDER by position, box_order"; $resql = $db->query($sql); - -$actives = array(); - if ($resql) { - $num = $db->num_rows($resql); - $i = 0; - $decalage=0; - while ($i < $num) - { - $var = ! $var; - $obj = $db->fetch_object($resql); - $boxes[$obj->position][$obj->box_id]=1; - $i++; - - array_push($actives,$obj->boxid); - - // On renum�rote l'ordre des boites si l'une d'elle est � 0 (Ne doit arriver que sur des anciennes versions) - if ($obj->box_order==0) $decalage++; - if ($decalage) + $num = $db->num_rows($resql); + $i = 0; + $decalage=0; + while ($i < $num) + { + $var = ! $var; + $obj = $db->fetch_object($resql); + $boxes[$obj->position][$obj->box_id]=1; + $i++; + + array_push($actives,$obj->box_id); + + if ($obj->box_order == '' || $obj->box_order == '0' || $decalage) $decalage++; + // On renum�rote l'ordre des boites si l'une d'elle est � 0 (Ne doit arriver que sur des anciennes versions) + if ($decalage) + { + $sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order=".$decalage." WHERE rowid=".$obj->rowid; + $db->query($sql); + } + } + if ($decalage) { - $sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order=box_order+".$decalage." WHERE rowid=".$obj->rowid; - $db->query($sql); + // Si on a renumerote, on corrige champ box_order (Ne doit arriver que sur des anciennes versions) + $sql="update llx_boxes set box_order = concat('A0',box_order) where length(box_order) = 1 and substr(box_order,-1) in ('1','3','5','7','9')"; + $resql = $db->query($sql); + $sql="update llx_boxes set box_order = concat('B0',box_order) where length(box_order) = 1 and substr(box_order,-1) in ('0','2','4','6','8')"; + $resql = $db->query($sql); + $sql="update llx_boxes set box_order = concat('A',box_order) where length(box_order) = 2 and substr(box_order,-1) in ('1','3','5','7','9')"; + $resql = $db->query($sql); + $sql="update llx_boxes set box_order = concat('B',box_order) where length(box_order) = 2 and substr(box_order,-1) in ('0','2','4','6','8')"; + $resql = $db->query($sql); } - } - - $db->free($resql); + $db->free($resql); } diff --git a/htdocs/ajaxbox.php b/htdocs/ajaxbox.php index 12b6adfde73..3bf45bda531 100644 --- a/htdocs/ajaxbox.php +++ b/htdocs/ajaxbox.php @@ -1,5 +1,6 @@ <?php /* Copyright (C) 2005-2007 Regis Houssin <regis.houssin@cap-networks.com> + * Copyright (C) 2007 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 @@ -21,7 +22,7 @@ /** \file htdocs/ajaxbox.php - \brief Fichier de reponse sur evenement Ajax + \brief Fichier de reponse sur evenement Ajax deplacement boxes \version $Revision$ */ @@ -29,18 +30,12 @@ require('master.inc.php'); require_once(DOL_DOCUMENT_ROOT."/boxes.php"); // Enregistrement de la position des boxes -if((isset($_GET['boxorder']) && !empty($_GET['boxorder'])) && (isset($_GET['boxid']) && !empty($_GET['boxid'])) && (isset($_GET['userid']) && !empty($_GET['userid']))) +if((isset($_GET['boxorder']) && !empty($_GET['boxorder'])) && (isset($_GET['userid']) && !empty($_GET['userid']))) { - $infobox=new InfoBox($db); - - dolibarr_syslog("InfoBox::Ajax.Request list=".$_GET['boxorder']." boxid=".$_GET['boxid']." userid=".$_GET['userid'], LOG_DEBUG); - - $boxid = explode(',',$_GET['boxid']); - $boxorder = explode(',',$_GET['boxorder']); - - $infobox->saveboxorder("0",$boxid,$boxorder,$_GET['userid']); + dolibarr_syslog("AjaxBox boxorder=".$_GET['boxorder']." userid=".$_GET['userid'], LOG_DEBUG); + $infobox=new InfoBox($db); + $result=$infobox->saveboxorder("0",$_GET['boxorder'],$_GET['userid']); } - ?> diff --git a/htdocs/boxes.php b/htdocs/boxes.php index 7ad14777df0..e19f5307164 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-2006 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2004-2007 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 @@ -18,7 +18,6 @@ * * $Id$ * $Source$ - * */ /** @@ -74,7 +73,7 @@ class InfoBox $sql.= " AND b.fk_user = ".$user->id; $sql.= " ORDER BY b.box_order"; - dolibarr_syslog("InfoBox::listBoxes sql=$sql"); + dolibarr_syslog("InfoBox::listBoxes get user box list sql=$sql"); $result = $this->db->query($sql); if ($result) { @@ -91,7 +90,7 @@ class InfoBox $box->position=$obj->position; $box->box_order=$obj->box_order; $box->fk_user=$obj->fk_user; - $boxes[$j]=$box; + $boxes[]=$box; $j++; } } @@ -112,7 +111,7 @@ class InfoBox $sql.= " AND b.fk_user = 0"; $sql.= " ORDER BY b.box_order"; - dolibarr_syslog("InfoBox::listBoxes sql=$sql"); + dolibarr_syslog("InfoBox::listBoxes get default box list sql=$sql"); $result = $this->db->query($sql); if ($result) { @@ -129,7 +128,7 @@ class InfoBox $box->position=$obj->position; $box->box_order=$obj->box_order; $box->fk_user=$obj->fk_user; - $boxes[$j]=$box; + $boxes[]=$box; $j++; } } @@ -147,12 +146,11 @@ class InfoBox /** * \brief Sauvegarde sequencement des boites pour la zone et le user * \param $zone ID de la zone (0 pour la Homepage, ...) - * \param $boxid Id des boites - * \param $boxorder Liste des boites dans le bon ordre + * \param $boxorder Liste des boites dans le bon ordre 'A:123,456,...-B:789,321...' * \param $userid Id du user * \return int <0 si ko, >= 0 si ok */ - function saveboxorder($zone,$boxid,$boxorder,$userid=0) + function saveboxorder($zone,$boxorder,$userid=0) { dolibarr_syslog("InfoBoxes::saveboxorder zone=".$zone." user=".$userid); @@ -176,26 +174,43 @@ class InfoBox $sql.=" WHERE fk_user = ".$userid; $sql.=" AND position = ".$zone; $result = $this->db->query($sql); + + dolibarr_syslog("InfoBox::saveboxorder sql=".$sql); if ($result) { - for ($ii=0, $ni=sizeof($boxid); $ii < $ni; $ii++) + $colonnes=split('-',$boxorder); + foreach ($colonnes as $collist) { - $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes"; - $sql.= "(box_id, position, box_order, fk_user)"; - $sql.= " values ("; - $sql.= " ".$boxid[$ii].","; - $sql.= " ".$zone.","; - $sql.= " ".($boxorder[$ii]+1).","; - $sql.= " ".$userid; - $sql.= ")"; - $result = $this->db->query($sql); - if ($result < 0) + $part=split(':',$collist); + $colonne=$part[0]; + $list=$part[1]; + dolibarr_syslog('InfoBox::saveboxorder colonne='.$colonne.' list='.$list); + + $i=0; + $listarray=split(',',$list); + foreach ($listarray as $id) { - $error++; - break; - } + //dolibarr_syslog("aaaaa".sizeof($listarray)); + $i++; + $ii=sprintf('%02d',$i); + $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes"; + $sql.= "(box_id, position, box_order, fk_user)"; + $sql.= " values ("; + $sql.= " ".$id.","; + $sql.= " ".$zone.","; + $sql.= " '".$colonne.$ii."',"; + $sql.= " ".$userid; + $sql.= ")"; + + dolibarr_syslog("InfoBox::saveboxorder sql=".$sql); + $result = $this->db->query($sql); + if ($result < 0) + { + $error++; + break; + } + } } - if ($error) { $this->error=$this->db->error(); @@ -214,7 +229,6 @@ class InfoBox $this->db->rollback(); return -1; } - } } ?> diff --git a/htdocs/includes/boxes/modules_boxes.php b/htdocs/includes/boxes/modules_boxes.php index 6274ed6ac25..42974f113f1 100644 --- a/htdocs/includes/boxes/modules_boxes.php +++ b/htdocs/includes/boxes/modules_boxes.php @@ -113,7 +113,7 @@ class ModeleBoxes print "\n\n<!-- Box start -->\n"; print '<table width="100%" class="noborder"'; - if (isset($this->boxid)) print ' id="boxobject_'.$this->boxid.'"'; + if (isset($this->box_id)) print ' id="boxobject_'.$this->box_id.'"'; print '>'; // Affiche titre de la boite diff --git a/htdocs/index.php b/htdocs/index.php index 3b05f2fdb67..77dd0eadaf7 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -539,6 +539,8 @@ print '</td></tr></table>'; * */ $boxarray=$infobox->listboxes("0",$user); // 0=valeur pour la page accueil +$boxid_left = array(); +$boxid_right = array(); if (sizeof($boxarray)) { @@ -547,49 +549,47 @@ if (sizeof($boxarray)) print '<table width="100%" class="notopnoleftnoright">'; print '<td>'."\n"; - $boxid_left = Array(); - $boxid_right = Array(); - // Affichage colonne gauche (boites paires) print '<div id="left" style="width: 50%; padding: 0px; margin: 0px; float: left;">'."\n"; - for ($ii=0, $ni=sizeof($boxarray); $ii < $ni; $ii++) + $ii=0; + foreach ($boxarray as $key => $box) { - if ($ii%2 != 1) // pair + //print "xxx".$key."-".$value; + if (eregi('^A',$box->box_order)) // colonne A { - print '<div style="padding-right: 2px; padding-bottom: 4px;" id="boxto_'.$ii.'">'; + $ii++; + print '<div style="padding-right: 2px; padding-bottom: 4px;" id="boxto_'.$box->box_id.'">'; //print 'box_id '.$boxarray[$ii]->box_id.' '; - //print 'box_order '.$boxarray[$ii]->box_order.'<br>'; - $boxid_left[$ii] = $boxarray[$ii]->box_id; - // Affichage boite ii - $box=$boxarray[$ii]; + //print 'box_order '.$boxarray[$ii]->box_order.'<br>'; + $boxid_left[$key] = $boxarray[$key]->box_id; + // Affichage boite key $box->loadBox(); - $box->boxid="$ii"; $box->showBox(); print '</div>'; - } + } } - print '</div>'; - print "\n"; + print '</div>'; + print "\n"; - // Affichage colonne droite (boites impaires) - print '<div id="right" style="width: 50%; padding: 0px; margin: 0px; float: right;">'."\n"; - for ($ii=0, $ni=sizeof($boxarray); $ii < $ni; $ii++) + // Affichage colonne droite (boites impaires) + print '<div id="right" style="width: 50%; padding: 0px; margin: 0px; float: right;">'."\n"; + $ii=0; + foreach ($boxarray as $key => $box) { - if ($ii%2 == 1) //impair + if (eregi('^B',$box->box_order)) // colonne B { - print '<div style="padding-left: 2px; padding-bottom: 4px;" id="boxto_'.$ii.'">'; + $ii++; + print '<div style="padding-left: 2px; padding-bottom: 4px;" id="boxto_'.$box->box_id.'">'; //print 'box_id '.$boxarray[$ii]->box_id.' '; - //print 'box_order '.$boxarray[$ii]->box_order.'<br>'; - $boxid_right[$ii] = $boxarray[$ii]->box_id; - // Affichage boite ii - $box=$boxarray[$ii]; + //print 'box_order '.$boxarray[$ii]->box_order.'<br>'; + $boxid_right[$key] = $boxarray[$key]->box_id; + // Affichage boite key $box->loadBox(); - $box->boxid="$ii"; $box->showBox(); print '</div>'; - } + } } print '</div>'; print "\n"; @@ -600,19 +600,18 @@ if (sizeof($boxarray)) if ($conf->use_ajax) { - $boxid = join(',',$boxid_left).','.join(',',$boxid_right); + //$boxid = join(',',$boxid_left).'-'.join(',',$boxid_right); print '<script type="text/javascript" language="javascript"> function updateOrder(){ var left_list = cleanSerialize(Sortable.serialize(\'left\')); var right_list = cleanSerialize(Sortable.serialize(\'right\')); - var boxid = \''.$boxid.'\'; - var boxorder = left_list + \',\' + right_list; - //alert( \'boxorder = \' + boxorder ); + var boxorder = \'A:\' + left_list + \'-B:\' + right_list; + //alert( \'boxorder=\' + boxorder ); var userid = \''.$user->id.'\'; var url = "ajaxbox.php"; o_options = new Object(); - o_options = {asynchronous:true,method: \'get\',parameters: \'boxorder=\' + boxorder + \'&boxid=\' + boxid + \'&userid=\' + userid}; + o_options = {asynchronous:true,method: \'get\',parameters: \'boxorder=\' + boxorder + \'&userid=\' + userid}; var myAjax = new Ajax.Request(url, o_options); }'."\n"; print '// <![CDATA['."\n"; diff --git a/htdocs/lib/lib_head.js b/htdocs/lib/lib_head.js index 3bc7543d936..cc2b8a6cb47 100644 --- a/htdocs/lib/lib_head.js +++ b/htdocs/lib/lib_head.js @@ -644,7 +644,7 @@ function ac_return(field, item){ ==================================================================*/ function cleanSerialize(expr) { var reg = new RegExp("(&)", "g"); - var reg2 = new RegExp("[^0-9,]", "g"); + var reg2 = new RegExp("[^A-Z0-9,]", "g"); var liste1 = expr.replace(reg, ","); var liste = liste1.replace(reg2, ""); return liste; diff --git a/htdocs/theme/eldy/eldy.css.php b/htdocs/theme/eldy/eldy.css.php index 902da179220..1656beca365 100644 --- a/htdocs/theme/eldy/eldy.css.php +++ b/htdocs/theme/eldy/eldy.css.php @@ -876,6 +876,10 @@ border: 0px; /* * Boxes */ +table.box { +margin: 2px; +} + tr.box_titre { background: #7699A9; background-image: url(<?php echo $dolibarr_main_url_root.'/theme/eldy/img/liste_titre.png' ?>); @@ -884,6 +888,8 @@ font: 12px arial, helvetica, verdana, sans-serif; font-weight: bold; border-bottom: 1px solid #FDFFFF; white-space: nowrap; +-moz-border-radius-topleft:6px; +-moz-border-radius-topright:6px; } tr.box_impair { diff --git a/mysql/migration/2.1.0-2.2.0.sql b/mysql/migration/2.1.0-2.2.0.sql index 663cbd539ac..926bcb79a40 100644 --- a/mysql/migration/2.1.0-2.2.0.sql +++ b/mysql/migration/2.1.0-2.2.0.sql @@ -814,4 +814,11 @@ INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization` ALTER TABLE `llx_commandedet` CHANGE `coef` `marge_tx` real DEFAULT NULL; ALTER TABLE `llx_propaldet` CHANGE `coef` `marge_tx` real DEFAULT NULL; ALTER TABLE llx_commandedet ADD COLUMN marque_tx real DEFAULT NULL after marge_tx; -ALTER TABLE llx_propaldet ADD COLUMN marque_tx real DEFAULT NULL after marge_tx; \ No newline at end of file +ALTER TABLE llx_propaldet ADD COLUMN marque_tx real DEFAULT NULL after marge_tx; + +-- Nouveau mode de stockage de l'ordre des box (X99 ou X = colonne et 99 position dans colonne) +alter table llx_boxes modify box_order varchar(3) NOT NULL; +update llx_boxes set box_order = concat('A0',box_order) where length(box_order) = 1 and substr(box_order,-1) in ('1','3','5','7','9'); +update llx_boxes set box_order = concat('B0',box_order) where length(box_order) = 1 and substr(box_order,-1) in ('0','2','4','6','8'); +update llx_boxes set box_order = concat('A',box_order) where length(box_order) = 2 and substr(box_order,-1) in ('1','3','5','7','9'); +update llx_boxes set box_order = concat('B',box_order) where length(box_order) = 2 and substr(box_order,-1) in ('0','2','4','6','8'); -- GitLab