* Removed messages in English, they'll be inherited from the parent.
[lhc/web/wiklou.git] / includes / Namespace.php
index 656539c..f0992a7 100644 (file)
@@ -1,58 +1,86 @@
 <?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
+ */
+/**
+ * This is not a valid entry point, perform no further processing unless MEDIAWIKI is defined
+ */
+if( defined( 'MEDIAWIKI' ) ) {
 
-# Virtual namespaces; these don't appear in the page database:
-define("NS_MEDIA", -2);
-define("NS_SPECIAL", -1);
+/**
+ * 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',
+);
 
-# 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);
+if( defined( 'MEDIAWIKI' ) && 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 isMovable( $index )
-       {
-               if ( $index < NS_MAIN || $index == NS_IMAGE || $index == NS_TEMPLATE) { 
+       /**
+        * Check if the given namespace might be moved
+        * @return bool
+        */
+       function isMovable( $index ) {
+               if ( $index < NS_MAIN || $index == NS_IMAGE  || $index == NS_CATEGORY ) { 
                        return false; 
                }
                return true;
        }
 
-       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 ) {
-                       return true;
-               }
-               return false;
+       /**
+        * Check if the give namespace is a talk page
+        * @return bool
+        */
+       function isTalk( $index ) {
+               global $wgExtraNamespaces;
+               return ( $index == NS_TALK           || $index == NS_USER_TALK     ||
+                                $index == NS_PROJECT_TALK   || $index == NS_IMAGE_TALK    ||
+                                $index == NS_MEDIAWIKI_TALK || $index == NS_TEMPLATE_TALK ||
+                                $index == NS_HELP_TALK      || $index == NS_CATEGORY_TALK 
+                                ||  ( (isset($wgExtraNamespaces) && $index % 2) )
+                                );
+               
        }
 
-       # Get the talk namespace corresponding to the given index
-       #
-       function getTalk( $index )
-       {
+       /**
+        * Get the talk namespace corresponding to the given index
+        */
+       function getTalk( $index ) {
                if ( Namespace::isTalk( $index ) ) {
                        return $index;
                } else {
@@ -61,14 +89,42 @@ class Namespace {
                }
        }
 
-       function getSubject( $index )
-       {
+       function getSubject( $index ) {
                if ( Namespace::isTalk( $index ) ) {
                        return $index - 1;
                } else {
                        return $index;
                }
        }
+
+       /**
+        * Returns the canonical (English Wikipedia) name for a given index
+        */
+       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 ) {
+               global $wgCanonicalNamespaceNames;
+               static $xNamespaces = false;
+               if ( $xNamespaces === false ) {
+                       $xNamespaces = array();
+                       foreach ( $wgCanonicalNamespaceNames as $i => $text ) {
+                               $xNamespaces[strtolower($text)] = $i;
+                       }
+               }
+               if ( array_key_exists( $name, $xNamespaces ) ) {
+                       return $xNamespaces[$name];
+               } else {
+                       return NULL;
+               }
+       }
 }
 
+}
 ?>