/** * add a new groupmember to group in sync backend * * @param mixed $_groupId * @param mixed $_accountId string or user object */ public function addGroupMemberInSyncBackend($_groupId, $_accountId) { if ($this->_isReadOnlyBackend) { return; } $userId = Tinebase_Model_User::convertUserIdToInt($_accountId); $groupId = Tinebase_Model_Group::convertGroupIdToInt($_groupId); $memberships = $this->getGroupMembershipsFromSyncBackend($_accountId); if (in_array($groupId, $memberships)) { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " skip adding group member, as {$userId} is already in group {$groupId}"); } return; } $groupDn = $this->_getDn($_groupId); $ldapData = array(); $accountMetaData = $this->_getAccountMetaData($_accountId); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . " account meta data: " . print_r($accountMetaData, true)); } $filter = Zend_Ldap_Filter::andFilter(Zend_Ldap_Filter::equals($this->_groupUUIDAttribute, Zend_Ldap::filterEscape($groupId)), Zend_Ldap_Filter::equals('memberuid', Zend_Ldap::filterEscape($accountMetaData['uid']))); $groups = $this->_ldap->search($filter, $this->_options['groupsDn'], $this->_groupSearchScope, array('dn')); if (count($groups) == 0) { // need to add memberuid $ldapData['memberuid'] = $accountMetaData['uid']; } if ($this->_options['useRfc2307bis']) { $filter = Zend_Ldap_Filter::andFilter(Zend_Ldap_Filter::equals($this->_groupUUIDAttribute, Zend_Ldap::filterEscape($groupId)), Zend_Ldap_Filter::equals('member', Zend_Ldap::filterEscape($accountMetaData['dn']))); $groups = $this->_ldap->search($filter, $this->_options['groupsDn'], $this->_groupSearchScope, array('dn')); if (count($groups) == 0) { // need to add member $ldapData['member'] = $accountMetaData['dn']; } } if (!empty($ldapData)) { $this->_ldap->addProperty($groupDn, $ldapData); } if ($this->_options['useRfc2307bis']) { // remove groupdn if no longer needed $filter = Zend_Ldap_Filter::andFilter(Zend_Ldap_Filter::equals($this->_groupUUIDAttribute, Zend_Ldap::filterEscape($groupId)), Zend_Ldap_Filter::equals('member', Zend_Ldap::filterEscape($groupDn))); $groups = $this->_ldap->search($filter, $this->_options['groupsDn'], $this->_groupSearchScope, array('dn')); if (count($groups) > 0) { $ldapData = array('member' => $groupDn); $this->_ldap->deleteProperty($groupDn, $ldapData); } } }