diff options
Diffstat (limited to 'MLEB/Translate/specials/SpecialMagic.php')
-rw-r--r-- | MLEB/Translate/specials/SpecialMagic.php | 243 |
1 files changed, 0 insertions, 243 deletions
diff --git a/MLEB/Translate/specials/SpecialMagic.php b/MLEB/Translate/specials/SpecialMagic.php deleted file mode 100644 index dbf9be19..00000000 --- a/MLEB/Translate/specials/SpecialMagic.php +++ /dev/null @@ -1,243 +0,0 @@ -<?php -/** - * Contains logic for special page Special:AdvancedTranslate - * - * @file - * @author Niklas Laxström - * @author Siebrand Mazeland - * @license GPL-2.0-or-later - */ - -/** - * This special page helps with the translations of %MediaWiki features that are - * not in the main messages array (special page aliases, magic words, namespace names). - * - * @ingroup SpecialPage TranslateSpecialPage - */ -class SpecialMagic extends SpecialPage { - const MODULE_MAGIC = 'words'; - const MODULE_SPECIAL = 'special'; - const MODULE_NAMESPACE = 'namespace'; - - /** - * List of supported modules - */ - private $aModules = [ - self::MODULE_SPECIAL, - self::MODULE_NAMESPACE, - self::MODULE_MAGIC - ]; - - /** - * Page options - */ - private $options = []; - private $defaults = []; - private $nondefaults = []; - - public function __construct() { - parent::__construct( 'Magic' ); - } - - public function doesWrites() { - return true; - } - - protected function getGroupName() { - return 'wiki'; - } - - /** - * @see SpecialPage::getDescription - * - * @return string - */ - public function getDescription() { - return $this->msg( 'translate-magic-pagename' )->text(); - } - - /** - * Returns HTML5 output of the form - * GLOBALS: $wgScript - * @return string - */ - protected function getForm() { - global $wgScript; - - $form = Xml::tags( 'form', - [ - 'action' => $wgScript, - 'method' => 'get' - ], - - '<table><tr><td>' . - $this->msg( 'translate-page-language' )->escaped() . - '</td><td>' . - TranslateUtils::languageSelector( - $this->getLanguage()->getCode(), - $this->options['language'] - ) . - '</td></tr><tr><td>' . - $this->msg( 'translate-magic-module' )->escaped() . - '</td><td>' . - $this->moduleSelector( $this->options['module'] ) . - '</td></tr><tr><td colspan="2">' . - Xml::submitButton( $this->msg( 'translate-magic-submit' )->text() ) . ' ' . - Xml::submitButton( - $this->msg( 'translate-magic-cm-export' )->text(), - [ 'name' => 'export' ] - ) . - '</td></tr></table>' . - Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) - ); - - return $form; - } - - /** - * Helper function get module selector. - * - * @param string $selectedId Which value should be selected by default - * @return string HTML5-compatible select-element. - */ - protected function moduleSelector( $selectedId ) { - // Give grep a chance to find the usages: - // translate-magic-words, translate-magic-special, translate-magic-namespace - $selector = new XmlSelect( 'module', 'module', $selectedId ); - foreach ( $this->aModules as $code ) { - $selector->addOption( $this->msg( 'translate-magic-' . $code )->text(), $code ); - } - - return $selector->getHTML(); - } - - protected function setup( $parameters ) { - $defaults = [ - /* str */'module' => '', - /* str */'language' => $this->getUser()->getOption( 'language' ), - /* bool */'export' => false, - /* bool */'savetodb' => false, - ]; - - /** - * Place where all non default variables will end. - */ - $nondefaults = []; - - /** - * Temporary store possible values parsed from parameters. - */ - $options = $defaults; - $request = $this->getRequest(); - foreach ( $options as $v => $t ) { - if ( is_bool( $t ) ) { - $r = $request->getBool( $v, $options[$v] ); - } elseif ( is_int( $t ) ) { - $r = $request->getInt( $v, $options[$v] ); - } elseif ( is_string( $t ) ) { - $r = $request->getText( $v, $options[$v] ); - } - - if ( !isset( $r ) ) { - throw new MWException( '$r was not set' ); - } - - wfAppendToArrayIfNotDefault( $v, $r, $defaults, $nondefaults ); - } - - $this->defaults = $defaults; - $this->nondefaults = $nondefaults; - $this->options = $nondefaults + $defaults; - } - - /** - * The special page running code - * - * @param null|string $parameters - * @throws MWException|PermissionsError - */ - public function execute( $parameters ) { - $this->setup( $parameters ); - $this->setHeaders(); - - $out = $this->getOutput(); - $out->addHelpLink( '//translatewiki.net/wiki/FAQ#Special:AdvancedTranslate', true ); - - $out->addHTML( $this->getForm() ); - - if ( !$this->options['module'] ) { - return; - } - switch ( $this->options['module'] ) { - case 'alias': - case self::MODULE_SPECIAL: - $o = new SpecialPageAliasesCM( $this->options['language'] ); - break; - case self::MODULE_MAGIC: - $o = new MagicWordsCM( $this->options['language'] ); - break; - case self::MODULE_NAMESPACE: - $o = new NamespaceCM( $this->options['language'] ); - break; - default: - throw new MWException( "Unknown module {$this->options['module']}" ); - } - - $request = $this->getRequest(); - if ( $this->options['savetodb'] && $request->wasPosted() ) { - if ( !$this->getUser()->isAllowed( 'translate' ) ) { - throw new PermissionsError( 'translate' ); - } - - $errors = []; - $o->loadFromRequest( $request ); - $o->validate( $errors ); - if ( $errors ) { - $out->wrapWikiMsg( '<div class="error">$1</div>', - 'translate-magic-notsaved' ); - $this->outputErrors( $errors ); - $out->addHTML( $o->output() ); - - return; - } else { - $o->save( $request ); - $out->wrapWikiMsg( '<strong>$1</strong>', 'translate-magic-saved' ); - $out->addHTML( $o->output() ); - - return; - } - } - - if ( $this->options['export'] ) { - $output = $o->export(); - if ( $output === '' ) { - $out->addWikiMsg( 'translate-magic-nothing-to-export' ); - - return; - } - $result = Xml::element( 'textarea', [ 'rows' => '30' ], $output ); - $out->addHTML( $result ); - - return; - } - - $out->addWikiMsg( 'translate-magic-help' ); - $errors = []; - $o->validate( $errors ); - if ( $errors ) { - $this->outputErrors( $errors ); - } - $out->addHTML( $o->output() ); - } - - protected function outputErrors( $errors ) { - $count = $this->getLanguage()->formatNum( count( $errors ) ); - $out = $this->getOutput(); - $out->addWikiMsg( 'translate-magic-errors', $count ); - $out->addHTML( '<ol>' ); - foreach ( $errors as $error ) { - $out->addHTML( "<li>$error</li>" ); - } - $out->addHTML( '</ol>' ); - } -} |