Ejemplo n.º 1
0
 /**
  * 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);
         }
     }
 }