diff --git a/.travis.yml b/.travis.yml index 3324659..a1270c5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,25 +14,25 @@ env: matrix: include: - php: 5.6 - env: DB=MYSQL PHPCS_TEST=1 PHPUNIT_TEST=1 + env: DB=MYSQL INSTALLER_VERSION=4.0.x-dev PHPCS_TEST=1 PHPUNIT_TEST=1 - php: 7.1 - env: DB=PGSQL PHPUNIT_TEST=1 + env: DB=PGSQL INSTALLER_VERSION=4.1.x-dev PHPUNIT_TEST=1 - php: 7.2 - env: DB=MYSQL PHPUNIT_COVERAGE_TEST=1 + env: DB=MYSQL INSTALLER_VERSION=4.2.x-dev PHPUNIT_COVERAGE_TEST=1 - php: 7.0 - env: DB=MYSQL BEHAT_TEST=1 + env: DB=MYSQL INSTALLER_VERSION=4.x-dev BEHAT_TEST=1 allow_failures: - php: 7.0 - env: DB=MYSQL BEHAT_TEST=1 + env: DB=MYSQL INSTALLER_VERSION=4.x-dev BEHAT_TEST=1 before_script: - phpenv rehash - phpenv config-rm xdebug.ini - echo 'memory_limit = 2G' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini - composer validate - - composer require silverstripe/installer 4.0.x-dev --no-update + - composer require silverstripe/installer $INSTALLER_VERSION --no-update - if [[ $DB == PGSQL ]]; then composer require --no-update silverstripe/postgresql:2.0.x-dev; fi - - composer install --prefer-dist --no-interaction --no-progress --no-suggest --optimize-autoloader --verbose --profile + - composer install --prefer-source --no-interaction --no-progress --no-suggest --optimize-autoloader --verbose --profile - echo "SS_BASE_URL=http://localhost:8080/" >> .env # Behat bootstrapping diff --git a/src/Extensions/SiteTreeSubsites.php b/src/Extensions/SiteTreeSubsites.php index 4285a45..1a2533e 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,21 @@ 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); + // SS 4.1: JSON encoded. SS 4.0, comma delimited + $blacklist = Convert::json2array($subsite->PageTypeBlacklist); + if ($blacklist === false) { + $blacklist = explode(',', $subsite->PageTypeBlacklist); + } - if (in_array(get_class($this->owner), $blacklisted)) { + if (in_array(get_class($this->owner), (array) $blacklist)) { return false; } } diff --git a/tests/php/SiteTreeSubsitesTest.php b/tests/php/SiteTreeSubsitesTest.php index bd3dc7c..f14e778 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); @@ -252,15 +252,14 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest { $this->logInAs('editor'); - $cmsmain = new CMSMain(); - $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); + $cmsmain = CMSMain::create(); $hints = Convert::json2array($cmsmain->SiteTreeHints()); $classes = $hints['Root']['disallowedChildren']; $this->assertContains(ErrorPage::class, $classes); @@ -268,7 +267,12 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest $this->assertNotContains(TestClassB::class, $classes); Subsite::changeSubsite($s2); + // SS 4.1 and above + if ($cmsmain->hasMethod('getHintsCache')) { + $cmsmain->getHintsCache()->clear(); + } $hints = Convert::json2array($cmsmain->SiteTreeHints()); + $classes = $hints['Root']['disallowedChildren']; $this->assertNotContains(ErrorPage::class, $classes); $this->assertNotContains(TestClassA::class, $classes); diff --git a/tests/php/SubsitesVirtualPageTest.php b/tests/php/SubsitesVirtualPageTest.php index d00b193..99e9646 100644 --- a/tests/php/SubsitesVirtualPageTest.php +++ b/tests/php/SubsitesVirtualPageTest.php @@ -21,10 +21,6 @@ class SubsitesVirtualPageTest extends BaseSubsiteTest 'SubsitesVirtualPageTest.yml', ]; - protected static $illegal_extensions = [ - SiteTree::class => ['Translatable'] // @todo implement Translatable namespace - ]; - protected function setUp() { parent::setUp();