Fix: better performance for openldap

This commit is contained in:
Regis Houssin 2018-03-28 10:06:00 +02:00
parent 0edba4b4a7
commit 6e616e1198
4 changed files with 31 additions and 19 deletions

View File

@ -1049,13 +1049,15 @@ class Adherent extends CommonObject
/**
* Load member from database
*
* @param int $rowid Id of object to load
* @param string $ref To load member from its ref
* @param int $fk_soc To load member from its link to third party
* @param string $ref_ext External reference
* @return int >0 if OK, 0 if not found, <0 if KO
* @param int $rowid Id of object to load
* @param string $ref To load member from its ref
* @param int $fk_soc To load member from its link to third party
* @param string $ref_ext External reference
* @param bool $fetch_optionals To load optionals (extrafields)
* @param bool $fetch_subscriptions To load member subscriptions
* @return int >0 if OK, 0 if not found, <0 if KO
*/
function fetch($rowid,$ref='',$fk_soc='',$ref_ext='')
function fetch($rowid,$ref='',$fk_soc='',$ref_ext='',$fetch_optionals=true,$fetch_subscriptions=true)
{
global $langs;
@ -1160,10 +1162,14 @@ class Adherent extends CommonObject
// Retreive all extrafield
// fetch optionals attributes and labels
$this->fetch_optionals();
if ($fetch_optionals) {
$this->fetch_optionals();
}
// Load other properties
$result=$this->fetch_subscriptions();
if ($fetch_subscriptions) {
$result=$this->fetch_subscriptions();
}
return $this->id;
}

View File

@ -332,7 +332,9 @@ class AdherentType extends CommonObject
* Return array of Member objects for member type this->id (or all if this->id not defined)
*
* @param string $excludefilter Filter to exclude
* @param int $mode 0=Return array of member instance, 1=Return array of members id only
* @param int $mode 0=Return array of member instance
* 1=Return array of member instance without extra data
* 2=Return array of members id only
* @return mixed Array of members or -1 on error
*/
function listMembersForMemberType($excludefilter='', $mode=0)
@ -355,10 +357,14 @@ class AdherentType extends CommonObject
{
if (! array_key_exists($obj->rowid, $ret))
{
if ($mode != 1)
if ($mode < 2)
{
$memberstatic=new Adherent($this->db);
$memberstatic->fetch($obj->rowid);
if ($mode == 1) {
$memberstatic->fetch($obj->rowid,'','','',false, false);
} else {
$memberstatic->fetch($obj->rowid);
}
$ret[$obj->rowid]=$memberstatic;
}
else $ret[$obj->rowid]=$obj->rowid;
@ -457,7 +463,7 @@ class AdherentType extends CommonObject
foreach($this->members as $key=>$val) // This is array of users for group into dolibarr database.
{
$member=new Adherent($this->db);
$member->fetch($val->id);
$member->fetch($val->id,'','','',false,false);
$info2 = $member->_load_ldap_info();
$valueofldapfield[] = $member->_load_ldap_dn($info2);
}

View File

@ -63,7 +63,7 @@ if (empty($reshook))
if ($result > 0)
{
$object->listMembersForMemberType();
$object->listMembersForMemberType('', 1);
$info = $object->_load_ldap_info();
$dn = $object->_load_ldap_dn($info);

View File

@ -440,7 +440,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers
if ($object->typeid > 0)
{
$membertype->fetch($object->typeid);
$membertype->listMembersForMemberType();
$membertype->listMembersForMemberType('', 1);
$oldinfo=$membertype->_load_ldap_info();
$olddn=$membertype->_load_ldap_dn($oldinfo);
@ -560,7 +560,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers
*/
$newmembertype=new AdherentType($this->db);
$newmembertype->fetch($object->typeid);
$newmembertype->listMembersForMemberType();
$newmembertype->listMembersForMemberType('', 1);
$oldinfo=$newmembertype->_load_ldap_info();
$olddn=$newmembertype->_load_ldap_dn($oldinfo);
@ -586,7 +586,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers
*/
$oldmembertype=new AdherentType($this->db);
$oldmembertype->fetch($object->oldcopy->typeid);
$oldmembertype->listMembersForMemberType();
$oldmembertype->listMembersForMemberType('', 1);
$oldinfo=$oldmembertype->_load_ldap_info();
$olddn=$oldmembertype->_load_ldap_dn($oldinfo);
@ -684,7 +684,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers
*/
$membertype=new AdherentType($this->db);
$membertype->fetch($object->typeid);
$membertype->listMembersForMemberType('a.rowid != ' . $object->id); // remove deleted member from the list
$membertype->listMembersForMemberType('a.rowid != ' . $object->id, 1); // remove deleted member from the list
$oldinfo=$membertype->_load_ldap_info();
$olddn=$membertype->_load_ldap_dn($oldinfo);
@ -751,7 +751,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers
$object->oldcopy = clone $object;
}
$object->oldcopy->listMembersForMemberType();
$object->oldcopy->listMembersForMemberType('', 1);
$oldinfo=$object->oldcopy->_load_ldap_info();
$olddn=$object->oldcopy->_load_ldap_dn($oldinfo);
@ -765,7 +765,7 @@ class InterfaceLdapsynchro extends DolibarrTriggers
$olddn = '';
}
$object->listMembersForMemberType();
$object->listMembersForMemberType('', 1);
$info=$object->_load_ldap_info();
$dn=$object->_load_ldap_dn($info);