/** * convert objects with user data to ldap data array * * @param Tinebase_Model_FullUser $_user * @param array $_ldapData the data to be written to ldap */ protected function _group2ldap(Tinebase_Model_Group $_group, array &$_ldapData) { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ENCRYPT ' . print_r($_ldapData, true)); } if (isset($_ldapData['objectclass'])) { $_ldapData['objectclass'] = array_unique(array_merge($_ldapData['objectclass'], $this->_requiredObjectClass)); } if (isset($_ldapData['gidnumber'])) { $gidNumber = $_ldapData['gidnumber']; } else { $gidNumber = $this->_getGidNumber($_group->getId()); } // when we try to add a group, $_group has no id which leads to Tinebase_Exception_InvalidArgument in $this->_getGroupMetaData try { $metaData = $this->_getGroupMetaData($_group); } catch (Tinebase_Exception_InvalidArgument $teia) { $metaData = array(); } if (!isset($metaData['sambasid'])) { $_ldapData['sambasid'] = $this->_options[Tinebase_Group_Ldap::PLUGIN_SAMBA]['sid'] . '-' . (2 * $gidNumber + 1001); $_ldapData['sambagrouptype'] = 2; } $_ldapData['displayname'] = $_group->name; }
/** * updates an existing group in sync backend * * @param Tinebase_Model_Group $_group * * @return Tinebase_Model_Group */ public function updateGroupInSyncBackend(Tinebase_Model_Group $_group) { if ($this->isDisabledBackend() || $this->isReadOnlyBackend()) { return $_group; } $metaData = $this->_getMetaData($_group->getId()); $dn = $metaData['dn']; $ldapData = array('cn' => $_group->name, 'description' => $_group->description, 'objectclass' => $metaData['objectclass']); foreach ($this->_plugins as $plugin) { $plugin->inspectUpdateGroup($_group, $ldapData); } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' $dn: ' . $dn); } if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' $ldapData: ' . print_r($ldapData, true)); } // rename? $newDn = "cn={$ldapData['cn']},{$this->_options['groupsDn']}"; if ($newDn != $dn) { $this->_ldap->rename($dn, $newDn); } // remove cn as samba forbids updating this // 0x43 (Operation not allowed on RDN; 00002016: Modify of RDN 'CN' on CN=...,CN=Users,DC=example,DC=org // not permitted, must use 'rename' operation instead unset($ldapData['cn']); $this->getLdap()->update($dn, $ldapData); $group = $this->getGroupByIdFromSyncBackend($_group); return $group; }
/** * update existing group * * @param Tinebase_Model_Group $_group * @return Tinebase_Model_Group */ public function update(Tinebase_Model_Group $_group) { $this->checkRight('MANAGE_ACCOUNTS'); // update default user group if name has changed $oldGroup = Tinebase_Group::getInstance()->getGroupById($_group->getId()); $defaultGroupName = Tinebase_User::getBackendConfiguration(Tinebase_User::DEFAULT_USER_GROUP_NAME_KEY); if ($oldGroup->name == $defaultGroupName && $oldGroup->name != $_group->name) { Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . ' Updated default group name: ' . $oldGroup->name . ' -> ' . $_group->name); Tinebase_User::setBackendConfiguration($_group->name, Tinebase_User::DEFAULT_USER_GROUP_NAME_KEY); Tinebase_User::saveBackendConfiguration(); } $transactionId = Tinebase_TransactionManager::getInstance()->startTransaction(Tinebase_Core::getDb()); if (Tinebase_Application::getInstance()->isInstalled('Addressbook') === true) { $_group->list_id = $oldGroup->list_id; $list = $this->createOrUpdateList($_group); $_group->list_id = $list->getId(); } $group = Tinebase_Group::getInstance()->updateGroup($_group); Tinebase_Group::getInstance()->setGroupMembers($group->getId(), $_group->members); Tinebase_TransactionManager::getInstance()->commitTransaction($transactionId); $event = new Admin_Event_UpdateGroup(); $event->group = $group; Tinebase_Event::fireEvent($event); return $group; }
/** * updates an existing group * * @param Tinebase_Model_Group $_account * @return Tinebase_Model_Group */ public function updateGroup(Tinebase_Model_Group $_group) { $dn = $this->_getDn($_group->getId()); $data = array('cn' => $_group->name, 'description' => $_group->description); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' $dn: ' . $dn); } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' $data: ' . print_r($data, true)); } $this->_ldap->update($dn, $data); return $this->getGroupById($_group->getId()); }
/** * updates an existing group in sync backend * * @param Tinebase_Model_Group $_group * * @return Tinebase_Model_Group */ public function updateGroupInSyncBackend(Tinebase_Model_Group $_group) { if ($this->_isReadOnlyBackend) { return; } $metaData = $this->_getMetaData($_group->getId()); $dn = $metaData['dn']; $ldapData = array('cn' => $_group->name, 'description' => $_group->description, 'objectclass' => $metaData['objectclass']); foreach ($this->_plugins as $plugin) { $plugin->inspectUpdateGroup($_group, $ldapData); } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' $dn: ' . $dn); } if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' $ldapData: ' . print_r($ldapData, true)); } $this->_ldap->update($dn, $ldapData); $group = $this->getGroupByIdFromSyncBackend($_group); return $group; }