jenkins-bot has submitted this change and it was merged.

Change subject: Support strings in namespace weights
......................................................................


Support strings in namespace weights

This is much more convenient when specifying configuration across many wikis
that do not share consistent namespace numbering but do consistently alias
namespaces.  For example: most wikisources alias the 'Author' namespace
to the word 'Author' in their language but that namespace is sometimes 100,
sometimes 102, somtimes 104, and sometimes 106.

Bug: 69771
Change-Id: Ice3febecd8cd39c551d2809f1a88a6c8c91fae26
---
M CirrusSearch.php
M includes/Searcher.php
2 files changed, 36 insertions(+), 5 deletions(-)

Approvals:
  Chad: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/CirrusSearch.php b/CirrusSearch.php
index 08a63fb..00e9beb 100644
--- a/CirrusSearch.php
+++ b/CirrusSearch.php
@@ -260,6 +260,8 @@
 // NS_MAIN can be overriden with this then 1 just represents what NS_MAIN 
would have been....
 // If you override NS_MAIN here then NS_TALK will still default to:
 //   $wgCirrusSearchNamespaceWeights[ NS_MAIN ] * 
wgCirrusSearchTalkNamespaceWeight
+// You can specify namespace by number or string.  Strings are converted to 
numbers using the
+// content language including aliases.
 $wgCirrusSearchNamespaceWeights = array(
        NS_USER => 0.05,
        NS_PROJECT => 0.1,
diff --git a/includes/Searcher.php b/includes/Searcher.php
index bd78012..c0f57a0 100644
--- a/includes/Searcher.php
+++ b/includes/Searcher.php
@@ -8,6 +8,7 @@
 use \CirrusSearch\Search\FullTextResultsType;
 use \CirrusSearch\Search\IdResultsType;
 use \CirrusSearch\Search\ResultsType;
+use \Language;
 use \MWNamespace;
 use \PoolCounterWorkViaCallback;
 use \ProfileSection;
@@ -71,6 +72,11 @@
         * @var array(integer) namespaces in which to search
         */
        protected $namespaces;
+
+       /**
+        * @var Language language of the wiki
+        */
+       private $language;
 
        /**
         * @var ResultsType|null type of results.  null defaults to 
FullTextResultsType
@@ -169,6 +175,12 @@
        private $returnQuery = false;
 
        /**
+        * @var null|array lazily initialized version of 
$wgCirrusSearchNamespaceWeights with all string keys
+        * translated into integer namespace codes using $this->language.
+        */
+       private $normalizedNamespaceWeights = null;
+
+       /**
         * Constructor
         * @param int $offset Offset the results by this much
         * @param int $limit Limit the results to this many
@@ -178,13 +190,15 @@
         */
        public function __construct( $offset, $limit, $namespaces, $user, 
$index = false ) {
                global $wgCirrusSearchSlowSearch,
-                       $wgLanguageCode;
+                       $wgLanguageCode,
+                       $wgContLang;
 
                parent::__construct( $user, $wgCirrusSearchSlowSearch );
                $this->offset = min( $offset, self::MAX_OFFSET );
                $this->limit = $limit;
                $this->namespaces = $namespaces;
                $this->indexBaseName = $index ?: wfWikiId();
+               $this->language = $wgContLang;
                $this->escaper = new Escaper( $wgLanguageCode );
        }
 
@@ -1379,8 +1393,23 @@
                        $wgCirrusSearchDefaultNamespaceWeight,
                        $wgCirrusSearchTalkNamespaceWeight;
 
-               if ( isset( $wgCirrusSearchNamespaceWeights[ $namespace ] ) ) {
-                       return $wgCirrusSearchNamespaceWeights[ $namespace ];
+               if ( $this->normalizedNamespaceWeights === null ) {
+                       $this->normalizedNamespaceWeights = array();
+                       foreach ( $wgCirrusSearchNamespaceWeights as $ns => 
$weight ) {
+                               if ( is_string( $ns ) ) {
+                                       $ns = $this->language->getNsIndex( $ns 
);
+                                       // Ignore namespaces that don't exist.
+                                       if ( $ns === false ) {
+                                               continue;
+                                       }
+                               }
+                               // Now $ns should always be an integer.
+                               $this->normalizedNamespaceWeights[ $ns ] = 
$weight;
+                       }
+               }
+
+               if ( isset( $this->normalizedNamespaceWeights[ $namespace ] ) ) 
{
+                       return $this->normalizedNamespaceWeights[ $namespace ];
                }
                if ( MWNamespace::isSubject( $namespace ) ) {
                        if ( $namespace === NS_MAIN ) {
@@ -1389,8 +1418,8 @@
                        return $wgCirrusSearchDefaultNamespaceWeight;
                }
                $subjectNs = MWNamespace::getSubject( $namespace );
-               if ( isset( $wgCirrusSearchNamespaceWeights[ $subjectNs ] ) ) {
-                       return $wgCirrusSearchTalkNamespaceWeight * 
$wgCirrusSearchNamespaceWeights[ $subjectNs ];
+               if ( isset( $this->normalizedNamespaceWeights[ $subjectNs ] ) ) 
{
+                       return $wgCirrusSearchTalkNamespaceWeight * 
$this->normalizedNamespaceWeights[ $subjectNs ];
                }
                if ( $namespace === NS_TALK ) {
                        return $wgCirrusSearchTalkNamespaceWeight;

-- 
To view, visit https://gerrit.wikimedia.org/r/161020
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ice3febecd8cd39c551d2809f1a88a6c8c91fae26
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/CirrusSearch
Gerrit-Branch: master
Gerrit-Owner: Manybubbles <never...@wikimedia.org>
Gerrit-Reviewer: Chad <ch...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to