MediaWiki  master
SpecialMyLanguage.php
Go to the documentation of this file.
1 <?php
27 
38  public function __construct() {
39  parent::__construct( 'MyLanguage' );
40  }
41 
49  public function getRedirect( $subpage ) {
50  $title = $this->findTitle( $subpage );
51  // Go to the main page if given invalid title.
52  if ( !$title ) {
54  }
55  return $title;
56  }
57 
67  public function findTitle( $subpage ) {
68  // base = title without language code suffix
69  // provided = the title as it was given
70  $base = $provided = null;
71  if ( $subpage !== null ) {
72  $provided = Title::newFromText( $subpage );
73  $base = $provided;
74 
75  if ( $provided && strpos( $subpage, '/' ) !== false ) {
76  $pos = strrpos( $subpage, '/' );
77  $basepage = substr( $subpage, 0, $pos );
78  $code = substr( $subpage, $pos + 1 );
79  if ( strlen( $code ) && Language::isKnownLanguageTag( $code ) ) {
80  $base = Title::newFromText( $basepage );
81  }
82  }
83  }
84 
85  if ( !$base ) {
86  // No subpage provided or base page does not exist
87  return null;
88  }
89 
90  if ( $base->isRedirect() ) {
91  $page = new WikiPage( $base );
92  $base = $page->getRedirectTarget();
93  }
94 
95  $uiLang = $this->getLanguage();
96  $contLang = MediaWikiServices::getInstance()->getContentLanguage();
97 
98  if ( $uiLang->equals( $contLang ) ) {
99  // Short circuit when the current UI language is the
100  // wiki's default language to avoid unnecessary page lookups.
101  return $base;
102  }
103 
104  // Check for a subpage in current UI language
105  $proposed = $base->getSubpage( $uiLang->getCode() );
106  if ( $proposed && $proposed->exists() ) {
107  return $proposed;
108  }
109 
110  if ( $provided !== $base && $provided->exists() ) {
111  // Explicit language code given and the page exists
112  return $provided;
113  }
114 
115  // Check for fallback languages specified by the UI language
116  $possibilities = $uiLang->getFallbackLanguages();
117  foreach ( $possibilities as $lang ) {
118  if ( $lang !== $contLang->getCode() ) {
119  $proposed = $base->getSubpage( $lang );
120  if ( $proposed && $proposed->exists() ) {
121  return $proposed;
122  }
123  }
124  }
125 
126  // When all else has failed, return the base page
127  return $base;
128  }
129 
137  public function personallyIdentifiableTarget() {
138  return true;
139  }
140 }
static newMainPage(MessageLocalizer $localizer=null)
Create a new Title for the Main Page.
Definition: Title.php:648
if(!isset( $args[0])) $lang
getRedirect( $subpage)
If the special page is a redirect, then get the Title object it redirects to.
Unlisted special page just to redirect the user to the translated version of a page, if it exists.
findTitle( $subpage)
Assuming the user&#39;s interface language is fi.
personallyIdentifiableTarget()
Target can identify a specific user&#39;s language preference.
static isKnownLanguageTag( $tag)
Returns true if a language code is an IETF tag known to MediaWiki.
Definition: Language.php:409
getLanguage()
Shortcut to get user&#39;s language.
Superclass for any RedirectSpecialPage which redirects the user to a particular article (as opposed t...
static newFromText( $text, $defaultNamespace=NS_MAIN)
Create a new Title from text, such as what one would find in a link.
Definition: Title.php:319