/** * Access point for this special page. */ public function execute($parameters) { global $wgTranslateBlacklist, $wgContLang; $out = $this->getOutput(); $out->addModuleStyles(array('ext.translate.special.translate.styles', 'jquery.uls.grid')); $out->addModules('ext.translate.special.translate'); $this->setHeaders(); $request = $this->getRequest(); // @todo Move to api or so if ($parameters === 'editpage') { $editpage = TranslationEditPage::newFromRequest($request); if ($editpage) { $editpage->execute(); return; } } if (!defined('ULS_VERSION')) { throw new ErrorPageError('translate-ulsdep-title', 'translate-ulsdep-body'); } $this->setup($parameters); $isBeta = self::isBeta($request); if ($this->options['group'] === '' || $isBeta && !$this->group) { $this->groupInformation(); return; } $errors = $this->getFormErrors(); if ($isBeta && $this->options['taction'] !== 'export') { $out->addHTML(Html::openElement('div', array('class' => 'grid ext-translate-container'))); $out->addHTML($this->tuxSettingsForm($errors)); $out->addHTML($this->messageSelector()); } else { $out->addModuleStyles('ext.translate.legacy'); TranslateUtils::addSpecialHelpLink($out, 'Help:Extension:Translate/Translation_example'); // Show errors nicely. $out->addHTML($this->settingsForm($errors)); } if (count($errors)) { return; } else { $checks = array($this->options['group'], strtok($this->options['group'], '-'), '*'); foreach ($checks as $check) { if (isset($wgTranslateBlacklist[$check][$this->options['language']])) { $reason = $wgTranslateBlacklist[$check][$this->options['language']]; $out->addWikiMsg('translate-page-disabled', $reason); if ($isBeta) { // Close div.ext-translate-container $out->addHTML(Html::closeElement('div')); } return; } } } $params = array($this->getContext(), $this->task, $this->group, $this->options); if (!Hooks::run('SpecialTranslate::executeTask', $params)) { return; } // Initialise and get output. if (!$this->task) { return; } $this->task->init($this->group, $this->options, $this->nondefaults, $this->getContext()); $output = $this->task->execute(); if ($this->task->plainOutput()) { $out->disable(); header('Content-type: text/plain; charset=UTF-8'); echo $output; } else { $description = $this->getGroupDescription($this->group); $taskid = $this->options['task']; if (in_array($taskid, array('untranslated', 'reviewall'), true)) { $hasOptional = count($this->group->getTags('optional')); if ($hasOptional) { $linktext = $this->msg('translate-page-description-hasoptional-open')->escaped(); $params = array('task' => 'optional') + $this->nondefaults; $link = Linker::link($this->getPageTitle(), $linktext, array(), $params); $note = $this->msg('translate-page-description-hasoptional')->rawParams($link)->parseAsBlock(); if ($description) { $description .= '<br />' . $note; } else { $description = $note; } } } $groupId = $this->group->getId(); // PHP is such an awesome language $priorityLangs = TranslateMetadata::get($groupId, 'prioritylangs'); $priorityLangs = array_flip(array_filter(explode(',', $priorityLangs))); $priorityLangsCount = count($priorityLangs); if ($priorityLangsCount && !isset($priorityLangs[$this->options['language']])) { $priorityForce = TranslateMetadata::get($groupId, 'priorityforce'); if ($priorityForce === 'on') { // Hide table $priorityMessageClass = 'errorbox'; $priorityMessageKey = 'tpt-discouraged-language-force'; } else { $priorityMessageClass = 'warningbox'; $priorityMessageKey = 'tpt-discouraged-language'; } $priorityLanguageNames = array(); $languageNames = TranslateUtils::getLanguageNames($this->getLanguage()->getCode()); foreach (array_keys($priorityLangs) as $langCode) { $priorityLanguageNames[] = $languageNames[$langCode]; } $priorityReason = TranslateMetadata::get($groupId, 'priorityreason'); if ($priorityReason !== '') { $priorityReason = "\n\n" . $this->msg('tpt-discouraged-language-reason', Xml::element('span', array('lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir()), $priorityReason))->parse(); } $description .= Html::RawElement('div', array('class' => $priorityMessageClass), $this->msg($priorityMessageKey, '', $languageNames[$this->options['language']], $this->getLanguage()->listToText($priorityLanguageNames))->parseAsBlock() . $priorityReason); } if ($description) { $description = Xml::fieldset($this->msg('translate-page-description-legend')->text(), $description, array('class' => 'mw-sp-translate-description')); } if ($isBeta) { $out->addHTML($output); } else { $out->addHTML($description . $output); } ApiTranslateUser::trackGroup($this->group, $this->getUser()); } if ($isBeta) { $out->addHTML(Html::closeElement('div')); } }
/** * Access point for this special page. */ public function execute($parameters) { global $wgOut, $wgTranslateBlacklist, $wgRequest; $wgOut->addModules('ext.translate.special.translate'); $this->setHeaders(); // @todo Move to api or so if ($parameters === 'editpage') { $editpage = TranslationEditPage::newFromRequest($wgRequest); if ($editpage) { $editpage->execute(); return; } } $this->setup($parameters); $errors = array(); if ($this->options['group'] === '') { TranslateUtils::addSpecialHelpLink($wgOut, 'Help:Extension:Translate/Translation_example'); $this->groupInformation(); return; } $codes = Language::getLanguageNames(false); if (!$this->options['language'] || !isset($codes[$this->options['language']])) { $errors['language'] = wfMsgExt('translate-page-no-such-language', array('parse')); $this->options['language'] = $this->defaults['language']; } if (!$this->task instanceof TranslateTask) { $errors['task'] = wfMsgExt('translate-page-no-such-task', array('parse')); $this->options['task'] = $this->defaults['task']; } if (!$this->group instanceof MessageGroup) { $errors['group'] = wfMsgExt('translate-page-no-such-group', array('parse')); $this->options['group'] = $this->defaults['group']; } TranslateUtils::addSpecialHelpLink($wgOut, 'Help:Extension:Translate/Translation_example'); // Show errors nicely. $wgOut->addHTML($this->settingsForm($errors)); if (count($errors)) { return; } else { $checks = array($this->options['group'], strtok($this->options['group'], '-'), '*'); foreach ($checks as $check) { $reason = @$wgTranslateBlacklist[$check][$this->options['language']]; if ($reason !== null) { $wgOut->addWikiMsg('translate-page-disabled', $reason); return; } } } // Proceed. $taskOptions = new TaskOptions($this->options['language'], $this->options['limit'], $this->options['offset'], array($this, 'cbAddPagingNumbers')); // Initialise and get output. $this->task->init($this->group, $taskOptions); $output = $this->task->execute(); if ($this->task->plainOutput()) { $wgOut->disable(); header('Content-type: text/plain; charset=UTF-8'); echo $output; } else { $description = $this->getGroupDescription($this->group); $taskid = $this->options['task']; if (in_array($taskid, array('untranslated', 'reviewall'), true)) { $hasOptional = count($this->group->getTags('optional')); if ($hasOptional) { $linker = class_exists('DummyLinker') ? new DummyLinker() : new Linker(); $linktext = wfMessage('translate-page-description-hasoptional-open')->escaped(); $params = array('task' => 'optional') + $this->nondefaults; $link = $linker->link($this->getTitle(), $linktext, array(), $params); $note = wfMessage('translate-page-description-hasoptional')->rawParams($link)->parseAsBlock(); if ($description) { $description .= '<br>' . $note; } else { $description = $note; } } } $status = $this->getWorkflowStatus(); if ($status !== false) { $description = $status . $description; } if ($description) { $description = Xml::fieldset(wfMsg('translate-page-description-legend'), $description); } $links = $this->doStupidLinks(); if ($this->paging['count'] === 0) { $wgOut->addHTML($description . $links); } else { $wgOut->addHTML($description . $links . $output . $links); } } }