diff options
Diffstat (limited to 'www/wiki/includes/installer/WebInstallerLanguage.php')
-rw-r--r-- | www/wiki/includes/installer/WebInstallerLanguage.php | 123 |
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 ); + } + +} |