diff options
Diffstat (limited to 'www/wiki/extensions/Translate/utils/UserToggles.php')
-rw-r--r-- | www/wiki/extensions/Translate/utils/UserToggles.php | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/utils/UserToggles.php b/www/wiki/extensions/Translate/utils/UserToggles.php new file mode 100644 index 00000000..b3205598 --- /dev/null +++ b/www/wiki/extensions/Translate/utils/UserToggles.php @@ -0,0 +1,101 @@ +<?php +/** + * Contains classes for addition of extension specific preference settings. + * + * @file + * @author Siebrand Mazeland + * @author Niklas Laxström + * @copyright Copyright © 2008-2010 Siebrand Mazeland, Niklas Laxström + * @license GPL-2.0-or-later + */ + +/** + * Class to add Translate specific preference settings. + */ +class TranslatePreferences { + /** + * Add 'translate-pref-nonewsletter' preference. + * This is most probably specific to translatewiki.net. Can be enabled + * with $wgTranslateNewsletterPreference. + * @param User $user + * @param array &$preferences + * @return bool + */ + public static function onGetPreferences( User $user, array &$preferences ) { + global $wgTranslateNewsletterPreference; + + if ( !$wgTranslateNewsletterPreference ) { + return true; + } + + global $wgEnableEmail; + + // Only show if email is enabled and user has a confirmed email address. + if ( $wgEnableEmail && $user->isEmailConfirmed() ) { + // 'translate-pref-nonewsletter' is used as opt-out for + // users with a confirmed email address + $preferences['translate-nonewsletter'] = [ + 'type' => 'toggle', + 'section' => 'personal/email', + 'label-message' => 'translate-pref-nonewsletter' + ]; + + } + } + + /** + * Add 'translate-editlangs' preference. + * These are the languages also shown when translating. + * + * @param User $user + * @param array &$preferences + * @return bool true + */ + public static function translationAssistLanguages( User $user, &$preferences ) { + // Get selector. + $select = self::languageSelector(); + // Set target ID. + $select->setTargetId( 'mw-input-translate-editlangs' ); + // Get available languages. + $languages = Language::fetchLanguageNames(); + + $preferences['translate-editlangs'] = [ + 'class' => 'HTMLJsSelectToInputField', + // prefs-translate + 'section' => 'editing/translate', + 'label-message' => 'translate-pref-editassistlang', + 'help-message' => 'translate-pref-editassistlang-help', + 'select' => $select, + 'valid-values' => array_keys( $languages ), + 'name' => 'translate-editlangs', + ]; + + return true; + } + + /** + * JavsScript selector for language codes. + * @return JsSelectToInput + */ + protected static function languageSelector() { + if ( is_callable( [ 'LanguageNames', 'getNames' ] ) ) { + $lang = RequestContext::getMain()->getLanguage(); + $languages = LanguageNames::getNames( $lang->getCode(), + LanguageNames::FALLBACK_NORMAL + ); + } else { + $languages = Language::fetchLanguageNames(); + } + + ksort( $languages ); + + $selector = new XmlSelect( false, 'mw-language-selector' ); + foreach ( $languages as $code => $name ) { + $selector->addOption( "$code - $name", $code ); + } + + $jsSelect = new JsSelectToInput( $selector ); + + return $jsSelect; + } +} |