X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiQueryUserInfo.php;h=cbb35aeb2a7e16e7dd303aa9ea5866d5be13ce36;hb=56c13312da77529e79c9222a048f94e1d753b7fc;hp=e5f38fe064076feefa97f81eb989ca4bc481eea7;hpb=19358606a17e4361594b65e6b93577e79e9c66a6;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiQueryUserInfo.php b/includes/api/ApiQueryUserInfo.php index e5f38fe064..cbb35aeb2a 100644 --- a/includes/api/ApiQueryUserInfo.php +++ b/includes/api/ApiQueryUserInfo.php @@ -1,11 +1,10 @@ @gmail.com + * Created on July 30, 2007 + * + * Copyright © 2007 Yuri Astrakhan @gmail.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,106 +18,216 @@ * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html + * + * @file */ -if (!defined('MEDIAWIKI')) { - // Eclipse helper - will be ignored in production - require_once ('ApiQueryBase.php'); -} - /** * Query module to get information about the currently logged-in user - * - * @addtogroup API + * + * @ingroup API */ class ApiQueryUserInfo extends ApiQueryBase { - public function __construct($query, $moduleName) { - parent :: __construct($query, $moduleName, 'ui'); + private $prop = array(); + + public function __construct( $query, $moduleName ) { + parent::__construct( $query, $moduleName, 'ui' ); } public function execute() { $params = $this->extractRequestParams(); $result = $this->getResult(); - $r = array(); - if (!is_null($params['prop'])) { - $this->prop = array_flip($params['prop']); - } else { - $this->prop = array(); + if ( !is_null( $params['prop'] ) ) { + $this->prop = array_flip( $params['prop'] ); } + $r = $this->getCurrentUserInfo(); - $result->addValue("query", $this->getModuleName(), $r); + $result->addValue( 'query', $this->getModuleName(), $r ); } - + protected function getCurrentUserInfo() { - global $wgUser; + global $wgHiddenPrefs; + $user = $this->getUser(); $result = $this->getResult(); $vals = array(); - $vals['id'] = $wgUser->getId(); - $vals['name'] = $wgUser->getName(); - - if( $wgUser->isAnon() ) $vals['anon'] = ''; - if (isset($this->prop['blockinfo'])) { - if ($wgUser->isBlocked()) { - $vals['blockedby'] = User::whoIs($wgUser->blockedBy()); - $vals['blockreason'] = $wgUser->blockedFor(); + $vals['id'] = intval( $user->getId() ); + $vals['name'] = $user->getName(); + + if ( $user->isAnon() ) { + $vals['anon'] = ''; + } + + if ( isset( $this->prop['blockinfo'] ) ) { + if ( $user->isBlocked() ) { + $vals['blockedby'] = User::whoIs( $user->blockedBy() ); + $vals['blockreason'] = $user->blockedFor(); } - } - if (isset($this->prop['hasmsg']) && $wgUser->getNewtalk()) { + } + + if ( isset( $this->prop['hasmsg'] ) && $user->getNewtalk() ) { $vals['messages'] = ''; } - if (isset($this->prop['groups'])) { - $vals['groups'] = $wgUser->getGroups(); - $result->setIndexedTagName($vals['groups'], 'g'); // even if empty + + if ( isset( $this->prop['groups'] ) ) { + $autolist = ApiQueryUsers::getAutoGroups( $user ); + + $vals['groups'] = array_merge( $autolist, $user->getGroups() ); + $result->setIndexedTagName( $vals['groups'], 'g' ); // even if empty + } + + if ( isset( $this->prop['implicitgroups'] ) ) { + $vals['implicitgroups'] = ApiQueryUsers::getAutoGroups( $user ); + $result->setIndexedTagName( $vals['implicitgroups'], 'g' ); // even if empty + } + + if ( isset( $this->prop['rights'] ) ) { + // User::getRights() may return duplicate values, strip them + $vals['rights'] = array_values( array_unique( $user->getRights() ) ); + $result->setIndexedTagName( $vals['rights'], 'r' ); // even if empty + } + + if ( isset( $this->prop['changeablegroups'] ) ) { + $vals['changeablegroups'] = $user->changeableGroups(); + $result->setIndexedTagName( $vals['changeablegroups']['add'], 'g' ); + $result->setIndexedTagName( $vals['changeablegroups']['remove'], 'g' ); + $result->setIndexedTagName( $vals['changeablegroups']['add-self'], 'g' ); + $result->setIndexedTagName( $vals['changeablegroups']['remove-self'], 'g' ); + } + + if ( isset( $this->prop['options'] ) ) { + $vals['options'] = $user->getOptions(); + } + + if ( isset( $this->prop['preferencestoken'] ) && + is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) + ) { + $vals['preferencestoken'] = $user->getEditToken( '', $this->getMain()->getRequest() ); + } + + if ( isset( $this->prop['editcount'] ) ) { + $vals['editcount'] = intval( $user->getEditCount() ); + } + + if ( isset( $this->prop['ratelimits'] ) ) { + $vals['ratelimits'] = $this->getRateLimits(); + } + + if ( isset( $this->prop['realname'] ) && !in_array( 'realname', $wgHiddenPrefs ) ) { + $vals['realname'] = $user->getRealName(); } - if (isset($this->prop['rights'])) { - $vals['rights'] = $wgUser->getRights(); - $result->setIndexedTagName($vals['rights'], 'r'); // even if empty + + if ( isset( $this->prop['email'] ) ) { + $vals['email'] = $user->getEmail(); + $auth = $user->getEmailAuthenticationTimestamp(); + if ( !is_null( $auth ) ) { + $vals['emailauthenticated'] = wfTimestamp( TS_ISO_8601, $auth ); + } } - if (isset($this->prop['options'])) { - $vals['options'] = (is_null($wgUser->mOptions) ? User::getDefaultOptions() : $wgUser->mOptions); + + if ( isset( $this->prop['registrationdate'] ) ) { + $regDate = $user->getRegistration(); + if ( $regDate !== false ) { + $vals['registrationdate'] = wfTimestamp( TS_ISO_8601, $regDate ); + } } - if (isset($this->prop['editcount'])) { - $vals['editcount'] = $wgUser->getEditCount(); + + if ( isset( $this->prop['acceptlang'] ) ) { + $langs = $this->getRequest()->getAcceptLang(); + $acceptLang = array(); + foreach ( $langs as $lang => $val ) { + $r = array( 'q' => $val ); + ApiResult::setContent( $r, $lang ); + $acceptLang[] = $r; + } + $result->setIndexedTagName( $acceptLang, 'lang' ); + $vals['acceptlang'] = $acceptLang; } return $vals; } + protected function getRateLimits() { + global $wgRateLimits; + $user = $this->getUser(); + if ( !$user->isPingLimitable() ) { + return array(); // No limits + } + + // Find out which categories we belong to + $categories = array(); + if ( $user->isAnon() ) { + $categories[] = 'anon'; + } else { + $categories[] = 'user'; + } + if ( $user->isNewbie() ) { + $categories[] = 'ip'; + $categories[] = 'subnet'; + if ( !$user->isAnon() ) + $categories[] = 'newbie'; + } + $categories = array_merge( $categories, $user->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; + } + public function getAllowedParams() { - return array ( - 'prop' => array ( - ApiBase :: PARAM_DFLT => NULL, - ApiBase :: PARAM_ISMULTI => true, - ApiBase :: PARAM_TYPE => array ( + return array( + 'prop' => array( + ApiBase::PARAM_DFLT => null, + ApiBase::PARAM_ISMULTI => true, + ApiBase::PARAM_TYPE => array( 'blockinfo', 'hasmsg', 'groups', + 'implicitgroups', 'rights', + 'changeablegroups', 'options', - 'editcount' + 'preferencestoken', + 'editcount', + 'ratelimits', + 'email', + 'realname', + 'acceptlang', + 'registrationdate' ) - ), - 'users' => array( - ApiBase :: PARAM_ISMULTI => true ) ); } public function getParamDescription() { - return array ( + 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 user belongs to', - ' rights - lists of all rights the user has', - ' options - lists all preferences the user has set', - ' editcount - adds the user\'s edit count' - ), - 'users' => 'A list of other users to obtain the same information for' + ' 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', + ' implicitgroups - Lists all the groups the current user is automatically a member of', + ' rights - Lists all the rights the current user has', + ' changeablegroups - Lists the groups the current user can add to and remove from', + ' options - Lists all preferences the current user has set', + ' preferencestoken - Get a token to change current user\'s preferences', + ' editcount - Adds the current user\'s edit count', + ' ratelimits - Lists all rate limits applying to the current user', + ' realname - Adds the user\'s real name', + ' email - Adds the user\'s email address and email authentication date', + ' acceptlang - Echoes the Accept-Language header sent by the client in a structured format', + ' registrationdate - Adds the user\'s registration date', + ) ); } @@ -126,14 +235,17 @@ class ApiQueryUserInfo extends ApiQueryBase { return 'Get information about the current user'; } - protected function getExamples() { - return array ( + public function getExamples() { + 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 getHelpUrls() { + return 'https://www.mediawiki.org/wiki/API:Meta#userinfo_.2F_ui'; + } + public function getVersion() { return __CLASS__ . ': $Id$'; }