X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialMyLanguage.php;h=9cb6d4b52911c52c6adcaf7ef04e7c77619e402c;hb=45b00db7330f12180f4b3cd9ba1404a710ee75b6;hp=71b18930c8078b6932b5440f58f2774dfea1c0cd;hpb=91b07c5e0950572fb41f7d8f466fb6b3bbe98be5;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialMyLanguage.php b/includes/specials/SpecialMyLanguage.php index 71b18930c8..9cb6d4b529 100644 --- a/includes/specials/SpecialMyLanguage.php +++ b/includes/specials/SpecialMyLanguage.php @@ -41,11 +41,11 @@ class SpecialMyLanguage extends RedirectSpecialArticle { * If the special page is a redirect, then get the Title object it redirects to. * False otherwise. * - * @param string $par Subpage string - * @return Title|bool + * @param string|null $subpage + * @return Title */ - public function getRedirect( $par ) { - $title = $this->findTitle( $par ); + public function getRedirect( $subpage ) { + $title = $this->findTitle( $subpage ); // Go to the main page if given invalid title. if ( !$title ) { $title = Title::newMainPage(); @@ -59,18 +59,22 @@ class SpecialMyLanguage extends RedirectSpecialArticle { * it returns Page/fi if it exists, otherwise Page/de if it exists, * otherwise Page. * - * @param string $par + * @param string|null $subpage * @return Title|null */ - public function findTitle( $par ) { + public function findTitle( $subpage ) { // base = title without language code suffix // provided = the title as it was given - $base = $provided = Title::newFromText( $par ); + $base = $provided = null; + if ( $subpage !== null ) { + $provided = Title::newFromText( $subpage ); + $base = $provided; + } - if ( $base && strpos( $par, '/' ) !== false ) { - $pos = strrpos( $par, '/' ); - $basepage = substr( $par, 0, $pos ); - $code = substr( $par, $pos + 1 ); + if ( $provided && strpos( $subpage, '/' ) !== false ) { + $pos = strrpos( $subpage, '/' ); + $basepage = substr( $subpage, 0, $pos ); + $code = substr( $subpage, $pos + 1 ); if ( strlen( $code ) && Language::isKnownLanguageTag( $code ) ) { $base = Title::newFromText( $basepage ); } @@ -80,9 +84,14 @@ class SpecialMyLanguage extends RedirectSpecialArticle { return null; } + if ( $base->isRedirect() ) { + $page = new WikiPage( $base ); + $base = $page->getRedirectTarget(); + } + $uiCode = $this->getLanguage()->getCode(); $proposed = $base->getSubpage( $uiCode ); - if ( $uiCode !== $this->getConfig()->get( 'LanguageCode' ) && $proposed && $proposed->exists() ) { + if ( $proposed && $proposed->exists() && $uiCode !== $base->getPageLanguage()->getCode() ) { return $proposed; } elseif ( $provided && $provided->exists() ) { return $provided; @@ -90,4 +99,15 @@ class SpecialMyLanguage extends RedirectSpecialArticle { return $base; } } + + /** + * Target can identify a specific user's language preference. + * + * @see T109724 + * @since 1.27 + * @return bool + */ + public function personallyIdentifiableTarget() { + return true; + } }