]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - includes/api/ApiQueryUserInfo.php
MediaWiki 1.15.5
[autoinstallsdev/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                 if (isset($this->prop['blockinfo'])) {
66                         if ($wgUser->isBlocked()) {
67                                 $vals['blockedby'] = User::whoIs($wgUser->blockedBy());
68                                 $vals['blockreason'] = $wgUser->blockedFor();
69                         }
70                 }
71                 if (isset($this->prop['hasmsg']) && $wgUser->getNewtalk()) {
72                         $vals['messages'] = '';
73                 }
74                 if (isset($this->prop['groups'])) {
75                         $vals['groups'] = $wgUser->getGroups();
76                         $result->setIndexedTagName($vals['groups'], 'g');       // even if empty
77                 }
78                 if (isset($this->prop['rights'])) {
79                         // User::getRights() may return duplicate values, strip them
80                         $vals['rights'] = array_values(array_unique($wgUser->getRights()));
81                         $result->setIndexedTagName($vals['rights'], 'r');       // even if empty
82                 }
83                 if (isset($this->prop['options'])) {
84                         $vals['options'] = (is_null($wgUser->mOptions) ? User::getDefaultOptions() : $wgUser->mOptions);
85                 }
86                 if (isset($this->prop['preferencestoken']) && is_null($this->getMain()->getRequest()->getVal('callback'))) {
87                         $vals['preferencestoken'] = $wgUser->editToken();
88                 }
89                 if (isset($this->prop['editcount'])) {
90                         $vals['editcount'] = intval($wgUser->getEditCount());
91                 }
92                 if (isset($this->prop['ratelimits'])) {
93                         $vals['ratelimits'] = $this->getRateLimits();
94                 }
95                 if (isset($this->prop['email'])) {
96                         $vals['email'] = $wgUser->getEmail();
97                         $auth = $wgUser->getEmailAuthenticationTimestamp();
98                         if(!is_null($auth))
99                                 $vals['emailauthenticated'] = wfTimestamp(TS_ISO_8601, $auth);
100                 }
101                 return $vals;
102         }
103
104         protected function getRateLimits()
105         {
106                 global $wgUser, $wgRateLimits;
107                 if(!$wgUser->isPingLimitable())
108                         return array(); // No limits
109
110                 // Find out which categories we belong to
111                 $categories = array();
112                 if($wgUser->isAnon())
113                         $categories[] = 'anon';
114                 else
115                         $categories[] = 'user';
116                 if($wgUser->isNewBie())
117                 {
118                         $categories[] = 'ip';
119                         $categories[] = 'subnet';
120                         if(!$wgUser->isAnon())
121                                 $categories[] = 'newbie';
122                 }
123                 $categories = array_merge($categories, $wgUser->getGroups());
124
125                 // Now get the actual limits
126                 $retval = array();
127                 foreach($wgRateLimits as $action => $limits)
128                         foreach($categories as $cat)
129                                 if(isset($limits[$cat]) && !is_null($limits[$cat]))
130                                 {
131                                         $retval[$action][$cat]['hits'] = intval($limits[$cat][0]);
132                                         $retval[$action][$cat]['seconds'] = intval($limits[$cat][1]);
133                                 }
134                 return $retval;
135         }
136
137         public function getAllowedParams() {
138                 return array (
139                         'prop' => array (
140                                 ApiBase :: PARAM_DFLT => NULL,
141                                 ApiBase :: PARAM_ISMULTI => true,
142                                 ApiBase :: PARAM_TYPE => array (
143                                         'blockinfo',
144                                         'hasmsg',
145                                         'groups',
146                                         'rights',
147                                         'options',
148                                         'preferencestoken',
149                                         'editcount',
150                                         'ratelimits',
151                                         'email',
152                                 )
153                         )
154                 );
155         }
156
157         public function getParamDescription() {
158                 return array (
159                         'prop' => array(
160                                 'What pieces of information to include',
161                                 '  blockinfo  - tags if the current user is blocked, by whom, and for what reason',
162                                 '  hasmsg     - adds a tag "message" if the current user has pending messages',
163                                 '  groups     - lists all the groups the current user belongs to',
164                                 '  rights     - lists of all rights the current user has',
165                                 '  options    - lists all preferences the current user has set',
166                                 '  editcount  - adds the current user\'s edit count',
167                                 '  ratelimits - lists all rate limits applying to the current user'
168                         )
169                 );
170         }
171
172         public function getDescription() {
173                 return 'Get information about the current user';
174         }
175
176         protected function getExamples() {
177                 return array (
178                         'api.php?action=query&meta=userinfo',
179                         'api.php?action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg',
180                 );
181         }
182
183         public function getVersion() {
184                 return __CLASS__ . ': $Id: ApiQueryUserInfo.php 69579 2010-07-20 02:49:55Z tstarling $';
185         }
186 }