Merge branch '2.0'

This commit is contained in:
Robbie Averill 2018-06-15 09:44:24 +12:00
commit aae3e655c4
5 changed files with 47 additions and 35 deletions

View File

@ -1,47 +1,53 @@
language: php language: php
addons:
firefox: "31.0"
dist: trusty dist: trusty
before_install:
- sudo apt-get update
- sudo apt-get install chromium-chromedriver
env: env:
global: global:
- COMPOSER_ROOT_VERSION="4.0.x-dev" - COMPOSER_ROOT_VERSION="2.0.x-dev"
- DISPLAY=":99" - DISPLAY=":99"
- XVFBARGS=":99 -ac -screen 0 1024x768x16" - XVFBARGS=":99 -ac -screen 0 1024x768x16"
- SS_BASE_URL="http://localhost:8080/"
- SS_ENVIRONMENT_TYPE="dev"
matrix: matrix:
include: include:
- php: 5.6 - php: 5.6
env: DB=MYSQL INSTALLER_VERSION=4.0.x-dev PHPCS_TEST=1 PHPUNIT_TEST=1 env: DB=MYSQL INSTALLER_VERSION=4.0.x-dev PHPCS_TEST=1 PHPUNIT_TEST=1
- php: 7.1 - php: 7.0
env: DB=PGSQL INSTALLER_VERSION=4.1.x-dev PHPUNIT_TEST=1 env: DB=PGSQL INSTALLER_VERSION=4.1.x-dev PHPUNIT_TEST=1
- php: 7.1
env: DB=MYSQL INSTALLER_VERSION=4.1.x-dev BEHAT_TEST=1
- php: 7.2 - php: 7.2
env: DB=MYSQL INSTALLER_VERSION=4.2.x-dev PHPUNIT_COVERAGE_TEST=1 env: DB=MYSQL INSTALLER_VERSION=4.2.x-dev PHPUNIT_COVERAGE_TEST=1
- php: 7.0 - php: 7.2
env: DB=MYSQL INSTALLER_VERSION=4.x-dev BEHAT_TEST=1
allow_failures:
- php: 7.0
env: DB=MYSQL INSTALLER_VERSION=4.x-dev BEHAT_TEST=1 env: DB=MYSQL INSTALLER_VERSION=4.x-dev BEHAT_TEST=1
before_script: before_script:
# Extra $PATH
- export PATH=/usr/lib/chromium-browser/:$PATH
# Init PHP
- phpenv rehash - phpenv rehash
- phpenv config-rm xdebug.ini - phpenv config-rm xdebug.ini
- echo 'memory_limit = 2G' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini - echo 'memory_limit=3G' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
# Install composer
- composer validate - composer validate
- composer require silverstripe/installer $INSTALLER_VERSION --no-update - composer require silverstripe/installer:"$INSTALLER_VERSION" silverstripe/recipe-testing:^1 --no-update
- if [[ $DB == PGSQL ]]; then composer require --no-update silverstripe/postgresql:2.0.x-dev; fi - if [[ $DB == PGSQL ]]; then composer require --no-update silverstripe/postgresql:2.0.x-dev; fi
- composer install --prefer-source --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 # Behat bootstrapping
- if [[ $BEHAT_TEST ]]; then echo "" >> .env && echo "SS_BASE_URL=http://localhost:8080/" >> .env; fi
- if [[ $BEHAT_TEST ]]; then mkdir artifacts; fi - if [[ $BEHAT_TEST ]]; then mkdir artifacts; fi
- if [[ $BEHAT_TEST ]]; then cp composer.lock artifacts/; fi
- if [[ $BEHAT_TEST ]]; then sh -e /etc/init.d/xvfb start; sleep 3; fi - if [[ $BEHAT_TEST ]]; then sh -e /etc/init.d/xvfb start; sleep 3; fi
- if [[ $BEHAT_TEST ]]; then (vendor/bin/selenium-server-standalone > artifacts/selenium.log 2>&1 &); fi - if [[ $BEHAT_TEST ]]; then (chromedriver > artifacts/chromedriver.log 2>&1 &); fi
- if [[ $BEHAT_TEST ]]; then (vendor/bin/serve --bootstrap-file cms/tests/behat/serve-bootstrap.php &> artifacts/serve.log &); fi - if [[ $BEHAT_TEST ]]; then (vendor/bin/serve --bootstrap-file vendor/silverstripe/cms/tests/behat/serve-bootstrap.php &> artifacts/serve.log &); fi
script: script:
- if [[ $PHPUNIT_TEST ]]; then vendor/bin/phpunit; fi - if [[ $PHPUNIT_TEST ]]; then vendor/bin/phpunit; fi

