MediaWiki  1.28.0
WebInstallerLanguage.php
Go to the documentation of this file.
1 <?php
23 
27  public function execute() {
29  $r = $this->parent->request;
30  $userLang = $r->getVal( 'uselang' );
31  $contLang = $r->getVal( 'ContLang' );
32 
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 = '' ) {
102 
103  $output = $helpHtml;
104 
105  $select = new XmlSelect( $name, $name, $selectedCode );
106  $select->setAttribute( 'tabindex', $this->parent->nextTabIndex() );
107 
109  ksort( $languages );
110  foreach ( $languages as $code => $lang ) {
111  if ( isset( $wgDummyLanguageCodes[$code] ) ) {
112  continue;
113  }
114  $select->addOption( "$code - $lang", $code );
115  }
116 
117  $output .= $select->getHTML();
118  return $this->parent->label( $label, $name, $output );
119  }
120 
121 }
Abstract class to define pages for the web installer.
setVar($name, $value)
if(!isset($args[0])) $lang
static hidden($name, $value, array $attribs=[])
Convenience function to produce an input element with type=hidden.
Definition: Html.php:758
Class for generating HTML " for selecting languages.
endForm($continue= 'continue', $back= 'back')
Allows to change the fields on the form that will be generated $name
Definition: hooks.txt:300