Fix: compatibility with multicompany transverse mode

This commit is contained in:
Regis Houssin
2012-09-07 17:16:47 +02:00
parent ab5e4db9c0
commit 5270ec06cb
9 changed files with 65 additions and 43 deletions

View File

@@ -90,9 +90,9 @@ if ($action == 'add')
if (! $error && $fk_user != 0) // We will add fk_user = 0 later. if (! $error && $fk_user != 0) // We will add fk_user = 0 later.
{ {
$sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes ("; $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (";
$sql.= "box_id, position, box_order, fk_user"; $sql.= "box_id, position, box_order, fk_user, entity";
$sql.= ") values ("; $sql.= ") values (";
$sql.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", 'A01', ".$fk_user; $sql.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", 'A01', ".$fk_user.", ".$conf->entity;
$sql.= ")"; $sql.= ")";
dol_syslog("boxes.php activate box sql=".$sql); dol_syslog("boxes.php activate box sql=".$sql);
@@ -109,9 +109,9 @@ if ($action == 'add')
if (! $error) if (! $error)
{ {
$sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes ("; $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (";
$sql.= "box_id, position, box_order, fk_user"; $sql.= "box_id, position, box_order, fk_user, entity";
$sql.= ") values ("; $sql.= ") values (";
$sql.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", 'A01', 0"; $sql.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", 'A01', 0, ".$conf->entity;
$sql.= ")"; $sql.= ")";
dol_syslog("boxes.php activate box sql=".$sql); dol_syslog("boxes.php activate box sql=".$sql);
@@ -137,9 +137,9 @@ if ($action == 'add')
if ($action == 'delete') if ($action == 'delete')
{ {
$sql = "SELECT box_id FROM ".MAIN_DB_PREFIX."boxes"; $sql = "SELECT box_id FROM ".MAIN_DB_PREFIX."boxes";
$sql.= " WHERE rowid=".$rowid; $sql.= " WHERE rowid=".$rowid;
$resql = $db->query($sql); $resql = $db->query($sql);
$obj=$db->fetch_object($resql); $obj=$db->fetch_object($resql);
if (! empty($obj->box_id)) if (! empty($obj->box_id))
@@ -152,7 +152,9 @@ if ($action == 'delete')
// $resql = $db->query($sql); // $resql = $db->query($sql);
$sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes";
$sql.= " WHERE box_id=".$obj->box_id; $sql.= " WHERE entity = ".$conf->entity;
$sql.= " AND box_id=".$obj->box_id;
$resql = $db->query($sql); $resql = $db->query($sql);
$db->commit(); $db->commit();
@@ -182,12 +184,12 @@ if ($action == 'switch')
$newsecondnum=preg_replace('/[a-zA-Z]+/','',$newsecond); $newsecondnum=preg_replace('/[a-zA-Z]+/','',$newsecond);
$newsecond=sprintf("%s%02d",$newsecondchar?$newsecondchar:'A',$newsecondnum+1); $newsecond=sprintf("%s%02d",$newsecondchar?$newsecondchar:'A',$newsecondnum+1);
} }
$sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order='".$newfirst."' WHERE rowid=".$objfrom->rowid; $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order='".$newfirst."' WHERE rowid=".$objfrom->rowid;
dol_syslog($sql); dol_syslog($sql);
$resultupdatefrom = $db->query($sql); $resultupdatefrom = $db->query($sql);
if (! $resultupdatefrom) { dol_print_error($db); } if (! $resultupdatefrom) { dol_print_error($db); }
$sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order='".$newsecond."' WHERE rowid=".$objto->rowid; $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order='".$newsecond."' WHERE rowid=".$objto->rowid;
dol_syslog($sql); dol_syslog($sql);
$resultupdateto = $db->query($sql); $resultupdateto = $db->query($sql);
if (! $resultupdateto) { dol_print_error($db); } if (! $resultupdateto) { dol_print_error($db); }
@@ -231,8 +233,8 @@ $actives = array();
$sql = "SELECT b.rowid, b.box_id, b.position, b.box_order,"; $sql = "SELECT b.rowid, b.box_id, b.position, b.box_order,";
$sql.= " bd.rowid as boxid"; $sql.= " bd.rowid as boxid";
$sql.= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as bd"; $sql.= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as bd";
$sql.= " WHERE b.box_id = bd.rowid"; $sql.= " WHERE b.entity = ".$conf->entity;
$sql.= " AND bd.entity = ".$conf->entity; $sql.= " AND b.box_id = bd.rowid";
$sql.= " AND b.fk_user=0"; $sql.= " AND b.fk_user=0";
$sql.= " ORDER by b.position, b.box_order"; $sql.= " ORDER by b.position, b.box_order";
@@ -256,7 +258,7 @@ if ($resql)
// This occurs just after an insert. // This occurs just after an insert.
if ($decalage) if ($decalage)
{ {
$sql="UPDATE ".MAIN_DB_PREFIX."boxes set box_order='".$decalage."' WHERE rowid=".$obj->rowid; $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order='".$decalage."' WHERE rowid=".$obj->rowid;
$db->query($sql); $db->query($sql);
} }
} }
@@ -267,7 +269,8 @@ if ($resql)
// This occurs just after an insert. // This occurs just after an insert.
$sql = "SELECT box_order"; $sql = "SELECT box_order";
$sql.= " FROM ".MAIN_DB_PREFIX."boxes"; $sql.= " FROM ".MAIN_DB_PREFIX."boxes";
$sql.= " WHERE length(box_order) <= 2"; $sql.= " WHERE entity = ".$conf->entity;
$sql.= " AND LENGTH(box_order) <= 2";
dol_syslog("Execute requests to renumber box order sql=".$sql); dol_syslog("Execute requests to renumber box order sql=".$sql);
$result = $db->query($sql); $result = $db->query($sql);
@@ -280,13 +283,13 @@ if ($resql)
if (preg_match("/[13579]{1}/",substr($record['box_order'],-1))) if (preg_match("/[13579]{1}/",substr($record['box_order'],-1)))
{ {
$box_order = "A0".$record['box_order']; $box_order = "A0".$record['box_order'];
$sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE box_order = '".$record['box_order']."'"; $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE entity = ".$conf->entity." AND box_order = '".$record['box_order']."'";
$resql = $db->query($sql); $resql = $db->query($sql);
} }
else if (preg_match("/[02468]{1}/",substr($record['box_order'],-1))) else if (preg_match("/[02468]{1}/",substr($record['box_order'],-1)))
{ {
$box_order = "B0".$record['box_order']; $box_order = "B0".$record['box_order'];
$sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE box_order = '".$record['box_order']."'"; $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE entity = ".$conf->entity." AND box_order = '".$record['box_order']."'";
$resql = $db->query($sql); $resql = $db->query($sql);
} }
} }
@@ -295,13 +298,13 @@ if ($resql)
if (preg_match("/[13579]{1}/",substr($record['box_order'],-1))) if (preg_match("/[13579]{1}/",substr($record['box_order'],-1)))
{ {
$box_order = "A".$record['box_order']; $box_order = "A".$record['box_order'];
$sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE box_order = '".$record['box_order']."'"; $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE entity = ".$conf->entity." AND box_order = '".$record['box_order']."'";
$resql = $db->query($sql); $resql = $db->query($sql);
} }
else if (preg_match("/[02468]{1}/",substr($record['box_order'],-1))) else if (preg_match("/[02468]{1}/",substr($record['box_order'],-1)))
{ {
$box_order = "B".$record['box_order']; $box_order = "B".$record['box_order'];
$sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE box_order = '".$record['box_order']."'"; $sql="UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$box_order."' WHERE entity = ".$conf->entity." AND box_order = '".$record['box_order']."'";
$resql = $db->query($sql); $resql = $db->query($sql);
} }
} }

