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