Skip to content

Commit

Permalink
ENH Link BaseElements to parent Page for file used on table
Browse files Browse the repository at this point in the history
  • Loading branch information
emteknetnz committed Nov 3, 2020
1 parent 49fc132 commit c596a11
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 27 deletions.
18 changes: 5 additions & 13 deletions .travis.yml
Expand Up @@ -26,23 +26,15 @@ env:
matrix:
include:
- php: 7.1
env: DB=MYSQL RECIPE_VERSION=4.4.x-dev PHPUNIT_TEST=1
env: DB=PGSQL RECIPE_VERSION=4.7.x-dev PHPCS_TEST=1 PHPUNIT_TEST=1
- php: 7.1
env: DB=PGSQL RECIPE_VERSION=4.6.x-dev PHPUNIT_TEST=1
- php: 7.1
env: DB=MYSQL RECIPE_VERSION=4.5.x-dev PHPUNIT_COVERAGE_TEST=1
- php: 7.2
env: DB=MYSQL RECIPE_VERSION=4.5.x-dev BEHAT_TEST=1
env: DB=MYSQL RECIPE_VERSION=4.7.x-dev PHPUNIT_COVERAGE_TEST=1 PDO=1
- php: 7.2
env: DB=MYSQL RECIPE_VERSION=4.x-dev PHPUNIT_TEST=1
- php: 7.3
env: DB=MYSQL RECIPE_VERSION=4.6.x-dev NPM_TEST=1
env: DB=MYSQL RECIPE_VERSION=4.7.x-dev BEHAT_TEST=1
- php: 7.3
env: DB=MYSQL RECIPE_VERSION=4.x-dev PHPUNIT_TEST=1
- php: 7.4
env: DB=MYSQL RECIPE_VERSION=4.6.x-dev
env: DB=MYSQL RECIPE_VERSION=4.7.x-dev NPM_TEST=1
- php: 7.4
env: DB=MYSQL RECIPE_VERSION=4.x-dev PHPCS_TEST=1
env: DB=MYSQL RECIPE_VERSION=4.x-dev PHPUNIT_TEST=1

before_script:
- sudo apt-get remove -y --purge google-chrome-stable || true
Expand Down
8 changes: 4 additions & 4 deletions behat.yml
Expand Up @@ -8,7 +8,7 @@ default:
suites:
silverstripe-elemental:
paths:
- %paths.modules.silverstripe-elemental%/tests/Behat/features
- '%paths.modules.silverstripe-elemental%/tests/Behat/features'
contexts:
- DNADesign\Elemental\Tests\Behat\Context\FeatureContext
- SilverStripe\Framework\Tests\Behaviour\CmsFormsContext
Expand All @@ -17,10 +17,10 @@ default:
- SilverStripe\BehatExtension\Context\LoginContext
-
DNADesign\Elemental\Tests\Behat\Context\FixtureContext:
- %paths.modules.silverstripe-elemental%/tests/Behat
- '%paths.modules.silverstripe-elemental%/tests/Behat'
-
SilverStripe\Framework\Tests\Behaviour\ConfigContext:
- %paths.modules.silverstripe-elemental%/tests/Behat/config
- '%paths.modules.silverstripe-elemental%/tests/Behat/config'
extensions:
SilverStripe\BehatExtension\MinkExtension:
default_session: facebook_web_driver
Expand All @@ -31,5 +31,5 @@ default:
browser_name: chrome
SilverStripe\BehatExtension\Extension:
bootstrap_file: vendor/silverstripe/cms/tests/behat/serve-bootstrap.php
screenshot_path: %paths.base%/artifacts/screenshots
screenshot_path: '%paths.base%/artifacts/screenshots'
retry_seconds: 4 # default is 2
11 changes: 4 additions & 7 deletions composer.json
Expand Up @@ -17,10 +17,10 @@
"prefer-stable": true,
"require": {
"php": "^7.1",
"silverstripe/cms": "^4.4@dev",
"silverstripe/admin": "^1.4@dev",
"silverstripe/versioned": "^1.3@dev",
"silverstripe/versioned-admin": "^1.2@dev",
"silverstripe/cms": "^4.7@dev",
"silverstripe/admin": "^1.7@dev",
"silverstripe/versioned": "^1.7@dev",
"silverstripe/versioned-admin": "^1.7@dev",
"symbiote/silverstripe-gridfieldextensions": "^3.1",
"silverstripe/vendor-plugin": "^1"
},
Expand All @@ -35,9 +35,6 @@
"dnadesign/silverstripe-elemental-virtual": "Adds support to share blocks between pages"
},
"extra": {
"branch-alias": {
"4.x-dev": "4.2.x-dev"
},
"expose": [
"client/dist",
"client/lang"
Expand Down
62 changes: 59 additions & 3 deletions src/Extensions/ElementalAreaUsedOnTableExtension.php
Expand Up @@ -3,24 +3,80 @@
namespace DNADesign\Elemental\Extensions;

use SilverStripe\Admin\Forms\UsedOnTable;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\ORM\DataExtension;
use SilverStripe\ORM\ArrayList;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\ValidationException;
use DNADesign\Elemental\Models\ElementalArea;
use DNADesign\Elemental\Models\BaseElement;

class ElementalAreaUsedOnTableExtension extends DataExtension
{

/**
* Hides ElementalArea's from the "Used On" tab when viewing files
*
* @var array $excludedClasses
*/
public function updateUsageExcludedClasses(array &$excludedClasses)
{
$excludedClasses[] = ElementalArea::class;
}

/**
* Legacy function kept for semver, replaced with updateUsageExcludedClasses above
*
* @return void
* @var ArrayList $dataObjects
* @var ArrayList $usage
* @var DataObject $record
* @see UsedOnTable::updateUsage
* @deprecated 4.5.0 Use self::updateUsageExcludedClasses instead
*/
public function updateUsage(ArrayList &$usage, DataObject &$record)
{
// noop
}

/**
* Exclude content blocks that aren't linked to a page
*
* @param bool $excludeDataObject
* @param DataObject $dataObject
*/
public function updateUsageDataObject(?DataObject $dataObject)
{
if (!($dataObject instanceof BaseElement)) {
return;
}
try {
if (!$dataObject->getPage()) {
$dataObject = null;
}
} catch (ValidationException $e) {
$dataObject = null;
}
}

/**
* Link BaseElement's to their parent page
*
* @param array $ancestorDataObjects
* @param DataObject $dataObject
*/
public function updateUsage(ArrayList &$dataObjects, DataObject &$record)
public function updateUsageAncestorDataObjects(array &$ancestorDataObjects, DataObject $dataObject)
{
$usage = $dataObjects->exclude('ClassName', ElementalArea::class);
if (!($dataObject instanceof BaseElement)) {
return;
}
try {
// BaseElement::getPage() caches results so there's no performance decrease from
// also calling it in updateUsageExcludeDataObject()
/** @var SiteTree $page */
if ($page = $dataObject->getPage()) {
$ancestorDataObjects[] = $page;
}
} catch (ValidationException $e) {
}
}
}

0 comments on commit c596a11

Please sign in to comment.