diff options
Diffstat (limited to 'includes/api/ApiQuerySiteinfo.php')
-rw-r--r-- | includes/api/ApiQuerySiteinfo.php | 133 |
1 files changed, 95 insertions, 38 deletions
diff --git a/includes/api/ApiQuerySiteinfo.php b/includes/api/ApiQuerySiteinfo.php index 84757f7f..6b867abb 100644 --- a/includes/api/ApiQuerySiteinfo.php +++ b/includes/api/ApiQuerySiteinfo.php @@ -41,44 +41,60 @@ class ApiQuerySiteinfo extends ApiQueryBase { public function execute() { $params = $this->extractRequestParams(); + $done = array(); foreach( $params['prop'] as $p ) { switch ( $p ) { case 'general': - $this->appendGeneralInfo( $p ); + $fit = $this->appendGeneralInfo( $p ); break; case 'namespaces': - $this->appendNamespaces( $p ); + $fit = $this->appendNamespaces( $p ); break; case 'namespacealiases': - $this->appendNamespaceAliases( $p ); + $fit = $this->appendNamespaceAliases( $p ); break; case 'specialpagealiases': - $this->appendSpecialPageAliases( $p ); + $fit = $this->appendSpecialPageAliases( $p ); break; case 'magicwords': - $this->appendMagicWords( $p ); + $fit = $this->appendMagicWords( $p ); break; case 'interwikimap': $filteriw = isset( $params['filteriw'] ) ? $params['filteriw'] : false; - $this->appendInterwikiMap( $p, $filteriw ); + $fit = $this->appendInterwikiMap( $p, $filteriw ); break; case 'dbrepllag': - $this->appendDbReplLagInfo( $p, $params['showalldb'] ); + $fit = $this->appendDbReplLagInfo( $p, $params['showalldb'] ); break; case 'statistics': - $this->appendStatistics( $p ); + $fit = $this->appendStatistics( $p ); break; case 'usergroups': - $this->appendUserGroups( $p ); + $fit = $this->appendUserGroups( $p ); break; case 'extensions': - $this->appendExtensions( $p ); + $fit = $this->appendExtensions( $p ); + break; + case 'fileextensions': + $fit = $this->appendFileExtensions( $p ); + break; + case 'rightsinfo': + $fit = $this->appendRightsInfo( $p ); break; default : ApiBase :: dieDebug( __METHOD__, "Unknown prop=$p" ); } + if(!$fit) + { + # Abuse siprop as a query-continue parameter + # and set it to all unprocessed props + $this->setContinueEnumParameter('prop', implode('|', + array_diff($params['prop'], $done))); + break; + } + $done[] = $p; } } @@ -121,9 +137,9 @@ class ApiQuerySiteinfo extends ApiQueryBase { $offset = 0; } $data['timezone'] = $tz; - $data['timeoffset'] = $offset; + $data['timeoffset'] = intval($offset); - $this->getResult()->addValue( 'query', $property, $data ); + return $this->getResult()->addValue( 'query', $property, $data ); } protected function appendNamespaces( $property ) { @@ -132,7 +148,7 @@ class ApiQuerySiteinfo extends ApiQueryBase { foreach( $wgContLang->getFormattedNamespaces() as $ns => $title ) { $data[$ns] = array( - 'id' => $ns + 'id' => intval($ns) ); ApiResult :: setContent( $data[$ns], $title ); $canonical = MWNamespace::getCanonicalName( $ns ); @@ -145,24 +161,29 @@ class ApiQuerySiteinfo extends ApiQueryBase { } $this->getResult()->setIndexedTagName( $data, 'ns' ); - $this->getResult()->addValue( 'query', $property, $data ); + return $this->getResult()->addValue( 'query', $property, $data ); } protected function appendNamespaceAliases( $property ) { global $wgNamespaceAliases, $wgContLang; $wgContLang->load(); - $aliases = array_merge($wgNamespaceAliases, $wgContLang->namespaceAliases); + $aliases = array_merge( $wgNamespaceAliases, $wgContLang->namespaceAliases ); + $namespaces = $wgContLang->getNamespaces(); $data = array(); foreach( $aliases as $title => $ns ) { + if( $namespaces[$ns] == $title ) { + // Don't list duplicates + continue; + } $item = array( - 'id' => $ns + 'id' => intval($ns) ); ApiResult :: setContent( $item, strtr( $title, '_', ' ' ) ); $data[] = $item; } $this->getResult()->setIndexedTagName( $data, 'ns' ); - $this->getResult()->addValue( 'query', $property, $data ); + return $this->getResult()->addValue( 'query', $property, $data ); } protected function appendSpecialPageAliases( $property ) { @@ -175,7 +196,7 @@ class ApiQuerySiteinfo extends ApiQueryBase { $data[] = $arr; } $this->getResult()->setIndexedTagName( $data, 'specialpage' ); - $this->getResult()->addValue( 'query', $property, $data ); + return $this->getResult()->addValue( 'query', $property, $data ); } protected function appendMagicWords( $property ) { @@ -191,7 +212,7 @@ class ApiQuerySiteinfo extends ApiQueryBase { $data[] = $arr; } $this->getResult()->setIndexedTagName($data, 'magicword'); - $this->getResult()->addValue('query', $property, $data); + return $this->getResult()->addValue( 'query', $property, $data ); } protected function appendInterwikiMap( $property, $filter ) { @@ -229,7 +250,7 @@ class ApiQuerySiteinfo extends ApiQueryBase { $db->freeResult( $res ); $this->getResult()->setIndexedTagName( $data, 'iw' ); - $this->getResult()->addValue( 'query', $property, $data ); + return $this->getResult()->addValue( 'query', $property, $data ); } protected function appendDbReplLagInfo( $property, $includeAll ) { @@ -251,27 +272,30 @@ class ApiQuerySiteinfo extends ApiQueryBase { list( $host, $lag ) = wfGetLB()->getMaxLag(); $data[] = array( 'host' => $wgShowHostnames ? $host : '', - 'lag' => $lag + 'lag' => intval( $lag ) ); } $result = $this->getResult(); $result->setIndexedTagName( $data, 'db' ); - $result->addValue( 'query', $property, $data ); + return $this->getResult()->addValue( 'query', $property, $data ); } protected function appendStatistics( $property ) { + global $wgDisableCounters; $data = array(); $data['pages'] = intval( SiteStats::pages() ); $data['articles'] = intval( SiteStats::articles() ); - $data['views'] = intval( SiteStats::views() ); + if ( !$wgDisableCounters ) { + $data['views'] = intval( SiteStats::views() ); + } $data['edits'] = intval( SiteStats::edits() ); $data['images'] = intval( SiteStats::images() ); $data['users'] = intval( SiteStats::users() ); $data['activeusers'] = intval( SiteStats::activeUsers() ); $data['admins'] = intval( SiteStats::numberingroup('sysop') ); $data['jobs'] = intval( SiteStats::jobs() ); - $this->getResult()->addValue( 'query', $property, $data ); + return $this->getResult()->addValue( 'query', $property, $data ); } protected function appendUserGroups( $property ) { @@ -284,7 +308,18 @@ class ApiQuerySiteinfo extends ApiQueryBase { } $this->getResult()->setIndexedTagName( $data, 'group' ); - $this->getResult()->addValue( 'query', $property, $data ); + return $this->getResult()->addValue( 'query', $property, $data ); + } + + protected function appendFileExtensions( $property ) { + global $wgFileExtensions; + + $data = array(); + foreach( $wgFileExtensions as $ext ) { + $data[] = array( 'ext' => $ext ); + } + $this->getResult()->setIndexedTagName( $data, 'fe' ); + return $this->getResult()->addValue( 'query', $property, $data ); } protected function appendExtensions( $property ) { @@ -317,7 +352,25 @@ class ApiQuerySiteinfo extends ApiQueryBase { } $this->getResult()->setIndexedTagName( $data, 'ext' ); - $this->getResult()->addValue( 'query', $property, $data ); + return $this->getResult()->addValue( 'query', $property, $data ); + } + + + protected function appendRightsInfo( $property ) { + global $wgRightsPage, $wgRightsUrl, $wgRightsText; + $title = Title::newFromText( $wgRightsPage ); + $url = $title ? $title->getFullURL() : $wgRightsUrl; + $text = $wgRightsText; + if( !$text && $title ) { + $text = $title->getPrefixedText(); + } + + $data = array( + 'url' => $url ? $url : '', + 'text' => $text ? $text : '' + ); + + return $this->getResult()->addValue( 'query', $property, $data ); } @@ -337,6 +390,8 @@ class ApiQuerySiteinfo extends ApiQueryBase { 'statistics', 'usergroups', 'extensions', + 'fileextensions', + 'rightsinfo', ) ), 'filteriw' => array( @@ -353,16 +408,18 @@ class ApiQuerySiteinfo extends ApiQueryBase { return array( 'prop' => array( 'Which sysinfo properties to get:', - ' "general" - Overall system information', - ' "namespaces" - List of registered namespaces and their canonical names', - ' "namespacealiases" - List of registered namespace aliases', - ' "specialpagealiases" - List of special page aliases', - ' "magicwords" - List of magic words and their aliases', - ' "statistics" - Returns site statistics', - ' "interwikimap" - Returns interwiki map (optionally filtered)', - ' "dbrepllag" - Returns database server with the highest replication lag', - ' "usergroups" - Returns user groups and the associated permissions', - ' "extensions" - Returns extensions installed on the wiki', + ' general - Overall system information', + ' namespaces - List of registered namespaces and their canonical names', + ' namespacealiases - List of registered namespace aliases', + ' specialpagealiases - List of special page aliases', + ' magicwords - List of magic words and their aliases', + ' statistics - Returns site statistics', + ' interwikimap - Returns interwiki map (optionally filtered)', + ' dbrepllag - Returns database server with the highest replication lag', + ' usergroups - Returns user groups and the associated permissions', + ' extensions - Returns extensions installed on the wiki', + ' fileextensions - Returns list of file extensions allowed to be uploaded', + ' rightsinfo - Returns wiki rights (license) information if available', ), 'filteriw' => 'Return only local or only nonlocal entries of the interwiki map', 'showalldb' => 'List all database servers, not just the one lagging the most', @@ -382,6 +439,6 @@ class ApiQuerySiteinfo extends ApiQueryBase { } public function getVersion() { - return __CLASS__ . ': $Id: ApiQuerySiteinfo.php 44862 2008-12-20 23:49:16Z catrope $'; + return __CLASS__ . ': $Id: ApiQuerySiteinfo.php 48060 2009-03-05 13:52:14Z demon $'; } -} +}
\ No newline at end of file |