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
/* 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)
{
$sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order=box_order+".$decalage." WHERE rowid=".$obj->rowid;
$db->query($sql);
$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);
}
}
}
$db->free($resql);
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
/* 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']);
}
?>

View File

@ -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;
}
}
}
?>

View File

@ -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

View File

@ -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";

View File

@ -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;

View File

@ -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 {

View File

@ -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;
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');