(bug 30836) API siteinfo specialpagealiases should not return nonexistent special...
authorBrad Jorsch <anomie.wikipedia@gmail.com>
Sat, 2 Jun 2012 20:20:14 +0000 (22:20 +0200)
committerBrad Jorsch <anomie.wikipedia@gmail.com>
Thu, 19 Jul 2012 03:09:13 +0000 (23:09 -0400)
Some special pages are conditionally registered (e.g.
Special:Popularpages only exists when $wgDisableCounters is false), or
sometimes an alias exists for a special page that does not. The API
should probably not return entries for these from
meta=siteinfo&siprop=specialpagealiases.

This also fixes bug 38464 correctly, rather than blindly reverting.

Change-Id: Ic021a47754ea7a1574e818dad47151ab6698e06f

RELEASE-NOTES-1.20
includes/api/ApiQuerySiteinfo.php

index 8bebaaa..ed92593 100644 (file)
@@ -193,6 +193,7 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 35980) list=deletedrevs now honors drdir correctly in "all" mode (mode #3).
 * (bug 29290) API avoids mangling fields in continuation parameters
 * (bug 36987) API avoids mangling fields in continuation parameters
+* (bug 30836) siteinfo prop=specialpagealiases will no longer return nonexistent special pages
 
 === Languages updated in 1.20 ===
 
index 8e01d3a..ec503d6 100644 (file)
@@ -257,10 +257,13 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        protected function appendSpecialPageAliases( $property ) {
                global $wgContLang;
                $data = array();
-               foreach ( $wgContLang->getSpecialPageAliases() as $specialpage => $aliases ) {
-                       $arr = array( 'realname' => $specialpage, 'aliases' => $aliases );
-                       $this->getResult()->setIndexedTagName( $arr['aliases'], 'alias' );
-                       $data[] = $arr;
+               $aliases = $wgContLang->getSpecialPageAliases();
+               foreach ( SpecialPageFactory::getList() as $specialpage => $stuff ) {
+                       if ( isset( $aliases[$specialpage] ) ) {
+                               $arr = array( 'realname' => $specialpage, 'aliases' => $aliases[$specialpage] );
+                               $this->getResult()->setIndexedTagName( $arr['aliases'], 'alias' );
+                               $data[] = $arr;
+                       }
                }
                $this->getResult()->setIndexedTagName( $data, 'specialpage' );
                return $this->getResult()->addValue( 'query', $property, $data );