diff --git a/htdocs/includes/triggers/interface_modLdap_Ldapsynchro.class.php b/htdocs/includes/triggers/interface_modLdap_Ldapsynchro.class.php index a37cf8e034f..fe844ea261a 100644 --- a/htdocs/includes/triggers/interface_modLdap_Ldapsynchro.class.php +++ b/htdocs/includes/triggers/interface_modLdap_Ldapsynchro.class.php @@ -17,20 +17,18 @@ */ /** - \file htdocs/includes/triggers/interface_modLdap_Ldapsynchro.class.php - \ingroup core - \brief Fichier de gestion des triggers LDAP - \version $Id$ -*/ - + * \file htdocs/includes/triggers/interface_modLdap_Ldapsynchro.class.php + * \ingroup core + * \brief Fichier de gestion des triggers LDAP + * \version $Id$ + */ require_once (DOL_DOCUMENT_ROOT."/lib/ldap.class.php"); /** - \class InterfaceLdapsynchro - \brief Classe des fonctions triggers des actions de synchro LDAP -*/ - + * \class InterfaceLdapsynchro + * \brief Classe des fonctions triggers des actions de synchro LDAP + */ class InterfaceLdapsynchro { var $db; @@ -137,7 +135,7 @@ class InterfaceLdapsynchro $oldinfo=$object->oldcopy->_load_ldap_info(); $olddn=$object->oldcopy->_load_ldap_dn($oldinfo); - + // Verify if entry exist $container=$object->oldcopy->_load_ldap_dn($oldinfo,1); $search = "(".$object->oldcopy->_load_ldap_dn($oldinfo,2).")"; @@ -214,7 +212,7 @@ class InterfaceLdapsynchro $oldinfo=$object->oldcopy->_load_ldap_info(); $olddn=$object->oldcopy->_load_ldap_dn($oldinfo); - + // Verify if entry exist $container=$object->oldcopy->_load_ldap_dn($oldinfo,1); $search = "(".$object->oldcopy->_load_ldap_dn($oldinfo,2).")"; @@ -284,7 +282,7 @@ class InterfaceLdapsynchro $oldinfo=$object->oldcopy->_load_ldap_info(); $olddn=$object->oldcopy->_load_ldap_dn($oldinfo); - + // Verify if entry exist $container=$object->oldcopy->_load_ldap_dn($oldinfo,1); $search = "(".$object->oldcopy->_load_ldap_dn($oldinfo,2).")"; @@ -407,7 +405,7 @@ class InterfaceLdapsynchro $oldinfo=$object->oldcopy->_load_ldap_info(); $olddn=$object->oldcopy->_load_ldap_dn($oldinfo); - + // Verify if entry exist $container=$object->oldcopy->_load_ldap_dn($oldinfo,1); $search = "(".$object->oldcopy->_load_ldap_dn($oldinfo,2).")"; diff --git a/htdocs/user.class.php b/htdocs/user.class.php index 7e27e6ed06f..ad19fd4d5eb 100644 --- a/htdocs/user.class.php +++ b/htdocs/user.class.php @@ -1167,13 +1167,13 @@ class User extends CommonObject /** - * \brief Change le mot de passe d'un utilisateur - * \param user Object user de l'utilisateur qui fait la modification - * \param password Nouveau mot de passe en clair (a generer si non communique) + * \brief Change le mot de passe d'un utilisateur + * \param user Object user de l'utilisateur qui fait la modification + * \param password Nouveau mot de passe en clair (a generer si non communique) * \param changelater 1=Change password only after clicking on confirm email * \param notrigger 1=Ne declenche pas les triggers * \param nosyncmember Do not synchronize linked member - * \return string If OK return clear password, 0 if no change, < 0 if error + * \return string If OK return clear password, 0 if no change, < 0 if error */ function setPassword($user, $password='', $changelater=0, $notrigger=0, $nosyncmember=0) { @@ -1440,7 +1440,7 @@ class User extends CommonObject /** - * \brief Ajoute l'utilisateur dans un groupe + * \brief Add user into a group * \param group id du groupe */ function SetInGroup($group) @@ -1459,7 +1459,7 @@ class User extends CommonObject } /** - * \brief Retire l'utilisateur d'un groupe + * \brief Remove a user from a group * \param group id du groupe */ function RemoveFromGroup($group) diff --git a/htdocs/user/group/fiche.php b/htdocs/user/group/fiche.php index 6d0e5c0c190..8685c91afc8 100644 --- a/htdocs/user/group/fiche.php +++ b/htdocs/user/group/fiche.php @@ -1,6 +1,6 @@ - * Copyright (C) 2005-2006 Laurent Destailleur + * Copyright (C) 2005-2010 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin * * This program is free software; you can redistribute it and/or modify @@ -43,7 +43,7 @@ $action=isset($_GET["action"])?$_GET["action"]:$_POST["action"]; /** - * Action suppression groupe + * Action remove group */ if ($_REQUEST["action"] == 'confirm_delete' && $_REQUEST["confirm"] == "yes") { @@ -61,7 +61,7 @@ if ($_REQUEST["action"] == 'confirm_delete' && $_REQUEST["confirm"] == "yes") } /** - * Action ajout groupe + * Action add group */ if ($_POST["action"] == 'add') { @@ -104,30 +104,62 @@ if ($_POST["action"] == 'add') } } +// Add user into group if ($_POST["action"] == 'adduser') { - if($caneditperms){ + if($caneditperms) + { if ($_POST["user"]) { - $edituser = new User($db, $_POST["user"]); - $edituser->SetInGroup($_GET["id"]); + $editgroup = new UserGroup($db); + $editgroup->fetch($_GET["id"]); + $editgroup->oldcopy=dol_clone($editgroup); - Header("Location: fiche.php?id=".$_GET["id"]); + $edituser = new User($db, $_POST["user"]); + $result=$edituser->SetInGroup($_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 ($result > 0) + { + header("Location: fiche.php?id=".$_GET["id"]); + exit; + } } }else{ $message = '
'.$langs->trans('ErrorForbidden').'
'; } } +// Remove user from group if ($_GET["action"] == 'removeuser') { - if($caneditperms){ + if($caneditperms) + { if ($_GET["user"]) { + $editgroup = new UserGroup($db); + $editgroup->fetch($_GET["id"]); + $editgroup->oldcopy=dol_clone($editgroup); + $edituser = new User($db, $_GET["user"]); $edituser->RemoveFromGroup($_GET["id"]); - Header("Location: fiche.php?id=".$_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 ($result > 0) + { + header("Location: fiche.php?id=".$_GET["id"]); + exit; + } } }else{ $message = '
'.$langs->trans('ErrorForbidden').'
'; diff --git a/htdocs/usergroup.class.php b/htdocs/usergroup.class.php index 5b0541e3eac..9e1b9ed0959 100644 --- a/htdocs/usergroup.class.php +++ b/htdocs/usergroup.class.php @@ -1,6 +1,6 @@ - * Copyright (c) 2005 Laurent Destailleur +/* Copyright (c) 2005 Rodolphe Quiedeville + * Copyright (c) 2005-2010 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 @@ -95,6 +95,8 @@ class UserGroup extends CommonObject $this->datec = $obj->datec; $this->datem = $obj->datem; + $this->members=$this->listUsersForGroup(); + // Sav current LDAP Current DN //$this->ldap_dn = $this->_load_ldap_dn($this->_load_ldap_info(),0); } @@ -111,7 +113,7 @@ class UserGroup extends CommonObject /** - * \brief Return array of groups for a particular user + * \brief Return array of groups objects for a particular user * \param usertosearch * \return array of groups objects */ @@ -119,7 +121,7 @@ class UserGroup extends CommonObject { $ret=array(); - $sql = "SELECT g.rowid, g.nom, g.note, g.datec, tms as datem"; + $sql = "SELECT g.rowid, g.nom, g.note, g.datec, g.tms as datem"; $sql.= " FROM ".MAIN_DB_PREFIX."usergroup as g,"; $sql.= " ".MAIN_DB_PREFIX."usergroup_user as ug"; $sql.= " WHERE ug.fk_usergroup = g.rowid"; @@ -152,6 +154,39 @@ class UserGroup extends CommonObject return $ret; } + /** + * \brief Return array of users id for group + * \return array of users id + */ + function listUsersForGroup() + { + $ret=array(); + + $sql = "SELECT u.rowid, u.login, u.name, u.firstname"; + $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; + + dol_syslog("UserGroup::listUsersForGroup sql=".$sql,LOG_DEBUG); + $result = $this->db->query($sql); + if ($result) + { + while ($obj = $this->db->fetch_object($result)) + { + $ret[]=$obj->rowid; + } + $this->db->free($result); + } + else + { + $this->error=$this->db->lasterror(); + dol_syslog("UserGroup::listUsersForGroup ".$this->error, LOG_ERR); + return -1; + } + return $ret; + } + /** * \brief Ajoute un droit a l'utilisateur * \param rid id du droit a ajouter @@ -483,9 +518,9 @@ class UserGroup extends CommonObject /** - * \brief Mise a jour en base d'un utilisateur - * \param notrigger 0=non, 1=oui - * \return int <0 si KO, >=0 si OK + * \brief Update group into database + * \param notrigger 0=trigers enabled, 1=trigers disabled + * \return int <0 if KO, >=0 if OK */ function update($notrigger=0) { @@ -502,27 +537,23 @@ class UserGroup extends CommonObject $resql = $this->db->query($sql); if ($resql) { - if ($this->db->affected_rows($resql)) + if (!$error && ! $notrigger) { - - if (!$error && ! $notrigger) - { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('GROUP_MODIFY',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - } - - return 1; + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('GROUP_MODIFY',$this,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers } - return 0; + + if (! $error) return 1; + else return -$error; } else { dol_print_error($this->db); - return -2; + return -1; } }