View File

@ -12,15 +12,17 @@ default:
- SilverStripe\CMS\Tests\Behaviour\LoginContext - SilverStripe\CMS\Tests\Behaviour\LoginContext
- SilverStripe\CMS\Tests\Behaviour\ThemeContext - SilverStripe\CMS\Tests\Behaviour\ThemeContext
- SilverStripe\CMS\Tests\Behaviour\FixtureContext: - SilverStripe\CMS\Tests\Behaviour\FixtureContext:
# Note: double indent for args is intentional # Note: double indent for args is intentional
- %paths.modules.subsites%/tests/behat/features/files/ - %paths.modules.subsites%/tests/behat/features/files/
extensions: extensions:
SilverStripe\BehatExtension\MinkExtension: SilverStripe\BehatExtension\MinkExtension:
default_session: selenium2 default_session: facebook_web_driver
javascript_session: selenium2 javascript_session: facebook_web_driver
selenium2: facebook_web_driver:
browser: firefox browser: chrome
wd_host: "http://127.0.0.1:9515" #chromedriver port
browser_name: chrome
SilverStripe\BehatExtension\Extension: SilverStripe\BehatExtension\Extension:
screenshot_path: %paths.base%/artifacts/screenshots screenshot_path: %paths.base%/artifacts/screenshots

View File

