|
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!=, orswitchconditions), values of different types might be equal.For
stringvalues, the empty string''is a special case, in particular the following results might be unexpected: