mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-12-06 01:28:19 +01:00
New: works on sharings between entities
Fix: more simple, more flexible, add in global conf
This commit is contained in:
@@ -559,14 +559,6 @@ class CommonObject
|
||||
$alias = 's';
|
||||
if ($this->element == 'societe') $alias = 'te';
|
||||
|
||||
// Sharings between entities
|
||||
if ($conf->global->MAIN_MODULE_MULTICOMPANY && $this->ismultientitymanaged == 1)
|
||||
{
|
||||
dol_include_once('/multicompany/class/actions_multicompany.class.php');
|
||||
$mc = new ActionsMulticompany($db);
|
||||
$mc->getEntitySharing($this->element);
|
||||
}
|
||||
|
||||
$sql = "SELECT MAX(te.".$fieldid.")";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." as te";
|
||||
if ($this->ismultientitymanaged == 2 || ($this->element != 'societe' && !$this->isnolinkedbythird && !$user->rights->societe->client->voir)) $sql.= ", ".MAIN_DB_PREFIX."societe as s"; // If we need to link to societe to limit select to entity
|
||||
@@ -575,7 +567,7 @@ class CommonObject
|
||||
if (!$this->isnolinkedbythird && !$user->rights->societe->client->voir) $sql.= " AND sc.fk_user = " .$user->id;
|
||||
if (! empty($filter)) $sql.=" AND ".$filter;
|
||||
if ($this->ismultientitymanaged == 2 || ($this->element != 'societe' && !$this->isnolinkedbythird && !$user->rights->societe->client->voir)) $sql.= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to entity
|
||||
if ($this->ismultientitymanaged == 1) $sql.= ' AND te.entity IN (0,'.($mc->share ? $mc->share : $conf->entity).')';
|
||||
if ($this->ismultientitymanaged == 1) $sql.= ' AND te.entity IN (0,'.(! empty($conf->entities[$this->element]) ? $conf->entities[$this->element] : $conf->entity).')';
|
||||
|
||||
//print $sql."<br>";
|
||||
$result = $this->db->query($sql) ;
|
||||
@@ -596,7 +588,7 @@ class CommonObject
|
||||
if (!$this->isnolinkedbythird && !$user->rights->societe->client->voir) $sql.= " AND sc.fk_user = " .$user->id;
|
||||
if (isset($filter)) $sql.=" AND ".$filter;
|
||||
if ($this->ismultientitymanaged == 2 || ($this->element != 'societe' && !$this->isnolinkedbythird && !$user->rights->societe->client->voir)) $sql.= ' AND te.fk_soc = s.rowid'; // If we need to link to societe to limit select to entity
|
||||
if ($this->ismultientitymanaged == 1) $sql.= ' AND te.entity IN (0,'.($mc->share ? $mc->share : $conf->entity).')';
|
||||
if ($this->ismultientitymanaged == 1) $sql.= ' AND te.entity IN (0,'.(! empty($conf->entities[$this->element]) ? $conf->entities[$this->element] : $conf->entity).')';
|
||||
// Rem: Bug in some mysql version: SELECT MIN(rowid) FROM llx_socpeople WHERE rowid > 1 when one row in database with rowid=1, returns 1 instead of null
|
||||
|
||||
//print $sql."<br>";
|
||||
|
||||
@@ -62,6 +62,7 @@ class Conf
|
||||
var $login_method_modules = array();
|
||||
var $need_smarty = array();
|
||||
var $modules = array();
|
||||
var $entities = array();
|
||||
|
||||
var $logbuffer = array();
|
||||
|
||||
@@ -183,6 +184,15 @@ class Conf
|
||||
$this->modules[]=$module;
|
||||
}
|
||||
}
|
||||
// Sharings between entities
|
||||
else if ($value && preg_match('/^MULTICOMPANY_([A-Z_]+)_SHARING$/',$key,$reg))
|
||||
{
|
||||
dol_include_once('/multicompany/class/actions_multicompany.class.php');
|
||||
$mc = new ActionsMulticompany($db);
|
||||
$module=strtolower($reg[1]);
|
||||
$mc->getEntitySharing($module);
|
||||
$this->entities[$module]=$mc->entities;
|
||||
}
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
|
||||
@@ -1919,21 +1919,13 @@ function restrictedArea($user, $features='societe', $objectid=0, $dbtablename=''
|
||||
// If dbtable not defined, we use same name for table than module name
|
||||
if (empty($dbtablename)) $dbtablename = $feature;
|
||||
|
||||
// Sharings between entities
|
||||
if ($conf->global->MAIN_MODULE_MULTICOMPANY)
|
||||
{
|
||||
dol_include_once('/multicompany/class/actions_multicompany.class.php');
|
||||
$mc = new ActionsMulticompany($db);
|
||||
$mc->getEntitySharing($dbtablename);
|
||||
}
|
||||
|
||||
// Check permission for object with entity
|
||||
if (in_array($feature,$check))
|
||||
{
|
||||
$sql = "SELECT dbt.".$dbt_select;
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
|
||||
$sql.= " WHERE dbt.".$dbt_select." = ".$objectid;
|
||||
$sql.= " AND dbt.entity IN (0,".($mc->share ? $mc->share : $conf->entity).")";
|
||||
$sql.= " AND dbt.entity IN (0,".(! empty($conf->entities[$dbtablename]) ? $conf->entities[$dbtablename] : $conf->entity).")";
|
||||
}
|
||||
else if (in_array($feature,$checksoc))
|
||||
{
|
||||
@@ -1951,7 +1943,7 @@ function restrictedArea($user, $features='societe', $objectid=0, $dbtablename=''
|
||||
$sql.= " WHERE sc.fk_soc = ".$objectid;
|
||||
$sql.= " AND sc.fk_user = ".$user->id;
|
||||
$sql.= " AND sc.fk_soc = s.rowid";
|
||||
$sql.= " AND s.entity IN (0,".($mc->share ? $mc->share : $conf->entity).")";
|
||||
$sql.= " AND s.entity IN (0,".(! empty($conf->entities[$dbtablename]) ? $conf->entities[$dbtablename] : $conf->entity).")";
|
||||
}
|
||||
// If multicompany and internal users with all permissions, check user is in correct entity
|
||||
else if ($conf->global->MAIN_MODULE_MULTICOMPANY)
|
||||
@@ -1959,7 +1951,7 @@ function restrictedArea($user, $features='societe', $objectid=0, $dbtablename=''
|
||||
$sql = "SELECT s.rowid";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
|
||||
$sql.= " WHERE s.rowid = ".$objectid;
|
||||
$sql.= " AND s.entity IN (0,".($mc->share ? $mc->share : $conf->entity).")";
|
||||
$sql.= " AND s.entity IN (0,".(! empty($conf->entities[$dbtablename]) ? $conf->entities[$dbtablename] : $conf->entity).")";
|
||||
}
|
||||
}
|
||||
else if (in_array($feature,$checkother))
|
||||
@@ -1980,7 +1972,7 @@ function restrictedArea($user, $features='societe', $objectid=0, $dbtablename=''
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON dbt.fk_soc = sc.fk_soc AND sc.fk_user = '".$user->id."'";
|
||||
$sql.= " WHERE dbt.rowid = ".$objectid;
|
||||
$sql.= " AND (dbt.fk_soc IS NULL OR sc.fk_soc IS NOT NULL)"; // Contact not linked to a company or to a company of user
|
||||
$sql.= " AND dbt.entity IN (0,".($mc->share ? $mc->share : $conf->entity).")";
|
||||
$sql.= " AND dbt.entity IN (0,".(! empty($conf->entities[$dbtablename]) ? $conf->entities[$dbtablename] : $conf->entity).")";
|
||||
}
|
||||
// If multicompany and internal users with all permissions, check user is in correct entity
|
||||
else if ($conf->global->MAIN_MODULE_MULTICOMPANY)
|
||||
@@ -1988,7 +1980,7 @@ function restrictedArea($user, $features='societe', $objectid=0, $dbtablename=''
|
||||
$sql = "SELECT dbt.rowid";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
|
||||
$sql.= " WHERE dbt.rowid = ".$objectid;
|
||||
$sql.= " AND dbt.entity IN (0,".($mc->share ? $mc->share : $conf->entity).")";
|
||||
$sql.= " AND dbt.entity IN (0,".(! empty($conf->entities[$dbtablename]) ? $conf->entities[$dbtablename] : $conf->entity).")";
|
||||
}
|
||||
}
|
||||
else if (in_array($feature,$checkproject))
|
||||
@@ -2022,7 +2014,7 @@ function restrictedArea($user, $features='societe', $objectid=0, $dbtablename=''
|
||||
$sql.= " WHERE dbt.".$dbt_select." = ".$objectid;
|
||||
$sql.= " AND sc.fk_soc = dbt.".$dbt_keyfield;
|
||||
$sql.= " AND dbt.".$dbt_keyfield." = s.rowid";
|
||||
$sql.= " AND s.entity IN (0,".($mc->share ? $mc->share : $conf->entity).")";
|
||||
$sql.= " AND s.entity IN (0,".(! empty($conf->entities[$dbtablename]) ? $conf->entities[$dbtablename] : $conf->entity).")";
|
||||
$sql.= " AND sc.fk_user = ".$user->id;
|
||||
}
|
||||
// If multicompany and internal users with all permissions, check user is in correct entity
|
||||
@@ -2031,7 +2023,7 @@ function restrictedArea($user, $features='societe', $objectid=0, $dbtablename=''
|
||||
$sql = "SELECT dbt.".$dbt_select;
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX.$dbtablename." as dbt";
|
||||
$sql.= " WHERE dbt.".$dbt_select." = ".$objectid;
|
||||
$sql.= " AND dbt.entity IN (0,".($mc->share ? $mc->share : $conf->entity).")";
|
||||
$sql.= " AND dbt.entity IN (0,".(! empty($conf->entities[$dbtablename]) ? $conf->entities[$dbtablename] : $conf->entity).")";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -41,14 +41,6 @@ $langs->load("products");
|
||||
|
||||
$product_static = new Product($db);
|
||||
|
||||
// Sharings between entities
|
||||
if ($conf->global->MAIN_MODULE_MULTICOMPANY)
|
||||
{
|
||||
dol_include_once('/multicompany/class/actions_multicompany.class.php');
|
||||
$mc = new ActionsMulticompany($db);
|
||||
$mc->getEntitySharing('product');
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
@@ -115,7 +107,7 @@ $prodser[0][0]=$prodser[0][1]=$prodser[1][0]=$prodser[1][1]=0;
|
||||
|
||||
$sql = "SELECT COUNT(p.rowid) as total, p.fk_product_type, p.tosell, p.tobuy";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product as p";
|
||||
$sql.= " WHERE p.entity IN (0,".($mc->share ? $mc->share : $conf->entity).")";
|
||||
$sql.= " WHERE p.entity IN (0,".(! empty($conf->entities['product']) ? $conf->entities['product'] : $conf->entity).")";
|
||||
$sql.= " GROUP BY p.fk_product_type, p.tosell, p.tobuy";
|
||||
$result = $db->query($sql);
|
||||
while ($objp = $db->fetch_object($result))
|
||||
@@ -175,7 +167,7 @@ $max=15;
|
||||
$sql = "SELECT p.rowid, p.label, p.price, p.ref, p.fk_product_type, p.tosell, p.tobuy,";
|
||||
$sql.= " p.tms as datem";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product as p";
|
||||
$sql.= " WHERE p.entity IN (0,".($mc->share ? $mc->share : $conf->entity).")";
|
||||
$sql.= " WHERE p.entity IN (0,".(! empty($conf->entities['product']) ? $conf->entities['product'] : $conf->entity).")";
|
||||
if (empty($user->rights->produit->hidden) && empty($user->rights->service->hidden)) $sql.=' AND p.hidden=0';
|
||||
else
|
||||
{
|
||||
|
||||
@@ -81,14 +81,6 @@ else
|
||||
else $result=restrictedArea($user,'produit|service');
|
||||
}
|
||||
|
||||
// Sharings between entities
|
||||
if ($conf->global->MAIN_MODULE_MULTICOMPANY)
|
||||
{
|
||||
dol_include_once('/multicompany/class/actions_multicompany.class.php');
|
||||
$mc = new ActionsMulticompany($db);
|
||||
$mc->getEntitySharing('product');
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
@@ -156,7 +148,7 @@ if ($_GET["fourn_id"] > 0) // The DISTINCT is used to avoid duplicate from this
|
||||
$fourn_id = $_GET["fourn_id"];
|
||||
$sql.= ", ".MAIN_DB_PREFIX."product_fournisseur as pf";
|
||||
}
|
||||
$sql.= " WHERE p.entity IN (0,".($mc->share ? $mc->share : $conf->entity).")";
|
||||
$sql.= ' WHERE p.entity IN (0,'.(! empty($conf->entities['product']) ? $conf->entities['product'] : $conf->entity).')';
|
||||
if ($search_categ) $sql.= " AND p.rowid = cp.fk_product"; // Join for the needed table to filter by categ
|
||||
if (!$user->rights->produit->hidden && !$user->rights->service->hidden)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user