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(); }