X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2FNamespace.php;h=0883011fc0dad46f0c404dcf9a5d9097ebc9ec01;hb=41ac01dfc839b4f1c32a354fe37ed064b8a31585;hp=3db1938b6405e1d3dc88b7d3d2416eb0d4b52ffa;hpb=56b5aa18ed5b4faa5a4652eec87195f86170a286;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Namespace.php b/includes/Namespace.php index 3db1938b64..0883011fc0 100644 --- a/includes/Namespace.php +++ b/includes/Namespace.php @@ -4,35 +4,6 @@ * @file */ -/** - * 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_FILE => 'File', - NS_FILE_TALK => 'File_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', -); - -/// @todo UGLY UGLY -if( is_array( $wgExtraNamespaces ) ) { - $wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces; -} - /** * This is a utility class with only static functions * for dealing with namespaces that encodes all the @@ -53,6 +24,24 @@ class MWNamespace { */ private static $alwaysCapitalizedNamespaces = array( NS_SPECIAL, NS_USER, NS_MEDIAWIKI ); + /** + * Throw an exception when trying to get the subject or talk page + * for a given namespace where it does not make sense. + * Special namespaces are defined in includes/Defines.php and have + * a value below 0 (ex: NS_SPECIAL = -1 , NS_MEDIA = -2) + * + * @param $index + * @param $method + * + * @return true + */ + private static function isMethodValidFor( $index, $method ) { + if( $index < NS_MAIN ) { + throw new MWException( "$method does not make any sense for given namespace $index" ); + } + return true; + } + /** * Can pages in the given namespace be moved? * @@ -92,6 +81,7 @@ class MWNamespace { * @return int */ public static function getTalk( $index ) { + self::isMethodValidFor( $index, __METHOD__ ); return self::isTalk( $index ) ? $index : $index + 1; @@ -99,18 +89,48 @@ class MWNamespace { /** * Get the subject namespace index for a given namespace + * Special namespaces (NS_MEDIA, NS_SPECIAL) are always the subject. * * @param $index Int: Namespace index * @return int */ public static function getSubject( $index ) { + # Handle special namespaces + if( $index < NS_MAIN ) { + return $index; + } + return self::isTalk( $index ) ? $index - 1 : $index; } + /** + * Get the associated namespace. + * For talk namespaces, returns the subject (non-talk) namespace + * For subject (non-talk) namespaces, returns the talk namespace + * + * @param $index Int: namespace index + * @return int or null if no associated namespace could be found + */ + public static function getAssociated( $index ) { + self::isMethodValidFor( $index, __METHOD__ ); + + if( self::isMain( $index ) ) { + return self::getTalk( $index ); + } elseif( self::isTalk( $index ) ) { + return self::getSubject( $index ); + } else { + return null; + } + } + /** * Returns whether the specified namespace exists + * + * @param $index + * + * @return bool */ public static function exists( $index ) { $nslist = self::getCanonicalNamespaces(); @@ -128,12 +148,10 @@ class MWNamespace { static $namespaces = null; if ( $namespaces === null ) { global $wgExtraNamespaces, $wgCanonicalNamespaceNames; + $namespaces = array( NS_MAIN => '' ) + $wgCanonicalNamespaceNames; if ( is_array( $wgExtraNamespaces ) ) { - $namespaces = $wgCanonicalNamespaceNames + $wgExtraNamespaces; - } else { - $namespaces = $wgCanonicalNamespaceNames; + $namespaces += $wgExtraNamespaces; } - $namespaces[NS_MAIN] = ''; wfRunHooks( 'CanonicalNamespaces', array( &$namespaces ) ); } return $namespaces; @@ -278,4 +296,17 @@ class MWNamespace { // Default to the global setting return $wgCapitalLinks; } + + /** + * Does the namespace (potentially) have different aliases for different + * genders. Not all languages make a distinction here. + * + * @since 1.18 + * @param $index int Index to check + * @return bool + */ + public static function hasGenderDistinction( $index ) { + return $index == NS_USER || $index == NS_USER_TALK; + } + }