diff --git a/code/forms/SubsitesTreeDropdownField.php b/code/forms/SubsitesTreeDropdownField.php index 287acb1c..523de47a 100644 --- a/code/forms/SubsitesTreeDropdownField.php +++ b/code/forms/SubsitesTreeDropdownField.php @@ -5,6 +5,7 @@ use SilverStripe\Control\Controller; use SilverStripe\Control\HTTPRequest; use SilverStripe\Control\Session; +use SilverStripe\Core\Manifest\ModuleLoader; use SilverStripe\Forms\TreeDropdownField; use SilverStripe\View\Requirements; @@ -28,7 +29,8 @@ public function Field($properties = []) { $html = parent::Field($properties); - Requirements::javascript('subsites/javascript/SubsitesTreeDropdownField.js'); + $module = ModuleLoader::getModule('silverstripe/subsites'); + Requirements::javascript($module->getRelativeResourcePath('javascript/SubsitesTreeDropdownField.js')); return $html; } diff --git a/code/pages/SubsitesVirtualPage.php b/code/pages/SubsitesVirtualPage.php index e2a68ae1..541bf868 100644 --- a/code/pages/SubsitesVirtualPage.php +++ b/code/pages/SubsitesVirtualPage.php @@ -5,7 +5,6 @@ use SilverStripe\CMS\Model\SiteTree; use SilverStripe\CMS\Model\VirtualPage; use SilverStripe\Control\Controller; -use SilverStripe\Control\Session; use SilverStripe\Core\Config\Config; use SilverStripe\Forms\DropdownField; use SilverStripe\Forms\LabelField; @@ -15,6 +14,7 @@ use SilverStripe\ORM\DataObject; use SilverStripe\Subsites\Forms\SubsitesTreeDropdownField; use SilverStripe\Subsites\Model\Subsite; +use SilverStripe\Subsites\State\SubsiteState; use SilverStripe\View\ArrayData; class SubsitesVirtualPage extends VirtualPage @@ -139,7 +139,10 @@ public function fieldLabels($includerelations = true) public function getCopyContentFromID_SubsiteID() { - return $this->CopyContentFromID ? (int)$this->CopyContentFrom()->SubsiteID : (int)Session::get('SubsiteID'); + if ($this->CopyContentFromID) { + return (int) $this->CopyContentFrom()->SubsiteID; + } + return SubsiteState::singleton()->getSubsiteId(); } public function getVirtualFields() @@ -177,22 +180,22 @@ public function onBeforeWrite() if ($this->CustomMetaTitle) { $this->MetaTitle = $this->CustomMetaTitle; } else { - $this->MetaTitle = $this->ContentSource()->MetaTitle ? $this->ContentSource()->MetaTitle : $this->MetaTitle; + $this->MetaTitle = $this->ContentSource()->MetaTitle ?: $this->MetaTitle; } if ($this->CustomMetaKeywords) { $this->MetaKeywords = $this->CustomMetaKeywords; } else { - $this->MetaKeywords = $this->ContentSource()->MetaKeywords ? $this->ContentSource()->MetaKeywords : $this->MetaKeywords; + $this->MetaKeywords = $this->ContentSource()->MetaKeywords ?: $this->MetaKeywords; } if ($this->CustomMetaDescription) { $this->MetaDescription = $this->CustomMetaDescription; } else { - $this->MetaDescription = $this->ContentSource()->MetaDescription ? $this->ContentSource()->MetaDescription : $this->MetaDescription; + $this->MetaDescription = $this->ContentSource()->MetaDescription ?: $this->MetaDescription; } if ($this->CustomExtraMeta) { $this->ExtraMeta = $this->CustomExtraMeta; } else { - $this->ExtraMeta = $this->ContentSource()->ExtraMeta ? $this->ContentSource()->ExtraMeta : $this->ExtraMeta; + $this->ExtraMeta = $this->ContentSource()->ExtraMeta ?: $this->ExtraMeta; } } @@ -217,13 +220,13 @@ public function validURLSegment() $origDisableSubsiteFilter = Subsite::$disable_subsite_filter; Subsite::$disable_subsite_filter = true; $existingPage = DataObject::get_one( - 'SilverStripe\\CMS\\Model\\SiteTree', + SiteTree::class, "\"URLSegment\" = '$this->URLSegment' $IDFilter $parentFilter", false // disable cache, it doesn't include subsite status in the key ); Subsite::$disable_subsite_filter = $origDisableSubsiteFilter; $existingPageInSubsite = DataObject::get_one( - 'SilverStripe\\CMS\\Model\\SiteTree', + SiteTree::class, "\"URLSegment\" = '$this->URLSegment' $IDFilter $parentFilter", false // disable cache, it doesn't include subsite status in the key ); diff --git a/tests/php/SiteTreeSubsitesTest.php b/tests/php/SiteTreeSubsitesTest.php index 3fce8a9d..68fba2e4 100644 --- a/tests/php/SiteTreeSubsitesTest.php +++ b/tests/php/SiteTreeSubsitesTest.php @@ -154,8 +154,8 @@ public function testTwoPagesWithSameURLOnDifferentSubsites() $p2->write(); // Check that the URLs weren't modified in our set-up - $this->assertEquals($p1->URLSegment, 'test-page'); - $this->assertEquals($p2->URLSegment, 'test-page'); + $this->assertEquals('test-page', $p1->URLSegment); + $this->assertEquals('test-page', $p2->URLSegment); // Check that if we switch between the different subsites, we receive the correct pages Subsite::changeSubsite($s1); @@ -215,8 +215,8 @@ public function testCopyToSubsite() /** @var Subsite $otherSubsite */ $otherSubsite = $this->objFromFixture(Subsite::class, 'subsite1'); - $staffPage = $this->objFromFixture('Page', 'staff'); // nested page - $contactPage = $this->objFromFixture('Page', 'contact'); // top level page + $staffPage = $this->objFromFixture(Page::class, 'staff'); // nested page + $contactPage = $this->objFromFixture(Page::class, 'contact'); // top level page $staffPage2 = $staffPage->duplicateToSubsite($otherSubsite->ID); $contactPage2 = $contactPage->duplicateToSubsite($otherSubsite->ID); @@ -270,7 +270,7 @@ public function testValidateURLSegment() { $this->logInWithPermission('ADMIN'); // Saving existing page in the same subsite doesn't change urls - $mainHome = $this->objFromFixture('Page', 'home'); + $mainHome = $this->objFromFixture(Page::class, 'home'); $mainSubsiteID = $this->idFromFixture(Subsite::class, 'main'); Subsite::changeSubsite($mainSubsiteID); $mainHome->Content = '

Some new content

'; diff --git a/tests/php/SubsitesVirtualPageTest.php b/tests/php/SubsitesVirtualPageTest.php index ac34a974..786586d6 100644 --- a/tests/php/SubsitesVirtualPageTest.php +++ b/tests/php/SubsitesVirtualPageTest.php @@ -262,7 +262,7 @@ public function testSubsiteVirtualPageCanHaveSameUrlsegmentAsOtherSubsite() $subsite2 = $this->objFromFixture(Subsite::class, 'subsite2'); Subsite::changeSubsite($subsite1->ID); - $subsite1Page = $this->objFromFixture('Page', 'subsite1_staff'); + $subsite1Page = $this->objFromFixture(Page::class, 'subsite1_staff'); $subsite1Page->URLSegment = 'staff'; $subsite1Page->write(); @@ -271,9 +271,10 @@ public function testSubsiteVirtualPageCanHaveSameUrlsegmentAsOtherSubsite() $subsite1Vp->CopyContentFromID = $subsite1Page->ID; $subsite1Vp->SubsiteID = $subsite1->ID; $subsite1Vp->write(); + $this->assertNotEquals( - (string) $subsite1Vp->URLSegment, - (string) $subsite1Page->URLSegment, + $subsite1Vp->URLSegment, + $subsite1Page->URLSegment, "Doesn't allow explicit URLSegment overrides when already existing in same subsite" );