예제 #1
0
 public function saveData($aUserData)
 {
     if ($this->iUserId === null) {
         $oUser = new User();
     } else {
         $oUser = UserQuery::create()->findPk($this->iUserId);
     }
     $this->validate($aUserData, $oUser);
     if (!Flash::noErrors()) {
         throw new ValidationException();
     }
     $oUser->setUsername($aUserData['username']);
     $oUser->setFirstName($aUserData['first_name']);
     $oUser->setLastName($aUserData['last_name']);
     $oUser->setEmail($aUserData['email']);
     $oUser->setLanguageId($aUserData['language_id']);
     $oUser->setTimezone($aUserData['timezone']);
     //Password
     if ($aUserData['force_password_reset']) {
         $oUser->forcePasswordReset();
     } else {
         if ($aUserData['password'] !== '') {
             $oUser->setPassword($aUserData['password']);
             $oUser->setPasswordRecoverHint(null);
         }
     }
     //This also means the user’s an admin (or has the role “users”) because non-admins can only edit themselves
     if (!$oUser->isSessionUser()) {
         //Only admins may give or take admin rights, having the role “users” does not suffice
         if (Session::user()->getIsAdmin()) {
             $oUser->setIsAdmin($aUserData['is_admin']);
         }
         //Admin & inactive flags
         $oUser->setIsBackendLoginEnabled($oUser->getIsAdmin() || $aUserData['is_admin_login_enabled'] || $aUserData['is_backend_login_enabled']);
         $oUser->setIsAdminLoginEnabled($oUser->getIsAdmin() || $aUserData['is_admin_login_enabled']);
         $oUser->setIsInactive($aUserData['is_inactive']);
         //Groups
         foreach ($oUser->getUserGroupsRelatedByUserId() as $oUserGroup) {
             $oUserGroup->delete();
         }
         $aRequestedGroups = isset($aUserData['group_ids']) ? $aUserData['group_ids'] : array();
         foreach ($aRequestedGroups as $iGroupId) {
             if ($iGroupId === false) {
                 continue;
             }
             $oUserGroup = new UserGroup();
             $oUserGroup->setGroupId($iGroupId);
             $oUser->addUserGroupRelatedByUserId($oUserGroup);
         }
         //Roles
         foreach ($oUser->getUserRolesRelatedByUserId() as $oUserRole) {
             $oUserRole->delete();
         }
         $aRequestedRoles = isset($aUserData['role_keys']) ? !is_array($aUserData['role_keys']) ? array($aUserData['role_keys']) : $aUserData['role_keys'] : array();
         foreach ($aRequestedRoles as $sRoleKey) {
             if ($sRoleKey === false) {
                 continue;
             }
             $oUserRole = new UserRole();
             $oUserRole->setRoleKey($sRoleKey);
             $oUser->addUserRoleRelatedByUserId($oUserRole);
         }
     } else {
         //Set the new session language for the currently logged-in user
         Session::getSession()->setLanguage($oUser->getLanguageId());
     }
     return $oUser->save();
 }