Category namespaces
[lhc/web/wiklou.git] / includes / Namespace.php
index 3831ca0..996f523 100644 (file)
@@ -1,4 +1,4 @@
-<?
+<?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
@@ -14,11 +14,41 @@ 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"
+);
 
 class Namespace {
 
@@ -31,13 +61,15 @@ class Namespace {
 
        function isMovable( $index )
        {
-               if ( $index < NS_MAIN || $index > NS_WP_TALK ) { return false; }
+               if ( $index < NS_MAIN || $index == NS_IMAGE ) { 
+                       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 ) {
+               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 ) {
                        return true;
                }
                return false;
@@ -63,6 +95,32 @@ class Namespace {
                        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;
+               }
+       }
 }
 
 ?>