/**
  * 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
 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();
 }