38 parent::__construct(
$query, $moduleName,
'ui' );
45 if ( !is_null( $this->params[
'prop'] ) ) {
46 $this->prop = array_flip( $this->params[
'prop'] );
67 $vals[
'blockid'] = $block->
getId();
69 $vals[
'blockedbyid'] = $block->
getBy();
70 $vals[
'blockreason'] = $block->mReason;
71 $vals[
'blockedtimestamp'] =
wfTimestamp( TS_ISO_8601, $block->mTimestamp );
92 $providerIds = array_keys( $config->
get(
'CentralIdLookupProviders' ) );
96 'attachedlocal' => [],
100 if ( $attachedWiki ) {
101 $ret[
'attachedwiki'] = [];
105 $name = $user->getName();
106 foreach ( $providerIds as $providerId ) {
107 $provider = CentralIdLookup::factory( $providerId );
108 $ret[
'centralids'][$providerId] = $provider->centralIdFromName( $name );
109 $ret[
'attachedlocal'][$providerId] = $provider->isAttached( $user );
110 if ( $attachedWiki ) {
111 $ret[
'attachedwiki'][$providerId] = $provider->isAttached( $user, $attachedWiki );
121 $vals[
'id'] = intval( $user->getId() );
122 $vals[
'name'] = $user->getName();
124 if ( $user->isAnon() ) {
125 $vals[
'anon'] =
true;
128 if ( isset( $this->prop[
'blockinfo'] ) && $user->isBlocked() ) {
129 $vals = array_merge( $vals, self::getBlockInfo( $user->getBlock() ) );
132 if ( isset( $this->prop[
'hasmsg'] ) ) {
133 $vals[
'messages'] = $user->getNewtalk();
136 if ( isset( $this->prop[
'groups'] ) ) {
137 $vals[
'groups'] = $user->getEffectiveGroups();
142 if ( isset( $this->prop[
'groupmemberships'] ) ) {
143 $ugms = $user->getGroupMemberships();
144 $vals[
'groupmemberships'] = [];
145 foreach ( $ugms as $group => $ugm ) {
146 $vals[
'groupmemberships'][] = [
155 if ( isset( $this->prop[
'implicitgroups'] ) ) {
156 $vals[
'implicitgroups'] = $user->getAutomaticGroups();
161 if ( isset( $this->prop[
'rights'] ) ) {
163 $vals[
'rights'] = array_values( array_unique( $user->getRights() ) );
168 if ( isset( $this->prop[
'changeablegroups'] ) ) {
169 $vals[
'changeablegroups'] = $user->changeableGroups();
176 if ( isset( $this->prop[
'options'] ) ) {
177 $vals[
'options'] = $user->getOptions();
181 if ( isset( $this->prop[
'preferencestoken'] ) &&
183 $user->isAllowed(
'editmyoptions' )
185 $vals[
'preferencestoken'] = $user->getEditToken(
'', $this->
getMain()->
getRequest() );
188 if ( isset( $this->prop[
'editcount'] ) ) {
191 $vals[
'editcount'] = intval( $user->getEditCount() );
194 if ( isset( $this->prop[
'ratelimits'] ) ) {
198 if ( isset( $this->prop[
'realname'] ) &&
199 !in_array(
'realname', $this->
getConfig()->
get(
'HiddenPrefs' ) )
201 $vals[
'realname'] = $user->getRealName();
204 if ( $user->isAllowed(
'viewmyprivateinfo' ) ) {
205 if ( isset( $this->prop[
'email'] ) ) {
206 $vals[
'email'] = $user->getEmail();
207 $auth = $user->getEmailAuthenticationTimestamp();
208 if ( !is_null( $auth ) ) {
209 $vals[
'emailauthenticated'] =
wfTimestamp( TS_ISO_8601, $auth );
214 if ( isset( $this->prop[
'registrationdate'] ) ) {
215 $regDate = $user->getRegistration();
216 if ( $regDate !==
false ) {
217 $vals[
'registrationdate'] =
wfTimestamp( TS_ISO_8601, $regDate );
221 if ( isset( $this->prop[
'acceptlang'] ) ) {
222 $langs = $this->
getRequest()->getAcceptLang();
224 foreach ( $langs as
$lang => $val ) {
225 $r = [
'q' => $val ];
230 $vals[
'acceptlang'] = $acceptLang;
233 if ( isset( $this->prop[
'unreadcount'] ) ) {
234 $store = MediaWikiServices::getInstance()->getWatchedItemStore();
235 $unreadNotifications = $store->countUnreadNotifications(
237 self::WL_UNREAD_LIMIT
240 if ( $unreadNotifications ===
true ) {
241 $vals[
'unreadcount'] = self::WL_UNREAD_LIMIT .
'+';
243 $vals[
'unreadcount'] = $unreadNotifications;
247 if ( isset( $this->prop[
'centralids'] ) ) {
262 if ( !$user->isPingLimitable() ) {
268 if ( $user->isAnon() ) {
269 $categories[] =
'anon';
271 $categories[] =
'user';
273 if ( $user->isNewbie() ) {
274 $categories[] =
'ip';
275 $categories[] =
'subnet';
276 if ( !$user->isAnon() ) {
277 $categories[] =
'newbie';
280 $categories = array_merge( $categories, $user->getGroups() );
283 foreach ( $this->
getConfig()->
get(
'RateLimits' ) as $action => $limits ) {
284 foreach ( $categories as $cat ) {
285 if ( isset( $limits[$cat] ) && !is_null( $limits[$cat] ) ) {
286 $retval[$action][$cat][
'hits'] = intval( $limits[$cat][0] );
287 $retval[$action][$cat][
'seconds'] = intval( $limits[$cat][1] );
320 'apihelp-query+userinfo-paramvalue-prop-unreadcount',
321 self::WL_UNREAD_LIMIT - 1,
322 self::WL_UNREAD_LIMIT .
'+',
326 'preferencestoken' => [
327 'apiwarn-deprecation-withreplacement',
329 'action=query&meta=tokens',
333 'attachedwiki' =>
null,
339 'action=query&meta=userinfo'
340 =>
'apihelp-query+userinfo-example-simple',
341 'action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg'
342 =>
'apihelp-query+userinfo-example-data',
347 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.
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.
extractRequestParams( $options=[])
Using getAllowedParams(), this function makes an array of the values provided by the user,...
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.
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
Interface for configuration instances.
get( $name)
Get a configuration variable such as "Sitename" or "UploadMaintenance.".
if(!isset( $args[0])) $lang