Moving code that checks for valid link in another variant from Parser.php to Language.php
authorZheng Zhu <zhengzhu@users.mediawiki.org>
Thu, 21 Oct 2004 02:47:51 +0000 (02:47 +0000)
committerZheng Zhu <zhengzhu@users.mediawiki.org>
Thu, 21 Oct 2004 02:47:51 +0000 (02:47 +0000)
includes/Parser.php
languages/Language.php

index 0983b53..d09c72c 100644 (file)
@@ -1097,7 +1097,6 @@ class Parser
                static $fname = 'Parser::replaceInternalLinks' ;
                # use a counter to prevent too much unknown links from
                # being checked for different language variants.
-               static $convertCount;
                wfProfileIn( $fname );
 
                wfProfileIn( $fname.'-setup' );
@@ -1146,6 +1145,7 @@ class Parser
 
                wfProfileOut( $fname.'-setup' );
 
+               $checkVariantLink = sizeof($wgContLang->getVariants())>1;
                # Loop for each link
                for ($k = 0; isset( $a[$k] ); $k++) {
                        $line = $a[$k];
@@ -1207,30 +1207,11 @@ class Parser
 
                        #check other language variants of the link
                        #if the article does not exist
-                       if(!$wgDisableLangConversion) {
-                               global $wgContLang;
-                               $variants = $wgContLang->getVariants();
-
-                               if(sizeof($variants) > 1 && $convertCount < 200) {
-                                       $varnt = false; 
-                                       if($nt->getArticleID() == 0) {
-                                               foreach ( $variants as $v ) {
-                                                       if($v == $wgContLang->getPreferredVariant())
-                                                               continue;
-                                                       $convertCount ++;
-                                                       $varlink = $wgContLang->autoConvert($link, $v);
-                                                       $varnt = Title::newFromText($varlink);
-                                                       if($varnt && $varnt->getArticleID()>0) {
-                                                               break;
-                                                       }
-                                               }
-                                       }
-                                       if($varnt && $varnt->getArticleID()>0) {
-                                               $nt = $varnt;
-                                               $link = $varlink;
-                                       }
-                               }
+                       if( $nt->getArticleID() == 0
+                               && $checkVariantLink ) {
+                               $wgContLang->findVariantLink($link, $nt);
                        }
+
                        $ns = $nt->getNamespace();
                        $iw = $nt->getInterWiki();
                        
index 783e223..3c14530 100644 (file)
@@ -2160,6 +2160,37 @@ class Language {
                $lang = strtolower(substr(get_class($this), 8));
                return $lang;
        }
+
+       /* if a language supports multiple variants, it is
+               possible that non-existing link in one variant
+               actually exists in another variant. this function 
+               tries to find it.
+
+       */
+       function findVariantLink(&$link, &$nt) {
+               static $count=0; //used to limit this operation
+               global $wgDisableLangConversion, $wgContLang;
+               if($wgDisableLangConversion)
+                       return;
+               $variants = $wgContLang->getVariants();
+               if(sizeof($variants) > 1 && $count++<200) {
+                       if($nt->getArticleID() == 0) {
+                               foreach ( $variants as $v ) {
+                                       if($v == $wgContLang->getPreferredVariant())
+                                               continue;
+                                       $varlink = $wgContLang->autoConvert($link, $v);
+                                       $varnt = Title::newFromText($varlink);
+                                       if($varnt && $varnt->getArticleID()>0) {
+                                               $nt = $varnt;
+                                               $link = $varlink;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       }
+
+
 }
 
 # This should fail gracefully if there's not a localization available