/**
  * @covers SpecialPageFactory::getNames
  */
 public function testGetNames()
 {
     $this->mergeMwGlobalArrayValue('wgSpecialPages', array('testdummy' => 'SpecialAllPages'));
     SpecialPageFactory::resetList();
     $names = SpecialPageFactory::getNames();
     $this->assertInternalType('array', $names);
     $this->assertContains('testdummy', $names);
 }
Example #2
0
 /**
  * Prefix search special-case for Special: namespace.
  *
  * @param string $search Term
  * @param int $limit Max number of items to return
  * @param int $offset Number of items to offset
  * @return array
  */
 protected function specialSearch($search, $limit, $offset)
 {
     global $wgContLang;
     $searchParts = explode('/', $search, 2);
     $searchKey = $searchParts[0];
     $subpageSearch = isset($searchParts[1]) ? $searchParts[1] : null;
     // Handle subpage search separately.
     if ($subpageSearch !== null) {
         // Try matching the full search string as a page name
         $specialTitle = Title::makeTitleSafe(NS_SPECIAL, $searchKey);
         if (!$specialTitle) {
             return array();
         }
         $special = SpecialPageFactory::getPage($specialTitle->getText());
         if ($special) {
             $subpages = $special->prefixSearchSubpages($subpageSearch, $limit, $offset);
             return array_map(function ($sub) use($specialTitle) {
                 return $specialTitle->getSubpage($sub);
             }, $subpages);
         } else {
             return array();
         }
     }
     # normalize searchKey, so aliases with spaces can be found - bug 25675
     $searchKey = str_replace(' ', '_', $searchKey);
     $searchKey = $wgContLang->caseFold($searchKey);
     // Unlike SpecialPage itself, we want the canonical forms of both
     // canonical and alias title forms...
     $keys = array();
     foreach (SpecialPageFactory::getNames() as $page) {
         $keys[$wgContLang->caseFold($page)] = $page;
     }
     foreach ($wgContLang->getSpecialPageAliases() as $page => $aliases) {
         if (!in_array($page, SpecialPageFactory::getNames())) {
             # bug 20885
             continue;
         }
         foreach ($aliases as $alias) {
             $keys[$wgContLang->caseFold($alias)] = $alias;
         }
     }
     ksort($keys);
     $srchres = array();
     $skipped = 0;
     foreach ($keys as $pageKey => $page) {
         if ($searchKey === '' || strpos($pageKey, $searchKey) === 0) {
             // bug 27671: Don't use SpecialPage::getTitleFor() here because it
             // localizes its input leading to searches for e.g. Special:All
             // returning Spezial:MediaWiki-Systemnachrichten and returning
             // Spezial:Alle_Seiten twice when $wgLanguageCode == 'de'
             if ($offset > 0 && $skipped < $offset) {
                 $skipped++;
                 continue;
             }
             $srchres[] = Title::makeTitleSafe(NS_SPECIAL, $page);
         }
         if (count($srchres) >= $limit) {
             break;
         }
     }
     return $srchres;
 }
Example #3
0
 protected function appendSpecialPageAliases($property)
 {
     global $wgContLang;
     $data = array();
     $aliases = $wgContLang->getSpecialPageAliases();
     foreach (SpecialPageFactory::getNames() as $specialpage) {
         if (isset($aliases[$specialpage])) {
             $arr = array('realname' => $specialpage, 'aliases' => $aliases[$specialpage]);
             ApiResult::setIndexedTagName($arr['aliases'], 'alias');
             $data[] = $arr;
         }
     }
     ApiResult::setIndexedTagName($data, 'specialpage');
     return $this->getResult()->addValue('query', $property, $data);
 }