Fix: Synchro with group not done when editing group only of a user.

This commit is contained in:
Laurent Destailleur 2012-05-11 12:47:15 +02:00
parent 61a6105c98
commit 13ea9c91fd
4 changed files with 85 additions and 4 deletions

View File

@ -508,7 +508,7 @@ class Ldap
*
* @param string $dn DN entry key
* @param string $info Attributes array
* @param User $user Objet user that delete
* @param User $user Objet user that update
* @param string $olddn Old DN entry key (before update)
* @return int <0 if KO, >0 if OK
*/

View File

@ -21,6 +21,7 @@
* \brief Fichier de gestion des triggers LDAP
*/
require_once (DOL_DOCUMENT_ROOT."/core/class/ldap.class.php");
require_once (DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php");
/**
@ -210,6 +211,82 @@ class InterfaceLdapsynchro
return $result;
}
}
elseif ($action == 'USER_SETINGROUP')
{
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap')
{
$ldap=new Ldap();
$ldap->connect_bind();
// Must edit $object->newgroupid
$usergroup=new UserGroup($this->db);
if ($object->newgroupid > 0)
{
$usergroup->fetch($object->newgroupid);
$oldinfo=$usergroup->_load_ldap_info();
$olddn=$usergroup->_load_ldap_dn($oldinfo);
// Verify if entry exist
$container=$usergroup->_load_ldap_dn($oldinfo,1);
$search = "(".$usergroup->_load_ldap_dn($oldinfo,2).")";
$records=$ldap->search($container,$search);
if (count($records) && $records['count'] == 0)
{
$olddn = '';
}
$info=$usergroup->_load_ldap_info(); // Contains all members, included the new one (insert already done before trigger call)
$dn=$usergroup->_load_ldap_dn($info);
$result=$ldap->update($dn,$info,$user,$olddn);
if ($result < 0)
{
$this->error="ErrorLDAP ".$ldap->error;
}
}
return $result;
}
}
elseif ($action == 'USER_REMOVEFROMGROUP')
{
dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap')
{
$ldap=new Ldap();
$ldap->connect_bind();
// Must edit $object->newgroupid
$usergroup=new UserGroup($this->db);
if ($object->oldgroupid > 0)
{
$usergroup->fetch($object->oldgroupid);
$oldinfo=$usergroup->_load_ldap_info();
$olddn=$usergroup->_load_ldap_dn($oldinfo);
// Verify if entry exist
$container=$usergroup->_load_ldap_dn($oldinfo,1);
$search = "(".$usergroup->_load_ldap_dn($oldinfo,2).")";
$records=$ldap->search($container,$search);
if (count($records) && $records['count'] == 0)
{
$olddn = '';
}
$info=$usergroup->_load_ldap_info(); // Contains all members, included the new one (insert already done before trigger call)
$dn=$usergroup->_load_ldap_dn($info);
$result=$ldap->update($dn,$info,$user,$olddn);
if ($result < 0)
{
$this->error="ErrorLDAP ".$ldap->error;
}
}
return $result;
}
}
// Groupes
elseif ($action == 'GROUP_CREATE')

View File

@ -1576,6 +1576,8 @@ class User extends CommonObject
{
if (! $error && ! $notrigger)
{
$this->newgroupid=$group;
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
$interface=new Interfaces($this->db);
@ -1632,6 +1634,8 @@ class User extends CommonObject
{
if (! $error && ! $notrigger)
{
$this->oldgroupid=$group;
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
$interface=new Interfaces($this->db);

View File

@ -53,11 +53,11 @@ class UserGroup extends CommonObject
/**
* Constructor de la classe
*
* @param DoliDb $DB Database handler
* @param DoliDb $db Database handler
*/
function UserGroup($DB)
function UserGroup($db)
{
$this->db = $DB;
$this->db = $db;
return 0;
}