abstract class PrefixSearch {
/**
* Do a prefix search of titles and return a list of matching page names.
- * @deprecated: Since 1.23, use TitlePrefixSearch or StringPrefixSearch classes
+ * @deprecated Since 1.23, use TitlePrefixSearch or StringPrefixSearch classes
*
* @param string $search
* @param int $limit
protected function specialSearch( $search, $limit ) {
global $wgContLang;
- # normalize searchKey, so aliases with spaces can be found - bug 25675
- $search = str_replace( ' ', '_', $search );
+ $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 );
+ $special = SpecialPageFactory::getPage( $specialTitle->getText() );
+ if ( $special ) {
+ $subpages = $special->prefixSearchSubpages( $subpageSearch, $limit );
+ return array_map( function ( $sub ) use ( $specialTitle ) {
+ return $specialTitle->getSubpage( $sub );
+ }, $subpages );
+ } else {
+ return array();
+ }
+ }
- $searchKey = $wgContLang->caseFold( $search );
+ # 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...