From b4943fb77c4ee612bb8bc16772866f0f06e2501b Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Fri, 20 Apr 2018 15:19:50 +1200 Subject: [PATCH] FIX Automatically create default SiteTree records for new subsites --- code/model/Subsite.php | 21 ++++++++++++++++++++- tests/SiteTreeSubsitesTest.php | 8 ++++++++ tests/SubsiteTest.php | 11 +++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/code/model/Subsite.php b/code/model/Subsite.php index 2b37345..30c8159 100644 --- a/code/model/Subsite.php +++ b/code/model/Subsite.php @@ -743,16 +743,35 @@ class Subsite extends DataObject } /** - * Whenever a Subsite is written, rewrite the hostmap + * Whenever a Subsite is written, rewrite the hostmap and create some default pages * * @return void */ public function onAfterWrite() { Subsite::writeHostMap(); + if ($this->isChanged('ID')) { + $this->createDefaultPages(); + } parent::onAfterWrite(); } + /** + * Automatically create default pages for new subsites + */ + protected function createDefaultPages() + { + $currentSubsite = Subsite::currentSubsiteID(); + Subsite::changeSubsite($this->ID); + + // Silence DB schema output + DB::quiet(); + $siteTree = new SiteTree(); + $siteTree->requireDefaultRecords(); + + Subsite::changeSubsite($currentSubsite); + } + /** * Return the primary domain of this site. Tries to "normalize" the domain name, * by replacing potential wildcards. diff --git a/tests/SiteTreeSubsitesTest.php b/tests/SiteTreeSubsitesTest.php index 87368e7..3bba6ed 100644 --- a/tests/SiteTreeSubsitesTest.php +++ b/tests/SiteTreeSubsitesTest.php @@ -13,6 +13,14 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest 'SiteTree' => array('Translatable') ); + public function setUp() + { + // We have our own home page fixtures, prevent the default one being created in this test suite. + Config::inst()->update('SiteTree', 'create_default_pages', false); + + parent::setUp(); + } + public function testPagesInDifferentSubsitesCanShareURLSegment() { $subsiteMain = $this->objFromFixture('Subsite', 'main'); diff --git a/tests/SubsiteTest.php b/tests/SubsiteTest.php index 1b0eab1..8ef00fd 100644 --- a/tests/SubsiteTest.php +++ b/tests/SubsiteTest.php @@ -442,4 +442,15 @@ class SubsiteTest extends BaseSubsiteTest $subsite2->activate(); $this->assertEquals('MyNewAwesomePage', DataObject::get_by_id('Page', $page2->ID)->Title); } + + public function testDefaultPageCreatedWhenCreatingSubsite() + { + $subsite = new Subsite(); + $subsite->Title = 'New Subsite'; + $subsite->write(); + $subsite->activate(); + + $pages = SiteTree::get(); + $this->assertGreaterThanOrEqual(1, $pages->count()); + } }