public function execute()
 {
     $groups = MessageGroups::singleton()->getGroups();
     /** @var MessageGroup $group */
     foreach ($groups as $group) {
         if (!$group instanceof WikiPageMessageGroup) {
             continue;
         }
         // Get all translation subpages and refresh each one of them
         $page = TranslatablePage::newFromTitle($group->getTitle());
         $translationPages = $page->getTranslationPages();
         foreach ($translationPages as $subpage) {
             $job = TranslateRenderJob::newJob($subpage);
             $job->run();
         }
     }
 }
 public function testTranslationPageRestrictions()
 {
     $superUser = new MockSuperUser();
     $title = Title::newFromText('Translatable page');
     $page = WikiPage::factory($title);
     $content = ContentHandler::makeContent('<translate>Hello</translate>', $title);
     $status = $page->doEditContent($content, 'New page', 0, false, $superUser);
     $revision = $status->value['revision']->getId();
     $translatablePage = TranslatablePage::newFromRevision($title, $revision);
     $translatablePage->addMarkedTag($revision);
     MessageGroups::singleton()->recache();
     $translationPage = Title::newFromText('Translatable page/fi');
     TranslateRenderJob::newJob($translationPage)->run();
     $this->assertTrue($translationPage->userCan('read', $superUser), 'Users can read existing translation pages');
     $this->assertFalse($translationPage->userCan('edit', $superUser), 'Users can not edit existing translation pages');
     $translationPage = Title::newFromText('Translatable page/ab');
     $this->assertTrue($translationPage->userCan('read', $superUser), 'Users can read non-existing translation pages');
     $this->assertFalse($translationPage->userCan('edit', $superUser), 'Users can not edit non-existing translation pages');
 }
 public static function updateTranslationPage(TranslatablePage $page, $code, $user, $flags, $summary)
 {
     $source = $page->getTitle();
     $target = Title::makeTitle($source->getNamespace(), $source->getDBkey() . "/{$code}");
     // We don't know and don't care
     $flags &= ~EDIT_NEW & ~EDIT_UPDATE;
     // Update the target page
     $job = TranslateRenderJob::newJob($target);
     $job->setUser($user);
     $job->setSummary($summary);
     $job->setFlags($flags);
     $job->run();
     // Regenerate translation caches
     $page->getTranslationPercentages('force');
     // Invalidate caches
     $pages = $page->getTranslationPages();
     foreach ($pages as $title) {
         $wikiPage = WikiPage::factory($title);
         $wikiPage->doPurge();
     }
     // And the source page itself too
     $wikiPage = WikiPage::factory($page->getTitle());
     $wikiPage->doPurge();
 }
 /**
  * Creates jobs needed to create or update all translation pages.
  * @param TranslatablePage $page
  * @return Job[]
  * @since 2013-01-28
  */
 public static function getRenderJobs(TranslatablePage $page)
 {
     $jobs = array();
     $titles = $page->getTranslationPages();
     foreach ($titles as $t) {
         $jobs[] = TranslateRenderJob::newJob($t);
     }
     return $jobs;
 }