| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787 |
- <?php
- /* Copyright (C) 2005-2012 Laurent Destailleur <eldy@users.sourceforge.net>
- * Copyright (C) 2005-2021 Regis Houssin <regis.houssin@inodbox.com>
- * Copyright (C) 2014 Marcos García <marcosgdf@gmail.com>
- *
- * 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
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
- /**
- * \file htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php
- * \ingroup core
- * \brief Fichier de gestion des triggers LDAP
- */
- require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php';
- /**
- * Class of triggers for ldap module
- */
- class InterfaceLdapsynchro extends DolibarrTriggers
- {
- /**
- * Constructor
- *
- * @param DoliDB $db Database handler
- */
- public function __construct($db)
- {
- $this->db = $db;
- $this->name = preg_replace('/^Interface/i', '', get_class($this));
- $this->family = "ldap";
- $this->description = "Triggers of this module allows to synchronize Dolibarr toward a LDAP database.";
- // 'development', 'experimental', 'dolibarr' or version
- $this->version = self::VERSION_DOLIBARR;
- $this->picto = 'technic';
- }
- /**
- * Function called when a Dolibarrr business event is done.
- * All functions "runTrigger" are triggered if file is inside directory htdocs/core/triggers or htdocs/module/code/triggers (and declared)
- *
- * @param string $action Event action code
- * @param Object $object Object
- * @param User $user Object user
- * @param Translate $langs Object langs
- * @param conf $conf Object conf
- * @return int <0 if KO, 0 if no triggered ran, >0 if OK
- */
- public function runTrigger($action, $object, User $user, Translate $langs, Conf $conf)
- {
- if (empty($conf->ldap) || empty($conf->ldap->enabled)) {
- return 0; // Module not active, we do nothing
- }
- if (defined('DISABLE_LDAP_SYNCHRO')) {
- return 0; // If constant defined, we do nothing
- }
- if (!function_exists('ldap_connect')) {
- dol_syslog("Warning, module LDAP is enabled but LDAP functions not available in this PHP", LOG_WARNING);
- return 0;
- }
- require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
- require_once DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php";
- $result = 0;
- // Users
- if ($action == 'USER_CREATE') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_SYNCHRO_ACTIVE) && getDolGlobalInt('LDAP_SYNCHRO_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $result = $ldap->add($dn, $info, $user);
- }
- if ($result < 0) {
- $this->error = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'USER_MODIFY') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_SYNCHRO_ACTIVE) && getDolGlobalInt('LDAP_SYNCHRO_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- if (empty($object->oldcopy) || !is_object($object->oldcopy)) {
- dol_syslog("Trigger ".$action." was called by a function that did not set previously the property ->oldcopy onto object", LOG_WARNING);
- $object->oldcopy = clone $object;
- }
- $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).")";
- $records = $ldap->search($container, $search);
- if (count($records) && $records['count'] == 0) {
- $olddn = '';
- }
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $newrdn = $object->_load_ldap_dn($info, 2);
- $newparent = $object->_load_ldap_dn($info, 1);
- $result = $ldap->update($dn, $info, $user, $olddn, $newrdn, $newparent);
- if ($result > 0 && !empty($object->context['newgroupid'])) { // We are in context of adding a new group to user
- $usergroup = new Usergroup($this->db);
- $usergroup->fetch($object->context['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 && !empty($object->context['oldgroupid'])) { // We are in context of removing a group from user
- $usergroup = new Usergroup($this->db);
- $usergroup->fetch($object->context['oldgroupid']);
- $oldinfo = $usergroup->_load_ldap_info();
- $olddn = $usergroup->_load_ldap_dn($oldinfo);
- // Verify if an entry exists
- $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, except the old one (remove 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;
- }
- }
- } elseif ($action == 'USER_NEW_PASSWORD') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_SYNCHRO_ACTIVE) && getDolGlobalInt('LDAP_SYNCHRO_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- if (empty($object->oldcopy) || !is_object($object->oldcopy)) {
- dol_syslog("Trigger ".$action." was called by a function that did not set previously the property ->oldcopy onto object", LOG_WARNING);
- $object->oldcopy = clone $object;
- }
- $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).")";
- $records = $ldap->search($container, $search);
- if (count($records) && $records['count'] == 0) {
- $olddn = '';
- }
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $result = $ldap->update($dn, $info, $user, $olddn);
- }
- if ($result < 0) {
- $this->error = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'USER_ENABLEDISABLE') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- } elseif ($action == 'USER_DELETE') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_SYNCHRO_ACTIVE) && getDolGlobalInt('LDAP_SYNCHRO_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $result = $ldap->delete($dn);
- }
- if ($result < 0) {
- $this->error = "ErrorLDAP ".$ldap->error;
- }
- }
- /*} elseif ($action == 'USER_SETINGROUP') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_SYNCHRO_ACTIVE) && getDolGlobalInt('LDAP_SYNCHRO_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- // 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;
- }
- }
- } elseif ($action == 'USER_REMOVEFROMGROUP') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_SYNCHRO_ACTIVE) && getDolGlobalInt('LDAP_SYNCHRO_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- // 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;
- }
- } */
- } elseif ($action == 'USERGROUP_CREATE') {
- // Groupes
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_SYNCHRO_ACTIVE) && getDolGlobalInt('LDAP_SYNCHRO_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- // Get a gid number for objectclass PosixGroup if none was provided
- if (empty($info[$conf->global->LDAP_GROUP_FIELD_GROUPID]) && in_array('posixGroup', $info['objectclass'])) {
- $info['gidNumber'] = $ldap->getNextGroupGid('LDAP_KEY_GROUPS');
- }
- $result = $ldap->add($dn, $info, $user);
- }
- if ($result < 0) {
- $this->error = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'USERGROUP_MODIFY') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_SYNCHRO_ACTIVE) && getDolGlobalInt('LDAP_SYNCHRO_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- if (empty($object->oldcopy) || !is_object($object->oldcopy)) {
- dol_syslog("Trigger ".$action." was called by a function that did not set previously the property ->oldcopy onto object", LOG_WARNING);
- $object->oldcopy = clone $object;
- }
- $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).")";
- $records = $ldap->search($container, $search);
- if (count($records) && $records['count'] == 0) {
- $olddn = '';
- }
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $result = $ldap->update($dn, $info, $user, $olddn);
- }
- if ($result < 0) {
- $this->error = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'USERGROUP_DELETE') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_SYNCHRO_ACTIVE) && getDolGlobalInt('LDAP_SYNCHRO_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $result = $ldap->delete($dn);
- }
- if ($result < 0) {
- $this->error = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'CONTACT_CREATE') {
- // Contacts
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_CONTACT_ACTIVE)) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $result = $ldap->add($dn, $info, $user);
- }
- if ($result < 0) {
- $this->error = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'CONTACT_MODIFY') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_CONTACT_ACTIVE)) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- if (empty($object->oldcopy) || !is_object($object->oldcopy)) {
- dol_syslog("Trigger ".$action." was called by a function that did not set previously the property ->oldcopy onto object", LOG_WARNING);
- $object->oldcopy = clone $object;
- }
- $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).")";
- $records = $ldap->search($container, $search);
- if (count($records) && $records['count'] == 0) {
- $olddn = '';
- }
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $result = $ldap->update($dn, $info, $user, $olddn);
- }
- if ($result < 0) {
- $this->error = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'CONTACT_DELETE') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_CONTACT_ACTIVE)) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $result = $ldap->delete($dn);
- }
- if ($result < 0) {
- $this->error = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'MEMBER_CREATE') {
- // Members
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_MEMBER_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_ACTIVE') == Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $result = $ldap->add($dn, $info, $user);
- // For member type
- if (!empty($conf->global->LDAP_MEMBER_TYPE_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_TYPE_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- if ($object->typeid > 0) {
- require_once DOL_DOCUMENT_ROOT."/adherents/class/adherent_type.class.php";
- $membertype = new AdherentType($this->db);
- $membertype->fetch($object->typeid);
- $membertype->listMembersForMemberType('', 1);
- $oldinfo = $membertype->_load_ldap_info();
- $olddn = $membertype->_load_ldap_dn($oldinfo);
- // Verify if entry exist
- $container = $membertype->_load_ldap_dn($oldinfo, 1);
- $search = "(".$membertype->_load_ldap_dn($oldinfo, 2).")";
- $records = $ldap->search($container, $search);
- if (count($records) && $records['count'] == 0) {
- $olddn = '';
- }
- $info = $membertype->_load_ldap_info(); // Contains all members, included the new one (insert already done before trigger call)
- $dn = $membertype->_load_ldap_dn($info);
- $result = $ldap->update($dn, $info, $user, $olddn);
- }
- }
- }
- if ($result < 0) {
- $this->error = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'MEMBER_VALIDATE') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_MEMBER_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_ACTIVE') == Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- // If status field is setup to be synchronized
- if (!empty($conf->global->LDAP_FIELD_MEMBER_STATUS)) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $olddn = $dn; // We know olddn=dn as we change only status
- $result = $ldap->update($dn, $info, $user, $olddn);
- }
- if ($result < 0) {
- $this->error = "ErrorLDAP ".$ldap->error;
- }
- }
- }
- } elseif ($action == 'MEMBER_SUBSCRIPTION') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_MEMBER_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_ACTIVE') == Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- // If subscriptions fields are setup to be synchronized
- if (!empty($conf->global->LDAP_FIELD_MEMBER_FIRSTSUBSCRIPTION_DATE)
- || !empty($conf->global->LDAP_FIELD_MEMBER_FIRSTSUBSCRIPTION_AMOUNT)
- || !empty($conf->global->LDAP_FIELD_MEMBER_LASTSUBSCRIPTION_DATE)
- || !empty($conf->global->LDAP_FIELD_MEMBER_LASTSUBSCRIPTION_AMOUNT)
- || !empty($conf->global->LDAP_FIELD_MEMBER_END_LASTSUBSCRIPTION)) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $olddn = $dn; // We know olddn=dn as we change only subscriptions
- $result = $ldap->update($dn, $info, $user, $olddn);
- }
- if ($result < 0) {
- $this->error = "ErrorLDAP ".$ldap->error;
- }
- }
- }
- } elseif ($action == 'MEMBER_MODIFY') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_MEMBER_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_ACTIVE') == Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- if (empty($object->oldcopy) || !is_object($object->oldcopy)) {
- dol_syslog("Trigger ".$action." was called by a function that did not set previously the property ->oldcopy onto object", LOG_WARNING);
- $object->oldcopy = clone $object;
- }
- $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).")";
- $records = $ldap->search($container, $search);
- if (count($records) && $records['count'] == 0) {
- $olddn = '';
- }
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $newrdn = $object->_load_ldap_dn($info, 2);
- $newparent = $object->_load_ldap_dn($info, 1);
- $result = $ldap->update($dn, $info, $user, $olddn, $newrdn, $newparent);
- // For member type
- if (!empty($conf->global->LDAP_MEMBER_TYPE_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_TYPE_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- require_once DOL_DOCUMENT_ROOT."/adherents/class/adherent_type.class.php";
- /*
- * Change member info
- */
- $newmembertype = new AdherentType($this->db);
- $newmembertype->fetch($object->typeid);
- $newmembertype->listMembersForMemberType('', 1);
- $oldinfo = $newmembertype->_load_ldap_info();
- $olddn = $newmembertype->_load_ldap_dn($oldinfo);
- // Verify if entry exist
- $container = $newmembertype->_load_ldap_dn($oldinfo, 1);
- $search = "(".$newmembertype->_load_ldap_dn($oldinfo, 2).")";
- $records = $ldap->search($container, $search);
- if (count($records) && $records['count'] == 0) {
- $olddn = '';
- }
- $info = $newmembertype->_load_ldap_info(); // Contains all members, included the new one (insert already done before trigger call)
- $dn = $newmembertype->_load_ldap_dn($info);
- $result = $ldap->update($dn, $info, $user, $olddn);
- if ($object->oldcopy->typeid != $object->typeid) {
- /*
- * Remove member in old member type
- */
- $oldmembertype = new AdherentType($this->db);
- $oldmembertype->fetch($object->oldcopy->typeid);
- $oldmembertype->listMembersForMemberType('', 1);
- $oldinfo = $oldmembertype->_load_ldap_info();
- $olddn = $oldmembertype->_load_ldap_dn($oldinfo);
- // Verify if entry exist
- $container = $oldmembertype->_load_ldap_dn($oldinfo, 1);
- $search = "(".$oldmembertype->_load_ldap_dn($oldinfo, 2).")";
- $records = $ldap->search($container, $search);
- if (count($records) && $records['count'] == 0) {
- $olddn = '';
- }
- $info = $oldmembertype->_load_ldap_info(); // Contains all members, included the new one (insert already done before trigger call)
- $dn = $oldmembertype->_load_ldap_dn($info);
- $result = $ldap->update($dn, $info, $user, $olddn);
- }
- }
- }
- if ($result <= 0) {
- $this->errors[] = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'MEMBER_NEW_PASSWORD') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_MEMBER_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_ACTIVE') == Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- // If password field is setup to be synchronized
- if (!empty($conf->global->LDAP_FIELD_PASSWORD) || !empty($conf->global->LDAP_FIELD_PASSWORD_CRYPTED)) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $olddn = $dn; // We know olddn=dn as we change only password
- $result = $ldap->update($dn, $info, $user, $olddn);
- }
- if ($result <= 0) {
- $this->errors[] = "ErrorLDAP ".$ldap->error;
- }
- }
- }
- } elseif ($action == 'MEMBER_RESILIATE') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_MEMBER_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_ACTIVE') == Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- // If status field is setup to be synchronized
- if (!empty($conf->global->LDAP_FIELD_MEMBER_STATUS)) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $olddn = $dn; // We know olddn=dn as we change only status
- $result = $ldap->update($dn, $info, $user, $olddn);
- }
- if ($result <= 0) {
- $this->errors[] = "ErrorLDAP ".$ldap->error;
- }
- }
- }
- } elseif ($action == 'MEMBER_DELETE') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_MEMBER_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_ACTIVE') == Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $result = $ldap->delete($dn);
- // For member type
- if (!empty($conf->global->LDAP_MEMBER_TYPE_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_TYPE_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- if ($object->typeid > 0) {
- require_once DOL_DOCUMENT_ROOT."/adherents/class/adherent_type.class.php";
- /*
- * Remove member in member type
- */
- $membertype = new AdherentType($this->db);
- $membertype->fetch($object->typeid);
- $membertype->listMembersForMemberType('a.rowid != '.$object->id, 1); // remove deleted member from the list
- $oldinfo = $membertype->_load_ldap_info();
- $olddn = $membertype->_load_ldap_dn($oldinfo);
- // Verify if entry exist
- $container = $membertype->_load_ldap_dn($oldinfo, 1);
- $search = "(".$membertype->_load_ldap_dn($oldinfo, 2).")";
- $records = $ldap->search($container, $search);
- if (count($records) && $records['count'] == 0) {
- $olddn = '';
- }
- $info = $membertype->_load_ldap_info(); // Contains all members, included the new one (insert already done before trigger call)
- $dn = $membertype->_load_ldap_dn($info);
- $result = $ldap->update($dn, $info, $user, $olddn);
- }
- }
- }
- if ($result <= 0) {
- $this->errors[] = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'MEMBER_TYPE_CREATE') {
- // Members types
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_MEMBER_TYPE_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_TYPE_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- // Get a gid number for objectclass PosixGroup
- if (in_array('posixGroup', $info['objectclass'])) {
- $info['gidNumber'] = $ldap->getNextGroupGid('LDAP_KEY_MEMBERS_TYPE');
- }
- $result = $ldap->add($dn, $info, $user);
- }
- if ($result <= 0) {
- $this->errors[] = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'MEMBER_TYPE_MODIFY') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_MEMBER_TYPE_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_TYPE_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- if (empty($object->oldcopy) || !is_object($object->oldcopy)) {
- dol_syslog("Trigger ".$action." was called by a function that did not set previously the property ->oldcopy onto object", LOG_WARNING);
- $object->oldcopy = clone $object;
- }
- $object->oldcopy->listMembersForMemberType('', 1);
- $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).")";
- $records = $ldap->search($container, $search);
- if (count($records) && $records['count'] == 0) {
- $olddn = '';
- }
- $object->listMembersForMemberType('', 1);
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $result = $ldap->update($dn, $info, $user, $olddn);
- }
- if ($result <= 0) {
- $this->errors[] = "ErrorLDAP ".$ldap->error;
- }
- }
- } elseif ($action == 'MEMBER_TYPE_DELETE') {
- dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
- if (!empty($conf->global->LDAP_MEMBER_TYPE_ACTIVE) && getDolGlobalInt('LDAP_MEMBER_TYPE_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) {
- $ldap = new Ldap();
- $result = $ldap->connect_bind();
- if ($result > 0) {
- $info = $object->_load_ldap_info();
- $dn = $object->_load_ldap_dn($info);
- $result = $ldap->delete($dn);
- }
- if ($result <= 0) {
- $this->errors[] = "ErrorLDAP ".$ldap->error;
- }
- }
- }
- return $result;
- }
- }
|