From 6e616e1198bf889ab68cbbd50065f40137e1ae51 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 28 Mar 2018 10:06:00 +0200 Subject: [PATCH] Fix: better performance for openldap --- htdocs/adherents/class/adherent.class.php | 22 ++++++++++++------- .../adherents/class/adherent_type.class.php | 14 ++++++++---- htdocs/adherents/type_ldap.php | 2 +- ...interface_50_modLdap_Ldapsynchro.class.php | 12 +++++----- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index faba841e7c67e..8ae6a18eb2f6d 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -1049,13 +1049,15 @@ function fetch_name($firstname,$lastname) /** * 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 @@ function fetch($rowid,$ref='',$fk_soc='',$ref_ext='') // 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; } diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php index 2393d5dad3b1a..4a032457f0dd3 100644 --- a/htdocs/adherents/class/adherent_type.class.php +++ b/htdocs/adherents/class/adherent_type.class.php @@ -332,7 +332,9 @@ function liste_array() * 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 @@ function listMembersForMemberType($excludefilter='', $mode=0) { 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 @@ function _load_ldap_info() 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); } diff --git a/htdocs/adherents/type_ldap.php b/htdocs/adherents/type_ldap.php index b8fc22f8f7577..7edb42e6c7630 100644 --- a/htdocs/adherents/type_ldap.php +++ b/htdocs/adherents/type_ldap.php @@ -63,7 +63,7 @@ if ($result > 0) { - $object->listMembersForMemberType(); + $object->listMembersForMemberType('', 1); $info = $object->_load_ldap_info(); $dn = $object->_load_ldap_dn($info); diff --git a/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php b/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php index 1e9c2c2ec31f0..8cfece7dc8967 100644 --- a/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php +++ b/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php @@ -440,7 +440,7 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf 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 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf */ $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 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf */ $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 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf */ $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 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf $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 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf $olddn = ''; } - $object->listMembersForMemberType(); + $object->listMembersForMemberType('', 1); $info=$object->_load_ldap_info(); $dn=$object->_load_ldap_dn($info);