View File

@@ -137,7 +137,8 @@ if ($_POST["delete"])
$obj=$db->fetch_object($resql); $obj=$db->fetch_object($resql);
$sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes";
$sql.= " WHERE box_id = ".$obj->rowid; $sql.= " WHERE entity = ".$conf->entity;
$sql.= " AND box_id = ".$obj->rowid;
$resql=$db->query($sql); $resql=$db->query($sql);
$sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def";

View File

@@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr> /* Copyright (C) 2005-2012 Regis Houssin <regis@dolibarr.fr>
* Copyright (C) 2007-2012 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2007-2012 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

View File

@@ -72,10 +72,13 @@ class ModeleBoxes // Can't be abtract as it is instanciated to build "empty"
*/ */
function fetch($rowid) function fetch($rowid)
{ {
global $conf;
// Recupere liste des boites d'un user si ce dernier a sa propre liste // 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 = "SELECT b.rowid, b.box_id, b.position, b.box_order, b.fk_user";
$sql.= " FROM ".MAIN_DB_PREFIX."boxes as b"; $sql.= " FROM ".MAIN_DB_PREFIX."boxes as b";
$sql.= " WHERE b.rowid = ".$rowid; $sql.= " WHERE b.entity = ".$conf->entity;
$sql.= " AND b.rowid = ".$rowid;
dol_syslog(get_class($this)."::fetch rowid=".$rowid); dol_syslog(get_class($this)."::fetch rowid=".$rowid);
$resql = $this->db->query($sql); $resql = $this->db->query($sql);

View File

@@ -50,7 +50,7 @@ class InfoBox
$sql.= " d.rowid as box_id, d.file, d.note, d.tms"; $sql.= " d.rowid as box_id, d.file, d.note, d.tms";
$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"; $sql.= " WHERE b.box_id = d.rowid";
$sql.= " AND d.entity = ".$conf->entity; $sql.= " AND b.entity = ".$conf->entity;
if ($zone >= 0) $sql.= " AND b.position = ".$zone; if ($zone >= 0) $sql.= " AND b.position = ".$zone;
if ($user->id && ! empty($user->conf->$confuserzone)) $sql.= " AND b.fk_user = ".$user->id; if ($user->id && ! empty($user->conf->$confuserzone)) $sql.= " AND b.fk_user = ".$user->id;
else $sql.= " AND b.fk_user = 0"; else $sql.= " AND b.fk_user = 0";
@@ -60,7 +60,15 @@ class InfoBox
{ {
$sql = "SELECT d.rowid as box_id, d.file, d.note, d.tms"; $sql = "SELECT d.rowid as box_id, d.file, d.note, d.tms";
$sql.= " FROM ".MAIN_DB_PREFIX."boxes_def as d"; $sql.= " FROM ".MAIN_DB_PREFIX."boxes_def as d";
$sql.= " WHERE entity = ".$conf->entity; if (! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode)) {
$sql.= " WHERE entity IN (1,".$conf->entity.")"; // TODO add method for define another master entity
} else {
$sql.= " WHERE entity = ".$conf->entity;
}
} }
dol_syslog(get_class()."::listBoxes get default box list sql=".$sql, LOG_DEBUG); dol_syslog(get_class()."::listBoxes get default box list sql=".$sql, LOG_DEBUG);
@@ -176,11 +184,9 @@ class InfoBox
// Delete all lines // Delete all lines
$sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes"; $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes";
$sql.= " USING ".MAIN_DB_PREFIX."boxes, ".MAIN_DB_PREFIX."boxes_def"; $sql.= " WHERE entity = ".$conf->entity;
$sql.= " WHERE ".MAIN_DB_PREFIX."boxes.box_id = ".MAIN_DB_PREFIX."boxes_def.rowid"; $sql.= " AND fk_user = ".$userid;
$sql.= " AND ".MAIN_DB_PREFIX."boxes_def.entity = ".$conf->entity; $sql.= " AND position = ".$zone;
$sql.= " AND ".MAIN_DB_PREFIX."boxes.fk_user = ".$userid;
$sql.= " AND ".MAIN_DB_PREFIX."boxes.position = ".$zone;
dol_syslog(get_class()."::saveboxorder sql=".$sql); dol_syslog(get_class()."::saveboxorder sql=".$sql);
$result = $db->query($sql); $result = $db->query($sql);
@@ -204,12 +210,13 @@ class InfoBox
$i++; $i++;
$ii=sprintf('%02d',$i); $ii=sprintf('%02d',$i);
$sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes"; $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes";
$sql.= "(box_id, position, box_order, fk_user)"; $sql.= "(box_id, position, box_order, fk_user, entity)";
$sql.= " values ("; $sql.= " values (";
$sql.= " ".$id.","; $sql.= " ".$id.",";
$sql.= " ".$zone.","; $sql.= " ".$zone.",";
$sql.= " '".$colonne.$ii."',"; $sql.= " '".$colonne.$ii."',";
$sql.= " ".$userid; $sql.= " ".$userid.",";
$sql.= " ".$conf->entity;
$sql.= ")"; $sql.= ")";
dol_syslog(get_class()."::saveboxorder sql=".$sql); dol_syslog(get_class()."::saveboxorder sql=".$sql);

View File

@@ -615,8 +615,8 @@ abstract class DolibarrModules
{ {
$lastid=$this->db->last_insert_id(MAIN_DB_PREFIX."boxes_def","rowid"); $lastid=$this->db->last_insert_id(MAIN_DB_PREFIX."boxes_def","rowid");
$sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (box_id,position,box_order,fk_user)"; $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (box_id,position,box_order,fk_user,entity)";
$sql.= " VALUES (".$lastid.", 0, '0', 0)"; $sql.= " VALUES (".$lastid.", 0, '0', 0, ".$conf->entity.")";
dol_syslog(get_class($this)."::insert_boxes sql=".$sql); dol_syslog(get_class($this)."::insert_boxes sql=".$sql);
$resql=$this->db->query($sql); $resql=$this->db->query($sql);
@@ -671,7 +671,7 @@ abstract class DolibarrModules
$sql.= " USING ".MAIN_DB_PREFIX."boxes, ".MAIN_DB_PREFIX."boxes_def"; $sql.= " USING ".MAIN_DB_PREFIX."boxes, ".MAIN_DB_PREFIX."boxes_def";
$sql.= " WHERE ".MAIN_DB_PREFIX."boxes.box_id = ".MAIN_DB_PREFIX."boxes_def.rowid"; $sql.= " WHERE ".MAIN_DB_PREFIX."boxes.box_id = ".MAIN_DB_PREFIX."boxes_def.rowid";
$sql.= " AND ".MAIN_DB_PREFIX."boxes_def.file = '".$this->db->escape($file)."'"; $sql.= " AND ".MAIN_DB_PREFIX."boxes_def.file = '".$this->db->escape($file)."'";
$sql.= " AND ".MAIN_DB_PREFIX."boxes_def.entity = ".$conf->entity; $sql.= " AND ".MAIN_DB_PREFIX."boxes.entity = ".$conf->entity;
dol_syslog(get_class($this)."::delete_boxes sql=".$sql); dol_syslog(get_class($this)."::delete_boxes sql=".$sql);
$resql=$this->db->query($sql); $resql=$this->db->query($sql);

View File

@@ -196,4 +196,8 @@ INSERT INTO llx_holiday_config (rowid ,name ,value) VALUES (NULL , 'nbHolidayDed
INSERT INTO llx_holiday_config (rowid ,name ,value) VALUES (NULL , 'nbHolidayEveryMonth', '2.08334'); INSERT INTO llx_holiday_config (rowid ,name ,value) VALUES (NULL , 'nbHolidayEveryMonth', '2.08334');
DELETE FROM llx_document_model WHERE (nom = 'oursin' AND type ='invoice') OR (nom = 'edison' AND type ='order') OR (nom = 'jaune' AND type ='propal') DELETE FROM llx_document_model WHERE (nom = 'oursin' AND type ='invoice') OR (nom = 'edison' AND type ='order') OR (nom = 'jaune' AND type ='propal');
ALTER TABLE llx_boxes DROP INDEX uk_boxes;
ALTER TABLE llx_boxes ADD COLUMN entity integer NOT NULL DEFAULT 1 AFTER rowid;
ALTER TABLE llx_boxes ADD UNIQUE INDEX uk_boxes (entity, box_id, position, fk_user);

View File

@@ -1,5 +1,6 @@
-- =================================================================== -- ===================================================================
-- Copyright (C) 2006-2009 Laurent Destailleur <eldy@users.sourceforge.net> -- Copyright (C) 2006-2009 Laurent Destailleur <eldy@users.sourceforge.net>
-- Copyright (C) 2006-2012 Regis Houssin <regis@dolibarr.fr>
-- --
-- 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
@@ -17,7 +18,7 @@
-- =================================================================== -- ===================================================================
ALTER TABLE llx_boxes ADD UNIQUE INDEX uk_boxes (box_id, position, fk_user); ALTER TABLE llx_boxes ADD UNIQUE INDEX uk_boxes (entity, box_id, position, fk_user);
-- Supprime orphelins pour permettre montee de la cle -- Supprime orphelins pour permettre montee de la cle
-- V4 DELETE llx_boxes FROM llx_boxes LEFT JOIN llx_boxes_def ON llx_boxes.box_id = llx_boxes_def.rowid WHERE llx_boxes_def.rowid IS NULL; -- V4 DELETE llx_boxes FROM llx_boxes LEFT JOIN llx_boxes_def ON llx_boxes.box_id = llx_boxes_def.rowid WHERE llx_boxes_def.rowid IS NULL;

View File

@@ -1,6 +1,7 @@
-- ============================================================================ -- ============================================================================
-- Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org> -- Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
-- Copyright (C) 2006-2012 Laurent Destailleur <eldy@users.sourceforge.net> -- Copyright (C) 2006-2012 Laurent Destailleur <eldy@users.sourceforge.net>
-- Copyright (C) 2006-2012 Regis Houssin <regis@dolibarr.fr>
-- --
-- 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
@@ -24,10 +25,12 @@
create table llx_boxes create table llx_boxes
( (
rowid integer AUTO_INCREMENT PRIMARY KEY, rowid integer AUTO_INCREMENT PRIMARY KEY,
box_id integer NOT NULL, entity integer NOT NULL DEFAULT 1,
position smallint NOT NULL, box_id integer NOT NULL,
box_order varchar(3) NOT NULL, position smallint NOT NULL,
fk_user integer default 0 NOT NULL, box_order varchar(3) NOT NULL,
maxline integer NULL fk_user integer default 0 NOT NULL,
maxline integer NULL
)ENGINE=innodb; )ENGINE=innodb;