diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index a094248fbd0..a4c3664212c 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -1692,28 +1692,31 @@ function weight_convert($weight, &$from_unit, $to_unit) /** * Save personal parameter * - * @param DoliDB $db Handler database - * @param Conf $conf Object conf - * @param User $user Object user - * @param array $tab Array (key=>value) with all parameters to save/update - * @return int Return integer <0 if KO, >0 if OK + * @param DoliDB $db Handler database + * @param Conf $conf Object conf + * @param User $user Object user + * @param array $tab Array (key=>value) with all parameters to save/update + * @param int $entity If a value is >= 0, we force the search on a specific entity. If -1, means search depends on default setup. + * @return int Return integer <0 if KO, >0 if OK * * @see dolibarr_get_const(), dolibarr_set_const(), dolibarr_del_const() */ -function dol_set_user_param($db, $conf, &$user, $tab) +function dol_set_user_param($db, $conf, &$user, $tab, $entity = -1) { // Verification parameters if (count($tab) < 1) { return -1; } + $entity = ($entity == -1 ? ((int) $conf->entity) : ((int) $entity)); + $db->begin(); // We remove old parameters for all keys in $tab $sql = "DELETE FROM ".MAIN_DB_PREFIX."user_param"; $sql .= " WHERE fk_user = ".((int) $user->id); - $sql .= " AND entity = ".((int) $conf->entity); - $sql .= " AND param in ("; + $sql .= " AND entity = ".((int) $entity); + $sql .= " AND param IN ("; $i = 0; foreach ($tab as $key => $value) { if ($i > 0) { @@ -1742,8 +1745,8 @@ function dol_set_user_param($db, $conf, &$user, $tab) $value = $value["value"]; } if ($forcevalue == 1 || $value) { - $sql = "INSERT INTO ".MAIN_DB_PREFIX."user_param(fk_user,entity,param,value)"; - $sql .= " VALUES (".((int) $user->id).",".((int) $conf->entity).","; + $sql = "INSERT INTO ".MAIN_DB_PREFIX."user_param (fk_user, entity, param, value)"; + $sql .= " VALUES (".((int) $user->id).",".((int) $entity).","; $sql .= " '".$db->escape($key)."','".$db->escape($value)."')"; dol_syslog("functions2.lib::dol_set_user_param", LOG_DEBUG); diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 72ed4fccbac..1ca84ab2192 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -794,7 +794,11 @@ class User extends CommonObject // Load user->conf for user $sql = "SELECT param, value FROM ".$this->db->prefix()."user_param"; $sql .= " WHERE fk_user = ".((int) $this->id); - $sql .= " AND entity = ".($entity == -1 ? (int) $conf->entity : (int) $entity); + if ($entity < 0) { + $sql .= " AND entity IN (0, ".((int) $conf->entity).")"; // IN (0, x) + } else { + $sql .= " AND entity = ".((int) $entity); // 0 or x + } //dol_syslog(get_class($this).'::fetch load personalized conf', LOG_DEBUG); $resql = $this->db->query($sql);