MediaWiki  master
WebInstallerLanguage.php
Go to the documentation of this file.
1 <?php
23 
27  public function execute() {
28  global $wgLang;
29  $r = $this->parent->request;
30  $userLang = $r->getVal( 'uselang' );
31  $contLang = $r->getVal( 'ContLang' );
32 
33  $languages = Language::fetchLanguageNames( null, 'mwfile' );
34  $lifetime = intval( ini_get( 'session.gc_maxlifetime' ) );
35  if ( !$lifetime ) {
36  $lifetime = 1440; // PHP default
37  }
38 
39  if ( $r->wasPosted() ) {
40  # Do session test
41  if ( $this->parent->getSession( 'test' ) === null ) {
42  $requestTime = $r->getVal( 'LanguageRequestTime' );
43  if ( !$requestTime ) {
44  // The most likely explanation is that the user was knocked back
45  // from another page on POST due to session expiry
46  $msg = 'config-session-expired';
47  } elseif ( time() - $requestTime > $lifetime ) {
48  $msg = 'config-session-expired';
49  } else {
50  $msg = 'config-no-session';
51  }
52  $this->parent->showError( $msg, $wgLang->formatTimePeriod( $lifetime ) );
53  } else {
54  if ( isset( $languages[$userLang] ) ) {
55  $this->setVar( '_UserLang', $userLang );
56  }
57  if ( isset( $languages[$contLang] ) ) {
58  $this->setVar( 'wgLanguageCode', $contLang );
59  }
60 
61  return 'continue';
62  }
63  } elseif ( $this->parent->showSessionWarning ) {
64  # The user was knocked back from another page to the start
65  # This probably indicates a session expiry
66  $this->parent->showError( 'config-session-expired',
67  $wgLang->formatTimePeriod( $lifetime ) );
68  }
69 
70  $this->parent->setSession( 'test', true );
71 
72  if ( !isset( $languages[$userLang] ) ) {
73  $userLang = $this->getVar( '_UserLang', 'en' );
74  }
75  if ( !isset( $languages[$contLang] ) ) {
76  $contLang = $this->getVar( 'wgLanguageCode', 'en' );
77  }
78  $this->startForm();
79  $s = Html::hidden( 'LanguageRequestTime', time() ) .
80  $this->getLanguageSelector( 'uselang', 'config-your-language', $userLang,
81  $this->parent->getHelpBox( 'config-your-language-help' ) ) .
82  $this->getLanguageSelector( 'ContLang', 'config-wiki-language', $contLang,
83  $this->parent->getHelpBox( 'config-wiki-language-help' ) );
84  $this->addHTML( $s );
85  $this->endForm( 'continue', false );
86 
87  return null;
88  }
89 
100  public function getLanguageSelector( $name, $label, $selectedCode, $helpHtml = '' ) {
101  $output = $helpHtml;
102 
103  $select = new XmlSelect( $name, $name, $selectedCode );
104  $select->setAttribute( 'tabindex', $this->parent->nextTabIndex() );
105 
106  $languages = Language::fetchLanguageNames( null, 'mwfile' );
107  foreach ( $languages as $code => $lang ) {
108  $select->addOption( "$code - $lang", $code );
109  }
110 
111  $output .= $select->getHTML();
112  return $this->parent->label( $label, $name, $output );
113  }
114 
115 }
Abstract class to define pages for the web installer.
static fetchLanguageNames( $inLanguage=self::AS_AUTONYMS, $include='mw')
Get an array of language names, indexed by code.
Definition: Language.php:814
setVar( $name, $value)
if(!isset( $args[0])) $lang
Class for generating HTML <select> or <datalist> elements.
Definition: XmlSelect.php:26
getLanguageSelector( $name, $label, $selectedCode, $helpHtml='')
Get a "<select>" for selecting languages.
$wgLang
Definition: Setup.php:856
static hidden( $name, $value, array $attribs=[])
Convenience function to produce an input element with type=hidden.
Definition: Html.php:802
getVar( $var, $default=null)
endForm( $continue='continue', $back='back')
switch( $options['output']) $languages
Definition: transstat.php:76