API: Make it possible to fetch userrights tokens for interwiki users; make Userrights...
authorRoan Kattouw <catrope@users.mediawiki.org>
Thu, 10 Sep 2009 13:44:49 +0000 (13:44 +0000)
committerRoan Kattouw <catrope@users.mediawiki.org>
Thu, 10 Sep 2009 13:44:49 +0000 (13:44 +0000)
includes/api/ApiQueryUsers.php
includes/api/ApiUserrights.php
includes/specials/SpecialUserrights.php

index d3d4b60..9ae63c4 100644 (file)
@@ -170,9 +170,26 @@ if (!defined('MEDIAWIKI')) {
                }
                // Second pass: add result data to $retval
                foreach($goodNames as $u) {
-                       if(!isset($data[$u]))
-                               $data[$u] = array('name' => $u, 'missing' => '');
-                       else {
+                       if(!isset($data[$u])) {
+                               $data[$u] = array('name' => $u);
+                               $iwUser = UserrightsPage::fetchUser($u);
+                               if($iwUser instanceof UserRightsProxy) {
+                                       $data[$u]['interwiki'] = '';
+                                       if(!is_null($params['token']))
+                                       {
+                                               $tokenFunctions = $this->getTokenFunctions();
+                                               foreach($params['token'] as $t)
+                                               {
+                                                       $val = call_user_func($tokenFunctions[$t], $iwUser);
+                                                       if($val === false)
+                                                               $this->setWarning("Action '$t' is not allowed for the current user");
+                                                       else
+                                                               $data[$u][$t . 'token'] = $val;
+                                               }
+                                       }
+                               } else 
+                                       $data[$u]['missing'] = '';
+                       } else {
                                if(isset($this->prop['groups']) && isset($data[$u]['groups']))
                                        $this->getResult()->setIndexedTagName($data[$u]['groups'], 'g');
                        }
index 47eb60f..b2a2825 100644 (file)
@@ -45,8 +45,7 @@ class ApiUserrights extends ApiBase {
                if(is_null($params['token']))
                        $this->dieUsageMsg(array('missingparam', 'token'));
                
-               $form = new UserrightsPage;
-               $user = $form->fetchUser($params['user']);
+               $user = UserrightsPage::fetchUser($params['user']);
                if($user instanceof WikiErrorMsg)
                        $this->dieUsageMsg(array_merge(
                                (array)$user->getMessageKey(),
index 10c5dd3..ac12191 100644 (file)
@@ -272,7 +272,7 @@ class UserrightsPage extends SpecialPage {
         * Side effects: error output for invalid access
         * @return mixed User, UserRightsProxy, or WikiErrorMsg
         */
-       function fetchUser( $username ) {
+       public static function fetchUser( $username ) {
                global $wgUser, $wgUserrightsInterwikiDelimiter;
 
                $parts = explode( $wgUserrightsInterwikiDelimiter, $username );