X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2FNamespace.php;h=3db1938b6405e1d3dc88b7d3d2416eb0d4b52ffa;hb=109423a6d90d877bfb8e958d08bd4e87d6bc7b40;hp=974036cf69fa94608754880d4aea5ab2bc0191a0;hpb=faac46493e1ccc6e1d0b0829e6dde0996af0db9a;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Namespace.php b/includes/Namespace.php index 974036cf69..3db1938b64 100644 --- a/includes/Namespace.php +++ b/includes/Namespace.php @@ -28,7 +28,8 @@ $wgCanonicalNamespaceNames = array( NS_CATEGORY_TALK => 'Category_talk', ); -if( isset( $wgExtraNamespaces ) && is_array( $wgExtraNamespaces ) ) { +/// @todo UGLY UGLY +if( is_array( $wgExtraNamespaces ) ) { $wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces; } @@ -46,8 +47,8 @@ if( isset( $wgExtraNamespaces ) && is_array( $wgExtraNamespaces ) ) { class MWNamespace { /** - * These namespaces should always be first-letter capitalized, now and - * forevermore. Historically, they could've probably been lowercased too, + * These namespaces should always be first-letter capitalized, now and + * forevermore. Historically, they could've probably been lowercased too, * but some things are just too ingrained now. :) */ private static $alwaysCapitalizedNamespaces = array( NS_SPECIAL, NS_USER, NS_MEDIAWIKI ); @@ -107,26 +108,47 @@ class MWNamespace { ? $index - 1 : $index; } - + /** * Returns whether the specified namespace exists */ public static function exists( $index ) { - global $wgCanonicalNamespaceNames; - return isset( $wgCanonicalNamespaceNames[$index] ); + $nslist = self::getCanonicalNamespaces(); + return isset( $nslist[$index] ); } + /** + * Returns array of all defined namespaces with their canonical + * (English) names. + * + * @return \array + * @since 1.17 + */ + public static function getCanonicalNamespaces() { + static $namespaces = null; + if ( $namespaces === null ) { + global $wgExtraNamespaces, $wgCanonicalNamespaceNames; + if ( is_array( $wgExtraNamespaces ) ) { + $namespaces = $wgCanonicalNamespaceNames + $wgExtraNamespaces; + } else { + $namespaces = $wgCanonicalNamespaceNames; + } + $namespaces[NS_MAIN] = ''; + wfRunHooks( 'CanonicalNamespaces', array( &$namespaces ) ); + } + return $namespaces; + } /** - * Returns the canonical (English Wikipedia) name for a given index + * Returns the canonical (English) name for a given index * * @param $index Int: namespace index * @return string or false if no canonical definition. */ public static function getCanonicalName( $index ) { - global $wgCanonicalNamespaceNames; - if( isset( $wgCanonicalNamespaceNames[$index] ) ) { - return $wgCanonicalNamespaceNames[$index]; + $nslist = self::getCanonicalNamespaces(); + if( isset( $nslist[$index] ) ) { + return $nslist[$index]; } else { return false; } @@ -140,11 +162,10 @@ class MWNamespace { * @return int */ public static function getCanonicalIndex( $name ) { - global $wgCanonicalNamespaceNames; static $xNamespaces = false; if ( $xNamespaces === false ) { $xNamespaces = array(); - foreach ( $wgCanonicalNamespaceNames as $i => $text ) { + foreach ( self::getCanonicalNamespaces() as $i => $text ) { $xNamespaces[strtolower($text)] = $i; } } @@ -155,6 +176,25 @@ class MWNamespace { } } + /** + * Returns an array of the namespaces (by integer id) that exist on the + * wiki. Used primarily by the api in help documentation. + * @return array + */ + public static function getValidNamespaces() { + static $mValidNamespaces = null; + + if ( is_null( $mValidNamespaces ) ) { + foreach ( array_keys( self::getCanonicalNamespaces() ) as $ns ) { + if ( $ns >= 0 ) { + $mValidNamespaces[] = $ns; + } + } + } + + return $mValidNamespaces; + } + /** * Can this namespace ever have a talk namespace? * @@ -162,7 +202,7 @@ class MWNamespace { * @return bool */ public static function canTalk( $index ) { - return $index >= NS_MAIN; + return $index >= NS_MAIN; } /** @@ -197,10 +237,25 @@ class MWNamespace { global $wgNamespacesWithSubpages; return !empty( $wgNamespacesWithSubpages[$index] ); } - + + /** + * Get a list of all namespace indices which are considered to contain content + * @return array of namespace indices + */ + public static function getContentNamespaces() { + global $wgContentNamespaces; + if( !is_array( $wgContentNamespaces ) || $wgContentNamespaces === array() ) { + return NS_MAIN; + } elseif ( !in_array( NS_MAIN, $wgContentNamespaces ) ) { + // always force NS_MAIN to be part of array (to match the algorithm used by isContent) + return array_merge( array( NS_MAIN ), $wgContentNamespaces ); + } else { + return $wgContentNamespaces; + } + } /** * Is the namespace first-letter capitalized? - * + * * @param $index int Index to check * @return bool */ @@ -208,10 +263,10 @@ class MWNamespace { global $wgCapitalLinks, $wgCapitalLinkOverrides; // Turn NS_MEDIA into NS_FILE $index = $index === NS_MEDIA ? NS_FILE : $index; - + // Make sure to get the subject of our namespace $index = self::getSubject( $index ); - + // Some namespaces are special and should always be upper case if ( in_array( $index, self::$alwaysCapitalizedNamespaces ) ) { return true;