public function execute() { global $wgUser, $wgRequest; $this->getMain()->requestWriteMode(); if (wfReadOnly()) { $this->dieUsage('The wiki is in read-only mode', 'readonly'); } $params = $this->extractRequestParams(); $ur = new UserrightsPage($wgRequest); $allowed = $ur->changeableGroups(); $res = array(); $u = $ur->fetchUser_real($params['user']); if (is_array($u)) { switch ($u[0]) { case UserrightsPage::FETCHUSER_NO_INTERWIKI: $this->dieUsage("You don't have permission to change users' rights on other wikis", 'nointerwiki'); case UserrightsPage::FETCHUSER_NO_DATABASE: $this->dieUsage("Database ``{$u[1]}'' does not exist or is not local", 'nosuchdatabase'); case UserrightsPage::FETCHUSER_NO_USER: $this->dieUsage("You specified an empty username, or none at all", 'emptyuser'); case UserrightsPage::FETCHUSER_NOSUCH_USERID: $this->dieUsage("There is no user with ID ``{$u[1]}''", 'nosuchuserid'); case UserrightsPage::FETCHUSER_NOSUCH_USERNAME: $this->dieUsage("There is no user with username ``{$u[1]}''", 'nosuchusername'); default: $this->dieDebug(__METHOD__, "UserrightsPage::fetchUser_real() returned an unknown error ({$u[0]})"); } } $curgroups = $u->getGroups(); if ($params['listgroups']) { $res['user'] = $u->getName(); $res['allowedgroups'] = $allowed; $res['ingroups'] = $curgroups; $this->getResult()->setIndexedTagName($res['ingroups'], 'group'); $this->getResult()->setIndexedTagName($res['allowedgroups']['add'], 'group'); $this->getResult()->setIndexedTagName($res['allowedgroups']['remove'], 'group'); } if ($params['gettoken']) { $res['changerightstoken'] = $wgUser->editToken($u->getName()); $this->getResult()->addValue(null, $this->getModuleName(), $res); return; } if (empty($params['addto']) && empty($params['rmfrom'])) { $this->dieUsage('At least one of the addto and rmfrom parameters must be set', 'noaddrm'); } if (is_null($params['token'])) { $this->dieUsage('The token parameter must be set', 'notoken'); } if (!$wgUser->matchEditToken($params['token'], $u->getName())) { $this->dieUsage('Invalid token', 'badtoken'); } $dbw = wfGetDb(DB_MASTER); $dbw->begin(); $ur->saveUserGroups($u, $params['rmfrom'], $params['addto'], $params['reason']); $dbw->commit(); $res['user'] = $u->getName(); $res['addedto'] = (array) $params['addto']; $res['removedfrom'] = (array) $params['rmfrom']; $res['reason'] = $params['reason']; $this->getResult()->setIndexedTagName($res['addedto'], 'group'); $this->getResult()->setIndexedTagName($res['removedfrom'], 'group'); $this->getResult()->addValue(null, $this->getModuleName(), $res); }