diff --git a/htdocs/includes/triggers/interface_all_Demo.class.php-NORUN b/htdocs/includes/triggers/interface_all_Demo.class.php-NORUN index 18d7b0b8a2c..26521381d3d 100644 --- a/htdocs/includes/triggers/interface_all_Demo.class.php-NORUN +++ b/htdocs/includes/triggers/interface_all_Demo.class.php-NORUN @@ -140,6 +140,14 @@ class InterfaceDemo dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); } elseif ($action == 'USER_LOGOUT') + { + dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); + } + elseif ($action == 'USER_SETINGROUP') + { + dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); + } + elseif ($action == 'USER_REMOVEFROMGROUP') { dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); } diff --git a/htdocs/install/mysql/migration/3.0.0-3.1.0.sql b/htdocs/install/mysql/migration/3.0.0-3.1.0.sql index 56fa30c376d..15433786e65 100755 --- a/htdocs/install/mysql/migration/3.0.0-3.1.0.sql +++ b/htdocs/install/mysql/migration/3.0.0-3.1.0.sql @@ -117,8 +117,9 @@ ALTER TABLE llx_mailing_cibles ADD COLUMN tag varchar(128) NULL AFTER other; ALTER TABLE llx_mailing ADD COLUMN tag varchar(128) NULL AFTER email_errorsto; ALTER TABLE llx_usergroup_user DROP INDEX fk_user; +ALTER TABLE llx_usergroup_user DROP INDEX uk_user_group_entity; ALTER TABLE llx_usergroup_user ADD COLUMN entity integer DEFAULT 1 NOT NULL AFTER rowid; -ALTER TABLE llx_usergroup_user ADD UNIQUE INDEX uk_usergroup_entity (entity,fk_user,fk_usergroup); +ALTER TABLE llx_usergroup_user ADD UNIQUE INDEX uk_usergroup_user (entity,fk_user,fk_usergroup); ALTER TABLE llx_usergroup_user ADD CONSTRAINT fk_usergroup_user_fk_user FOREIGN KEY (fk_user) REFERENCES llx_user (rowid); ALTER TABLE llx_usergroup_user ADD CONSTRAINT fk_usergroup_user_fk_usergroup FOREIGN KEY (fk_usergroup) REFERENCES llx_usergroup (rowid); diff --git a/htdocs/install/mysql/tables/llx_usergroup_user.key.sql b/htdocs/install/mysql/tables/llx_usergroup_user.key.sql index 08dd60b186c..f3a58aa1433 100644 --- a/htdocs/install/mysql/tables/llx_usergroup_user.key.sql +++ b/htdocs/install/mysql/tables/llx_usergroup_user.key.sql @@ -18,7 +18,7 @@ -- $Id$ -- =========================================================================== -ALTER TABLE llx_usergroup_user ADD UNIQUE INDEX uk_user_group_entity (entity,fk_user,fk_usergroup); +ALTER TABLE llx_usergroup_user ADD UNIQUE INDEX uk_usergroup_user (entity,fk_user,fk_usergroup); ALTER TABLE llx_usergroup_user ADD CONSTRAINT fk_usergroup_user_fk_user FOREIGN KEY (fk_user) REFERENCES llx_user (rowid); ALTER TABLE llx_usergroup_user ADD CONSTRAINT fk_usergroup_user_fk_usergroup FOREIGN KEY (fk_usergroup) REFERENCES llx_usergroup (rowid); diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 91af3e6fc32..45cf96ee311 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -47,8 +47,8 @@ class User extends CommonObject var $id=0; var $ldap_sid; var $search_sid; - var $nom; - var $prenom; + var $nom; // TODO deprecated + var $prenom; // TODO deprecated var $lastname; var $firstname; var $note; @@ -530,9 +530,15 @@ class User extends CommonObject // Maintenant les droits groupes $sql = "SELECT r.module, r.perms, r.subperms"; - $sql.= " FROM ".MAIN_DB_PREFIX."usergroup_rights as gr, ".MAIN_DB_PREFIX."usergroup_user as gu, ".MAIN_DB_PREFIX."rights_def as r"; - $sql.= " WHERE r.id = gr.fk_id AND gr.fk_usergroup = gu.fk_usergroup AND gu.fk_user = ".$this->id." AND r.perms IS NOT NULL"; + $sql.= " FROM ".MAIN_DB_PREFIX."usergroup_rights as gr,"; + $sql.= " ".MAIN_DB_PREFIX."usergroup_user as gu,"; + $sql.= " ".MAIN_DB_PREFIX."rights_def as r"; + $sql.= " WHERE r.id = gr.fk_id"; + $sql.= " AND gr.fk_usergroup = gu.fk_usergroup"; + $sql.= " AND gu.fk_user = ".$this->id; + $sql.= " AND r.perms IS NOT NULL"; $sql.= " AND r.entity = ".$conf->entity; + $sql.= " AND gu.entity IN (0,".$conf->entity.")"; if ($moduletag) $sql.= " AND r.module = '".$this->db->escape($moduletag)."'"; dol_syslog('User::getRights sql='.$sql, LOG_DEBUG); @@ -1474,9 +1480,10 @@ class User extends CommonObject * Add user into a group * @param group id du groupe */ - function SetInGroup($group, $notrigger=0) + function SetInGroup($group, $entity, $notrigger=0) { - global $conf; + global $conf, $langs, $user; + $error=0; $this->db->begin(); @@ -1484,25 +1491,56 @@ class User extends CommonObject $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_user"; $sql.= " WHERE fk_user = ".$this->id; $sql.= " AND fk_usergroup = ".$group; - $sql.= " AND entity = ".$conf->entity; + $sql.= " AND entity = ".$entity; $result = $this->db->query($sql); $sql = "INSERT INTO ".MAIN_DB_PREFIX."usergroup_user (entity, fk_user, fk_usergroup)"; - $sql.= " VALUES (".$conf->entity.",".$this->id.",".$group.")"; + $sql.= " VALUES (".$entity.",".$this->id.",".$group.")"; $result = $this->db->query($sql); - - $this->db->commit(); + if ($result) + { + if (! $error && ! $notrigger) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('USER_SETINGROUP',$this,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + } + + if (! $error) + { + $this->db->commit(); + return 1; + } + else + { + $this->error=$interface->error; + dol_syslog("User::SetInGroup ".$this->error, LOG_ERR); + $this->db->rollback(); + return -2; + } + } + else + { + $this->error=$this->db->lasterror(); + dol_syslog("User::SetInGroup ".$this->error, LOG_ERR); + $this->db->rollback(); + return -1; + } } /** * Remove a user from a group * @param group id du groupe */ - function RemoveFromGroup($group, $notrigger=0) + function RemoveFromGroup($group, $entity, $notrigger=0) { - global $conf; + global $conf,$langs,$user; + $error=0; $this->db->begin(); @@ -1510,11 +1548,41 @@ class User extends CommonObject $sql = "DELETE FROM ".MAIN_DB_PREFIX."usergroup_user"; $sql.= " WHERE fk_user = ".$this->id; $sql.= " AND fk_usergroup = ".$group; - $sql.= " AND entity = ".$conf->entity; + $sql.= " AND entity = ".$entity; $result = $this->db->query($sql); + if ($result) + { + if (! $error && ! $notrigger) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('USER_REMOVEFROMGROUP',$this,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + } - $this->db->commit(); + if (! $error) + { + $this->db->commit(); + return 1; + } + else + { + $this->error=$interface->error; + dol_syslog("User::RemoveFromGroup ".$this->error, LOG_ERR); + $this->db->rollback(); + return -2; + } + } + else + { + $this->error=$this->db->lasterror(); + dol_syslog("User::RemoveFromGroup ".$this->error, LOG_ERR); + $this->db->rollback(); + return -1; + } } /** diff --git a/htdocs/user/class/usergroup.class.php b/htdocs/user/class/usergroup.class.php index a53dae05dbd..3bb668d7e55 100644 --- a/htdocs/user/class/usergroup.class.php +++ b/htdocs/user/class/usergroup.class.php @@ -45,6 +45,7 @@ class UserGroup extends CommonObject var $id; // Group id var $entity; // Entity of group var $nom; // Name of group + var $globalgroup; // Global group var $note; // Note on group var $datec; // Creation date of group var $datem; // Modification date of group @@ -58,10 +59,9 @@ class UserGroup extends CommonObject * \param DB Handler acces base de donnees * \param id Id du groupe (0 par defaut) */ - function UserGroup($DB, $id=0) + function UserGroup($DB) { $this->db = $DB; - $this->id = $id; return 0; } @@ -116,19 +116,22 @@ class UserGroup extends CommonObject /** - * \brief Return array of groups objects for a particular user - * \param usertosearch - * \return array of groups objects + * Return array of groups objects for a particular user + * @param usertosearch + * @return array of groups objects */ - function listGroupsForUser($usertosearch) + function listGroupsForUser($userid) { + global $conf; + $ret=array(); - $sql = "SELECT g.rowid, g.nom, g.note, g.datec, g.tms as datem"; + $sql = "SELECT g.rowid, ug.entity as usergroup_entity"; $sql.= " FROM ".MAIN_DB_PREFIX."usergroup as g,"; $sql.= " ".MAIN_DB_PREFIX."usergroup_user as ug"; $sql.= " WHERE ug.fk_usergroup = g.rowid"; - $sql.= " AND ug.fk_user = ".$usertosearch->id; + $sql.= " AND ug.fk_user = ".$userid; + $sql.= " AND ug.entity IN (0,".$conf->entity.")"; $sql.= " ORDER BY g.nom"; dol_syslog("UserGroup::listGroupsForUser sql=".$sql,LOG_DEBUG); @@ -138,15 +141,15 @@ class UserGroup extends CommonObject while ($obj = $this->db->fetch_object($result)) { $group=new UserGroup($this->db); - $group->id=$obj->rowid; - $group->nom=$obj->nom; - $group->note=$obj->note; - $group->datec = $obj->datec; - $group->datem = $obj->datem; - + $group->fetch($obj->rowid); + $group->usergroup_entity = $obj->usergroup_entity; + $ret[]=$group; } + $this->db->free($result); + + return $ret; } else { @@ -154,22 +157,24 @@ class UserGroup extends CommonObject dol_syslog("UserGroup::listGroupsForUser ".$this->error, LOG_ERR); return -1; } - return $ret; } /** - * \brief Return array of users id for group - * \return array of users id + * Return array of users id for group + * @return array of users */ function listUsersForGroup() { + global $conf; + $ret=array(); - $sql = "SELECT u.rowid, u.login, u.name, u.firstname"; + $sql = "SELECT u.rowid, ug.entity as usergroup_entity"; $sql.= " FROM ".MAIN_DB_PREFIX."user as u,"; $sql.= " ".MAIN_DB_PREFIX."usergroup_user as ug"; $sql.= " WHERE ug.fk_user = u.rowid"; $sql.= " AND ug.fk_usergroup = ".$this->id; + $sql.= " AND u.entity IN (0,".$conf->entity.")"; dol_syslog("UserGroup::listUsersForGroup sql=".$sql,LOG_DEBUG); $result = $this->db->query($sql); @@ -177,9 +182,16 @@ class UserGroup extends CommonObject { while ($obj = $this->db->fetch_object($result)) { - $ret[]=$obj->rowid; + $user=new User($this->db); + $user->fetch($obj->rowid); + $user->usergroup_entity = $obj->usergroup_entity; + + $ret[]=$user; } + $this->db->free($result); + + return $ret; } else { @@ -187,7 +199,6 @@ class UserGroup extends CommonObject dol_syslog("UserGroup::listUsersForGroup ".$this->error, LOG_ERR); return -1; } - return $ret; } /** @@ -486,17 +497,25 @@ class UserGroup extends CommonObject } /** - * \brief Cree un groupe en base - * \return si erreur <0, si ok renvoie id groupe cr + * Create group into database + * @param notrigger 0=triggers enabled, 1=triggers disabled + * @return int <0 if KO, >=0 if OK */ - function create() + function create($notrigger=0) { global $user, $conf, $langs; $now=dol_now(); - $sql = "INSERT INTO ".MAIN_DB_PREFIX."usergroup (datec, nom, entity)"; - $sql.= " VALUES('".$this->db->idate($now)."','".$this->db->escape($this->nom)."',".$conf->entity.")"; + $sql = "INSERT INTO ".MAIN_DB_PREFIX."usergroup ("; + $sql.= "datec"; + $sql.= ", nom"; + $sql.= ", entity"; + $sql.= ") VALUES ("; + $sql.= "'".$this->db->idate($now)."'"; + $sql.= ",'".$this->db->escape($this->nom)."'"; + $sql.= ",".($this->globalgroup ? 0 : $conf->entity); + $sql.= ")"; dol_syslog("UserGroup::Create sql=".$sql, LOG_DEBUG); $result=$this->db->query($sql); @@ -505,13 +524,16 @@ class UserGroup extends CommonObject $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."usergroup"); if ($this->update(1) < 0) return -2; - - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('GROUP_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + + if (! $notrigger) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('GROUP_CREATE',$this,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + } return $this->id; } @@ -523,7 +545,6 @@ class UserGroup extends CommonObject } } - /** * Update group into database * @param notrigger 0=triggers enabled, 1=triggers disabled @@ -536,15 +557,16 @@ class UserGroup extends CommonObject $error=0; $sql = "UPDATE ".MAIN_DB_PREFIX."usergroup SET "; - $sql .= " nom = '".$this->db->escape($this->nom)."',"; - $sql .= " note = '".$this->db->escape($this->note)."'"; - $sql .= " WHERE rowid = ".$this->id; + $sql.= " nom = '".$this->db->escape($this->nom)."'"; + $sql.= ", entity = ".(empty($this->globalgroup) ? $conf->entity : 0); + $sql.= ", note = '".$this->db->escape($this->note)."'"; + $sql.= " WHERE rowid = ".$this->id; dol_syslog("Usergroup::update sql=".$sql); $resql = $this->db->query($sql); if ($resql) { - if (!$error && ! $notrigger) + if (! $notrigger) { // Appel des triggers include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); diff --git a/htdocs/user/fiche.php b/htdocs/user/fiche.php index b3b0b5d8565..c6c13d54a93 100644 --- a/htdocs/user/fiche.php +++ b/htdocs/user/fiche.php @@ -233,37 +233,22 @@ if (($action == 'addgroup' || $action == 'removegroup') && $caneditfield) $edituser = new User($db); $edituser->fetch($_GET["id"]); - if ($action == 'addgroup') $edituser->SetInGroup($group); - if ($action == 'removegroup') $edituser->RemoveFromGroup($group); - - // We reload members (list has changed) - $editgroup->members=$editgroup->listUsersForGroup(); - - // We update group to force triggers that update groups content - $result=$editgroup->update(); + if ($action == 'addgroup') $edituser->SetInGroup($group,GETPOST('entity')); + if ($action == 'removegroup') $edituser->RemoveFromGroup($group,GETPOST('entity')); if ($result > 0) { header("Location: fiche.php?id=".$_GET["id"]); exit; } + else + { + $message.=$edituser->error; + } } } -if ($_GET["action"] == 'removegroup' && $caneditfield) -{ - if ($_GET["group"]) - { - $edituser = new User($db); - $edituser->fetch($_GET["id"]); - $edituser->RemoveFromGroup($_GET["group"]); - - Header("Location: fiche.php?id=".$_GET["id"]); - exit; - } -} - -if ($_POST["action"] == 'update' && ! $_POST["cancel"]) +if ($action == 'update' && ! $_POST["cancel"]) { require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php"); @@ -549,7 +534,7 @@ if (($action == 'create') || ($action == 'adduserldap')) } } - if ($message) { print $message.'
'; } + dol_htmloutput_errors($message); if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'ldap2dolibarr') { @@ -909,7 +894,8 @@ else $ret=$html->form_confirm("fiche.php?id=$fuser->id",$langs->trans("DeleteAUser"),$langs->trans("ConfirmDeleteUser",$fuser->login),"confirm_delete", '', 0, 1); if ($ret == 'html') print '
'; } - + + dol_htmloutput_errors($message); /* * Fiche en mode visu @@ -1217,35 +1203,18 @@ else print_fiche_titre($langs->trans("ListOfGroupsForUser"),'',''); // On selectionne les groupes auquel fait parti le user - // TODO move sql query to dao class - $grouplistid = array(); - - $sql = "SELECT ug.fk_usergroup"; - $sql.= " FROM ".MAIN_DB_PREFIX."usergroup_user as ug"; - $sql.= ", ".MAIN_DB_PREFIX."usergroup as u"; - $sql.= " WHERE ug.fk_user = ".$fuser->id; - $sql.= " AND ug.fk_usergroup = u.rowid"; - $sql.= " AND u.entity IN (0,".$conf->entity.")"; - - $result = $db->query($sql); - if ($result) - { - $num = $db->num_rows($result); - $i = 0; - - while ($i < $num) - { - $obj = $db->fetch_object($result); - - $grouplistid[]=$obj->fk_usergroup; - $i++; - } - } - else { - dol_print_error($db); - } - - $db->free($resql); + $exclude = array(); + + $usergroup=new UserGroup($db); + $groupslist = $usergroup->listGroupsForUser($fuser->id); + + if (! empty($groupslist)) + { + foreach($groupslist as $groupforuser) + { + $exclude[]=$groupforuser->id; + } + } if ($caneditgroup) { @@ -1253,10 +1222,11 @@ else print '
'."\n"; print ''; print ''; + print ''; print ''."\n"; print ''."\n"; print ''."\n"; @@ -1268,23 +1238,17 @@ else /* * Groupes affectes */ - $usergroup=new UserGroup($db); - $listofgroups=$usergroup->listGroupsForUser($fuser); - $num=sizeof($listofgroups); - print '
'.$langs->trans("GroupsToAdd").''; - print $form->select_dolgroups('','group',0,$grouplistid); + print $form->select_dolgroups('','group',1,$exclude); print '   '; print ''; print '
'; print ''; print ''; print "\n"; - if ($num > 0) + if (! empty($groupslist)) { - $i = 0; - $var=true; - while ($i < $num) + + foreach($groupslist as $group) { - $group = $listofgroups[$i]; $var=!$var; print ""; @@ -1302,7 +1266,7 @@ else if ($caneditgroup) { - print 'id.'">'; + print ''; print img_delete($langs->trans("RemoveFromGroup")); } else @@ -1310,7 +1274,6 @@ else print " "; } print "\n"; - $i++; } } else diff --git a/htdocs/user/group/fiche.php b/htdocs/user/group/fiche.php index 3a7b9cdbb4b..eb159fd4a80 100644 --- a/htdocs/user/group/fiche.php +++ b/htdocs/user/group/fiche.php @@ -1,7 +1,7 @@ * Copyright (C) 2005-2010 Laurent Destailleur - * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2005-2011 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 @@ -50,6 +50,8 @@ $action=GETPOST("action"); $confirm=GETPOST("confirm"); $userid=GETPOST("user","int"); +$object = new Usergroup($db); + /** * Action remove group @@ -58,9 +60,8 @@ if ($action == 'confirm_delete' && $confirm == "yes") { if ($caneditperms) { - $editgroup = new Usergroup($db, $_GET["id"]); - $editgroup->fetch($_GET["id"]); - $editgroup->delete(); + $object->fetch($_GET["id"]); + $object->delete(); Header("Location: index.php"); exit; } @@ -86,20 +87,19 @@ if ($_POST["action"] == 'add') if (! $message) { - $editgroup = new UserGroup($db,0); - - $editgroup->nom = trim($_POST["nom"]); - $editgroup->note = trim($_POST["note"]); + $object->nom = trim($_POST["nom"]); + $object->globalgroup = $_POST["globalgroup"]; + $object->note = trim($_POST["note"]); $db->begin(); - $id = $editgroup->create(); + $id = $object->create(); if ($id > 0) { $db->commit(); - Header("Location: fiche.php?id=".$editgroup->id); + Header("Location: fiche.php?id=".$object->id); exit; } else @@ -107,11 +107,13 @@ if ($_POST["action"] == 'add') $db->rollback(); $langs->load("errors"); - $message='
'.$langs->trans("ErrorGroupAlreadyExists",$editgroup->nom).'
'; + $message='
'.$langs->trans("ErrorGroupAlreadyExists",$object->nom).'
'; $action="create"; // Go back to create page } } - }else{ + } + else + { $message = '
'.$langs->trans('ErrorForbidden').'
'; } } @@ -123,28 +125,27 @@ if ($action == 'adduser' || $action =='removeuser') { if ($userid) { - $editgroup = new UserGroup($db); - $editgroup->fetch($_GET["id"]); - $editgroup->oldcopy=dol_clone($editgroup); + $object->fetch($_GET["id"]); + $object->oldcopy=dol_clone($object); $edituser = new User($db); $edituser->fetch($userid); - if ($action == 'adduser') $result=$edituser->SetInGroup($_GET["id"]); - if ($action == 'removeuser') $result=$edituser->RemoveFromGroup($_GET["id"]); - - // We reload members (list has changed) - $editgroup->members=$editgroup->listUsersForGroup(); - - // We update group to force triggers that update groups content - $result=$editgroup->update(); + if ($action == 'adduser') $result=$edituser->SetInGroup($object->id,GETPOST('entity')); + if ($action == 'removeuser') $result=$edituser->RemoveFromGroup($object->id,GETPOST('entity')); if ($result > 0) { - header("Location: fiche.php?id=".$_GET["id"]); + header("Location: fiche.php?id=".$object->id); exit; } + else + { + $message.=$edituser->error; + } } - }else{ + } + else + { $message = '
'.$langs->trans('ErrorForbidden').'
'; } } @@ -158,24 +159,24 @@ if ($_POST["action"] == 'update') $db->begin(); - $editgroup = new Usergroup($db, $_GET["id"]); - $editgroup->fetch($_GET["id"]); + $object->fetch($_GET["id"]); - $editgroup->oldcopy=dol_clone($editgroup); + $object->oldcopy=dol_clone($object); - $editgroup->nom = trim($_POST["group"]); - $editgroup->note = dol_htmlcleanlastbr($_POST["note"]); + $object->nom = trim($_POST["group"]); + $object->globalgroup = $_POST["globalgroup"]; + $object->note = dol_htmlcleanlastbr($_POST["note"]); - $ret=$editgroup->update(); + $ret=$object->update(); - if ($ret >= 0 && ! sizeof($editgroup->errors)) + if ($ret >= 0 && ! sizeof($object->errors)) { $message.='
'.$langs->trans("GroupModified").'
'; $db->commit(); } else { - $message.='
'.$editgroup->error.'
'; + $message.='
'.$object->error.'
'; $db->rollback(); } } @@ -193,7 +194,7 @@ if ($_POST["action"] == 'update') llxHeader('',$langs->trans("GroupCard")); -$html = new Form($db); +$form = new Form($db); $fuserstatic = new User($db); if ($action == 'create') @@ -210,6 +211,21 @@ if ($action == 'create') print "
".''; print ''; + + // Global group + if ($conf->multicompany->enabled) + { + if ($conf->entity == 1) + { + print "".''; + $checked=(empty($_POST['globalgroup']) ? '' : ' checked'); + print ''; + } + else + { + print ''; + } + } print "".''; print ''; print ''; // Name print ''; - print ''; - print ''; + print ''; print "\n"; print "
'.$langs->trans("Groups").' 
'.$langs->trans("Name").'
'.$langs->trans("GlobalGroup").'
'.$langs->trans("Note").''; if ($conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_USER) @@ -240,13 +256,12 @@ else { if ($_GET["id"] ) { - $group = new UserGroup($db); - $group->fetch($_GET["id"]); + $object->fetch($_GET["id"]); /* * Affichage onglets */ - $head = group_prepare_head($group); + $head = group_prepare_head($object); $title = $langs->trans("Group"); dol_fiche_head($head, 'group', $title, 0, 'group'); @@ -255,7 +270,7 @@ else */ if ($action == 'delete') { - $ret=$html->form_confirm("fiche.php?id=".$group->id,$langs->trans("DeleteAGroup"),$langs->trans("ConfirmDeleteGroup",$group->name),"confirm_delete", '',0,1); + $ret=$form->form_confirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("DeleteAGroup"),$langs->trans("ConfirmDeleteGroup",$object->name),"confirm_delete", '',0,1); if ($ret == 'html') print '
'; } @@ -270,14 +285,14 @@ else // Ref print '
'.$langs->trans("Ref").''; - print $html->showrefnav($group,'id','',$user->rights->user->user->lire || $user->admin); + print $form->showrefnav($object,'id','',$user->rights->user->user->lire || $user->admin); print '
'.$langs->trans("Name").''.$group->nom; - if (!$group->entity) + print ''.$object->nom; + if (empty($object->entity)) { print img_redstar($langs->trans("GlobalGroup")); } @@ -285,7 +300,7 @@ else // Note print '
'.$langs->trans("Note").''.dol_htmlentitiesbr($group->note).' '.dol_htmlentitiesbr($object->note).' 
\n"; @@ -298,19 +313,19 @@ else if ($caneditperms) { - print ''.$langs->trans("Modify").''; + print ''.$langs->trans("Modify").''; } if ($candisableperms) { - print ''.$langs->trans("DeleteGroup").''; + print ''.$langs->trans("DeleteGroup").''; } print "\n"; print "
\n"; - if ($message) { print $message."
"; } + dol_htmloutput_errors($message); /* * Liste des utilisateurs dans le groupe @@ -318,216 +333,131 @@ else print_fiche_titre($langs->trans("ListOfUsersInGroup"),'',''); - // On salectionne les users qui ne sont pas deja dans le groupe - $userlistid = array(); - $uss = array(); - - $sql = "SELECT ug.fk_user"; - $sql.= " FROM ".MAIN_DB_PREFIX."usergroup_user as ug"; - $sql.= ", ".MAIN_DB_PREFIX."user as u"; - $sql.= " WHERE ug.fk_usergroup = ".$group->id; - $sql.= " AND ug.fk_user = u.rowid"; - $sql.= " AND u.entity IN (0,".$conf->entity.")"; - - $result = $db->query($sql); - if ($result) + // On selectionne les users qui ne sont pas deja dans le groupe + $exclude = array(); + + $userslist = $object->listUsersForGroup(); + + if (! empty($userslist)) { - $num = $db->num_rows($result); - $i = 0; - - while ($i < $num) - { - $obj = $db->fetch_object($result); - - $userlistid[]=$obj->fk_user; - $i++; - } - } - else { - dol_print_error($db); - } - - $idList = implode(",",$userlistid); - - if (!empty($idList)) - { - $sql = "SELECT u.rowid, u.login, u.name, u.firstname, u.admin, u.statut"; - $sql.= " FROM ".MAIN_DB_PREFIX."user as u"; - $sql.= " WHERE u.entity IN (0,".$conf->entity.")"; - $sql.= " AND u.rowid NOT IN (".$idList.")"; - $sql.= " ORDER BY u.name"; - - $result = $db->query($sql); - if ($result) + foreach($userslist as $useringroup) { - $num = $db->num_rows($result); - $i = 0; - - while ($i < $num) - { - $obj = $db->fetch_object($result); - - $uss[$obj->rowid] = ucfirst(stripslashes($obj->name)).' '.ucfirst(stripslashes($obj->firstname)); - if ($obj->login) $uss[$obj->rowid].=' ('.$obj->login.')'; - $i++; - } - } - else { - dol_print_error($db); - } + $exclude[]=$useringroup->id; + } } - else - { - $sql = "SELECT u.rowid, u.login, u.name, u.firstname, u.admin, u.statut"; - $sql.= " FROM ".MAIN_DB_PREFIX."user as u"; - $sql.= " WHERE u.entity IN (0,".$conf->entity.")"; - $sql.= " ORDER BY u.name"; - - $result = $db->query($sql); - if ($result) - { - $num = $db->num_rows($result); - $i = 0; - - while ($i < $num) - { - $obj = $db->fetch_object($result); - - $uss[$obj->rowid] = ucfirst(stripslashes($obj->name)).' '.ucfirst(stripslashes($obj->firstname)); - if ($obj->login) $uss[$obj->rowid].=' ('.$obj->login.')'; - $i++; - } - } - else { - dol_print_error($db); - } - } - + if ($caneditperms) { - $form = new Form($db); - print ''."\n"; + print ''."\n"; print ''; print ''; + print ''; print ''."\n"; print ''."\n"; - //print ''."\n"; print ''."\n"; print '
'.$langs->trans("NonAffectedUsers").'
'.$langs->trans("UsersToAdd").''; - print $form->selectarray("user",$uss,'',1); + print $form->select_users('','user',1,$exclude); print '   '; - print ''; + print ''; print '
'."\n"; print '
'; } /* - * Membres du groupe + * Group members */ - $sql = "SELECT u.rowid, u.login, u.name, u.firstname, u.admin, u.entity, u.statut"; - $sql.= " FROM ".MAIN_DB_PREFIX."user as u"; - $sql.= ", ".MAIN_DB_PREFIX."usergroup_user as ug"; - $sql.= " WHERE ug.fk_user = u.rowid"; - $sql.= " AND ug.fk_usergroup = ".$group->id; - $sql.= " ORDER BY u.name"; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ""; + print "\n"; - $result = $db->query($sql); - if ($result) + if (! empty($userslist)) { - $num = $db->num_rows($result); - $i = 0; - - print '
'.$langs->trans("Login").''.$langs->trans("Lastname").''.$langs->trans("Firstname").''.$langs->trans("Status").'  
'; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ""; - print "\n"; - if ($num) { - $var=True; - while ($i < $num) - { - $obj = $db->fetch_object($result); - $var=!$var; - - print ""; - print ''; - print ''; - print ''; - $fuserstatic->id=$obj->id; - $fuserstatic->statut=$obj->statut; - print ''; - print ''; - print '\n"; - $i++; - } - } - else - { - print ''; - } - print "
'.$langs->trans("Login").''.$langs->trans("Lastname").''.$langs->trans("Firstname").''.$langs->trans("Status").'  
'; - print ''.img_object($langs->trans("ShowUser"),"user").' '.$obj->login.''; - if ($obj->admin && !$obj->entity) - { - print img_redstar($langs->trans("SuperAdministrator")); - } - else if ($obj->admin) - { - print img_picto($langs->trans("Administrator"),'star'); - } - print ''.ucfirst(stripslashes($obj->name)).''.ucfirst(stripslashes($obj->firstname)).''.$fuserstatic->getLibStatut(5).' '; - if ($user->admin) - { - print ''; - print img_delete($langs->trans("RemoveFromGroup")); - } - else - { - print "-"; - } - print "
'.$langs->trans("None").'
"; - print "
"; - $db->free($result); + $var=True; + + foreach($userslist as $useringroup) + { + $var=!$var; + + print ""; + print ''; + print ''.img_object($langs->trans("ShowUser"),"user").' '.$useringroup->login.''; + if ($useringroup->admin && ! $useringroup->entity) print img_redstar($langs->trans("SuperAdministrator")); + else if ($useringroup->admin) print img_picto($langs->trans("Administrator"),'star'); + print ''; + print ''.ucfirst(stripslashes($useringroup->lastname)).''; + print ''.ucfirst(stripslashes($useringroup->firstname)).''; + print ''.$useringroup->getLibStatut(5).''; + print ' '; + print ''; + if ($user->admin) + { + print ''; + print img_delete($langs->trans("RemoveFromGroup")); + } + else + { + print "-"; + } + print "\n"; + } } - else { - dol_print_error($db); + else + { + print ''.$langs->trans("None").''; } + print ""; + print "
"; } /* * Fiche en mode edition */ - if ($_GET["action"] == 'edit' && $caneditperms) + if ($action == 'edit' && $caneditperms) { - print '
'; + print ''; print ''; print ''; print ''; print ''; - print '\n"; - print ''; + + // Global group + if ($conf->multicompany->enabled) + { + if ($conf->entity == 1) + { + print "".''; + $checked=(empty($object->entity) ? ' checked' : ''); + print ''; + } + else + { + $value=(empty($object->entity) ? 1 : 0); + print ''; + } + } + + print ''; print ''; diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php index 18071d625b0..0e7abfc9902 100644 --- a/htdocs/user/perms.php +++ b/htdocs/user/perms.php @@ -201,6 +201,7 @@ $sql.= " ".MAIN_DB_PREFIX."usergroup_rights as gr,"; $sql.= " ".MAIN_DB_PREFIX."usergroup_user as gu"; $sql.= " WHERE gr.fk_id = r.id"; $sql.= " AND r.entity = ".$conf->entity; +$sql.= " AND gu.entity IN (0,".$conf->entity.")"; $sql.= " AND gr.fk_usergroup = gu.fk_usergroup"; $sql.= " AND gu.fk_user = ".$fuser->id;
'.$langs->trans("Name").''; - if (!$group->entity) - { - print img_redstar($langs->trans("GlobalGroup")); - } + print ''; print "
'.$langs->trans("Note").'
'.$langs->trans("GlobalGroup").'
'.$langs->trans("Note").''; if ($conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_USER) { require_once(DOL_DOCUMENT_ROOT."/lib/doleditor.class.php"); - $doleditor=new DolEditor('note',$group->note,'',240,'dolibarr_notes','',true); + $doleditor=new DolEditor('note',$object->note,'',240,'dolibarr_notes','',true); $doleditor->Create(); } else { print ''; } print '