/** * Simplifies publishing of an actual page instance (since migrations are run from command line). * * @param SiteTree $page * @param bool $force If set to false, will not publish if the page has a draft version to prevent * accidentally publishing a draft page. * * TODO: Possibly change default for $force to false, but will need to start versioning this module to help prevent issues with backward compatibility. * * @throws MigrationException */ public static function publish(SiteTree $page, $force = true) { try { static::whileAdmin(function () use($page, $force) { if ($page->isPublished() || $force) { $page->doPublish(); } else { $page->write(); } }); } catch (Exception $e) { throw new MigrationException("Cannot publish page: " . $e->getMessage(), 0, $e); } }
function testChangingClassOfDefaultLocaleTranslationChangesOthersWhenPublished() { // create an English SiteTree $enST = new SiteTree(); $enST->Locale = 'en_US'; $enST->write(); $enST->doPublish(); // create and publish French and Spanish translations $frST = $enST->createTranslation('fr_FR'); $this->assertTrue($frST->doPublish(), 'should have been able to publish French translation'); $esST = $enST->createTranslation('es_ES'); $this->assertTrue($esST->doPublish(), 'should have been able to publish Spanish translation'); // change the class name of the default locale's translation (as CMS admin would) // and publish the change - we should see both versions of English change class $enST->setClassName('Page'); $enST->doPublish(); $this->assertClass('Page', Versioned::get_one_by_stage('SiteTree', 'Stage', '"ID" = ' . $enST->ID)); $this->assertClass('Page', Versioned::get_one_by_stage('SiteTree', 'Live', '"ID" = ' . $enST->ID)); // and all of the draft versions of translations: $this->assertClass('Page', Versioned::get_one_by_stage('SiteTree', 'Stage', '"ID" = ' . $frST->ID)); $this->assertClass('Page', Versioned::get_one_by_stage('SiteTree', 'Stage', '"ID" = ' . $esST->ID)); // and all of the live versions of translations as well: $this->assertClass('Page', Versioned::get_one_by_stage('SiteTree', 'Live', '"ID" = ' . $frST->ID)); $this->assertClass('Page', Versioned::get_one_by_stage('SiteTree', 'Live', '"ID" = ' . $esST->ID)); }
/** * Simplifies publishing of an actual page instance (since migrations are run from command line). * * @param SiteTree $page * @throws MigrationException */ public static function publish(SiteTree $page) { try { static::loginAsAdmin(); $page->doPublish(); } catch (Exception $e) { throw new MigrationException("Cannot publish page: " . $e->getMessage(), 0, $e); } }