/**
  * 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'));
     }
 }
Пример #2
0
 /**
  * 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);
         }
     }
 }