]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - includes/api/ApiQueryUserInfo.php
MediaWiki 1.16.0
[autoinstalls/mediawiki.git] / includes / api / ApiQueryUserInfo.php
1 <?php
2
3 /*
4  * Created on July 30, 2007
5  *
6  * API for MediaWiki 1.8+
7  *
8  * Copyright (C) 2007 Yuri Astrakhan <Firstname><Lastname>@gmail.com
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License along
21  * with this program; if not, write to the Free Software Foundation, Inc.,
22  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23  * http://www.gnu.org/copyleft/gpl.html
24  */
25
26 if ( !defined( 'MEDIAWIKI' ) ) {
27         // Eclipse helper - will be ignored in production
28         require_once ( 'ApiQueryBase.php' );
29 }
30
31 /**
32  * Query module to get information about the currently logged-in user
33  *
34  * @ingroup API
35  */
36 class ApiQueryUserInfo extends ApiQueryBase {
37
38         public function __construct( $query, $moduleName ) {
39                 parent :: __construct( $query, $moduleName, 'ui' );
40         }
41
42         public function execute() {
43                 $params = $this->extractRequestParams();
44                 $result = $this->getResult();
45                 $r = array();
46
47                 if ( !is_null( $params['prop'] ) ) {
48                         $this->prop = array_flip( $params['prop'] );
49                 } else {
50                         $this->prop = array();
51                 }
52                 $r = $this->getCurrentUserInfo();
53                 $result->addValue( "query", $this->getModuleName(), $r );
54         }
55
56         protected function getCurrentUserInfo() {
57                 global $wgUser;
58                 $result = $this->getResult();
59                 $vals = array();
60                 $vals['id'] = intval( $wgUser->getId() );
61                 $vals['name'] = $wgUser->getName();
62
63                 if ( $wgUser->isAnon() )
64                         $vals['anon'] = '';
65
66                 if ( isset( $this->prop['blockinfo'] ) ) {
67                         if ( $wgUser->isBlocked() ) {
68                                 $vals['blockedby'] = User::whoIs( $wgUser->blockedBy() );
69                                 $vals['blockreason'] = $wgUser->blockedFor();
70                         }
71                 }
72
73                 if ( isset( $this->prop['hasmsg'] ) && $wgUser->getNewtalk() ) {
74                         $vals['messages'] = '';
75                 }
76
77                 if ( isset( $this->prop['groups'] ) ) {
78                         $vals['groups'] = $wgUser->getGroups();
79                         $result->setIndexedTagName( $vals['groups'], 'g' );     // even if empty
80                 }
81
82                 if ( isset( $this->prop['rights'] ) ) {
83                         // User::getRights() may return duplicate values, strip them
84                         $vals['rights'] = array_values( array_unique( $wgUser->getRights() ) );
85                         $result->setIndexedTagName( $vals['rights'], 'r' );     // even if empty
86                 }
87
88                 if ( isset( $this->prop['changeablegroups'] ) ) {
89                         $vals['changeablegroups'] = $wgUser->changeableGroups();
90                         $result->setIndexedTagName( $vals['changeablegroups']['add'], 'g' );
91                         $result->setIndexedTagName( $vals['changeablegroups']['remove'], 'g' );
92                         $result->setIndexedTagName( $vals['changeablegroups']['add-self'], 'g' );
93                         $result->setIndexedTagName( $vals['changeablegroups']['remove-self'], 'g' );
94                 }
95
96                 if ( isset( $this->prop['options'] ) ) {
97                         $vals['options'] = $wgUser->getOptions();
98                 }
99
100                 if ( isset( $this->prop['preferencestoken'] ) && is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
101                         $vals['preferencestoken'] = $wgUser->editToken();
102                 }
103
104                 if ( isset( $this->prop['editcount'] ) ) {
105                         $vals['editcount'] = intval( $wgUser->getEditCount() );
106                 }
107
108                 if ( isset( $this->prop['ratelimits'] ) ) {
109                         $vals['ratelimits'] = $this->getRateLimits();
110                 }
111
112                 if ( isset( $this->prop['email'] ) ) {
113                         $vals['email'] = $wgUser->getEmail();
114                         $auth = $wgUser->getEmailAuthenticationTimestamp();
115                         if ( !is_null( $auth ) )
116                                 $vals['emailauthenticated'] = wfTimestamp( TS_ISO_8601, $auth );
117                 }
118                 return $vals;
119         }
120
121         protected function getRateLimits()
122         {
123                 global $wgUser, $wgRateLimits;
124                 if ( !$wgUser->isPingLimitable() )
125                         return array(); // No limits
126
127                 // Find out which categories we belong to
128                 $categories = array();
129                 if ( $wgUser->isAnon() )
130                         $categories[] = 'anon';
131                 else
132                         $categories[] = 'user';
133                 if ( $wgUser->isNewBie() )
134                 {
135                         $categories[] = 'ip';
136                         $categories[] = 'subnet';
137                         if ( !$wgUser->isAnon() )
138                                 $categories[] = 'newbie';
139                 }
140                 $categories = array_merge( $categories, $wgUser->getGroups() );
141
142                 // Now get the actual limits
143                 $retval = array();
144                 foreach ( $wgRateLimits as $action => $limits )
145                         foreach ( $categories as $cat )
146                                 if ( isset( $limits[$cat] ) && !is_null( $limits[$cat] ) )
147                                 {
148                                         $retval[$action][$cat]['hits'] = intval( $limits[$cat][0] );
149                                         $retval[$action][$cat]['seconds'] = intval( $limits[$cat][1] );
150                                 }
151                 return $retval;
152         }
153
154         public function getAllowedParams() {
155                 return array (
156                         'prop' => array (
157                                 ApiBase :: PARAM_DFLT => null,
158                                 ApiBase :: PARAM_ISMULTI => true,
159                                 ApiBase :: PARAM_TYPE => array (
160                                         'blockinfo',
161                                         'hasmsg',
162                                         'groups',
163                                         'rights',
164                                         'changeablegroups',
165                                         'options',
166                                         'preferencestoken',
167                                         'editcount',
168                                         'ratelimits',
169                                         'email',
170                                 )
171                         )
172                 );
173         }
174
175         public function getParamDescription() {
176                 return array (
177                         'prop' => array(
178                                 'What pieces of information to include',
179                                 '  blockinfo  - tags if the current user is blocked, by whom, and for what reason',
180                                 '  hasmsg     - adds a tag "message" if the current user has pending messages',
181                                 '  groups     - lists all the groups the current user belongs to',
182                                 '  rights     - lists all the rights the current user has',
183                                 '  changeablegroups - lists the groups the current user can add to and remove from',
184                                 '  options    - lists all preferences the current user has set',
185                                 '  editcount  - adds the current user\'s edit count',
186                                 '  ratelimits - lists all rate limits applying to the current user'
187                         )
188                 );
189         }
190
191         public function getDescription() {
192                 return 'Get information about the current user';
193         }
194
195         protected function getExamples() {
196                 return array (
197                         'api.php?action=query&meta=userinfo',
198                         'api.php?action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg',
199                 );
200         }
201
202         public function getVersion() {
203                 return __CLASS__ . ': $Id: ApiQueryUserInfo.php 69578 2010-07-20 02:46:20Z tstarling $';
204         }
205 }