From def437e42b5423dcdcbafef313dffab7f774563a Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Fri, 10 Jun 2022 14:15:59 +0300 Subject: [PATCH] Improved deleting flex objects --- system/src/Grav/Common/Flex/FlexObject.php | 17 +++++++ system/src/Grav/Framework/Flex/FlexObject.php | 47 +++++++++++++------ 2 files changed, 50 insertions(+), 14 deletions(-) diff --git a/system/src/Grav/Common/Flex/FlexObject.php b/system/src/Grav/Common/Flex/FlexObject.php index 887d7a3f2..c415c73b8 100644 --- a/system/src/Grav/Common/Flex/FlexObject.php +++ b/system/src/Grav/Common/Flex/FlexObject.php @@ -14,6 +14,7 @@ namespace Grav\Common\Flex; use Grav\Common\Flex\Traits\FlexGravTrait; use Grav\Common\Flex\Traits\FlexObjectTrait; use Grav\Common\Media\Interfaces\MediaInterface; +use Grav\Common\Media\Interfaces\MediaUploadInterface; use Grav\Framework\Flex\Traits\FlexMediaTrait; use function is_array; @@ -71,4 +72,20 @@ abstract class FlexObject extends \Grav\Framework\Flex\FlexObject implements Med return parent::prepareStorage(); } + + /** + * @return void + */ + protected function doDelete(): void + { + $fields = $this->getMediaFields(); + foreach ($fields as $field) { + $media = $this->getMediaField($field); + if ($media instanceof MediaUploadInterface) { + $media->deleteAll(); + } + } + + parent::doDelete(); + } } diff --git a/system/src/Grav/Framework/Flex/FlexObject.php b/system/src/Grav/Framework/Flex/FlexObject.php index a4a1c710e..6dd876f91 100644 --- a/system/src/Grav/Framework/Flex/FlexObject.php +++ b/system/src/Grav/Framework/Flex/FlexObject.php @@ -824,20 +824,7 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface $this->triggerEvent('onBeforeDelete'); - $this->getFlexDirectory()->getStorage()->deleteRows([$this->getStorageKey() => $this->prepareStorage()]); - - try { - $this->getFlexDirectory()->reloadIndex(); - if (method_exists($this, 'clearMediaCache')) { - $this->clearMediaCache(); - } - } catch (Exception $e) { - /** @var Debugger $debugger */ - $debugger = Grav::instance()['debugger']; - $debugger->addException($e); - - // Caching failed, but we can ignore that for now. - } + $this->onDelete(); $this->triggerEvent('onAfterDelete'); @@ -1050,6 +1037,38 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface $this->setElements($serialized['elements']); } + /** + * @return void + */ + protected function doDelete(): void + { + $this->getFlexDirectory()->getStorage()->deleteRows([$this->getStorageKey() => $this->prepareStorage()]); + } + + /** + * @return void + */ + protected function onDelete(): void + { + $this->doDelete(); + + try { + // Force reload object index. + $this->getFlexDirectory()->reloadIndex(); + + // Clear media cache. + if (method_exists($this, 'clearMediaCache')) { + $this->clearMediaCache(); + } + } catch (Exception $e) { + /** @var Debugger $debugger */ + $debugger = Grav::instance()['debugger']; + $debugger->addException($e); + + // Caching failed, but we can ignore that for now. + } + } + /** * @return array */