/** * 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')); } }
protected function taskSelector($pageTranslation = false) { global $wgUser; $selector = new XmlSelect('task', 'task'); $selector->setDefault($this->options['task']); $isPageTranslation = $this->group instanceof WikiPageMessageGroup; foreach (TranslateTasks::getTasks($isPageTranslation) as $id) { if (TranslateTasks::getTask($id)->isAllowedFor($wgUser)) { $label = TranslateTask::labelForTask($id); $selector->addOption($label, $id); } } return $selector->getHTML(); }