helpers to get subjects/talk namespaces
authorAntoine Musso <hashar@free.fr>
Tue, 26 Jun 2012 14:45:06 +0000 (16:45 +0200)
committerAntoine Musso <hashar@free.fr>
Tue, 26 Jun 2012 20:25:59 +0000 (22:25 +0200)
Introduce two new methods to easily get array of namespaces indices
which are subjects or talks:

 MWNamespace::getSubjectNamespaces()
 MWNamespace::getTalkNamespaces()

Change-Id: I975db344afd97713521713a708368d37cd633c50

includes/Namespace.php
tests/phpunit/includes/MWNamespaceTest.php

index c87a12b..2e2b8d6 100644 (file)
@@ -339,6 +339,33 @@ class MWNamespace {
                        return $wgContentNamespaces;
                }
        }
+
+       /**
+        * List all namespace indices which are considered subject, aka not a talk
+        * or special namespace. See also MWNamespace::isSubject
+        *
+        * @return array of namespace indices
+        */
+       public static function getSubjectNamespaces() {
+               return array_filter(
+                       MWNamespace::getValidNamespaces(),
+                       'MWNamespace::isSubject'
+               );
+       }
+
+       /**
+        * List all namespace indices which are considered talks, aka not a subject
+        * or special namespace. See also MWNamespace::isTalk
+        *
+        * @return array of namespace indices
+        */
+       public static function getTalkNamespaces() {
+               return array_filter(
+                       MWNamespace::getValidNamespaces(),
+                       'MWNamespace::isTalk'
+               );
+       }
+
        /**
         * Is the namespace first-letter capitalized?
         *
index da36ffd..3b05d67 100644 (file)
@@ -437,6 +437,36 @@ class MWNamespaceTest extends MediaWikiTestCase {
                $wgContentNamespaces = $saved;
        }
 
+       /**
+        */
+       public function testGetSubjectNamespaces() {
+               $subjectsNS = MWNamespace::getSubjectNamespaces();
+               $this->assertContains(    NS_MAIN, $subjectsNS,
+                       "Talk namespaces should have NS_MAIN" );
+               $this->assertNotContains( NS_TALK, $subjectsNS,
+                       "Talk namespaces should have NS_TALK" );
+
+               $this->assertNotContains( NS_MEDIA, $subjectsNS,
+                       "Talk namespaces should not have NS_MEDIA" );
+               $this->assertNotContains( NS_SPECIAL, $subjectsNS,
+                       "Talk namespaces should not have NS_SPECIAL" );
+       }
+
+       /**
+        */
+       public function testGetTalkNamespaces() {
+               $talkNS = MWNamespace::getTalkNamespaces();
+               $this->assertContains(    NS_TALK, $talkNS,
+                       "Subject namespaces should have NS_TALK" );
+               $this->assertNotContains( NS_MAIN, $talkNS,
+                       "Subject namespaces should not have NS_MAIN" );
+
+               $this->assertNotContains( NS_MEDIA, $talkNS,
+                       "Subject namespaces should not have NS_MEDIA" );
+               $this->assertNotContains( NS_SPECIAL, $talkNS,
+                       "Subject namespaces should not have NS_SPECIAL" );
+       }
+
        /**
         * Some namespaces are always capitalized per code definition
         * in MWNamespace::$alwaysCapitalizedNamespaces