Example #1
0
 /**
  * import the accounts from eGroupWare 1.4
  *
  * @todo add primary group or use Admin_Controller_User::getInstance()->create
  * @todo import user password
  */
 protected function importAccounts()
 {
     $this->_log->INFO('start importing egw users');
     $select = $this->_egwDb->select()->from(array('accounts' => 'egw_accounts'))->joinLeft(array('contacts' => 'egw_addressbook'), $this->_egwDb->quoteIdentifier('accounts.account_id') . ' = ' . $this->_egwDb->quoteIdentifier('contacts.account_id'))->where($this->_egwDb->quoteInto($this->_egwDb->quoteIdentifier('accounts.account_type') . ' = ?', 'u'));
     $accounts = $this->_egwDb->fetchAll($select, NULL, Zend_Db::FETCH_OBJ);
     foreach ($accounts as $account) {
         $user = new Tinebase_Model_FullUser(array('accountId' => $account->account_id, 'accountLoginName' => $account->account_lid, 'accountLastLogin' => $account->account_lastlogin > 0 ? new Tinebase_DateTime($account->account_lastlogin) : NULL, 'accountLastLoginfrom' => $account->account_lastloginfrom, 'accountLastPasswordChange' => $account->account_lastpwd_change > 0 ? new Tinebase_DateTime($account->account_lastpwd_change) : NULL, 'accountStatus' => $account->account_status == 'A' ? 'enabled' : 'disabled', 'accountExpires' => $account->account_expires > 0 ? new Tinebase_DateTime($account->account_expires) : NULL, 'accountPrimaryGroup' => abs($account->account_primary_group), 'accountLastName' => $account->n_family ? $account->n_family : 'Lastname', 'accountFirstName' => $account->n_given ? $account->n_given : 'Firstname', 'accountEmailAddress' => isset($account->email) ? $account->email : $account->contact_email));
         $this->_log->DEBUG(__METHOD__ . '::' . __LINE__ . ' user: '******'accountId', $user->accountId);
             $user = Tinebase_User::getInstance()->updateUser($user);
         } catch (Tinebase_Exception_NotFound $ten) {
             $user = Tinebase_User::getInstance()->addUser($user);
         }
         // (re)set password
         Tinebase_User::getInstance()->setPassword($user, $account->account_pwd, FALSE);
         // plase user in his groups
         Tinebase_Group::getInstance()->addGroupMember($user->accountPrimaryGroup, $user);
     }
     $this->_log->NOTICE('imported ' . count($accounts) . ' users from egw');
 }
 /**
  * add new member to course
  * 
  * @param Courses_Model_Course $course
  * @param Tinebase_Model_FullUser $user
  * @return Tinebase_Model_FullUser
  * 
  * @todo use importMembers() here to avoid duplication
  */
 public function createNewMember(Courses_Model_Course $course, Tinebase_Model_FullUser $user)
 {
     $this->checkRight(Courses_Acl_Rights::ADD_NEW_USER);
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Creating new member for ' . $course->name);
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($course->toArray(), TRUE));
     }
     $password = $user->applyOptionsAndGeneratePassword($this->_getNewUserConfig($course));
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($user->toArray(), TRUE));
     }
     $newMember = $this->_userController->create($user, $password, $password);
     // add to default group and manage access group for user
     $this->_groupController->addGroupMember(Tinebase_Group::getInstance()->getDefaultGroup()->getId(), $newMember->getId());
     $this->_manageAccessGroups(array($newMember->getId()), $course);
     $this->_addToStudentGroup(array($newMember->getId()));
     return $newMember;
 }
 /**
  * import contactdata(phone, address, fax, birthday. photo)
  * 
  * @param Tinebase_Model_FullUser $syncedUser
  * @param array $options
  */
 public static function syncContactData($syncedUser, $options)
 {
     if (!Tinebase_Config::getInstance()->get(Tinebase_Config::SYNC_USER_CONTACT_DATA, true) || !isset($options['syncContactData']) || !$options['syncContactData'] || !Tinebase_Application::getInstance()->isInstalled('Addressbook') || $syncedUser->visibility === Tinebase_Model_FullUser::VISIBILITY_HIDDEN) {
         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
             Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Contact data sync disabled');
         }
         return;
     }
     $addressbook = Addressbook_Backend_Factory::factory(Addressbook_Backend_Factory::SQL);
     try {
         $contact = $addressbook->getByUserId($syncedUser->getId());
         $originalContact = clone $contact;
         if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
             Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' user: '******'::' . __LINE__ . ' new contact: ' . print_r($contact->toArray(), true) . ' orig contact:' . print_r($originalContact->toArray(), true));
         }
         // TODO allow to diff jpegphoto, too / maybe this should only be done when called via CLI/cronjob
         $diff = $contact->diff($originalContact, array('jpegphoto'));
         if (!$diff->isEmpty() || $originalContact->jpegphoto == 0 && !empty($contact->jpegphoto)) {
             // add modlog info
             Tinebase_Timemachine_ModificationLog::setRecordMetaData($contact, 'update');
             if ($contact->container_id !== null) {
                 Tinebase_Container::getInstance()->increaseContentSequence($contact->container_id);
             }
             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                 Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Updating contact data for user ' . $syncedUser->accountLoginName);
             }
             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                 Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Diff: ' . print_r($diff->toArray(), true));
             }
             $addressbook->update($contact);
         } else {
             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                 Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' User contact is up to date.');
             }
         }
     } catch (Addressbook_Exception_NotFound $aenf) {
         self::createContactForSyncedUser($syncedUser);
         $syncedUser = Tinebase_User::getInstance()->updateUserInSqlBackend($syncedUser);
     } catch (Tinebase_Exception_NotFound $tenf) {
         if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) {
             Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' Contact information seems to be missing in sync backend');
         }
         Tinebase_Exception::log($tenf);
     }
 }
 /**
  * create user
  *
  * @param  Tinebase_Model_FullUser  $_account           the account
  * @param  string                     $_password           the new password
  * @param  string                     $_passwordRepeat  the new password again
  * @return Tinebase_Model_FullUser
  */
 public function create(Tinebase_Model_FullUser $_user, $_password, $_passwordRepeat)
 {
     $this->checkRight('MANAGE_ACCOUNTS');
     // avoid forging accountId, gets created in backend
     unset($_user->accountId);
     if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) {
         Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . ' Create new user ' . $_user->accountLoginName);
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($_user->toArray(), TRUE));
     }
     $this->_checkLoginNameExistance($_user);
     $this->_checkLoginNameLength($_user);
     $this->_checkPrimaryGroupExistance($_user);
     if ($_password != $_passwordRepeat) {
         throw new Admin_Exception("Passwords don't match.");
     } else {
         if (empty($_password)) {
             $_password = '';
             $_passwordRepeat = '';
         }
     }
     Tinebase_User::getInstance()->checkPasswordPolicy($_password, $_user);
     try {
         $transactionId = Tinebase_TransactionManager::getInstance()->startTransaction(Tinebase_Core::getDb());
         if (Tinebase_Application::getInstance()->isInstalled('Addressbook') === true) {
             $contact = $this->createOrUpdateContact($_user);
             $_user->contact_id = $contact->getId();
         }
         Tinebase_Timemachine_ModificationLog::setRecordMetaData($_user, 'create');
         $user = $this->_userBackend->addUser($_user);
         // make sure primary groups is in the list of groupmemberships
         $groups = array_unique(array_merge(array($user->accountPrimaryGroup), (array) $_user->groups));
         Admin_Controller_Group::getInstance()->setGroupMemberships($user, $groups);
         Tinebase_TransactionManager::getInstance()->commitTransaction($transactionId);
     } catch (Exception $e) {
         Tinebase_TransactionManager::getInstance()->rollBack();
         Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' ' . $e->getMessage());
         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
             Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . $e->getTraceAsString());
         }
         throw $e;
     }
     $event = new Admin_Event_AddAccount(array('account' => $user));
     Tinebase_Event::fireEvent($event);
     $this->setAccountPassword($user, $_password, $_passwordRepeat);
     return $user;
 }
 /**
  * returns array of raw email user data
  *
  * @param  Tinebase_Model_EmailUser $_user
  * @param  Tinebase_Model_EmailUser $_newUserProperties
  * @throws Tinebase_Exception_UnexpectedValue
  * @return array
  * 
  * @todo   validate domains of aliases too
  */
 protected function _recordToRawData(Tinebase_Model_FullUser $_user, Tinebase_Model_FullUser $_newUserProperties)
 {
     $rawData = array();
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($_newUserProperties->toArray(), true));
     }
     if (isset($_newUserProperties->smtpUser)) {
         foreach ($_newUserProperties->smtpUser as $key => $value) {
             $property = isset($this->_propertyMapping[$key]) || array_key_exists($key, $this->_propertyMapping) ? $this->_propertyMapping[$key] : false;
             if ($property) {
                 switch ($key) {
                     case 'emailAliases':
                         $rawData[$property] = array();
                         foreach ((array) $value as $address) {
                             if ($this->_checkDomain($address) === true) {
                                 $rawData[$property][] = $address;
                             }
                         }
                         break;
                     case 'emailForwards':
                         $rawData[$property] = is_array($value) ? $value : array();
                         break;
                     default:
                         $rawData[$property] = $value;
                         break;
                 }
             }
         }
     }
     if (!empty($_user->accountEmailAddress)) {
         $this->_checkDomain($_user->accountEmailAddress, TRUE);
     }
     $rawData[$this->_propertyMapping['emailAddress']] = $_user->accountEmailAddress;
     $rawData[$this->_propertyMapping['emailUserId']] = $_user->getId();
     $rawData[$this->_propertyMapping['emailUsername']] = $_user->accountLoginName;
     if (empty($rawData[$this->_propertyMapping['emailAddress']])) {
         $rawData[$this->_propertyMapping['emailAliases']] = null;
         $rawData[$this->_propertyMapping['emailForwards']] = null;
     }
     if (empty($rawData[$this->_propertyMapping['emailForwards']])) {
         $rawData[$this->_propertyMapping['emailForwardOnly']] = 0;
     }
     $rawData['domain'] = $this->_config['domain'];
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($rawData, true));
     }
     return $rawData;
 }
