diff --git a/src/Model/Subsite.php b/src/Model/Subsite.php index 4b78ed3..18fd6de 100644 --- a/src/Model/Subsite.php +++ b/src/Model/Subsite.php @@ -829,16 +829,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/php/SiteTreeSubsitesTest.php b/tests/php/SiteTreeSubsitesTest.php index f14e778..17131ae 100644 --- a/tests/php/SiteTreeSubsitesTest.php +++ b/tests/php/SiteTreeSubsitesTest.php @@ -36,6 +36,14 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest SiteTree::class => ['Translatable'] // @todo implement Translatable namespace ]; + protected function setUp() + { + // We have our own home page fixtures, prevent the default one being created in this test suite. + Config::modify()->set(SiteTree::class, 'create_default_pages', false); + + parent::setUp(); + } + public function testPagesInDifferentSubsitesCanShareURLSegment() { $subsiteMain = $this->objFromFixture(Subsite::class, 'main'); diff --git a/tests/php/SubsiteTest.php b/tests/php/SubsiteTest.php index bea0426..21e8f97 100644 --- a/tests/php/SubsiteTest.php +++ b/tests/php/SubsiteTest.php @@ -473,4 +473,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()); + } }