42 parent::__construct(
$query, $moduleName,
'ui' );
49 if ( !is_null( $this->params[
'prop'] ) ) {
50 $this->prop = array_flip( $this->params[
'prop'] );
71 $vals[
'blockid'] = $block->
getId();
73 $vals[
'blockedbyid'] = $block->
getBy();
74 $vals[
'blockreason'] = $block->mReason;
75 $vals[
'blockedtimestamp'] =
wfTimestamp( TS_ISO_8601, $block->mTimestamp );
96 $providerIds = array_keys( $config->get(
'CentralIdLookupProviders' ) );
100 'attachedlocal' => [],
104 if ( $attachedWiki ) {
105 $ret[
'attachedwiki'] = [];
109 $name = $user->getName();
110 foreach ( $providerIds as $providerId ) {
112 $ret[
'centralids'][$providerId] = $provider->centralIdFromName( $name );
113 $ret[
'attachedlocal'][$providerId] = $provider->isAttached( $user );
114 if ( $attachedWiki ) {
115 $ret[
'attachedwiki'][$providerId] = $provider->isAttached( $user, $attachedWiki );
125 $vals[
'id'] = intval( $user->getId() );
126 $vals[
'name'] = $user->getName();
128 if ( $user->isAnon() ) {
129 $vals[
'anon'] =
true;
132 if ( isset( $this->prop[
'blockinfo'] ) && $user->isBlocked() ) {
133 $vals = array_merge( $vals, self::getBlockInfo( $user->getBlock() ) );
136 if ( isset( $this->prop[
'hasmsg'] ) ) {
137 $vals[
'messages'] = $user->getNewtalk();
140 if ( isset( $this->prop[
'groups'] ) ) {
141 $vals[
'groups'] = $user->getEffectiveGroups();
146 if ( isset( $this->prop[
'groupmemberships'] ) ) {
147 $ugms = $user->getGroupMemberships();
148 $vals[
'groupmemberships'] = [];
149 foreach ( $ugms as $group => $ugm ) {
150 $vals[
'groupmemberships'][] = [
159 if ( isset( $this->prop[
'implicitgroups'] ) ) {
160 $vals[
'implicitgroups'] = $user->getAutomaticGroups();
165 if ( isset( $this->prop[
'rights'] ) ) {
167 $vals[
'rights'] = array_values( array_unique( $user->getRights() ) );
172 if ( isset( $this->prop[
'changeablegroups'] ) ) {
173 $vals[
'changeablegroups'] = $user->changeableGroups();
180 if ( isset( $this->prop[
'options'] ) ) {
181 $vals[
'options'] = $user->getOptions();
185 if ( isset( $this->prop[
'preferencestoken'] ) &&
187 $user->isAllowed(
'editmyoptions' )
189 $vals[
'preferencestoken'] = $user->getEditToken(
'', $this->
getMain()->
getRequest() );
192 if ( isset( $this->prop[
'editcount'] ) ) {
195 $vals[
'editcount'] = intval( $user->getEditCount() );
198 if ( isset( $this->prop[
'ratelimits'] ) ) {
202 if ( isset( $this->prop[
'realname'] ) &&
203 !in_array(
'realname', $this->
getConfig()->
get(
'HiddenPrefs' ) )
205 $vals[
'realname'] = $user->getRealName();
208 if ( $user->isAllowed(
'viewmyprivateinfo' ) ) {
209 if ( isset( $this->prop[
'email'] ) ) {
210 $vals[
'email'] = $user->getEmail();
211 $auth = $user->getEmailAuthenticationTimestamp();
212 if ( !is_null( $auth ) ) {
213 $vals[
'emailauthenticated'] =
wfTimestamp( TS_ISO_8601, $auth );
218 if ( isset( $this->prop[
'registrationdate'] ) ) {
219 $regDate = $user->getRegistration();
220 if ( $regDate !==
false ) {
221 $vals[
'registrationdate'] =
wfTimestamp( TS_ISO_8601, $regDate );
225 if ( isset( $this->prop[
'acceptlang'] ) ) {
226 $langs = $this->
getRequest()->getAcceptLang();
228 foreach ( $langs as
$lang => $val ) {
229 $r = [
'q' => $val ];
234 $vals[
'acceptlang'] = $acceptLang;
237 if ( isset( $this->prop[
'unreadcount'] ) ) {
238 $store = MediaWikiServices::getInstance()->getWatchedItemStore();
239 $unreadNotifications = $store->countUnreadNotifications(
241 self::WL_UNREAD_LIMIT
244 if ( $unreadNotifications ===
true ) {
245 $vals[
'unreadcount'] = self::WL_UNREAD_LIMIT .
'+';
247 $vals[
'unreadcount'] = $unreadNotifications;
251 if ( isset( $this->prop[
'centralids'] ) ) {
266 if ( !$user->isPingLimitable() ) {
272 if ( $user->isAnon() ) {
273 $categories[] =
'anon';
275 $categories[] =
'user';
277 if ( $user->isNewbie() ) {
278 $categories[] =
'ip';
279 $categories[] =
'subnet';
280 if ( !$user->isAnon() ) {
281 $categories[] =
'newbie';
284 $categories = array_merge( $categories, $user->getGroups() );
287 foreach ( $this->
getConfig()->
get(
'RateLimits' ) as $action => $limits ) {
288 foreach ( $categories as $cat ) {
289 if ( isset( $limits[$cat] ) && !is_null( $limits[$cat] ) ) {
290 $retval[$action][$cat][
'hits'] = intval( $limits[$cat][0] );
291 $retval[$action][$cat][
'seconds'] = intval( $limits[$cat][1] );
324 'apihelp-query+userinfo-paramvalue-prop-unreadcount',
325 self::WL_UNREAD_LIMIT - 1,
326 self::WL_UNREAD_LIMIT .
'+',
330 'preferencestoken' => [
331 'apiwarn-deprecation-withreplacement',
333 'action=query&meta=tokens',
337 'attachedwiki' =>
null,
343 'action=query&meta=userinfo'
344 =>
'apihelp-query+userinfo-example-simple',
345 'action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg'
346 =>
'apihelp-query+userinfo-example-data',
351 return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Userinfo';
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
getModulePrefix()
Get parameter prefix (usually two letters or an empty string).
const PARAM_DEPRECATED_VALUES
(array) When PARAM_TYPE is an array, this indicates which of the values are deprecated.
getMain()
Get the main module.
const PARAM_TYPE
(string|string[]) Either an array of allowed value strings, or a string type as described below.
extractRequestParams( $parseLimit=true)
Using getAllowedParams(), this function makes an array of the values provided by the user,...
const PARAM_HELP_MSG_PER_VALUE
((string|array|Message)[]) When PARAM_TYPE is an array, this is an array mapping those values to $msg...
getResult()
Get the result object.
getModuleName()
Get the name of the module being executed by this instance.
const PARAM_ISMULTI
(boolean) Accept multiple pipe-separated values for this parameter (e.g.
lacksSameOriginSecurity()
Returns true if the current request breaks the same-origin policy.
This is a base class for all Query modules.
Query module to get information about the currently logged-in user.
getExamplesMessages()
Returns usage examples for this module.
getHelpUrls()
Return links to more detailed help pages about the module.
getAllowedParams()
Returns an array of allowed parameters (parameter name) => (default value) or (parameter name) => (ar...
static getBlockInfo(Block $block)
Get basic info about a given block.
execute()
Evaluates the parameters, performs the requested query, and sets up the result.
static getCentralUserInfo(Config $config, User $user, $attachedWiki=null)
Get central user info.
__construct(ApiQuery $query, $moduleName)
This is the main query class.
const META_TYPE
Key for the 'type' metadata item.
static setArrayType(array &$arr, $type, $kvpKeyName=null)
Set the array data type.
const META_BC_BOOLS
Key for the 'BC bools' metadata item.
static setIndexedTagName(array &$arr, $tag)
Set the tag name for numeric-keyed values in XML format.
static setContentValue(array &$arr, $name, $value, $flags=0)
Add an output value to the array by name and mark as META_CONTENT.
static formatExpiry( $expiry, $infinity='infinity')
Format an expiry timestamp for API output.
getSystemBlockType()
Get the system block type, if any.
getBy()
Get the user id of the blocking sysop.
getByName()
Get the username of the blocking sysop.
static factory( $providerId=null)
Fetch a CentralIdLookup.
getUser()
Get the User object.
getRequest()
Get the WebRequest object.
getConfig()
Get the Config object.
The User object encapsulates all of the user-specific settings (user_id, name, rights,...
please add to it if you re going to add events to the MediaWiki code where normally authentication against an external auth plugin would be creating a local account incomplete not yet checked for validity & $retval
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses & $ret
null for the local wiki Added should default to null in handler for backwards compatibility add a value to it if you want to add a cookie that have to vary cache options can modify $query
if(!isset( $args[0])) $lang