Board of Trustees vote
[lhc/web/wiklou.git] / includes / Namespace.php
1 <?php
2 # This is a utility class with only static functions
3 # for dealing with namespaces that encodes all the
4 # "magic" behaviors of them based on index. The textual
5 # names of the namespaces are handled by Language.php.
6
7 # Virtual namespaces; these don't appear in the page database:
8 define("NS_MEDIA", -2);
9 define("NS_SPECIAL", -1);
10
11 # Real namespaces:
12 define("NS_MAIN", 0);
13 define("NS_TALK", 1);
14 define("NS_USER", 2);
15 define("NS_USER_TALK", 3);
16 define("NS_WP", 4);
17 define("NS_WIKIPEDIA", 4);
18 define("NS_WP_TALK", 5);
19 define("NS_WIKIPEDIA_TALK", 5);
20 define("NS_IMAGE", 6);
21 define("NS_IMAGE_TALK", 7);
22 define("NS_MEDIAWIKI", 8);
23 define("NS_MEDIAWIKI_TALK", 9);
24 define("NS_TEMPLATE", 10);
25 define("NS_TEMPLATE_TALK", 11);
26 define("NS_HELP", 12);
27 define("NS_HELP_TALK", 13);
28 define("NS_CATEGORY", 14);
29 define("NS_CATEGORY_TALK", 15);
30
31 # These are synonyms for the names given in the language file
32 # Users and translators should not change them
33 /* private */ $wgCanonicalNamespaceNames = array(
34 NS_MEDIA => "Media",
35 NS_SPECIAL => "Special",
36 NS_TALK => "Talk",
37 NS_USER => "User",
38 NS_USER_TALK => "User_talk",
39 NS_WIKIPEDIA => "Project",
40 NS_WIKIPEDIA_TALK => "Project_talk",
41 NS_IMAGE => "Image",
42 NS_IMAGE_TALK => "Image_talk",
43 NS_MEDIAWIKI => "MediaWiki",
44 NS_MEDIAWIKI_TALK => "MediaWiki_talk",
45 NS_TEMPLATE => "Template",
46 NS_TEMPLATE_TALK => "Template_talk",
47 NS_HELP => "Help",
48 NS_HELP_TALK => "Help_talk",
49 NS_CATEGORY => "Category",
50 NS_CATEGORY_TALK => "Category_talk"
51 );
52
53 class Namespace {
54
55 /* These functions are deprecated */
56 function getSpecial() { return NS_SPECIAL; }
57 function getUser() { return NS_USER; }
58 function getWikipedia() { return NS_WP; }
59 function getImage() { return NS_IMAGE; }
60 function getMedia() { return NS_MEDIA; }
61 function getCategory() { return NS_CATEGORY; }
62
63 function isMovable( $index )
64 {
65 if ( $index < NS_MAIN || $index == NS_IMAGE || $index == NS_CATEGORY ) {
66 return false;
67 }
68 return true;
69 }
70
71 function isTalk( $index )
72 {
73 if ( NS_TALK == $index || NS_USER_TALK == $index || NS_WP_TALK
74 == $index || NS_IMAGE_TALK == $index || NS_MEDIAWIKI_TALK == $index ||
75 NS_TEMPLATE_TALK == $index || NS_HELP_TALK == $index ||
76 NS_CATEGORY_TALK == $index ) {
77 return true;
78 }
79 return false;
80 }
81
82 # Get the talk namespace corresponding to the given index
83 #
84 function getTalk( $index )
85 {
86 if ( Namespace::isTalk( $index ) ) {
87 return $index;
88 } else {
89 # FIXME
90 return $index + 1;
91 }
92 }
93
94 function getSubject( $index )
95 {
96 if ( Namespace::isTalk( $index ) ) {
97 return $index - 1;
98 } else {
99 return $index;
100 }
101 }
102
103 # Returns the canonical (English Wikipedia) name for a given index
104 function &getCanonicalName( $index )
105 {
106 global $wgCanonicalNamespaceNames;
107 return $wgCanonicalNamespaceNames[$index];
108 }
109
110 # Returns the index for a given canonical name, or NULL
111 # The input *must* be converted to lower case first
112 function &getCanonicalIndex( $name )
113 {
114 global $wgCanonicalNamespaceNames;
115 static $xNamespaces = false;
116 if ( $xNamespaces === false ) {
117 $xNamespaces = array();
118 foreach ( $wgCanonicalNamespaceNames as $i => $text ) {
119 $xNamespaces[strtolower($text)] = $i;
120 }
121 }
122 if ( array_key_exists( $name, $xNamespaces ) ) {
123 return $xNamespaces[$name];
124 } else {
125 return NULL;
126 }
127 }
128 }
129
130 ?>