ChangesListSpecialPage: skip associated for namespaces that don't have one.
authorPetr Pchelko <ppchelko@wikimedia.org>
Tue, 6 Aug 2019 19:23:21 +0000 (12:23 -0700)
committerMobrovac <mobrovac@wikimedia.org>
Wed, 7 Aug 2019 16:01:44 +0000 (16:01 +0000)
Bug: T229954
Change-Id: Ic69989c3ac60a86d58842ec34dc9e883988d785f

includes/specialpage/ChangesListSpecialPage.php
tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php

index f9b4542..bbbd6a8 100644 (file)
@@ -1504,12 +1504,17 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        $namespaces = explode( ';', $opts[ 'namespace' ] );
 
                        if ( $opts[ 'associated' ] ) {
+                               $namespaceInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
                                $associatedNamespaces = array_map(
-                                       function ( $ns ) {
-                                               return MediaWikiServices::getInstance()->getNamespaceInfo()->
-                                                       getAssociated( $ns );
+                                       function ( $ns ) use ( $namespaceInfo ){
+                                               return $namespaceInfo->getAssociated( $ns );
                                        },
-                                       $namespaces
+                                       array_filter(
+                                               $namespaces,
+                                               function ( $ns ) use ( $namespaceInfo ) {
+                                                       return $namespaceInfo->hasTalkNamespace( $ns );
+                                               }
+                                       )
                                );
                                $namespaces = array_unique( array_merge( $namespaces, $associatedNamespaces ) );
                        }
index 968db42..dff18ca 100644 (file)
@@ -169,6 +169,19 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                );
        }
 
+       public function testRcNsFilterAssociatedSpecial() {
+               $this->assertConditions(
+                       [ # expected
+                         "rc_namespace IN ('-1','0','1')",
+                       ],
+                       [
+                               'namespace' => '1;-1',
+                               'associated' => 1,
+                       ],
+                       "rc conditions with associated and special namespace"
+               );
+       }
+
        public function testRcNsFilterMultipleAssociatedInvert() {
                $this->assertConditions(
                        [ # expected