예제 #1
0
 /**
  * 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());
         }
     }
 }
예제 #6
0
 /**
  * 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);
 }