From: Zheng Zhu Date: Thu, 21 Oct 2004 02:47:51 +0000 (+0000) Subject: Moving code that checks for valid link in another variant from Parser.php to Language.php X-Git-Tag: 1.5.0alpha1~1502 X-Git-Url: http://git.cyclocoop.org/%28?a=commitdiff_plain;h=ccf6536d5214cb63ee4fdd42ced722b33c0fec0a;p=lhc%2Fweb%2Fwiklou.git Moving code that checks for valid link in another variant from Parser.php to Language.php --- diff --git a/includes/Parser.php b/includes/Parser.php index 0983b531ef..d09c72c129 100644 --- a/includes/Parser.php +++ b/includes/Parser.php @@ -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(); diff --git a/languages/Language.php b/languages/Language.php index 783e223709..3c14530744 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -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