Modification codification ordre d'une boite afin de gerer independemment les colonnes (on met une lettre A, B, ... au debut du champ ordre)

This commit is contained in:
Laurent Destailleur 2007-08-02 22:02:58 +00:00
parent 3f7ec53968
commit f6d9f45644
8 changed files with 132 additions and 100 deletions

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* 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 * 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 * it under the terms of the GNU General Public License as published by
@ -35,8 +35,8 @@ if (!$user->admin)
accessforbidden(); accessforbidden();
// Définition des positions possibles pour les boites // Définition des positions possibles pour les boites
$pos_array = array(0); // Positions possibles pour une boite (0,1,2,...) $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_name = array(0=>$langs->trans("Home")); // Nom des positions 0=Homepage, 1=...
$boxes = array(); $boxes = array();
/* /*
@ -59,12 +59,13 @@ if ($_POST["action"] == 'add')
// Si la boite n'est pas deja active // 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)"; $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); $resql = $db->query($sql);
// Remove all personalized setup when a box is activated or disabled // Remove all personalized setup when a box is activated or disabled
$sql = "DELETE FROM ".MAIN_DB_PREFIX."user_param"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_param";
$sql.= " WHERE param like 'MAIN_BOXES_%'"; $sql.= " WHERE param like 'MAIN_BOXES_%'";
dolibarr_syslog("boxes.php delete user_param sql=".$sql);
$resql = $db->query($sql); $resql = $db->query($sql);
$db->commit(); $db->commit();
@ -108,11 +109,11 @@ if ($_GET["action"] == 'switch')
if (is_object($objfrom) && is_object($objto)) 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; //print "xx".$sql;
$resultupdatefrom = $db->query($sql); $resultupdatefrom = $db->query($sql);
if (! $resultupdatefrom) { dolibarr_print_error($db); } 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; //print "xx".$sql;
$resultupdateto = $db->query($sql); $resultupdateto = $db->query($sql);
if (! $resultupdateto) { dolibarr_print_error($db); } if (! $resultupdateto) { dolibarr_print_error($db); }
@ -137,43 +138,53 @@ print_fiche_titre($langs->trans("Boxes"),'','setup');
print $langs->trans("BoxesDesc")."<br>\n"; print $langs->trans("BoxesDesc")."<br>\n";
/* /*
* Recherche des boites actives par position possible * Recherche des boites actives par defaut pour chaque position possible
* On stocke les boites actives par $boxes[position][id_boite]=1 * 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 = "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 .= " 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 .= " WHERE b.box_id = d.rowid AND fk_user=0";
$sql .= " ORDER by position, box_order"; $sql .= " ORDER by position, box_order";
$resql = $db->query($sql); $resql = $db->query($sql);
$actives = array();
if ($resql) if ($resql)
{ {
$num = $db->num_rows($resql); $num = $db->num_rows($resql);
$i = 0; $i = 0;
$decalage=0; $decalage=0;
while ($i < $num) 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)
{ {
$sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order=box_order+".$decalage." WHERE rowid=".$obj->rowid; $var = ! $var;
$db->query($sql); $obj = $db->fetch_object($resql);
} $boxes[$obj->position][$obj->box_id]=1;
} $i++;
$db->free($resql); 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)
{
// 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);
} }

View File

@ -1,5 +1,6 @@
<?php <?php
/* Copyright (C) 2005-2007 Regis Houssin <regis.houssin@cap-networks.com> /* 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 * 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 * it under the terms of the GNU General Public License as published by
@ -21,7 +22,7 @@
/** /**
\file htdocs/ajaxbox.php \file htdocs/ajaxbox.php
\brief Fichier de reponse sur evenement Ajax \brief Fichier de reponse sur evenement Ajax deplacement boxes
\version $Revision$ \version $Revision$
*/ */
@ -29,18 +30,12 @@ require('master.inc.php');
require_once(DOL_DOCUMENT_ROOT."/boxes.php"); require_once(DOL_DOCUMENT_ROOT."/boxes.php");
// Enregistrement de la position des boxes // 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'])))
{ {
dolibarr_syslog("AjaxBox boxorder=".$_GET['boxorder']." userid=".$_GET['userid'], LOG_DEBUG);
$infobox=new InfoBox($db); $infobox=new InfoBox($db);
$result=$infobox->saveboxorder("0",$_GET['boxorder'],$_GET['userid']);
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']);
} }
?> ?>

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* 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 * 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 * it under the terms of the GNU General Public License as published by
@ -18,7 +18,6 @@
* *
* $Id$ * $Id$
* $Source$ * $Source$
*
*/ */
/** /**
@ -74,7 +73,7 @@ class InfoBox
$sql.= " AND b.fk_user = ".$user->id; $sql.= " AND b.fk_user = ".$user->id;
$sql.= " ORDER BY b.box_order"; $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); $result = $this->db->query($sql);
if ($result) if ($result)
{ {
@ -91,7 +90,7 @@ class InfoBox
$box->position=$obj->position; $box->position=$obj->position;
$box->box_order=$obj->box_order; $box->box_order=$obj->box_order;
$box->fk_user=$obj->fk_user; $box->fk_user=$obj->fk_user;
$boxes[$j]=$box; $boxes[]=$box;
$j++; $j++;
} }
} }
@ -112,7 +111,7 @@ class InfoBox
$sql.= " AND b.fk_user = 0"; $sql.= " AND b.fk_user = 0";
$sql.= " ORDER BY b.box_order"; $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); $result = $this->db->query($sql);
if ($result) if ($result)
{ {
@ -129,7 +128,7 @@ class InfoBox
$box->position=$obj->position; $box->position=$obj->position;
$box->box_order=$obj->box_order; $box->box_order=$obj->box_order;
$box->fk_user=$obj->fk_user; $box->fk_user=$obj->fk_user;
$boxes[$j]=$box; $boxes[]=$box;
$j++; $j++;
} }
} }
@ -147,12 +146,11 @@ class InfoBox
/** /**
* \brief Sauvegarde sequencement des boites pour la zone et le user * \brief Sauvegarde sequencement des boites pour la zone et le user
* \param $zone ID de la zone (0 pour la Homepage, ...) * \param $zone ID de la zone (0 pour la Homepage, ...)
* \param $boxid Id des boites * \param $boxorder Liste des boites dans le bon ordre 'A:123,456,...-B:789,321...'
* \param $boxorder Liste des boites dans le bon ordre
* \param $userid Id du user * \param $userid Id du user
* \return int <0 si ko, >= 0 si ok * \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); dolibarr_syslog("InfoBoxes::saveboxorder zone=".$zone." user=".$userid);
@ -176,26 +174,43 @@ class InfoBox
$sql.=" WHERE fk_user = ".$userid; $sql.=" WHERE fk_user = ".$userid;
$sql.=" AND position = ".$zone; $sql.=" AND position = ".$zone;
$result = $this->db->query($sql); $result = $this->db->query($sql);
dolibarr_syslog("InfoBox::saveboxorder sql=".$sql);
if ($result) 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"; $part=split(':',$collist);
$sql.= "(box_id, position, box_order, fk_user)"; $colonne=$part[0];
$sql.= " values ("; $list=$part[1];
$sql.= " ".$boxid[$ii].","; dolibarr_syslog('InfoBox::saveboxorder colonne='.$colonne.' list='.$list);
$sql.= " ".$zone.",";
$sql.= " ".($boxorder[$ii]+1).","; $i=0;
$sql.= " ".$userid; $listarray=split(',',$list);
$sql.= ")"; foreach ($listarray as $id)
$result = $this->db->query($sql);
if ($result < 0)
{ {
$error++; //dolibarr_syslog("aaaaa".sizeof($listarray));
break; $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) if ($error)
{ {
$this->error=$this->db->error(); $this->error=$this->db->error();
@ -214,7 +229,6 @@ class InfoBox
$this->db->rollback(); $this->db->rollback();
return -1; return -1;
} }
} }
} }
?> ?>

View File

@ -113,7 +113,7 @@ class ModeleBoxes
print "\n\n<!-- Box start -->\n"; print "\n\n<!-- Box start -->\n";
print '<table width="100%" class="noborder"'; 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 '>'; print '>';
// Affiche titre de la boite // Affiche titre de la boite

View File

@ -539,6 +539,8 @@ print '</td></tr></table>';
* *
*/ */
$boxarray=$infobox->listboxes("0",$user); // 0=valeur pour la page accueil $boxarray=$infobox->listboxes("0",$user); // 0=valeur pour la page accueil
$boxid_left = array();
$boxid_right = array();
if (sizeof($boxarray)) if (sizeof($boxarray))
{ {
@ -547,49 +549,47 @@ if (sizeof($boxarray))
print '<table width="100%" class="notopnoleftnoright">'; print '<table width="100%" class="notopnoleftnoright">';
print '<td>'."\n"; print '<td>'."\n";
$boxid_left = Array();
$boxid_right = Array();
// Affichage colonne gauche (boites paires) // Affichage colonne gauche (boites paires)
print '<div id="left" style="width: 50%; padding: 0px; margin: 0px; float: left;">'."\n"; 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_id '.$boxarray[$ii]->box_id.' ';
//print 'box_order '.$boxarray[$ii]->box_order.'<br>'; //print 'box_order '.$boxarray[$ii]->box_order.'<br>';
$boxid_left[$ii] = $boxarray[$ii]->box_id; $boxid_left[$key] = $boxarray[$key]->box_id;
// Affichage boite ii // Affichage boite key
$box=$boxarray[$ii];
$box->loadBox(); $box->loadBox();
$box->boxid="$ii";
$box->showBox(); $box->showBox();
print '</div>'; print '</div>';
} }
} }
print '</div>'; print '</div>';
print "\n"; print "\n";
// Affichage colonne droite (boites impaires) // Affichage colonne droite (boites impaires)
print '<div id="right" style="width: 50%; padding: 0px; margin: 0px; float: right;">'."\n"; print '<div id="right" style="width: 50%; padding: 0px; margin: 0px; float: right;">'."\n";
for ($ii=0, $ni=sizeof($boxarray); $ii < $ni; $ii++) $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_id '.$boxarray[$ii]->box_id.' ';
//print 'box_order '.$boxarray[$ii]->box_order.'<br>'; //print 'box_order '.$boxarray[$ii]->box_order.'<br>';
$boxid_right[$ii] = $boxarray[$ii]->box_id; $boxid_right[$key] = $boxarray[$key]->box_id;
// Affichage boite ii // Affichage boite key
$box=$boxarray[$ii];
$box->loadBox(); $box->loadBox();
$box->boxid="$ii";
$box->showBox(); $box->showBox();
print '</div>'; print '</div>';
} }
} }
print '</div>'; print '</div>';
print "\n"; print "\n";
@ -600,19 +600,18 @@ if (sizeof($boxarray))
if ($conf->use_ajax) 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"> print '<script type="text/javascript" language="javascript">
function updateOrder(){ function updateOrder(){
var left_list = cleanSerialize(Sortable.serialize(\'left\')); var left_list = cleanSerialize(Sortable.serialize(\'left\'));
var right_list = cleanSerialize(Sortable.serialize(\'right\')); var right_list = cleanSerialize(Sortable.serialize(\'right\'));
var boxid = \''.$boxid.'\'; var boxorder = \'A:\' + left_list + \'-B:\' + right_list;
var boxorder = left_list + \',\' + right_list; //alert( \'boxorder=\' + boxorder );
//alert( \'boxorder = \' + boxorder );
var userid = \''.$user->id.'\'; var userid = \''.$user->id.'\';
var url = "ajaxbox.php"; var url = "ajaxbox.php";
o_options = new Object(); 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); var myAjax = new Ajax.Request(url, o_options);
}'."\n"; }'."\n";
print '// <![CDATA['."\n"; print '// <![CDATA['."\n";

View File

@ -644,7 +644,7 @@ function ac_return(field, item){
==================================================================*/ ==================================================================*/
function cleanSerialize(expr) { function cleanSerialize(expr) {
var reg = new RegExp("(&)", "g"); 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 liste1 = expr.replace(reg, ",");
var liste = liste1.replace(reg2, ""); var liste = liste1.replace(reg2, "");
return liste; return liste;

View File

@ -876,6 +876,10 @@ border: 0px;
/* /*
* Boxes * Boxes
*/ */
table.box {
margin: 2px;
}
tr.box_titre { tr.box_titre {
background: #7699A9; background: #7699A9;
background-image: url(<?php echo $dolibarr_main_url_root.'/theme/eldy/img/liste_titre.png' ?>); 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; font-weight: bold;
border-bottom: 1px solid #FDFFFF; border-bottom: 1px solid #FDFFFF;
white-space: nowrap; white-space: nowrap;
-moz-border-radius-topleft:6px;
-moz-border-radius-topright:6px;
} }
tr.box_impair { tr.box_impair {

View File

@ -815,3 +815,10 @@ 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_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_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; 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');