X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FNamespace.php;h=dd67b55ab9e8cb9ca841fb08803f6946fa0036e9;hb=a7e366665c449832a2e07047683a50476da2cdf0;hp=06f792a7bc4e1e63b4e98c7da03457382cd5851b;hpb=861a514de0c28404eab5acf1f5eb43f7e37362a2;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Namespace.php b/includes/Namespace.php index 06f792a7bc..dd67b55ab9 100644 --- a/includes/Namespace.php +++ b/includes/Namespace.php @@ -1,60 +1,77 @@ '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); -define("NS_HELP", 12); -define("NS_HELP_TALK", 13); +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 + * + */ 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; } + /** + * 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 || $index == NS_TEMPLATE) { - 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 ) { - 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 { @@ -63,14 +80,62 @@ class Namespace { } } - function getSubject( $index ) - { + static function getSubject( $index ) { if ( Namespace::isTalk( $index ) ) { return $index - 1; } else { return $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 + */ + static 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; + } + } + + /** + * Can this namespace ever have a talk namespace? + * @param $index Namespace index + */ + static function canTalk( $index ) { + return( $index >= NS_MAIN ); + } + + /** + * Does this namespace contain content, for the purposes + * of calculating statistics, etc? + * + * @param $index Index to check + * @return bool + */ + public static function isContent( $index ) { + global $wgContentNamespaces; + return $index == NS_MAIN || in_array( $index, $wgContentNamespaces ); + } + } ?>