/** * import the groups from eGroupWare 1.4 * */ protected function importGroups() { $this->_log->INFO('start importing egw groups'); $select = $this->_egwDb->select()->from(array('accounts' => 'egw_accounts'))->where($this->_egwDb->quoteInto($this->_egwDb->quoteIdentifier('accounts.account_type') . ' = ?', 'g')); $groups = $this->_egwDb->fetchAll($select, NULL, Zend_Db::FETCH_OBJ); foreach ($groups as $group) { $groupObject = new Tinebase_Model_Group(array('id' => abs($group->account_id), 'name' => $group->account_lid, 'description' => 'imported by Tine 2.0 group importer')); $this->_log->DEBUG(__METHOD__ . '::' . __LINE__ . ' add group: ' . print_r($groupObject->toArray(), TRUE)); try { Tinebase_Group::getInstance()->addGroup($groupObject); } catch (Exception $e) { $this->_log->WARN(__METHOD__ . '::' . __LINE__ . ' Could not add group: ' . $groupObject->name . ' Error message: ' . $e->getMessage()); } } $this->_log->NOTICE('imported ' . count($groups) . ' groups from egw'); }
/** * save course with corresponding group * * @param Courses_Model_Course $course * @param Tinebase_Model_Group $group * @return Courses_Model_Course * * @todo this should be moved to normal create/update (inspection) functions */ public function saveCourseAndGroup(Courses_Model_Course $course, Tinebase_Model_Group $group) { $i18n = Tinebase_Translation::getTranslation('Courses'); $groupNamePrefix = $i18n->_('Course'); $groupNamePrefix = is_array($groupNamePrefix) ? $groupNamePrefix[0] : $groupNamePrefix; $group->name = $groupNamePrefix . '-' . $course->name; if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Saving course ' . $course->name . ' with group ' . $group->name); } if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($group->toArray(), true)); } if (empty($group->id)) { $savedGroup = $this->_groupController->create($group); $course->group_id = $savedGroup->getId(); $savedRecord = $this->create($course); } else { $savedRecord = $this->update($course); $currentMembers = $this->_groupController->getGroupMembers($course->group_id); $newCourseMembers = array_diff((array) $group->members, $currentMembers); if (count($newCourseMembers) > 0) { $this->addCourseMembers($course, $newCourseMembers); } $deletedAccounts = array_diff($currentMembers, (array) $group->members); // delete members which got removed from course $this->_userController->delete($deletedAccounts); } $groupMembers = Tinebase_Group::getInstance()->getGroupMembers($course->group_id); // add/remove members to/from internet/fileserver group if (!empty($groupMembers)) { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Found ' . count($groupMembers) . ' group members'); } $this->_manageAccessGroups($groupMembers, $savedRecord); // $this->_manageAccessGroups($group->members, $savedRecord, 'fileserver'); } else { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' No group members found.'); } } return $savedRecord; }
/** * create or update list in addressbook sql backend * * @param Tinebase_Model_Group $group * @return Addressbook_Model_List */ public function createOrUpdateByGroup(Tinebase_Model_Group $group) { if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($group->toArray(), TRUE)); } try { if (empty($group->list_id)) { $list = $this->_backend->getByGroupName($group->name); if (!$list) { // jump to catch block => no list_id provided and no existing list for group found throw new Tinebase_Exception_NotFound('list_id is empty'); } $group->list_id = $list->getId(); } else { $list = $this->_backend->get($group->list_id); } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Update list ' . $group->name); } $list->name = $group->name; $list->description = $group->description; $list->email = $group->email; $list->type = Addressbook_Model_List::LISTTYPE_GROUP; $list->container_id = empty($group->container_id) ? $this->_getDefaultInternalAddressbook() : $group->container_id; $list->members = isset($group->members) ? $this->_getContactIds($group->members) : array(); // add modlog info Tinebase_Timemachine_ModificationLog::setRecordMetaData($list, 'update'); $list = $this->_backend->update($list); $list = $this->get($list->getId()); } catch (Tinebase_Exception_NotFound $tenf) { $list = $this->createByGroup($group); } return $list; }
/** * create a new group in sql backend * * @param Tinebase_Model_Group $_group * * @return Tinebase_Model_Group * @throws Tinebase_Exception_Record_Validation */ public function addGroupInSqlBackend(Tinebase_Model_Group $_group) { if (!$_group->isValid()) { throw new Tinebase_Exception_Record_Validation('invalid group object'); } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Creating new group ' . $_group->name); } if (!isset($_group->id)) { $groupId = $_group->generateUID(); $_group->setId($groupId); } if (empty($_group->list_id)) { $_group->visibility = 'hidden'; $_group->list_id = null; } $data = $_group->toArray(); unset($data['members']); unset($data['container_id']); $this->groupsTable->insert($data); return $_group; }
/** * import groups from typo3 * * @return void */ public function importGroups() { $select = $this->_t3db->select()->from('be_groups'); //->where('deleted = 0')) $groups = $select->query()->fetchAll(Zend_Db::FETCH_ASSOC); foreach ($groups as $group) { $groupObject = new Tinebase_Model_Group(array('id' => $group['uid'], 'name' => $group['title'], 'description' => null)); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' add group: ' . print_r($groupObject->toArray(), TRUE)); } try { parent::addGroup($groupObject); } catch (Exception $e) { Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' Could not add group: ' . $groupObject->name . ' Error message: ' . $e->getMessage()); } } }
/** * creates/updates a record * * @todo move non api specific stuff to controller! * * @param array $recordData * @return array created/updated record */ public function saveCourse($recordData) { // create course and group from json data $course = new Courses_Model_Course(array(), TRUE); $course->setFromJsonInUsersTimezone($recordData); $group = new Tinebase_Model_Group(array(), TRUE); $group->setFromJsonInUsersTimezone($recordData); $i18n = Tinebase_Translation::getTranslation('Courses'); $groupNamePrefix = $i18n->_('Course'); $groupNamePrefix = is_array($groupNamePrefix) ? $groupNamePrefix[0] : $groupNamePrefix; $group->name = $groupNamePrefix . '-' . $course->name; if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($group->toArray(), true)); } if (empty($group->id)) { $savedGroup = $this->_groupController->create($group); $course->group_id = $savedGroup->getId(); $savedRecord = $this->_controller->create($course); } else { $savedRecord = $this->_controller->update($course); $currentMembers = $this->_groupController->getGroupMembers($course->group_id); $newCourseMembers = array_diff((array) $group->members, $currentMembers); $this->_controller->addCourseMembers($course, $newCourseMembers); $deletedAccounts = array_diff($currentMembers, (array) $group->members); // delete members wich got removed from course Admin_Controller_User::getInstance()->delete($deletedAccounts); } // add/remove members to/from internet/fileserver group if (!empty($group->members)) { $this->_manageAccessGroups($group->members, $savedRecord->internet, 'internet'); $this->_manageAccessGroups($group->members, $savedRecord->fileserver, 'fileserver'); } return $this->_recordToJson($savedRecord); }