https://www.mediawiki.org/wiki/Special:Code/MediaWiki/112402

Revision: 112402
Author:   robin
Date:     2012-02-25 17:19:55 +0000 (Sat, 25 Feb 2012)
Log Message:
-----------
(Bug 34680) Make babel extension case aware in order to avoid clashes with 
existing user templates.
This gives precedence to existing templates when the code contains one or more 
uppercase letters (e.g. TeX). For lowercase codes, it still gives precedence to 
built-in boxes (introduced in r105540).

Modified Paths:
--------------
    trunk/extensions/Babel/Babel.class.php

Modified: trunk/extensions/Babel/Babel.class.php
===================================================================
--- trunk/extensions/Babel/Babel.class.php      2012-02-25 17:18:20 UTC (rev 
112401)
+++ trunk/extensions/Babel/Babel.class.php      2012-02-25 17:19:55 UTC (rev 
112402)
@@ -40,17 +40,24 @@
                        if ( $name === '' ) {
                                continue;
                        } elseif ( $components !== false ) {
-                               // Non-existent page and valid parameter 
syntax, babel box
+                               // Valid parameter syntax (with lowercase 
language code), babel box
                                $content .= self::mGenerateBox( 
$components['code'], $components['level'] );
                                $content .= self::mGenerateCategories( 
$components['code'], $components['level'] );
                        } elseif ( self::mPageExists( $template ) ) {
-                               // Check for a template
+                               // Check for an existing template
                                $templateParameters[0] = $template;
                                $template = implode( '|', $templateParameters );
                                $content .= self::mGenerateNotaBox( 
$parser->replaceVariables( "{{{$template}}}" ) );
                        } elseif ( self::mValidTitle( $template ) ) {
-                               // Non-existent page and invalid parameter 
syntax, red link.
-                               $content .= self::mGenerateNotaBox( '[[' . 
$template . ']]' );
+                               // Non-existing page, so try again as a babel 
box, with converting the code to lowercase
+                               $components2 = self::mParseParameter( $name, /* 
code to lowercase */ true );
+                               if ( $components2 !== false ) {
+                                       $content .= self::mGenerateBox( 
$components2['code'], $components2['level'] );
+                                       $content .= self::mGenerateCategories( 
$components2['code'], $components2['level'] );
+                               } else {
+                                       // Non-existent page and invalid 
parameter syntax, red link.
+                                       $content .= self::mGenerateNotaBox( 
'[[' . $template . ']]' );
+                               }
                        } else {
                                // Invalid title, output raw.
                                $content .= self::mGenerateNotaBox( $template );
@@ -146,13 +153,14 @@
         * Parse a parameter, getting a language code and level.
         *
         * @param $parameter String: Parameter.
+        * @param $strtolower Boolean: Whether to convert the language code to 
lowercase
         * @return Array: { 'code' => xx, 'level' => xx }
         */
-       protected static function mParseParameter( $parameter ) {
+       protected static function mParseParameter( $parameter, $strtolower = 
false ) {
                global $wgBabelDefaultLevel, $wgBabelCategoryNames;
                $return = array();
 
-               $babelcode = strtolower( $parameter );
+               $babelcode = $strtolower ? strtolower( $parameter ) : 
$parameter;
                // Try treating the paramter as a language code (for default 
level).
                $code = BabelLanguageCodes::getCode( $babelcode );
                if ( $code !== false ) {
@@ -168,7 +176,7 @@
                $code  = substr( $parameter, 0, $lastSplit );
                $level = substr( $parameter, $lastSplit + 1 );
 
-               $babelcode = strtolower( $code );
+               $babelcode = $strtolower ? strtolower( $code ) : $code;
                // Validate code.
                $return['code'] = BabelLanguageCodes::getCode( $babelcode );
                if ( $return['code'] === false ) {


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to