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