diff --git a/_config/extensions.yml b/_config/extensions.yml index 8d4b0a57..36ece43c 100644 --- a/_config/extensions.yml +++ b/_config/extensions.yml @@ -51,10 +51,6 @@ SilverStripe\CMS\Controllers\CMSMain: - SilverStripe\Subsites\Extensions\HintsCacheKeyExtension - SilverStripe\Subsites\Extensions\SubsiteMenuExtension -SilverStripe\CMS\Controllers\CMSPagesController: - extensions: - - SilverStripe\Subsites\Extensions\SubsiteMenuExtension - SilverStripe\Subsites\Admin\SubsiteAdmin: extensions: - SilverStripe\Subsites\Extensions\SubsiteMenuExtension diff --git a/src/Extensions/LeftAndMainSubsites.php b/src/Extensions/LeftAndMainSubsites.php index 79c259e4..ba59dda5 100644 --- a/src/Extensions/LeftAndMainSubsites.php +++ b/src/Extensions/LeftAndMainSubsites.php @@ -6,7 +6,7 @@ use SilverStripe\Admin\CMSMenu; use SilverStripe\Admin\CMSProfileController; use SilverStripe\Admin\LeftAndMain; -use SilverStripe\CMS\Controllers\CMSPagesController; +use SilverStripe\CMS\Controllers\CMSMain; use SilverStripe\CMS\Model\SiteTree; use SilverStripe\CMS\Controllers\CMSPageEditController; use SilverStripe\Control\Controller; @@ -274,22 +274,12 @@ public function alternateAccessCheck(?Member $member = null) protected function onBeforeInit() { $request = Controller::curr()->getRequest(); - $session = $request->getSession(); - $state = SubsiteState::singleton(); // FIRST, check if we need to change subsites due to the URL. // Catch forced subsite changes that need to cause CMS reloads. if ($request->getVar('SubsiteID') !== null) { - // Clear current page when subsite changes (or is set for the first time) - if ($state->getSubsiteIdWasChanged()) { - // sessionNamespace() is protected - see for info - $override = $this->owner->config()->get('session_namespace'); - $sessionNamespace = $override ? $override : get_class($this->owner); - $session->clear($sessionNamespace . '.currentPage'); - } - // Context: Subsite ID has already been set to the state via InitStateMiddleware // If the user cannot view the current page, redirect to the admin landing section @@ -306,7 +296,7 @@ protected function onBeforeInit() // will show a list of the requested subsite's pages $currentSubsiteId = $request->getVar('SubsiteID'); if ($page && (int) $page->SubsiteID !== (int) $currentSubsiteId) { - return $this->owner->redirect(CMSPagesController::singleton()->Link()); + return $this->owner->redirect(CMSMain::singleton()->Link()); } // Page does belong to the current subsite, so remove the query string parameter and refresh the page @@ -328,11 +318,11 @@ protected function onBeforeInit() && $this->shouldChangeSubsite( get_class($this->owner), $record->SubsiteID, - SubsiteState::singleton()->getSubsiteId() + $state->getSubsiteId() ) ) { // Update current subsite - $canViewElsewhere = SubsiteState::singleton()->withState(function ($newState) use ($record) { + $canViewElsewhere = $state->withState(function ($newState) use ($record) { $newState->setSubsiteId($record->SubsiteID); return (bool) $this->owner->canView(Security::getCurrentUser()); @@ -386,7 +376,7 @@ protected function onBeforeInit() return; } - protected function augmentNewSiteTreeItem(&$item) + protected function updateNewItem(&$item) { $request = Controller::curr()->getRequest(); $item->SubsiteID = $request->postVar('SubsiteID') ?: SubsiteState::singleton()->getSubsiteId(); diff --git a/src/Model/Subsite.php b/src/Model/Subsite.php index 8ac132fe..a185a110 100644 --- a/src/Model/Subsite.php +++ b/src/Model/Subsite.php @@ -728,7 +728,8 @@ public function getPageTypeMap() { $pageTypeMap = []; - $pageTypes = SiteTree::page_type_classes(); + $pageTypes = ClassInfo::getValidSubClasses(SiteTree::class); + SiteTree::singleton()->updateAllowedSubClasses($pageTypes); foreach ($pageTypes as $pageType) { $pageTypeMap[$pageType] = singleton($pageType)->i18n_singular_name(); } diff --git a/tests/php/SiteTreeSubsitesTest.php b/tests/php/SiteTreeSubsitesTest.php index adb65115..b0adca56 100644 --- a/tests/php/SiteTreeSubsitesTest.php +++ b/tests/php/SiteTreeSubsitesTest.php @@ -287,7 +287,7 @@ public function testPageTypesBlacklistInCMSMain() Subsite::changeSubsite($s1); $cmsmain = CMSMain::create(); - $hints = json_decode($cmsmain->SiteTreeHints() ?? '', true); + $hints = json_decode($cmsmain->TreeHints() ?? '', true); $classes = $hints['Root']['disallowedChildren']; $this->assertContains(ErrorPage::class, $classes); $this->assertContains(TestClassA::class, $classes); @@ -298,7 +298,7 @@ public function testPageTypesBlacklistInCMSMain() if ($cmsmain->hasMethod('getHintsCache')) { $cmsmain->getHintsCache()->clear(); } - $hints = json_decode($cmsmain->SiteTreeHints() ?? '', true); + $hints = json_decode($cmsmain->TreeHints() ?? '', true); $classes = $hints['Root']['disallowedChildren']; $this->assertNotContains(ErrorPage::class, $classes);