diff --git a/_config.php b/_config.php index 50511c6e..d19bd89d 100644 --- a/_config.php +++ b/_config.php @@ -37,5 +37,8 @@ ShortcodeParser::get('default')->register( CMSMenu::remove_menu_class(CMSMain::class); CMSMenu::remove_menu_class(CMSPageEditController::class); CMSMenu::remove_menu_class(CMSPageSettingsController::class); -CMSMenu::remove_menu_class(CMSPageHistoryController::class); +if (class_exists(CMSPageHistoryController::class)) { + // this class will be removed in CMS 5 + CMSMenu::remove_menu_class(CMSPageHistoryController::class); +} CMSMenu::remove_menu_class(CMSPageAddController::class); diff --git a/code/Controllers/CMSMain.php b/code/Controllers/CMSMain.php index 424e9eb1..2107c61c 100644 --- a/code/Controllers/CMSMain.php +++ b/code/Controllers/CMSMain.php @@ -72,6 +72,7 @@ use SilverStripe\Versioned\Versioned; use SilverStripe\View\ArrayData; use SilverStripe\View\Requirements; use Translatable; +use SilverStripe\VersionedAdmin\Controllers\CMSPageHistoryViewerController; /** * The main "content" area of the CMS. @@ -411,7 +412,7 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr { if ($id = $this->currentPageID()) { return $this->LinkWithSearch( - Controller::join_links(CMSPageHistoryController::singleton()->Link('show'), $id) + Controller::join_links(CMSPageHistoryViewerController::singleton()->Link('show'), $id) ); } else { return null; diff --git a/code/Controllers/CMSPageHistoryController.php b/code/Controllers/CMSPageHistoryController.php index 7ffcc88d..0520ecdb 100644 --- a/code/Controllers/CMSPageHistoryController.php +++ b/code/Controllers/CMSPageHistoryController.php @@ -63,7 +63,9 @@ class CMSPageHistoryController extends CMSMain public function __construct() { parent::__construct(); - Deprecation::notice('4.3.0', 'Use silverstripe/versioned-admin instead', Deprecation::SCOPE_CLASS); + Deprecation::withNoReplacement(function () { + Deprecation::notice('4.3.0', 'Use silverstripe/versioned-admin instead', Deprecation::SCOPE_CLASS); + }); } public function getResponseNegotiator() @@ -308,7 +310,7 @@ class CMSPageHistoryController extends CMSMain $compareModeChecked = ($action == "compare"); if ($page) { - $versions = $page->allVersions(); + $versions = $page->Versions(); $versionID = (!$versionID) ? $page->Version : $versionID; if ($versions) { diff --git a/code/Controllers/SilverStripeNavigator.php b/code/Controllers/SilverStripeNavigator.php index dce05372..9373efdd 100644 --- a/code/Controllers/SilverStripeNavigator.php +++ b/code/Controllers/SilverStripeNavigator.php @@ -66,7 +66,7 @@ class SilverStripeNavigator extends ViewableData } ksort($items); - // Drop the keys and let the ArrayList handle the numbering, so $First, $Last and others work properly. + // Drop the keys and let the ArrayList handle the numbering, so $IsFirst, $IsLast and others work properly. return new ArrayList(array_values($items ?? [])); } diff --git a/code/Model/SiteTreeFileFormFactoryExtension.php b/code/Model/SiteTreeFileFormFactoryExtension.php index e20c95ec..59773030 100644 --- a/code/Model/SiteTreeFileFormFactoryExtension.php +++ b/code/Model/SiteTreeFileFormFactoryExtension.php @@ -18,12 +18,10 @@ use SilverStripe\Versioned\RecursivePublishable; * Uses tracking provided by {@see SiteTreeFileExtension} to generate this. * * @property File $owner + * @deprecated 4.12.0 Use UsedOnTable instead */ class SiteTreeFileFormFactoryExtension extends DataExtension { - /** - * @deprecated 4.12.0 Use UsedOnTable instead - */ public function __construct() { Deprecation::notice('4.12.0', 'Use UsedOnTable instead', Deprecation::SCOPE_CLASS); diff --git a/composer.json b/composer.json index e3186a66..278ea854 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,7 @@ "silverstripe/reports": "^4.7@dev", "silverstripe/siteconfig": "^4.7@dev", "silverstripe/versioned": "^1.7@dev", + "silverstripe/versioned-admin": "^1.7@dev", "silverstripe/vendor-plugin": "^1.0", "php": "^7.4 || ^8.0" }, diff --git a/templates/BreadcrumbsTemplate.ss b/templates/BreadcrumbsTemplate.ss index a2ccd5a9..912382aa 100755 --- a/templates/BreadcrumbsTemplate.ss +++ b/templates/BreadcrumbsTemplate.ss @@ -1,4 +1,4 @@ <%-- Loop is all on one line to prevent whitespace bug in older versions of IE --%> <% if $Pages %> - <% loop $Pages %><% if $Last %>$MenuTitle.XML<% else %><% if not Up.Unlinked %><% end_if %>$MenuTitle.XML<% if not Up.Unlinked %><% end_if %> $Up.Delimiter.RAW <% end_if %><% end_loop %> + <% loop $Pages %><% if $IsLast %>$MenuTitle.XML<% else %><% if not Up.Unlinked %><% end_if %>$MenuTitle.XML<% if not Up.Unlinked %><% end_if %> $Up.Delimiter.RAW <% end_if %><% end_loop %> <% end_if %> diff --git a/tests/php/Controllers/CMSBatchActionsTest.php b/tests/php/Controllers/CMSBatchActionsTest.php index 9a079b80..3ec33d56 100644 --- a/tests/php/Controllers/CMSBatchActionsTest.php +++ b/tests/php/Controllers/CMSBatchActionsTest.php @@ -26,7 +26,7 @@ class CMSBatchActionsTest extends SapphireTest $this->logInWithPermission('ADMIN'); // Tests assume strict hierarchy is enabled - Config::inst()->update(SiteTree::class, 'enforce_strict_hierarchy', true); + Config::inst()->set(SiteTree::class, 'enforce_strict_hierarchy', true); // published page $published = $this->objFromFixture(SiteTree::class, 'published'); diff --git a/tests/php/Controllers/CMSMainTest.php b/tests/php/Controllers/CMSMainTest.php index f61158f4..c8a8bfc5 100644 --- a/tests/php/Controllers/CMSMainTest.php +++ b/tests/php/Controllers/CMSMainTest.php @@ -25,6 +25,7 @@ use SilverStripe\Security\Member; use SilverStripe\Security\Security; use SilverStripe\SiteConfig\SiteConfig; use SilverStripe\Versioned\Versioned; +use SilverStripe\Dev\Deprecation; class CMSMainTest extends FunctionalTest { @@ -123,6 +124,9 @@ class CMSMainTest extends FunctionalTest */ public function testPublish() { + if (Deprecation::isEnabled()) { + $this->markTestSkipped('Test calls deprecated code'); + } $page1 = $this->objFromFixture(Page::class, "page1"); $page2 = $this->objFromFixture(Page::class, "page2"); $this->logInAs('admin'); diff --git a/tests/php/Controllers/CMSPageHistoryControllerTest.php b/tests/php/Controllers/CMSPageHistoryControllerTest.php index 40d564b5..4100436c 100755 --- a/tests/php/Controllers/CMSPageHistoryControllerTest.php +++ b/tests/php/Controllers/CMSPageHistoryControllerTest.php @@ -12,6 +12,7 @@ use SilverStripe\Forms\FieldGroup; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\HiddenField; use SilverStripe\Forms\HTMLReadonlyField; +use SilverStripe\Dev\Deprecation; use SilverStripe\Forms\TextField; class CMSPageHistoryControllerTest extends FunctionalTest @@ -32,10 +33,12 @@ class CMSPageHistoryControllerTest extends FunctionalTest { parent::setUp(); - Injector::inst()->registerService( - new CMSPageHistoryController(), - CMSPageHistoryController::class - ); + Deprecation::withNoReplacement(function () { + Injector::inst()->registerService( + new CMSPageHistoryController(), + CMSPageHistoryController::class + ); + }); $this->loginWithPermission('ADMIN'); @@ -62,6 +65,9 @@ class CMSPageHistoryControllerTest extends FunctionalTest public function testGetEditForm() { + if (Deprecation::isEnabled()) { + $this->markTestSkipped('Test calls deprecated code'); + } $controller = new CMSPageHistoryController(); $controller->setRequest(Controller::curr()->getRequest()); @@ -108,7 +114,10 @@ class CMSPageHistoryControllerTest extends FunctionalTest */ public function testVersionsForm() { - $this->get('admin/pages/legacyhistory/show/'. $this->page->ID); + if (Deprecation::isEnabled()) { + $this->markTestSkipped('Test calls deprecated code'); + } + $this->get('admin/pages/legacyhistory/show/' . $this->page->ID); $form = $this->cssParser()->getBySelector('#Form_VersionsForm'); @@ -127,7 +136,10 @@ class CMSPageHistoryControllerTest extends FunctionalTest public function testVersionsFormTableContainsInformation() { - $this->get('admin/pages/legacyhistory/show/'. $this->page->ID); + if (Deprecation::isEnabled()) { + $this->markTestSkipped('Test calls deprecated code'); + } + $this->get('admin/pages/legacyhistory/show/' . $this->page->ID); $form = $this->cssParser()->getBySelector('#Form_VersionsForm'); $rows = $form[0]->xpath("fieldset/table/tbody/tr"); @@ -153,7 +165,10 @@ class CMSPageHistoryControllerTest extends FunctionalTest public function testVersionsFormSelectsUnpublishedCheckbox() { - $this->get('admin/pages/legacyhistory/show/'. $this->page->ID); + if (Deprecation::isEnabled()) { + $this->markTestSkipped('Test calls deprecated code'); + } + $this->get('admin/pages/legacyhistory/show/' . $this->page->ID); $checkbox = $this->cssParser()->getBySelector('#Form_VersionsForm_ShowUnpublished'); $this->assertThat($checkbox[0], $this->logicalNot($this->isNull())); @@ -162,7 +177,7 @@ class CMSPageHistoryControllerTest extends FunctionalTest $this->assertThat($checked, $this->logicalNot($this->stringContains('checked'))); // viewing an unpublished - $this->get('admin/pages/legacyhistory/show/'.$this->page->ID .'/'.$this->versionUnpublishedCheck); + $this->get('admin/pages/legacyhistory/show/' . $this->page->ID . '/' . $this->versionUnpublishedCheck); $checkbox = $this->cssParser()->getBySelector('#Form_VersionsForm_ShowUnpublished'); $this->assertThat($checkbox[0], $this->logicalNot($this->isNull())); @@ -171,6 +186,9 @@ class CMSPageHistoryControllerTest extends FunctionalTest public function testTransformReadonly() { + if (Deprecation::isEnabled()) { + $this->markTestSkipped('Test calls deprecated code'); + } /** @var CMSPageHistoryController $history */ $history = new CMSPageHistoryController(); $history->setRequest(Controller::curr()->getRequest()); diff --git a/tests/php/Model/RedirectorPageTest.php b/tests/php/Model/RedirectorPageTest.php index b49998c8..fa007731 100644 --- a/tests/php/Model/RedirectorPageTest.php +++ b/tests/php/Model/RedirectorPageTest.php @@ -33,7 +33,7 @@ class RedirectorPageTest extends FunctionalTest $file->publishSingle(); } - Director::config()->update('alternate_base_url', 'http://www.mysite.com/'); + Director::config()->set('alternate_base_url', 'http://www.mysite.com/'); // Ensure all pages are published /** @var Page $page */ diff --git a/tests/php/Model/SiteTreeTest.php b/tests/php/Model/SiteTreeTest.php index 86880f7c..a56740f3 100644 --- a/tests/php/Model/SiteTreeTest.php +++ b/tests/php/Model/SiteTreeTest.php @@ -39,6 +39,7 @@ use SilverStripe\View\Parsers\URLSegmentFilter; use SilverStripe\View\Shortcodes\EmbedShortcodeProvider; use TractorCow\Fluent\Extension\FluentSiteTreeExtension; use const RESOURCES_DIR; +use SilverStripe\Dev\Deprecation; class SiteTreeTest extends SapphireTest { @@ -430,7 +431,7 @@ class SiteTreeTest extends SapphireTest public function testNoCascadingDeleteWithoutID() { - Config::inst()->update('SiteTree', 'enforce_strict_hierarchy', true); + Config::inst()->set('SiteTree', 'enforce_strict_hierarchy', true); $count = SiteTree::get()->count(); $this->assertNotEmpty($count); $obj = new SiteTree(); @@ -1253,27 +1254,27 @@ class SiteTreeTest extends SapphireTest $classCext->write(); $classB->ParentID = $page->ID; - $valid = $classB->doValidate(); + $valid = $classB->validate(); $this->assertTrue($valid->isValid(), "Does allow children on unrestricted parent"); $classB->ParentID = $classA->ID; - $valid = $classB->doValidate(); + $valid = $classB->validate(); $this->assertTrue($valid->isValid(), "Does allow child specifically allowed by parent"); $classC->ParentID = $classA->ID; - $valid = $classC->doValidate(); + $valid = $classC->validate(); $this->assertFalse($valid->isValid(), "Doesnt allow child on parents specifically restricting children"); $classB->ParentID = $classC->ID; - $valid = $classB->doValidate(); + $valid = $classB->validate(); $this->assertFalse($valid->isValid(), "Doesnt allow child on parents disallowing all children"); $classB->ParentID = $classCext->ID; - $valid = $classB->doValidate(); + $valid = $classB->validate(); $this->assertTrue($valid->isValid(), "Extensions of allowed classes are incorrectly reported as invalid"); $classCext->ParentID = $classD->ID; - $valid = $classCext->doValidate(); + $valid = $classCext->validate(); $this->assertFalse($valid->isValid(), "Doesnt allow child where only parent class is allowed on parent node, and asterisk prefixing is used"); } @@ -1655,7 +1656,7 @@ class SiteTreeTest extends SapphireTest */ public function testGetControllerNameFromConfig() { - Config::inst()->update(Page::class, 'controller_name', 'This\\Is\\A\\New\\Controller'); + Config::inst()->set(Page::class, 'controller_name', 'This\\Is\\A\\New\\Controller'); $class = new Page; $this->assertSame('This\\Is\\A\\New\\Controller', $class->getControllerName()); } @@ -1665,7 +1666,7 @@ class SiteTreeTest extends SapphireTest */ public function testGetControllerNameFromNamespaceMappingConfig() { - Config::inst()->update(SiteTree::class, 'namespace_mapping', [ + Config::inst()->merge(SiteTree::class, 'namespace_mapping', [ 'SilverStripe\\CMS\\Tests\\Page' => 'SilverStripe\\CMS\\Tests\\Controllers', ]); @@ -1678,6 +1679,9 @@ class SiteTreeTest extends SapphireTest */ public function testGetControllerNameWithUnderscoresIsSupported() { + if (Deprecation::isEnabled()) { + $this->markTestSkipped('Test calls deprecated code'); + } $class = new SiteTreeTest_LegacyControllerName; $this->assertEquals(SiteTreeTest_LegacyControllerName_Controller::class, $class->getControllerName()); } diff --git a/tests/php/Model/VirtualPageTest.php b/tests/php/Model/VirtualPageTest.php index b4ee7ba5..39086e31 100644 --- a/tests/php/Model/VirtualPageTest.php +++ b/tests/php/Model/VirtualPageTest.php @@ -412,11 +412,11 @@ class VirtualPageTest extends FunctionalTest $classCVirtual->write(); $classBVirtual->ParentID = $classA->ID; - $valid = $classBVirtual->doValidate(); + $valid = $classBVirtual->validate(); $this->assertTrue($valid->isValid(), "Does allow child linked to virtual page type allowed by parent"); $classCVirtual->ParentID = $classA->ID; - $valid = $classCVirtual->doValidate(); + $valid = $classCVirtual->validate(); $this->assertFalse($valid->isValid(), "Doesn't allow child linked to virtual page type disallowed by parent"); } diff --git a/tests/php/Search/SearchFormTest.php b/tests/php/Search/ZZZSearchFormTest.php similarity index 99% rename from tests/php/Search/SearchFormTest.php rename to tests/php/Search/ZZZSearchFormTest.php index 3f8653ab..e278de4b 100644 --- a/tests/php/Search/SearchFormTest.php +++ b/tests/php/Search/ZZZSearchFormTest.php @@ -30,7 +30,7 @@ use TractorCow\Fluent\Extension\FluentSiteTreeExtension; class ZZZSearchFormTest extends FunctionalTest { - protected static $fixture_file = 'SearchFormTest.yml'; + protected static $fixture_file = 'ZZZSearchFormTest.yml'; protected static $illegal_extensions = [ SiteTree::class => [ diff --git a/tests/php/Search/SearchFormTest.yml b/tests/php/Search/ZZZSearchFormTest.yml similarity index 100% rename from tests/php/Search/SearchFormTest.yml rename to tests/php/Search/ZZZSearchFormTest.yml diff --git a/tests/php/Tasks/MigrateSiteTreeLinkingTaskTest.php b/tests/php/Tasks/MigrateSiteTreeLinkingTaskTest.php index 12f92ccd..2b3fdc75 100644 --- a/tests/php/Tasks/MigrateSiteTreeLinkingTaskTest.php +++ b/tests/php/Tasks/MigrateSiteTreeLinkingTaskTest.php @@ -12,8 +12,6 @@ class MigrateSiteTreeLinkingTaskTest extends SapphireTest { protected static $fixture_file = 'MigrateSiteTreeLinkingTaskTest.yml'; - protected static $use_draft_site = true; - public static function setUpBeforeClass(): void { parent::setUpBeforeClass();