From afd23be64c734eb0988bb5631888b0fb280b2e56 Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Thu, 15 Mar 2018 16:34:13 +1300 Subject: [PATCH] FIX Correctly decode page type blacklist from JSON --- src/Extensions/SiteTreeSubsites.php | 10 ++++------ tests/php/SiteTreeSubsitesTest.php | 4 ++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Extensions/SiteTreeSubsites.php b/src/Extensions/SiteTreeSubsites.php index 4285a45..9dfd90f 100644 --- a/src/Extensions/SiteTreeSubsites.php +++ b/src/Extensions/SiteTreeSubsites.php @@ -19,6 +19,7 @@ use SilverStripe\ORM\DataExtension; use SilverStripe\ORM\DataObject; use SilverStripe\ORM\DataQuery; use SilverStripe\ORM\Queries\SQLSelect; +use SilverStripe\Security\Member; use SilverStripe\Security\Security; use SilverStripe\SiteConfig\SiteConfig; use SilverStripe\Subsites\Model\Subsite; @@ -478,20 +479,17 @@ class SiteTreeSubsites extends DataExtension } /** - * @param Member + * @param Member $member * @return boolean|null */ public function canCreate($member = null) { // Typically called on a singleton, so we're not using the Subsite() relation $subsite = Subsite::currentSubsite(); - if ($subsite && $subsite->exists() && $subsite->PageTypeBlacklist) { - $blacklist = str_replace(['[', '"', ']'], '', $subsite->PageTypeBlacklist); - $blacklist = str_replace(['\\\\'], '\\', $blacklist); - $blacklisted = explode(',', $blacklist); + $blacklist = Convert::json2array($subsite->PageTypeBlacklist) ?: []; - if (in_array(get_class($this->owner), $blacklisted)) { + if (in_array(get_class($this->owner), $blacklist)) { return false; } } diff --git a/tests/php/SiteTreeSubsitesTest.php b/tests/php/SiteTreeSubsitesTest.php index f4d6b57..e004d07 100644 --- a/tests/php/SiteTreeSubsitesTest.php +++ b/tests/php/SiteTreeSubsitesTest.php @@ -185,7 +185,7 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest $s2 = $this->objFromFixture(Subsite::class, 'domaintest2'); $page = singleton(SiteTree::class); - $s1->PageTypeBlacklist = implode(',', [TestClassA::class, ErrorPage::class]); + $s1->PageTypeBlacklist = json_encode([TestClassA::class, ErrorPage::class]); $s1->write(); Subsite::changeSubsite($s1); @@ -257,7 +257,7 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest $s1 = $this->objFromFixture(Subsite::class, 'domaintest1'); $s2 = $this->objFromFixture(Subsite::class, 'domaintest2'); - $s1->PageTypeBlacklist = implode(',', [TestClassA::class, ErrorPage::class]); + $s1->PageTypeBlacklist = json_encode([TestClassA::class, ErrorPage::class]); $s1->write(); Subsite::changeSubsite($s1);