From 45a3b669cc77da6d429d05bc5ec47cfc44a736b4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Robert=20Stojni=C4=87?= Date: Thu, 12 Oct 2006 10:34:49 +0000 Subject: [PATCH] Commiting diff -r 16826:16966 of serbianvariants. Enable engine for aliases like /sr-ec/Article_title Put variants into google sitemap. --- includes/DefaultSettings.php | 1 + includes/SkinTemplate.php | 2 +- includes/Title.php | 48 ++++++++++++++++++++++++++++----- languages/LanguageConverter.php | 7 +++++ maintenance/generateSitemap.php | 10 +++++++ 5 files changed, 60 insertions(+), 8 deletions(-) diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index fcc1dc1a7c..6e35b7106b 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -124,6 +124,7 @@ $wgStylePath = "{$wgScriptPath}/skins"; $wgStyleDirectory = "{$IP}/skins"; $wgStyleSheetPath = &$wgStylePath; $wgArticlePath = "{$wgScript}?title=$1"; +$wgVariantArticlePath = false; $wgUploadPath = "{$wgScriptPath}/images"; $wgUploadDirectory = "{$IP}/images"; $wgHashedUploadDirectory = true; diff --git a/includes/SkinTemplate.php b/includes/SkinTemplate.php index 482680e632..0aec865887 100644 --- a/includes/SkinTemplate.php +++ b/includes/SkinTemplate.php @@ -765,7 +765,7 @@ class SkinTemplate extends Skin { $content_actions['varlang-' . $vcount] = array( 'class' => $selected, 'text' => $varname, - 'href' => $this->mTitle->getLocalUrl( $actstr . 'variant=' . urlencode( $code ) ) + 'href' => $this->mTitle->getLocalURL('',$code) ); $vcount ++; } diff --git a/includes/Title.php b/includes/Title.php index e8ce66930c..6d06e3720d 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -769,14 +769,15 @@ class Title { * * @param string $query an optional query string, not used * for interwiki links + * @param string $variant language variant of url (for sr, zh..) * @return string the URL * @access public */ - function getFullURL( $query = '' ) { + function getFullURL( $query = '', $variant = false ) { global $wgContLang, $wgServer, $wgRequest; if ( '' == $this->mInterwiki ) { - $url = $this->getLocalUrl( $query ); + $url = $this->getLocalUrl( $query, $variant ); // Ugly quick hack to avoid duplicate prefixes (bug 4571 etc) // Correct fix would be to move the prepending elsewhere. @@ -816,11 +817,20 @@ class Title { * with action=render, $wgServer is prepended. * @param string $query an optional query string; if not specified, * $wgArticlePath will be used. + * @param string $variant language variant of url (for sr, zh..) * @return string the URL * @access public */ - function getLocalURL( $query = '' ) { + function getLocalURL( $query = '', $variant = false ) { global $wgArticlePath, $wgScript, $wgServer, $wgRequest; + global $wgVariantArticlePath, $wgContLang, $wgUser; + + // internal links should point to same variant as current page (only anonymous users) + if($variant == false && $wgContLang->hasVariants() && !$wgUser->isLoggedIn()){ + $pref = $wgContLang->getPreferredVariant(false); + if($pref != $wgContLang->getCode()) + $variant = $pref; + } if ( $this->isExternal() ) { $url = $this->getFullURL(); @@ -834,7 +844,17 @@ class Title { } else { $dbkey = wfUrlencode( $this->getPrefixedDBkey() ); if ( $query == '' ) { - $url = str_replace( '$1', $dbkey, $wgArticlePath ); + if($variant!=false && $wgContLang->hasVariants()){ + if($wgVariantArticlePath==false) + $variantArticlePath = "$wgScript?title=$1&variant=$2"; // default + else + $variantArticlePath = $wgVariantArticlePath; + + $url = str_replace( '$1', $dbkey, $variantArticlePath ); + $url = str_replace( '$2', urlencode( $variant ), $url ); + } + else + $url = str_replace( '$1', $dbkey, $wgArticlePath ); } else { global $wgActionPaths; $url = false; @@ -896,12 +916,13 @@ class Title { * internal hostname for the server from the exposed one. * * @param string $query an optional query string + * @param string $variant language variant of url (for sr, zh..) * @return string the URL * @access public */ - function getInternalURL( $query = '' ) { + function getInternalURL( $query = '', $variant = false ) { global $wgInternalServer; - $url = $wgInternalServer . $this->getLocalURL( $query ); + $url = $wgInternalServer . $this->getLocalURL( $query, $variant ); wfRunHooks( 'GetInternalURL', array( &$this, &$url, $query ) ); return $url; } @@ -1698,10 +1719,23 @@ class Title { * @access public */ function getSquidURLs() { - return array( + global $wgContLang; + + $urls = array( $this->getInternalURL(), $this->getInternalURL( 'action=history' ) ); + + // purge variant urls as well + if($wgContLang->hasVariants()){ + $variants = $wgContLang->getVariants(); + foreach($variants as $vCode){ + if($vCode==$wgContLang->getCode()) continue; // we don't want default variant + $urls[] = $this->getInternalURL('',$vCode); + } + } + + return $urls; } function purgeSquid() { diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php index a949ad4e0b..a39f9caa96 100644 --- a/languages/LanguageConverter.php +++ b/languages/LanguageConverter.php @@ -96,6 +96,13 @@ class LanguageConverter { return $req; } + // check the syntax /code/ArticleTitle + $scriptBase = basename( $_SERVER['SCRIPT_NAME'] ); + if(in_array($scriptBase,$this->mVariants)){ + $this->mPreferredVariant = $scriptBase; + return $this->mPreferredVariant; + } + // get language variant preference from logged in users // Don't call this on stub objects because that causes infinite // recursion during initialisation diff --git a/maintenance/generateSitemap.php b/maintenance/generateSitemap.php index a0b6979d0d..b8d6a5d6c1 100644 --- a/maintenance/generateSitemap.php +++ b/maintenance/generateSitemap.php @@ -264,6 +264,16 @@ class GenerateSitemap { $entry = $this->fileEntry( $title->getFullURL(), $date, $this->priority( $namespace ) ); $length += strlen( $entry ); $this->write( $this->file, $entry ); + // generate pages for language variants + if($wgContLang->hasVariants()){ + $variants = $wgContLang->getVariants(); + foreach($variants as $vCode){ + if($vCode==$wgContLang->getCode()) continue; // we don't want default variant + $entry = $this->fileEntry( $title->getFullURL('',$vCode), $date, $this->priority( $namespace ) ); + $length += strlen( $entry ); + $this->write( $this->file, $entry ); + } + } } if ( $this->file ) { $this->write( $this->file, $this->closeFile() ); -- 2.20.1