Example #1
0
 public function execute()
 {
     $params = $this->extractRequestParams();
     $user = $this->getUser();
     $form = new UserrightsPage();
     $r['user'] = $user->getName();
     list($r['added'], $r['removed']) = $form->doSaveUserGroups($user, (array) $params['add'], (array) $params['remove'], $params['reason']);
     $this->getResult()->setIndexedTagName($r['added'], 'group');
     $this->getResult()->setIndexedTagName($r['removed'], 'group');
     $this->getResult()->addValue(null, $this->getModuleName(), $r);
 }
Example #2
0
 public function execute()
 {
     $params = $this->extractRequestParams();
     // User already validated in call to getTokenSalt from Main
     $form = new UserrightsPage();
     $user = $form->fetchUser($params['user']);
     $r['user'] = $user->getName();
     list($r['added'], $r['removed']) = $form->doSaveUserGroups($user, (array) $params['add'], (array) $params['remove'], $params['reason']);
     $this->getResult()->setIndexedTagName($r['added'], 'group');
     $this->getResult()->setIndexedTagName($r['removed'], 'group');
     $this->getResult()->addValue(null, $this->getModuleName(), $r);
 }
 function doPOST()
 {
     global $wgUser, $wgAuth;
     switch ($this->action) {
         default:
             throw new InvalidPOSTParamException(wfMsg('uadm-formsubmissionerrormsg'));
         case 'emailwelcomepreview':
             $this->pwdaction = 'emailwelcome';
             $newParams = array('preview' => 'welcome') + $this->mParams;
             $newParams = array_intersect_key($newParams, $this->getParamsGET());
             return $this->getURL($newParams);
         case 'adduser':
             break;
     }
     $this->validatePOSTParams();
     if ($this->domain != 'local' && $this->domain != '') {
         if (!$wgAuth->canCreateAccounts()) {
             return $this->getPOSTRedirectURL(false, wfMsg('uadm-createextacctfailmsg'));
         }
     }
     $logRights = new LogPage('rights');
     $user = new User();
     $user->setName($wgAuth->getCanonicalName($this->username));
     $user->setRealName($this->realname);
     $user->setEmail($this->email);
     $successWikiText = array();
     $successWikiText[] = wfMsg('uadm-newusersuccessmsg', $this->username);
     $userPassword = '';
     switch ($this->pwdaction) {
         case 'manual':
             try {
                 $user->setPassword($this->password1);
                 $userPassword = $this->password1;
             } catch (PasswordError $pe) {
                 return $this->getPOSTRedirectURL(false, wfMsg('uadm-passworderrormsg') . $pe->getText());
             }
             $successWikiText[] = wfMsg('uadm-passwordchangesuccessmsg', $this->username);
             break;
         case 'emailwelcome':
             $result = self::mailWelcomeAndPassword($user);
             if ($result->isGood()) {
                 return $this->getPOSTRedirectURL(false, wfMsg('uadm-mailerror', $result->getMessage()));
             }
             $successWikiText[] = wfMsg('uadm-welcomeemailsuccessmsg', $this->username, $this->email);
             break;
     }
     $user->setToken();
     $wgAuth->initUser($user, false);
     $abortError = '';
     if (!wfRunHooks('AbortNewAccount', array($user, &$abortError))) {
         return $this->getPOSTRedirectURL(false, wfMsg('uadm-hookblocknewusermsg', $abortError));
     }
     if (!$wgAuth->addUser($user, $userPassword, $this->email, $this->realname)) {
         return $this->getPOSTRedirectURL(false, wfMsg('uadm-wgauthaddfailmsg', $abortError));
     }
     $user->addToDatabase();
     $user->addNewUserLogEntry();
     if (count($this->groups) > 0) {
         $userrightsPage = new UserrightsPage();
         $userrightsPage->doSaveUserGroups($user, $this->groups, array(), $this->newuserreasonmsg);
         wfRunHooks('UserRights', array($user, $add, $remove));
         $successWikiText[] = wfMsg('uadm-changestogroupsuccessmsg', $this->username);
     }
     $successWikiText = implode('<br/>', $successWikiText);
     wfRunHooks('AddNewAccount', array($user, true));
     $ssUpdate = new SiteStatsUpdate(0, 0, 0, 0, 1);
     $ssUpdate->doUpdate();
     # password log entry
     switch ($this->pwdaction) {
         case 'manual':
             $logRights->addEntry('uadm-changeduserpasswordlog', $user->getUserPage(), $this->newuserreasonmsg, array());
             break;
         case 'emailwelcome':
             $logRights->addEntry('uadm-emailwelcomelog', $user->getUserPage(), $this->newuserreasonmsg, array());
             break;
     }
     // Redirect to EditUser special page instead of AddUser to allow editing of
     // user just added
     return $this->getSpecialPageURL('EditUser', $this->username, array('statusmsg' => base64_encode($successWikiText), 'statusok' => true, 'returnto' => $this->returnto));
 }
 function doPOST()
 {
     global $wgUser, $wgAuth;
     switch ($this->action) {
         case 'emailpwdpreview':
             return $this->getURL(array('preview' => 'password', 'pwdaction' => 'email') + $this->mParams);
         case 'emailwelcomepreview':
             return $this->getURL(array('preview' => 'welcome', 'pwdaction' => 'emailwelcome') + $this->mParams);
         default:
             throw new InvalidPOSTParamException(wfMsg('uadm-formsubmissionerrormsg'));
         case 'saveuser':
             break;
     }
     $user = $this->validatePOSTParams();
     $log = new LogPage('rights');
     $changesMade = false;
     $userName = $user->getName();
     // Apply parameters that have changed
     if ($user->getName() != $this->username) {
         $oldName = $user->getName();
         $user->setName($wgAuth->getCanonicalName($this->username));
         $newName = $user->getName();
         $log->addEntry('uadm-changedusernamelog', $user->getUserPage(), $this->reason, array($this->userid, $oldName, $newName));
         $changesMade = true;
     }
     if ($user->getRealName() != $this->realname) {
         $oldRealName = $user->getRealName();
         $user->setRealName($this->realname);
         $newRealName = $user->getRealName();
         $log->addEntry('uadm-changeduserrealnamelog', $user->getUserPage(), $this->reason, array($oldRealName, $newRealName));
         $changesMade = true;
     }
     if ($user->getEmail() != $this->email) {
         $oldEmail = $user->getEmail();
         $user->setEmail($this->email);
         $newEmail = $user->getEmail();
         $log->addEntry('uadm-changeduseremaillog', $user->getUserPage(), $this->reason, array($oldEmail, $newEmail));
         $changesMade = true;
     }
     $successWikiText = array();
     if ($changesMade) {
         $successWikiText[] = wfMsg('uadm-changestousersuccessmsg', $this->username);
     }
     switch ($this->pwdaction) {
         case 'manual':
             try {
                 $user->setPassword($this->password1);
                 $changesMade = true;
             } catch (PasswordError $pe) {
                 return $this->getPOSTRedirectURL(false, wfMsg('uadm-passworderrormsg') . $pe->getText());
             }
             $log->addEntry('uadm-changeduserpasswordlog', $user->getUserPage(), $this->reason, array());
             $successWikiText[] = wfMsg('uadm-passwordchangesuccessmsg', $this->username);
             break;
         case 'email':
             $result = self::mailPassword($user);
             if ($result->isGood()) {
                 return $this->getPOSTRedirectURL(false, wfMsg('uadm-mailerrormsg', $result->getMessage()));
             }
             $changesMade = true;
             $log->addEntry('uadm-emailpasswordlog', $user->getUserPage(), $this->reason, array());
             $successWikiText[] = wfMsg('uadm-passwordemailsuccessmsg', $this->username, $this->email);
             break;
         case 'emailwelcome':
             $result = self::mailWelcomeAndPassword($user);
             if ($result->isGood()) {
                 return $this->getPOSTRedirectURL(false, wfMsg('uadm-mailerrormsg', $result->getMessage()));
             }
             $changesMade = true;
             $log->addEntry('uadm-emailwelcomelog', $user->getUserPage(), $this->reason, array());
             $successWikiText[] = wfMsg('uadm-welcomeemailsuccessmsg', $this->username, $this->email);
             break;
     }
     if ($changesMade) {
         if (!$wgAuth->updateExternalDB($user)) {
             return $this->getPOSTRedirectURL(false, wfMsg('uadm-externalupdateerrormsg'));
         }
         $user->saveSettings();
     }
     # Update groups if needed
     $currentGroups = $user->getGroups();
     $remove = array();
     $add = array();
     foreach ($currentGroups as $groupName) {
         if (!in_array($groupName, $this->groups)) {
             $remove[] = $groupName;
         }
     }
     foreach ($this->groups as $groupName) {
         if (!in_array($groupName, $currentGroups)) {
             $add[] = $groupName;
         }
     }
     if (count($remove) > 0 || count($add) > 0) {
         $userrightsPage = new UserrightsPage();
         $userrightsPage->doSaveUserGroups($user, $add, $remove, $this->reason);
         wfRunHooks('UserRights', array($user, $add, $remove));
         $successWikiText[] = wfMsg('uadm-changestogroupsuccessmsg', $this->username);
     }
     $successWikiText = implode('<br/>', $successWikiText);
     return $this->getPOSTRedirectURL(true, $successWikiText);
 }