API: Added meta=userinfo module to get data about the currently logged-in user.
authorYuri Astrakhan <yurik@users.mediawiki.org>
Tue, 31 Jul 2007 17:53:37 +0000 (17:53 +0000)
committerYuri Astrakhan <yurik@users.mediawiki.org>
Tue, 31 Jul 2007 17:53:37 +0000 (17:53 +0000)
includes/AutoLoader.php
includes/api/ApiMain.php
includes/api/ApiQuery.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryUserInfo.php [new file with mode: 0644]

index c5b933c..628e102 100644 (file)
@@ -330,6 +330,7 @@ function __autoload($className) {
                'ApiQueryRevisions' => 'includes/api/ApiQueryRevisions.php',
                'ApiQuerySearch' => 'includes/api/ApiQuerySearch.php',
                'ApiQuerySiteinfo' => 'includes/api/ApiQuerySiteinfo.php',
+               'ApiQueryUserInfo' => 'includes/api/ApiQueryUserInfo.php',
                'ApiQueryWatchlist' => 'includes/api/ApiQueryWatchlist.php',
                'ApiResult' => 'includes/api/ApiResult.php',
        );
index 24ba75c..b33e762 100644 (file)
@@ -456,8 +456,7 @@ class ApiMain extends ApiBase {
        public function isSysop() {
                if (!isset ($this->mIsSysop)) {
                        global $wgUser;
-                       $this->mIsSysop = in_array( 'sysop',
-                               $wgUser->getGroups());
+                       $this->mIsSysop = in_array( 'sysop', $wgUser->getGroups());
                }
 
                return $this->mIsSysop;
index f640ece..0223f6f 100644 (file)
@@ -75,7 +75,7 @@ class ApiQuery extends ApiBase {
 
        private $mQueryMetaModules = array (
                'siteinfo' => 'ApiQuerySiteinfo',
-       //      'userinfo' => 'ApiQueryUserinfo',
+               'userinfo' => 'ApiQueryUserInfo',
        );
 
        private $mSlaveDB = null;
index c3bfbc0..9d1371a 100644 (file)
@@ -99,6 +99,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        
        protected function appendInterwikiMap($property, $filter) {
 
+               $this->resetQueryParams();
                $this->addTables('interwiki');
                $this->addFields(array('iw_prefix', 'iw_local', 'iw_url'));
 
diff --git a/includes/api/ApiQueryUserInfo.php b/includes/api/ApiQueryUserInfo.php
new file mode 100644 (file)
index 0000000..6968b0b
--- /dev/null
@@ -0,0 +1,134 @@
+<?php
+
+/*
+ * Created on July 30, 2007
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2007 Yuri Astrakhan <Firstname><Lastname>@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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+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
+ */
+class ApiQueryUserInfo extends ApiQueryBase {
+
+       public function __construct($query, $moduleName) {
+               parent :: __construct($query, $moduleName, 'ui');
+       }
+
+       public function execute() {
+
+               global $wgUser;
+
+               $params = $this->extractRequestParams();
+               $result = $this->getResult();
+
+               $vals = array();
+               $vals['name'] = $wgUser->getName();
+
+               if( $wgUser->isAnon() ) $vals['anon'] = '';
+
+               if (!is_null($params['prop'])) {
+                       $prop = array_flip($params['prop']);
+                       if (isset($prop['blockinfo'])) {
+                               if ($wgUser->isBlocked()) {
+                                       $id = $wgUser->blockedBy();
+                                       $vals['blockedby'] = is_numeric($id) ? User::whoIs($id) : $id;
+                                       $vals['blockreason'] = $wgUser->blockedFor();
+                               }
+                       }               
+                       if (isset($prop['hasmsg']) && $wgUser->getNewtalk()) {
+                               $vals['messages'] = '';
+                       }
+                       if (isset($prop['groups'])) {
+                               $vals['groups'] = $wgUser->getGroups();
+                               $result->setIndexedTagName($vals['groups'], 'g');       // even if empty
+                       }
+                       if (isset($prop['rights'])) {
+                               $vals['rights'] = $wgUser->getRights();
+                               $result->setIndexedTagName($vals['rights'], 'r');       // even if empty
+                       }
+               }
+
+               if (!empty($params['option'])) {
+                       foreach( $params['option'] as $option ) {
+                               if (empty($option))
+                                       $this->dieUsage('Empty value is not allowed for the option parameter', 'option');
+                               $vals['options'][$option] = $wgUser->getOption($option);
+                       }
+               }
+               
+               $result->addValue(null, $this->getModuleName(), $vals);
+       }
+
+       protected function getAllowedParams() {
+               return array (
+                       'prop' => array (
+                               ApiBase :: PARAM_DFLT => NULL,
+                               ApiBase :: PARAM_ISMULTI => true,
+                               ApiBase :: PARAM_TYPE => array (
+                                       'blockinfo',
+                                       'hasmsg',
+                                       'groups',
+                                       'rights',
+                               )),
+                       'option' => array (
+                               ApiBase :: PARAM_DFLT => NULL,
+                               ApiBase :: PARAM_ISMULTI => true,
+                               ),
+               );
+       }
+
+       protected function getParamDescription() {
+               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 current user belongs to',
+                               '  rights    - lists of all rights the current user has',
+                       ),
+                       'option' => 'A list of user preference options to get',
+               );
+       }
+
+       protected function getDescription() {
+               return 'Get information about the current user';
+       }
+
+       protected 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 getVersion() {
+               return __CLASS__ . ': $Id$';
+       }
+}
+