X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/d7967d5e4460e08b6b258307afbca0596b18a3dd..refs/tags/mediawiki-1.15.5:/includes/api/ApiQueryUserInfo.php diff --git a/includes/api/ApiQueryUserInfo.php b/includes/api/ApiQueryUserInfo.php index a41b8679..e445c46e 100644 --- a/includes/api/ApiQueryUserInfo.php +++ b/includes/api/ApiQueryUserInfo.php @@ -30,8 +30,8 @@ if (!defined('MEDIAWIKI')) { /** * Query module to get information about the currently logged-in user - * - * @addtogroup API + * + * @ingroup API */ class ApiQueryUserInfo extends ApiQueryBase { @@ -40,50 +40,101 @@ class ApiQueryUserInfo extends ApiQueryBase { } public function execute() { - - global $wgUser; - $params = $this->extractRequestParams(); $result = $this->getResult(); + $r = array(); + + if (!is_null($params['prop'])) { + $this->prop = array_flip($params['prop']); + } else { + $this->prop = array(); + } + $r = $this->getCurrentUserInfo(); + $result->addValue("query", $this->getModuleName(), $r); + } + protected function getCurrentUserInfo() { + global $wgUser; + $result = $this->getResult(); $vals = array(); + $vals['id'] = intval($wgUser->getId()); $vals['name'] = $wgUser->getName(); - if( $wgUser->isAnon() ) $vals['anon'] = ''; - - if (!is_null($params['prop'])) { - $prop = array_flip($params['prop']); - if (isset($prop['blockinfo'])) { - if ($wgUser->isBlocked()) { - $vals['blockedby'] = User::whoIs($wgUser->blockedBy()); - $vals['blockreason'] = $wgUser->blockedFor(); - } - } - if (isset($prop['hasmsg']) && $wgUser->getNewtalk()) { - $vals['messages'] = ''; - } - if (isset($prop['groups'])) { - $vals['groups'] = $wgUser->getGroups(); - $result->setIndexedTagName($vals['groups'], 'g'); // even if empty - } - if (isset($prop['rights'])) { - $vals['rights'] = $wgUser->getRights(); - $result->setIndexedTagName($vals['rights'], 'r'); // even if empty + if($wgUser->isAnon()) + $vals['anon'] = ''; + if (isset($this->prop['blockinfo'])) { + if ($wgUser->isBlocked()) { + $vals['blockedby'] = User::whoIs($wgUser->blockedBy()); + $vals['blockreason'] = $wgUser->blockedFor(); } } + if (isset($this->prop['hasmsg']) && $wgUser->getNewtalk()) { + $vals['messages'] = ''; + } + if (isset($this->prop['groups'])) { + $vals['groups'] = $wgUser->getGroups(); + $result->setIndexedTagName($vals['groups'], 'g'); // even if empty + } + if (isset($this->prop['rights'])) { + // User::getRights() may return duplicate values, strip them + $vals['rights'] = array_values(array_unique($wgUser->getRights())); + $result->setIndexedTagName($vals['rights'], 'r'); // even if empty + } + if (isset($this->prop['options'])) { + $vals['options'] = (is_null($wgUser->mOptions) ? User::getDefaultOptions() : $wgUser->mOptions); + } + if (isset($this->prop['preferencestoken']) && is_null($this->getMain()->getRequest()->getVal('callback'))) { + $vals['preferencestoken'] = $wgUser->editToken(); + } + if (isset($this->prop['editcount'])) { + $vals['editcount'] = intval($wgUser->getEditCount()); + } + if (isset($this->prop['ratelimits'])) { + $vals['ratelimits'] = $this->getRateLimits(); + } + if (isset($this->prop['email'])) { + $vals['email'] = $wgUser->getEmail(); + $auth = $wgUser->getEmailAuthenticationTimestamp(); + if(!is_null($auth)) + $vals['emailauthenticated'] = wfTimestamp(TS_ISO_8601, $auth); + } + return $vals; + } - if (!empty($params['option'])) { - foreach( $params['option'] as $option ) { - if (empty($option)) - $this->dieUsage('Empty value is not allowed for the option parameter', 'option'); - $vals['options'][$option] = $wgUser->getOption($option); - } + protected function getRateLimits() + { + global $wgUser, $wgRateLimits; + if(!$wgUser->isPingLimitable()) + return array(); // No limits + + // Find out which categories we belong to + $categories = array(); + if($wgUser->isAnon()) + $categories[] = 'anon'; + else + $categories[] = 'user'; + if($wgUser->isNewBie()) + { + $categories[] = 'ip'; + $categories[] = 'subnet'; + if(!$wgUser->isAnon()) + $categories[] = 'newbie'; } - - $result->addValue(null, $this->getModuleName(), $vals); + $categories = array_merge($categories, $wgUser->getGroups()); + + // Now get the actual limits + $retval = array(); + foreach($wgRateLimits as $action => $limits) + foreach($categories as $cat) + if(isset($limits[$cat]) && !is_null($limits[$cat])) + { + $retval[$action][$cat]['hits'] = intval($limits[$cat][0]); + $retval[$action][$cat]['seconds'] = intval($limits[$cat][1]); + } + return $retval; } - protected function getAllowedParams() { + public function getAllowedParams() { return array ( 'prop' => array ( ApiBase :: PARAM_DFLT => NULL, @@ -93,28 +144,32 @@ class ApiQueryUserInfo extends ApiQueryBase { 'hasmsg', 'groups', 'rights', - )), - 'option' => array ( - ApiBase :: PARAM_DFLT => NULL, - ApiBase :: PARAM_ISMULTI => true, - ), + 'options', + 'preferencestoken', + 'editcount', + 'ratelimits', + 'email', + ) + ) ); } - protected function getParamDescription() { + public function getParamDescription() { return array ( 'prop' => array( 'What pieces of information to include', - ' blockinfo - tags if the user is blocked, by whom, and for what reason', - ' hasmsg - adds a tag "message" if user has pending messages', - ' groups - lists all the groups the current user belongs to', - ' rights - lists of all rights the current user has', - ), - 'option' => 'A list of user preference options to get', + ' blockinfo - tags if the current user is blocked, by whom, and for what reason', + ' hasmsg - adds a tag "message" if the current user has pending messages', + ' groups - lists all the groups the current user belongs to', + ' rights - lists of all rights the current user has', + ' options - lists all preferences the current user has set', + ' editcount - adds the current user\'s edit count', + ' ratelimits - lists all rate limits applying to the current user' + ) ); } - protected function getDescription() { + public function getDescription() { return 'Get information about the current user'; } @@ -122,12 +177,10 @@ class ApiQueryUserInfo extends ApiQueryBase { return array ( 'api.php?action=query&meta=userinfo', 'api.php?action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg', - 'api.php?action=query&meta=userinfo&uioption=rememberpassword', ); } public function getVersion() { - return __CLASS__ . ': $Id: ApiQueryUserInfo.php 24529 2007-08-01 20:11:29Z yurik $'; + return __CLASS__ . ': $Id: ApiQueryUserInfo.php 69579 2010-07-20 02:49:55Z tstarling $'; } } -