Changing lines like this: "extract( $dbw->tableNames( 'page', 'archive' ) );" to...
[lhc/web/wiklou.git] / includes / Namespace.php
index a989e90..73dc296 100644 (file)
@@ -1,88 +1,79 @@
 <?php
-# This is a utility class with only static functions
-# for dealing with namespaces that encodes all the
-# "magic" behaviors of them based on index.  The textual
-# names of the namespaces are handled by Language.php.
+/**
+ * Provide things related to namespaces
+ * @package MediaWiki
+ */
 
-# Virtual namespaces; these don't appear in the page database:
-define("NS_MEDIA", -2);
-define("NS_SPECIAL", -1);
-
-# Real namespaces:
-define("NS_MAIN", 0);
-define("NS_TALK", 1);
-define("NS_USER", 2);
-define("NS_USER_TALK", 3);
-define("NS_WP", 4);
-define("NS_WIKIPEDIA", 4);
-define("NS_WP_TALK", 5);
-define("NS_WIKIPEDIA_TALK", 5);
-define("NS_IMAGE", 6);
-define("NS_IMAGE_TALK", 7);
-define("NS_MEDIAWIKI", 8);
-define("NS_MEDIAWIKI_TALK", 9);
-define("NS_TEMPLATE", 10);
-define("NS_TEMPLATE_TALK", 11);
-define("NS_HELP", 12);
-define("NS_HELP_TALK", 13);
-define("NS_CATEGORY", 14);
-define("NS_CATEGORY_TALK", 15);
-
-# These are synonyms for the names given in the language file
-# Users and translators should not change them
-/* private */ $wgCanonicalNamespaceNames = array(
-       NS_MEDIA            => "Media",
-       NS_SPECIAL          => "Special",
-       NS_TALK             => "Talk",
-       NS_USER             => "User",
-       NS_USER_TALK        => "User_talk",
-       NS_WIKIPEDIA        => "Project",
-       NS_WIKIPEDIA_TALK   => "Project_talk",
-       NS_IMAGE            => "Image",
-       NS_IMAGE_TALK       => "Image_talk",
-       NS_MEDIAWIKI        => "MediaWiki",
-       NS_MEDIAWIKI_TALK   => "MediaWiki_talk",
-       NS_TEMPLATE         => "Template",
-       NS_TEMPLATE_TALK    => "Template_talk",
-       NS_HELP             => "Help",
-       NS_HELP_TALK        => "Help_talk",
-       NS_CATEGORY         => "Category",
-       NS_CATEGORY_TALK    => "Category_talk"
+/**
+ * Definitions of the NS_ constants are in Defines.php
+ * @private
+ */
+$wgCanonicalNamespaceNames = array(
+       NS_MEDIA            => 'Media',
+       NS_SPECIAL          => 'Special',
+       NS_TALK             => 'Talk',
+       NS_USER             => 'User',
+       NS_USER_TALK        => 'User_talk',
+       NS_PROJECT          => 'Project',
+       NS_PROJECT_TALK     => 'Project_talk',
+       NS_IMAGE            => 'Image',
+       NS_IMAGE_TALK       => 'Image_talk',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki_talk',
+       NS_TEMPLATE         => 'Template',
+       NS_TEMPLATE_TALK    => 'Template_talk',
+       NS_HELP             => 'Help',
+       NS_HELP_TALK        => 'Help_talk',
+       NS_CATEGORY             => 'Category',
+       NS_CATEGORY_TALK    => 'Category_talk',
 );
 
+if( is_array( $wgExtraNamespaces ) ) {
+       $wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces;
+}
+
+/**
+ * This is a utility class with only static functions
+ * for dealing with namespaces that encodes all the
+ * "magic" behaviors of them based on index.  The textual
+ * names of the namespaces are handled by Language.php.
+ *
+ * These are synonyms for the names given in the language file
+ * Users and translators should not change them
+ *
+ * @package MediaWiki
+ */
 class Namespace {
 
-       /* These functions are deprecated */
-       function getSpecial() { return NS_SPECIAL; }
-       function getUser() { return NS_USER; }
-       function getWikipedia() { return NS_WP; }
-       function getImage() { return NS_IMAGE; }
-       function getMedia() { return NS_MEDIA; }
-       function getCategory() { return NS_CATEGORY; }
+       /**
+        * Check if the given namespace might be moved
+        * @return bool
+        */
+       static function isMovable( $index ) {
+               return !( $index < NS_MAIN || $index == NS_IMAGE  || $index == NS_CATEGORY );
+       }
 
-       function isMovable( $index )
-       {
-               if ( $index < NS_MAIN || $index == NS_IMAGE ) { 
-                       return false; 
-               }
-               return true;
+       /**
+        * Check if the given namespace is not a talk page
+        * @return bool
+        */
+       static function isMain( $index ) {
+               return ! Namespace::isTalk( $index );
        }
 
-       function isTalk( $index )
-       {
-               if ( NS_TALK == $index || NS_USER_TALK == $index || NS_WP_TALK
-       == $index || NS_IMAGE_TALK == $index || NS_MEDIAWIKI_TALK == $index ||
-       NS_TEMPLATE_TALK == $index || NS_HELP_TALK == $index ||
-       NS_CATEGORY_TALK ) {
-                       return true;
-               }
-               return false;
+       /**
+        * Check if the give namespace is a talk page
+        * @return bool
+        */
+       static function isTalk( $index ) {
+               return ($index > NS_MAIN)  // Special namespaces are negative
+                       && ($index % 2); // Talk namespaces are odd-numbered
        }
 
-       # Get the talk namespace corresponding to the given index
-       #
-       function getTalk( $index )
-       {
+       /**
+        * Get the talk namespace corresponding to the given index
+        */
+       static function getTalk( $index ) {
                if ( Namespace::isTalk( $index ) ) {
                        return $index;
                } else {
@@ -91,8 +82,7 @@ class Namespace {
                }
        }
 
-       function getSubject( $index )
-       {
+       static function getSubject( $index ) {
                if ( Namespace::isTalk( $index ) ) {
                        return $index - 1;
                } else {
@@ -100,17 +90,19 @@ class Namespace {
                }
        }
 
-       # Returns the canonical (English Wikipedia) name for a given index
-       function &getCanonicalName( $index )
-       {
+       /**
+        * Returns the canonical (English Wikipedia) name for a given index
+        */
+       static function getCanonicalName( $index ) {
                global $wgCanonicalNamespaceNames;
                return $wgCanonicalNamespaceNames[$index];
        }
 
-       # Returns the index for a given canonical name, or NULL
-       # The input *must* be converted to lower case first
-       function &getCanonicalIndex( $name )
-       {
+       /**
+        * Returns the index for a given canonical name, or NULL
+        * The input *must* be converted to lower case first
+        */
+       static function getCanonicalIndex( $name ) {
                global $wgCanonicalNamespaceNames;
                static $xNamespaces = false;
                if ( $xNamespaces === false ) {
@@ -125,6 +117,13 @@ class Namespace {
                        return NULL;
                }
        }
+       
+       /**
+        * Can this namespace ever have a talk namespace?
+        * @param $index Namespace index
+        */
+        static function canTalk( $index ) {
+               return( $index >= NS_MAIN );
+        }
 }
-
 ?>