@ -24,10 +24,7 @@
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^5.7", "phpunit/phpunit": "^5.7",
"squizlabs/php_codesniffer": "^3.0", "squizlabs/php_codesniffer": "^3.0"
"silverstripe/behat-extension": "^3",
"silverstripe/serve": "^2.0",
"se/selenium-server-standalone": "2.41.0"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {

View File

@ -2,6 +2,7 @@
namespace SilverStripe\Subsites\Extensions; namespace SilverStripe\Subsites\Extensions;
use SilverStripe\Assets\File;
use SilverStripe\ORM\DataExtension; use SilverStripe\ORM\DataExtension;
use SilverStripe\ORM\DataQuery; use SilverStripe\ORM\DataQuery;
use SilverStripe\ORM\Queries\SQLSelect; use SilverStripe\ORM\Queries\SQLSelect;
@ -106,16 +107,21 @@ class FileSubsites extends DataExtension
public function canEdit($member = null) public function canEdit($member = null)
{ {
// Opt out of making opinions if no subsite ID is set yet
if (!$this->owner->SubsiteID) {
return null;
}
// Check the CMS_ACCESS_SecurityAdmin privileges on the subsite that owns this group // Check the CMS_ACCESS_SecurityAdmin privileges on the subsite that owns this group
$subsiteID = SubsiteState::singleton()->getSubsiteId(); $subsiteID = SubsiteState::singleton()->getSubsiteId();
if ($subsiteID && $subsiteID == $this->owner->SubsiteID) { if ($subsiteID && $subsiteID == $this->owner->SubsiteID) {
return true; return true;
} }
return SubsiteState::singleton()->withState(function ($newState) { return SubsiteState::singleton()->withState(function (SubsiteState $newState) use ($member) {
$newState->setSubsiteId($this->owner->SubsiteID); $newState->setSubsiteId($this->owner->SubsiteID);
return Permission::check(['CMS_ACCESS_AssetAdmin', 'CMS_ACCESS_LeftAndMain']); return $this->owner->getPermissionChecker()->canEdit($this->owner->ID, $member);
}); });
} }

View File

@ -9,6 +9,7 @@ use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\OptionsetField; use SilverStripe\Forms\OptionsetField;
use SilverStripe\Forms\ReadonlyField; use SilverStripe\Forms\ReadonlyField;
use SilverStripe\ORM\DataExtension; use SilverStripe\ORM\DataExtension;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\DataQuery; use SilverStripe\ORM\DataQuery;
use SilverStripe\ORM\DB; use SilverStripe\ORM\DB;
use SilverStripe\ORM\Queries\SQLSelect; use SilverStripe\ORM\Queries\SQLSelect;
@ -45,31 +46,31 @@ class GroupSubsites extends DataExtension implements PermissionProvider
return; return;
} }
// Migration for Group.SubsiteID data from when Groups only had a single subsite // Migration for Group.SubsiteID data from when Groups only had a single subsite
$ownerClass = get_class($this->owner); $schema = DataObject::getSchema();
$schema = $ownerClass::getSchema(); $groupTable = $schema->tableName(Group::class);
$groupFields = DB::field_list($schema->tableName(Group::class)); $groupFields = DB::field_list($groupTable);
// Detection of SubsiteID field is the trigger for old-style-subsiteID migration // Detection of SubsiteID field is the trigger for old-style-subsiteID migration
if (isset($groupFields['SubsiteID'])) { if (isset($groupFields['SubsiteID'])) {
// Migrate subsite-specific data // Migrate subsite-specific data
DB::query('INSERT INTO "Group_Subsites" ("GroupID", "SubsiteID") DB::query('INSERT INTO "Group_Subsites" ("GroupID", "SubsiteID")
SELECT "ID", "SubsiteID" FROM "Group" WHERE "SubsiteID" > 0'); SELECT "ID", "SubsiteID" FROM "' . $groupTable . '" WHERE "SubsiteID" > 0');
// Migrate global-access data // Migrate global-access data
DB::query('UPDATE "Group" SET "AccessAllSubsites" = 1 WHERE "SubsiteID" = 0'); DB::query('UPDATE "' . $groupTable . '" SET "AccessAllSubsites" = 1 WHERE "SubsiteID" = 0');
// Move the field out of the way so that this migration doesn't get executed again // Move the field out of the way so that this migration doesn't get executed again
DB::get_schema()->renameField(Group::class, 'SubsiteID', '_obsolete_SubsiteID'); DB::get_schema()->renameField($groupTable, 'SubsiteID', '_obsolete_SubsiteID');
// No subsite access on anything means that we've just installed the subsites module. // No subsite access on anything means that we've just installed the subsites module.
// Make all previous groups global-access groups // Make all previous groups global-access groups
} else { } else {
if (!DB::query('SELECT "Group"."ID" FROM "Group" if (!DB::query('SELECT "Group"."ID" FROM "' . $groupTable . '"
LEFT JOIN "Group_Subsites" ON "Group_Subsites"."GroupID" = "Group"."ID" AND "Group_Subsites"."SubsiteID" > 0 LEFT JOIN "Group_Subsites" ON "Group_Subsites"."GroupID" = "Group"."ID" AND "Group_Subsites"."SubsiteID" > 0
WHERE "AccessAllSubsites" = 1 WHERE "AccessAllSubsites" = 1
OR "Group_Subsites"."GroupID" IS NOT NULL ')->value() OR "Group_Subsites"."GroupID" IS NOT NULL ')->value()
) { ) {
DB::query('UPDATE "Group" SET "AccessAllSubsites" = 1'); DB::query('UPDATE "' . $groupTable . '" SET "AccessAllSubsites" = 1');
} }
} }
} }