Example #6
0
 /**
  * add one record
  *
  * @param   Tinebase_Record_Interface $_record
  * @return  Tinebase_Record_Interface
  */
 public function create(Tinebase_Record_Interface $_record)
 {
     $course = parent::create($_record);
     // add teacher account
     $i18n = Tinebase_Translation::getTranslation('Courses');
     $courseName = strtolower($course->name);
     $loginName = strtolower($i18n->_('teacher') . '-' . $course->name);
     $schoolName = strtolower(Tinebase_Department::getInstance()->get($course->type)->name);
     $account = new Tinebase_Model_FullUser(array('accountLoginName' => $loginName, 'accountLoginShell' => '/bin/false', 'accountStatus' => 'enabled', 'accountPrimaryGroup' => $course->group_id, 'accountLastName' => $i18n->_('Teacher'), 'accountDisplayName' => $course->name . ' ' . $i18n->_('Teacher Account'), 'accountFirstName' => $course->name, 'accountExpires' => NULL, 'accountEmailAddress' => isset($this->_config->domain) && !empty($this->_config->domain) ? $loginName . '@' . $this->_config->domain : '', 'accountHomeDirectory' => isset($this->_config->basehomedir) ? $this->_config->basehomedir . $schoolName . '/' . $courseName . '/' . $loginName : ''));
     if (isset($this->_config->samba)) {
         $samUser = new Tinebase_Model_SAMUser(array('homePath' => $this->_config->samba->basehomepath . $loginName, 'homeDrive' => $this->_config->samba->homedrive, 'logonScript' => $courseName . $this->_config->samba->logonscript_postfix_teacher, 'profilePath' => $this->_config->samba->baseprofilepath . $schoolName . '\\' . $courseName . '\\' . $loginName));
         $account->sambaSAM = $samUser;
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Created teacher account for course ' . $course->name . ': ' . print_r($account->toArray(), true));
     }
     #$event = new Courses_Event_BeforeAddTeacher($account, $course);
     #Tinebase_Event::fireEvent($event);
     $password = $this->_config->get('teacher_password', $account->accountLoginName);
     $account = Admin_Controller_User::getInstance()->create($account, $password, $password);
     // add to teacher group if available
     if (isset($this->_config->teacher_group) && !empty($this->_config->teacher_group)) {
         Admin_Controller_Group::getInstance()->addGroupMember($this->_config->teacher_group, $account->getId());
     }
     // add to students group if available
     if (isset($this->_config->students_group) && !empty($this->_config->students_group)) {
         Admin_Controller_Group::getInstance()->addGroupMember($this->_config->students_group, $account->getId());
     }
     return $course;
 }