1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* This program is free software; you can redistribute it and/or modify |
4
|
|
|
* it under the terms of the GNU General Public License as published by |
5
|
|
|
* the Free Software Foundation; either version 2 of the License, or |
6
|
|
|
* (at your option) any later version. |
7
|
|
|
* |
8
|
|
|
* This program is distributed in the hope that it will be useful, |
9
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
10
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
11
|
|
|
* GNU General Public License for more details. |
12
|
|
|
* |
13
|
|
|
* You should have received a copy of the GNU General Public License along |
14
|
|
|
* with this program; if not, write to the Free Software Foundation, Inc., |
15
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
16
|
|
|
* http://www.gnu.org/copyleft/gpl.html |
17
|
|
|
* |
18
|
|
|
* @file |
19
|
|
|
* @ingroup Deployment |
20
|
|
|
*/ |
21
|
|
|
|
22
|
|
|
class WebInstallerLanguage extends WebInstallerPage { |
23
|
|
|
|
24
|
|
|
/** |
25
|
|
|
* @return string|null |
26
|
|
|
*/ |
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(); |
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
|
|
|
|
90
|
|
|
/** |
91
|
|
|
* Get a "<select>" for selecting languages. |
92
|
|
|
* |
93
|
|
|
* @param string $name |
94
|
|
|
* @param string $label |
95
|
|
|
* @param string $selectedCode |
96
|
|
|
* @param string $helpHtml |
97
|
|
|
* |
98
|
|
|
* @return string |
99
|
|
|
*/ |
100
|
|
|
public function getLanguageSelector( $name, $label, $selectedCode, $helpHtml = '' ) { |
101
|
|
|
global $wgDummyLanguageCodes; |
102
|
|
|
|
103
|
|
|
$output = $helpHtml; |
104
|
|
|
|
105
|
|
|
$select = new XmlSelect( $name, $name, $selectedCode ); |
106
|
|
|
$select->setAttribute( 'tabindex', $this->parent->nextTabIndex() ); |
107
|
|
|
|
108
|
|
|
$languages = Language::fetchLanguageNames(); |
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
|
|
|
} |
122
|
|
|
|
In PHP, under loose comparison (like
==
, or!=
, orswitch
conditions), values of different types might be equal.For
string
values, the empty string''
is a special case, in particular the following results might be unexpected: