summaryrefslogtreecommitdiff
path: root/www/wiki/includes/installer/WebInstallerLanguage.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/includes/installer/WebInstallerLanguage.php')
-rw-r--r--www/wiki/includes/installer/WebInstallerLanguage.php123
1 files changed, 123 insertions, 0 deletions
diff --git a/www/wiki/includes/installer/WebInstallerLanguage.php b/www/wiki/includes/installer/WebInstallerLanguage.php
new file mode 100644
index 00000000..bce07d31
--- /dev/null
+++ b/www/wiki/includes/installer/WebInstallerLanguage.php
@@ -0,0 +1,123 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Deployment
+ */
+
+class WebInstallerLanguage extends WebInstallerPage {
+
+ /**
+ * @return string|null
+ */
+ public function execute() {
+ global $wgLang;
+ $r = $this->parent->request;
+ $userLang = $r->getVal( 'uselang' );
+ $contLang = $r->getVal( 'ContLang' );
+
+ $languages = Language::fetchLanguageNames();
+ $lifetime = intval( ini_get( 'session.gc_maxlifetime' ) );
+ if ( !$lifetime ) {
+ $lifetime = 1440; // PHP default
+ }
+
+ if ( $r->wasPosted() ) {
+ # Do session test
+ if ( $this->parent->getSession( 'test' ) === null ) {
+ $requestTime = $r->getVal( 'LanguageRequestTime' );
+ if ( !$requestTime ) {
+ // The most likely explanation is that the user was knocked back
+ // from another page on POST due to session expiry
+ $msg = 'config-session-expired';
+ } elseif ( time() - $requestTime > $lifetime ) {
+ $msg = 'config-session-expired';
+ } else {
+ $msg = 'config-no-session';
+ }
+ $this->parent->showError( $msg, $wgLang->formatTimePeriod( $lifetime ) );
+ } else {
+ if ( isset( $languages[$userLang] ) ) {
+ $this->setVar( '_UserLang', $userLang );
+ }
+ if ( isset( $languages[$contLang] ) ) {
+ $this->setVar( 'wgLanguageCode', $contLang );
+ }
+
+ return 'continue';
+ }
+ } elseif ( $this->parent->showSessionWarning ) {
+ # The user was knocked back from another page to the start
+ # This probably indicates a session expiry
+ $this->parent->showError( 'config-session-expired',
+ $wgLang->formatTimePeriod( $lifetime ) );
+ }
+
+ $this->parent->setSession( 'test', true );
+
+ if ( !isset( $languages[$userLang] ) ) {
+ $userLang = $this->getVar( '_UserLang', 'en' );
+ }
+ if ( !isset( $languages[$contLang] ) ) {
+ $contLang = $this->getVar( 'wgLanguageCode', 'en' );
+ }
+ $this->startForm();
+ $s = Html::hidden( 'LanguageRequestTime', time() ) .
+ $this->getLanguageSelector( 'uselang', 'config-your-language', $userLang,
+ $this->parent->getHelpBox( 'config-your-language-help' ) ) .
+ $this->getLanguageSelector( 'ContLang', 'config-wiki-language', $contLang,
+ $this->parent->getHelpBox( 'config-wiki-language-help' ) );
+ $this->addHTML( $s );
+ $this->endForm( 'continue', false );
+
+ return null;
+ }
+
+ /**
+ * Get a "<select>" for selecting languages.
+ *
+ * @param string $name
+ * @param string $label
+ * @param string $selectedCode
+ * @param string $helpHtml
+ *
+ * @return string
+ */
+ public function getLanguageSelector( $name, $label, $selectedCode, $helpHtml = '' ) {
+ global $wgExtraLanguageCodes;
+
+ $output = $helpHtml;
+
+ $select = new XmlSelect( $name, $name, $selectedCode );
+ $select->setAttribute( 'tabindex', $this->parent->nextTabIndex() );
+
+ $unwantedLanguageCodes = $wgExtraLanguageCodes +
+ LanguageCode::getDeprecatedCodeMapping();
+ $languages = Language::fetchLanguageNames();
+ ksort( $languages );
+ foreach ( $languages as $code => $lang ) {
+ if ( isset( $unwantedLanguageCodes[$code] ) ) {
+ continue;
+ }
+ $select->addOption( "$code - $lang", $code );
+ }
+
+ $output .= $select->getHTML();
+ return $this->parent->label( $label, $name, $output );
+ }
+
+}