From 8b890bbe1bd15a05b373ba0a4d3260f125fbb0ae Mon Sep 17 00:00:00 2001 From: dcausse Date: Mon, 19 Sep 2016 15:50:05 +0200 Subject: [PATCH] Extract replacePrefixes into a static method Useful for some search engines that have a keyword that wants to reuse this logic without building a new SearchEngine object. Change-Id: Iee5bfd1da70b8339a98555ba062bd33b21f0b761 --- includes/search/SearchEngine.php | 34 +++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/includes/search/SearchEngine.php b/includes/search/SearchEngine.php index 1eba14119e..fb9b8a351c 100644 --- a/includes/search/SearchEngine.php +++ b/includes/search/SearchEngine.php @@ -267,36 +267,60 @@ abstract class SearchEngine { /** * Parse some common prefixes: all (search everything) - * or namespace names + * or namespace names and set the list of namespaces + * of this class accordingly. * * @param string $query * @return string */ function replacePrefixes( $query ) { + $queryAndNs = self::parseNamespacePrefixes( $query ); + if ( $queryAndNs === false ) { + return $query; + } + $this->namespaces = $queryAndNs[1]; + return $queryAndNs[0]; + } + + /** + * Parse some common prefixes: all (search everything) + * or namespace names + * + * @param string $query + * @return false|array false if no namespace was extracted, an array + * with the parsed query at index 0 and an array of namespaces at index + * 1 (or null for all namespaces). + */ + public static function parseNamespacePrefixes( $query ) { global $wgContLang; $parsed = $query; if ( strpos( $query, ':' ) === false ) { // nothing to do - return $parsed; + return false; } + $extractedNamespace = null; $allkeyword = wfMessage( 'searchall' )->inContentLanguage()->text() . ":"; if ( strncmp( $query, $allkeyword, strlen( $allkeyword ) ) == 0 ) { - $this->namespaces = null; + $extractedNamespace = null; $parsed = substr( $query, strlen( $allkeyword ) ); } elseif ( strpos( $query, ':' ) !== false ) { + // TODO: should we unify with PrefixSearch::extractNamespace ? $prefix = str_replace( ' ', '_', substr( $query, 0, strpos( $query, ':' ) ) ); $index = $wgContLang->getNsIndex( $prefix ); if ( $index !== false ) { - $this->namespaces = [ $index ]; + $extractedNamespace = [ $index ]; $parsed = substr( $query, strlen( $prefix ) + 1 ); + } else { + return false; } } + if ( trim( $parsed ) == '' ) { $parsed = $query; // prefix was the whole query } - return $parsed; + return [ $parsed, $extractedNamespace ]; } /** -- 2.20.1