From 4eb92f48cc6277b942b47edd32d8b9dbdb7a968b Mon Sep 17 00:00:00 2001 From: Thomas Portelange Date: Thu, 22 Jun 2023 12:26:51 +0200 Subject: [PATCH 1/4] Don't run onBefore if no assets Fixes https://github.com/silverstripe/silverstripe-assets/issues/559 --- src/AssetControlExtension.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/AssetControlExtension.php b/src/AssetControlExtension.php index 056e812c..3aecea2a 100644 --- a/src/AssetControlExtension.php +++ b/src/AssetControlExtension.php @@ -52,6 +52,10 @@ class AssetControlExtension extends DataExtension */ public function onAfterDelete() { + if (!$this->hasAssets()) { + return; + } + // Prepare blank manipulation $manipulations = new AssetManipulationList(); @@ -71,6 +75,10 @@ public function onAfterDelete() */ public function onBeforeWrite() { + if (!$this->hasAssets()) { + return; + } + // Prepare blank manipulation $manipulations = new AssetManipulationList(); @@ -209,6 +217,23 @@ protected function addAssetsFromRecord(AssetManipulationList $manipulation, Data } } + /** + * Check if the owner has assets + * + * @return bool + */ + protected function hasAssets() + { + $fields = DataObject::getSchema()->fieldSpecs($this->owner); + foreach ($fields as $field => $db) { + $fieldObj = $this->owner->$field; + if ($fieldObj instanceof DBFile) { + return true; + } + } + return false; + } + /** * Return a list of all tuples attached to this dataobject * Note: Variants are excluded From 41dc93cf47d63ff7ec4ec8df97a7f3a74a42f561 Mon Sep 17 00:00:00 2001 From: Thomas Portelange Date: Fri, 23 Jun 2023 09:30:36 +0200 Subject: [PATCH 2/4] make it private --- src/AssetControlExtension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AssetControlExtension.php b/src/AssetControlExtension.php index 3aecea2a..66d4211d 100644 --- a/src/AssetControlExtension.php +++ b/src/AssetControlExtension.php @@ -222,7 +222,7 @@ protected function addAssetsFromRecord(AssetManipulationList $manipulation, Data * * @return bool */ - protected function hasAssets() + private function hasAssets() { $fields = DataObject::getSchema()->fieldSpecs($this->owner); foreach ($fields as $field => $db) { From 43aecdb90951e35cc512c6a4520f204d3f85a998 Mon Sep 17 00:00:00 2001 From: Thomas Portelange Date: Sun, 25 Jun 2023 22:13:54 +0200 Subject: [PATCH 3/4] use strong return type --- src/AssetControlExtension.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/AssetControlExtension.php b/src/AssetControlExtension.php index 66d4211d..ae405607 100644 --- a/src/AssetControlExtension.php +++ b/src/AssetControlExtension.php @@ -217,12 +217,7 @@ protected function addAssetsFromRecord(AssetManipulationList $manipulation, Data } } - /** - * Check if the owner has assets - * - * @return bool - */ - private function hasAssets() + private function hasAssets(): bool { $fields = DataObject::getSchema()->fieldSpecs($this->owner); foreach ($fields as $field => $db) { From 418906dc504fea7863eb151b52e0060e329e38f5 Mon Sep 17 00:00:00 2001 From: Thomas Portelange Date: Thu, 10 Aug 2023 11:32:19 +0200 Subject: [PATCH 4/4] use dbObject --- src/AssetControlExtension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AssetControlExtension.php b/src/AssetControlExtension.php index ae405607..dafdb5ec 100644 --- a/src/AssetControlExtension.php +++ b/src/AssetControlExtension.php @@ -221,7 +221,7 @@ private function hasAssets(): bool { $fields = DataObject::getSchema()->fieldSpecs($this->owner); foreach ($fields as $field => $db) { - $fieldObj = $this->owner->$field; + $fieldObj = $this->owner->dbObject($field); if ($fieldObj instanceof DBFile) { return true; }