diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php index 5380e94aec3..88b32e02dd9 100644 --- a/htdocs/admin/boxes.php +++ b/htdocs/admin/boxes.php @@ -90,9 +90,9 @@ if ($action == 'add') if (! $error && $fk_user != 0) // We will add fk_user = 0 later. { $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.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", 'A01', ".$fk_user; + $sql.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", 'A01', ".$fk_user.", ".$conf->entity; $sql.= ")"; dol_syslog("boxes.php activate box sql=".$sql); @@ -109,9 +109,9 @@ if ($action == 'add') if (! $error) { $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.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", 'A01', 0"; + $sql.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", 'A01', 0, ".$conf->entity; $sql.= ")"; dol_syslog("boxes.php activate box sql=".$sql); @@ -137,9 +137,9 @@ if ($action == 'add') if ($action == 'delete') { - $sql = "SELECT box_id FROM ".MAIN_DB_PREFIX."boxes"; $sql.= " WHERE rowid=".$rowid; + $resql = $db->query($sql); $obj=$db->fetch_object($resql); if (! empty($obj->box_id)) @@ -152,7 +152,9 @@ if ($action == 'delete') // $resql = $db->query($sql); $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); $db->commit(); @@ -182,12 +184,12 @@ if ($action == 'switch') $newsecondnum=preg_replace('/[a-zA-Z]+/','',$newsecond); $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); $resultupdatefrom = $db->query($sql); 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); $resultupdateto = $db->query($sql); 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.= " bd.rowid as boxid"; $sql.= " FROM ".MAIN_DB_PREFIX."boxes as b, ".MAIN_DB_PREFIX."boxes_def as bd"; -$sql.= " WHERE b.box_id = bd.rowid"; -$sql.= " AND bd.entity = ".$conf->entity; +$sql.= " WHERE b.entity = ".$conf->entity; +$sql.= " AND b.box_id = bd.rowid"; $sql.= " AND b.fk_user=0"; $sql.= " ORDER by b.position, b.box_order"; @@ -256,7 +258,7 @@ if ($resql) // This occurs just after an insert. 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); } } @@ -267,7 +269,8 @@ if ($resql) // This occurs just after an insert. $sql = "SELECT box_order"; $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); $result = $db->query($sql); @@ -280,13 +283,13 @@ if ($resql) if (preg_match("/[13579]{1}/",substr($record['box_order'],-1))) { $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); } else if (preg_match("/[02468]{1}/",substr($record['box_order'],-1))) { $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); } } @@ -295,13 +298,13 @@ if ($resql) if (preg_match("/[13579]{1}/",substr($record['box_order'],-1))) { $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); } else if (preg_match("/[02468]{1}/",substr($record['box_order'],-1))) { $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); } } diff --git a/htdocs/admin/external_rss.php b/htdocs/admin/external_rss.php index da5f2c36a65..dca24bf4304 100644 --- a/htdocs/admin/external_rss.php +++ b/htdocs/admin/external_rss.php @@ -137,7 +137,8 @@ if ($_POST["delete"]) $obj=$db->fetch_object($resql); $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); $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def"; diff --git a/htdocs/core/ajax/box.php b/htdocs/core/ajax/box.php index c8b852d4e87..1176df5c391 100644 --- a/htdocs/core/ajax/box.php +++ b/htdocs/core/ajax/box.php @@ -1,6 +1,6 @@ - * Copyright (C) 2007-2012 Laurent Destailleur +/* Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2007-2012 Laurent Destailleur * * 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 diff --git a/htdocs/core/boxes/modules_boxes.php b/htdocs/core/boxes/modules_boxes.php index 12aadcf4a94..84d49c468b1 100644 --- a/htdocs/core/boxes/modules_boxes.php +++ b/htdocs/core/boxes/modules_boxes.php @@ -72,10 +72,13 @@ class ModeleBoxes // Can't be abtract as it is instanciated to build "empty" */ function fetch($rowid) { + global $conf; + // 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; + $sql.= " WHERE b.entity = ".$conf->entity; + $sql.= " AND b.rowid = ".$rowid; dol_syslog(get_class($this)."::fetch rowid=".$rowid); $resql = $this->db->query($sql); diff --git a/htdocs/core/class/infobox.class.php b/htdocs/core/class/infobox.class.php index 8c9fd112013..3d0a0f2d692 100644 --- a/htdocs/core/class/infobox.class.php +++ b/htdocs/core/class/infobox.class.php @@ -50,7 +50,7 @@ class InfoBox $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.= " 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 ($user->id && ! empty($user->conf->$confuserzone)) $sql.= " AND b.fk_user = ".$user->id; 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.= " 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); @@ -176,11 +184,9 @@ class InfoBox // Delete all lines $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes"; - $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.= " AND ".MAIN_DB_PREFIX."boxes_def.entity = ".$conf->entity; - $sql.= " AND ".MAIN_DB_PREFIX."boxes.fk_user = ".$userid; - $sql.= " AND ".MAIN_DB_PREFIX."boxes.position = ".$zone; + $sql.= " WHERE entity = ".$conf->entity; + $sql.= " AND fk_user = ".$userid; + $sql.= " AND position = ".$zone; dol_syslog(get_class()."::saveboxorder sql=".$sql); $result = $db->query($sql); @@ -204,12 +210,13 @@ class InfoBox $i++; $ii=sprintf('%02d',$i); $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.= " ".$id.","; $sql.= " ".$zone.","; $sql.= " '".$colonne.$ii."',"; - $sql.= " ".$userid; + $sql.= " ".$userid.","; + $sql.= " ".$conf->entity; $sql.= ")"; dol_syslog(get_class()."::saveboxorder sql=".$sql); diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php index 199f06c43de..6a6b85c953f 100644 --- a/htdocs/core/modules/DolibarrModules.class.php +++ b/htdocs/core/modules/DolibarrModules.class.php @@ -615,8 +615,8 @@ abstract class DolibarrModules { $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.= " VALUES (".$lastid.", 0, '0', 0)"; + $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (box_id,position,box_order,fk_user,entity)"; + $sql.= " VALUES (".$lastid.", 0, '0', 0, ".$conf->entity.")"; dol_syslog(get_class($this)."::insert_boxes sql=".$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.= " 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.entity = ".$conf->entity; + $sql.= " AND ".MAIN_DB_PREFIX."boxes.entity = ".$conf->entity; dol_syslog(get_class($this)."::delete_boxes sql=".$sql); $resql=$this->db->query($sql); diff --git a/htdocs/install/mysql/migration/3.2.0-3.3.0.sql b/htdocs/install/mysql/migration/3.2.0-3.3.0.sql index df958dfaa0d..8c5fa691c6e 100755 --- a/htdocs/install/mysql/migration/3.2.0-3.3.0.sql +++ b/htdocs/install/mysql/migration/3.2.0-3.3.0.sql @@ -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'); -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); diff --git a/htdocs/install/mysql/tables/llx_boxes.key.sql b/htdocs/install/mysql/tables/llx_boxes.key.sql index 3daaa0d07c7..cd89f1086af 100644 --- a/htdocs/install/mysql/tables/llx_boxes.key.sql +++ b/htdocs/install/mysql/tables/llx_boxes.key.sql @@ -1,5 +1,6 @@ -- =================================================================== --- Copyright (C) 2006-2009 Laurent Destailleur +-- Copyright (C) 2006-2009 Laurent Destailleur +-- Copyright (C) 2006-2012 Regis Houssin -- -- 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 @@ -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 -- 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; diff --git a/htdocs/install/mysql/tables/llx_boxes.sql b/htdocs/install/mysql/tables/llx_boxes.sql index 1ab57d9c0b6..0eeecc2474b 100644 --- a/htdocs/install/mysql/tables/llx_boxes.sql +++ b/htdocs/install/mysql/tables/llx_boxes.sql @@ -1,6 +1,7 @@ -- ============================================================================ --- Copyright (C) 2003 Rodolphe Quiedeville --- Copyright (C) 2006-2012 Laurent Destailleur +-- Copyright (C) 2003 Rodolphe Quiedeville +-- Copyright (C) 2006-2012 Laurent Destailleur +-- Copyright (C) 2006-2012 Regis Houssin -- -- 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 @@ -24,10 +25,12 @@ create table llx_boxes ( - rowid integer AUTO_INCREMENT PRIMARY KEY, - box_id integer NOT NULL, - position smallint NOT NULL, - box_order varchar(3) NOT NULL, - fk_user integer default 0 NOT NULL, - maxline integer NULL + rowid integer AUTO_INCREMENT PRIMARY KEY, + entity integer NOT NULL DEFAULT 1, + box_id integer NOT NULL, + position smallint NOT NULL, + box_order varchar(3) NOT NULL, + fk_user integer default 0 NOT NULL, + maxline integer NULL + )ENGINE=innodb;