Fix: Synchro with group not done when editing group only of a user.
This commit is contained in:
parent
61a6105c98
commit
13ea9c91fd
@ -508,7 +508,7 @@ class Ldap
|
|||||||
*
|
*
|
||||||
* @param string $dn DN entry key
|
* @param string $dn DN entry key
|
||||||
* @param string $info Attributes array
|
* @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)
|
* @param string $olddn Old DN entry key (before update)
|
||||||
* @return int <0 if KO, >0 if OK
|
* @return int <0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -21,6 +21,7 @@
|
|||||||
* \brief Fichier de gestion des triggers LDAP
|
* \brief Fichier de gestion des triggers LDAP
|
||||||
*/
|
*/
|
||||||
require_once (DOL_DOCUMENT_ROOT."/core/class/ldap.class.php");
|
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;
|
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
|
// Groupes
|
||||||
elseif ($action == 'GROUP_CREATE')
|
elseif ($action == 'GROUP_CREATE')
|
||||||
|
|||||||
@ -1576,6 +1576,8 @@ class User extends CommonObject
|
|||||||
{
|
{
|
||||||
if (! $error && ! $notrigger)
|
if (! $error && ! $notrigger)
|
||||||
{
|
{
|
||||||
|
$this->newgroupid=$group;
|
||||||
|
|
||||||
// Appel des triggers
|
// Appel des triggers
|
||||||
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
|
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
|
||||||
$interface=new Interfaces($this->db);
|
$interface=new Interfaces($this->db);
|
||||||
@ -1632,6 +1634,8 @@ class User extends CommonObject
|
|||||||
{
|
{
|
||||||
if (! $error && ! $notrigger)
|
if (! $error && ! $notrigger)
|
||||||
{
|
{
|
||||||
|
$this->oldgroupid=$group;
|
||||||
|
|
||||||
// Appel des triggers
|
// Appel des triggers
|
||||||
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
|
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
|
||||||
$interface=new Interfaces($this->db);
|
$interface=new Interfaces($this->db);
|
||||||
|
|||||||
@ -53,11 +53,11 @@ class UserGroup extends CommonObject
|
|||||||
/**
|
/**
|
||||||
* Constructor de la classe
|
* 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user