From a2d51131606d59e3124919f120243cfd69d998f3 Mon Sep 17 00:00:00 2001 From: Nazar Klovanych Date: Thu, 18 Jun 2020 14:33:26 +0300 Subject: [PATCH 1/3] Introduce observers to track deleted entities --- .../Observer/CategoryDelete.php | 119 ++++++++++++++++++ .../Observer/ProductDelete.php | 119 ++++++++++++++++++ .../Magento/MediaContentCatalog/etc/di.xml | 16 +++ .../MediaContentCatalog/etc/events.xml | 6 + .../MediaContentCms/Observer/BlockDelete.php | 119 ++++++++++++++++++ .../MediaContentCms/Observer/PageDelete.php | 119 ++++++++++++++++++ app/code/Magento/MediaContentCms/etc/di.xml | 14 +++ .../Magento/MediaContentCms/etc/events.xml | 6 + 8 files changed, 518 insertions(+) create mode 100644 app/code/Magento/MediaContentCatalog/Observer/CategoryDelete.php create mode 100644 app/code/Magento/MediaContentCatalog/Observer/ProductDelete.php create mode 100644 app/code/Magento/MediaContentCms/Observer/BlockDelete.php create mode 100644 app/code/Magento/MediaContentCms/Observer/PageDelete.php diff --git a/app/code/Magento/MediaContentCatalog/Observer/CategoryDelete.php b/app/code/Magento/MediaContentCatalog/Observer/CategoryDelete.php new file mode 100644 index 0000000000000..e8939e2fae798 --- /dev/null +++ b/app/code/Magento/MediaContentCatalog/Observer/CategoryDelete.php @@ -0,0 +1,119 @@ +extractAssetsFromContent = $extractAssetsFromContent; + $this->getContent = $getContent; + $this->deleteContentAssetLinks = $deleteContentAssetLinks; + $this->contentAssetLinkFactory = $contentAssetLinkFactory; + $this->contentIdentityFactory = $contentIdentityFactory; + $this->fields = $fields; + } + + /** + * Retrieve the deleted category and remove relation betwen category and asset + * + * @param Observer $observer + * @throws \Exception + */ + public function execute(Observer $observer): void + { + $model = $observer->getEvent()->getData('category'); + $contentAssetsLinks = []; + + if ($model instanceof CatalogCategory) { + foreach ($this->fields as $field) { + $contentIdentity = $this->contentIdentityFactory->create( + [ + self::TYPE => self::CONTENT_TYPE, + self::FIELD => $field, + self::ENTITY_ID => (string) $model->getEntityId(), + ] + ); + $content = implode(PHP_EOL, $this->getContent->execute($contentIdentity)); + $assets = $this->extractAssetsFromContent->execute($content); + + foreach ($assets as $asset) { + $contentAssetLinks[] = $this->contentAssetLinkFactory->create( + [ + 'assetId' => $asset->getId(), + 'contentIdentity' => $contentIdentity + ] + ); + } + } + if (!empty($contentAssetLinks)) { + $this->deleteContentAssetLinks->execute($contentAssetLinks); + } + } + } +} diff --git a/app/code/Magento/MediaContentCatalog/Observer/ProductDelete.php b/app/code/Magento/MediaContentCatalog/Observer/ProductDelete.php new file mode 100644 index 0000000000000..0684955d61fd7 --- /dev/null +++ b/app/code/Magento/MediaContentCatalog/Observer/ProductDelete.php @@ -0,0 +1,119 @@ +extractAssetsFromContent = $extractAssetsFromContent; + $this->getContent = $getContent; + $this->deleteContentAssetLinks = $deleteContentAssetLinks; + $this->contentAssetLinkFactory = $contentAssetLinkFactory; + $this->contentIdentityFactory = $contentIdentityFactory; + $this->fields = $fields; + } + + /** + * Retrieve the deleted product and remove relation betwen product and asset + * + * @param Observer $observer + * @throws \Exception + */ + public function execute(Observer $observer): void + { + $model = $observer->getEvent()->getData('product'); + $contentAssetsLinks = []; + + if ($model instanceof CatalogProduct) { + foreach ($this->fields as $field) { + $contentIdentity = $this->contentIdentityFactory->create( + [ + self::TYPE => self::CONTENT_TYPE, + self::FIELD => $field, + self::ENTITY_ID => (string) $model->getEntityId(), + ] + ); + $content = implode(PHP_EOL, $this->getContent->execute($contentIdentity)); + $assets = $this->extractAssetsFromContent->execute($content); + + foreach ($assets as $asset) { + $contentAssetLinks[] = $this->contentAssetLinkFactory->create( + [ + 'assetId' => $asset->getId(), + 'contentIdentity' => $contentIdentity + ] + ); + } + } + if (!empty($contentAssetLinks)) { + $this->deleteContentAssetLinks->execute($contentAssetLinks); + } + } + } +} diff --git a/app/code/Magento/MediaContentCatalog/etc/di.xml b/app/code/Magento/MediaContentCatalog/etc/di.xml index a2d300a2bb208..6b0ee83b30788 100644 --- a/app/code/Magento/MediaContentCatalog/etc/di.xml +++ b/app/code/Magento/MediaContentCatalog/etc/di.xml @@ -14,6 +14,22 @@ + + + + description + short_description + + + + + + + image + description + + + diff --git a/app/code/Magento/MediaContentCatalog/etc/events.xml b/app/code/Magento/MediaContentCatalog/etc/events.xml index f68d66eb3cc40..8ec7a30b961ba 100644 --- a/app/code/Magento/MediaContentCatalog/etc/events.xml +++ b/app/code/Magento/MediaContentCatalog/etc/events.xml @@ -9,6 +9,12 @@ + + + + + + diff --git a/app/code/Magento/MediaContentCms/Observer/BlockDelete.php b/app/code/Magento/MediaContentCms/Observer/BlockDelete.php new file mode 100644 index 0000000000000..13b3d23ed85eb --- /dev/null +++ b/app/code/Magento/MediaContentCms/Observer/BlockDelete.php @@ -0,0 +1,119 @@ +extractAssetsFromContent = $extractAssetsFromContent; + $this->getContent = $getContent; + $this->deleteContentAssetLinks = $deleteContentAssetLinks; + $this->contentAssetLinkFactory = $contentAssetLinkFactory; + $this->contentIdentityFactory = $contentIdentityFactory; + $this->fields = $fields; + } + + /** + * Retrieve the deleted category and remove relation betwen category and asset + * + * @param Observer $observer + * @throws \Exception + */ + public function execute(Observer $observer): void + { + $model = $observer->getEvent()->getData('object'); + $contentAssetsLinks = []; + + if ($model instanceof CmsBlock) { + foreach ($this->fields as $field) { + $contentIdentity = $this->contentIdentityFactory->create( + [ + self::TYPE => self::CONTENT_TYPE, + self::FIELD => $field, + self::ENTITY_ID => (string) $model->getId(), + ] + ); + + $assets = $this->extractAssetsFromContent->execute((string) $model->getData($field)); + + foreach ($assets as $asset) { + $contentAssetLinks[] = $this->contentAssetLinkFactory->create( + [ + 'assetId' => $asset->getId(), + 'contentIdentity' => $contentIdentity + ] + ); + } + } + if (!empty($contentAssetLinks)) { + $this->deleteContentAssetLinks->execute($contentAssetLinks); + } + } + } +} diff --git a/app/code/Magento/MediaContentCms/Observer/PageDelete.php b/app/code/Magento/MediaContentCms/Observer/PageDelete.php new file mode 100644 index 0000000000000..127764c3fcf12 --- /dev/null +++ b/app/code/Magento/MediaContentCms/Observer/PageDelete.php @@ -0,0 +1,119 @@ +extractAssetsFromContent = $extractAssetsFromContent; + $this->getContent = $getContent; + $this->deleteContentAssetLinks = $deleteContentAssetLinks; + $this->contentAssetLinkFactory = $contentAssetLinkFactory; + $this->contentIdentityFactory = $contentIdentityFactory; + $this->fields = $fields; + } + + /** + * Retrieve the deleted category and remove relation betwen category and asset + * + * @param Observer $observer + * @throws \Exception + */ + public function execute(Observer $observer): void + { + $model = $observer->getEvent()->getData('object'); + $contentAssetsLinks = []; + + if ($model instanceof CmsPage) { + foreach ($this->fields as $field) { + $contentIdentity = $this->contentIdentityFactory->create( + [ + self::TYPE => self::CONTENT_TYPE, + self::FIELD => $field, + self::ENTITY_ID => (string) $model->getId(), + ] + ); + + $assets = $this->extractAssetsFromContent->execute((string) $model->getData($field)); + + foreach ($assets as $asset) { + $contentAssetLinks[] = $this->contentAssetLinkFactory->create( + [ + 'assetId' => $asset->getId(), + 'contentIdentity' => $contentIdentity + ] + ); + } + } + if (!empty($contentAssetLinks)) { + $this->deleteContentAssetLinks->execute($contentAssetLinks); + } + } + } +} diff --git a/app/code/Magento/MediaContentCms/etc/di.xml b/app/code/Magento/MediaContentCms/etc/di.xml index f980936465faf..6f196889540af 100644 --- a/app/code/Magento/MediaContentCms/etc/di.xml +++ b/app/code/Magento/MediaContentCms/etc/di.xml @@ -20,4 +20,18 @@ + + + + content + + + + + + + content + + + diff --git a/app/code/Magento/MediaContentCms/etc/events.xml b/app/code/Magento/MediaContentCms/etc/events.xml index 7e9abe3bf19c4..94f963f40be15 100644 --- a/app/code/Magento/MediaContentCms/etc/events.xml +++ b/app/code/Magento/MediaContentCms/etc/events.xml @@ -6,8 +6,14 @@ */ --> + + + + + + From 3bc82395fede9a07a51464ff21c7b467befbdd2e Mon Sep 17 00:00:00 2001 From: Nazar Klovanych Date: Thu, 18 Jun 2020 15:24:06 +0300 Subject: [PATCH 2/3] static test fixes --- .../MediaContentCatalog/Observer/CategoryDelete.php | 7 ++++--- .../MediaContentCatalog/Observer/ProductDelete.php | 7 ++++--- .../Magento/MediaContentCms/Observer/BlockDelete.php | 7 ++++--- app/code/Magento/MediaContentCms/Observer/PageDelete.php | 9 +++++---- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/app/code/Magento/MediaContentCatalog/Observer/CategoryDelete.php b/app/code/Magento/MediaContentCatalog/Observer/CategoryDelete.php index e8939e2fae798..6c794aca497f0 100644 --- a/app/code/Magento/MediaContentCatalog/Observer/CategoryDelete.php +++ b/app/code/Magento/MediaContentCatalog/Observer/CategoryDelete.php @@ -32,8 +32,8 @@ class CategoryDelete implements ObserverInterface private $contentIdentityFactory; /** - * @var ContentAssetLinkInterfaceFactory - */ + * @var ContentAssetLinkInterfaceFactory + */ private $contentAssetLinkFactory; /** @@ -62,6 +62,7 @@ class CategoryDelete implements ObserverInterface * @param DeleteContentAssetLinksInterface $deleteContentAssetLinks * @param ContentIdentityInterfaceFactory $contentIdentityFactory * @param ContentAssetLinkInterfaceFactory $contentAssetLinkFactory + * @param array $fields */ public function __construct( ExtractAssetsFromContentInterface $extractAssetsFromContent, @@ -88,7 +89,7 @@ public function __construct( public function execute(Observer $observer): void { $model = $observer->getEvent()->getData('category'); - $contentAssetsLinks = []; + $contentAssetLinks = []; if ($model instanceof CatalogCategory) { foreach ($this->fields as $field) { diff --git a/app/code/Magento/MediaContentCatalog/Observer/ProductDelete.php b/app/code/Magento/MediaContentCatalog/Observer/ProductDelete.php index 0684955d61fd7..77285b35ca3f5 100644 --- a/app/code/Magento/MediaContentCatalog/Observer/ProductDelete.php +++ b/app/code/Magento/MediaContentCatalog/Observer/ProductDelete.php @@ -32,8 +32,8 @@ class ProductDelete implements ObserverInterface private $contentIdentityFactory; /** - * @var ContentAssetLinkInterfaceFactory - */ + * @var ContentAssetLinkInterfaceFactory + */ private $contentAssetLinkFactory; /** @@ -62,6 +62,7 @@ class ProductDelete implements ObserverInterface * @param DeleteContentAssetLinksInterface $deleteContentAssetLinks * @param ContentIdentityInterfaceFactory $contentIdentityFactory * @param ContentAssetLinkInterfaceFactory $contentAssetLinkFactory + * @param array $fields */ public function __construct( ExtractAssetsFromContentInterface $extractAssetsFromContent, @@ -88,7 +89,7 @@ public function __construct( public function execute(Observer $observer): void { $model = $observer->getEvent()->getData('product'); - $contentAssetsLinks = []; + $contentAssetLinks = []; if ($model instanceof CatalogProduct) { foreach ($this->fields as $field) { diff --git a/app/code/Magento/MediaContentCms/Observer/BlockDelete.php b/app/code/Magento/MediaContentCms/Observer/BlockDelete.php index 13b3d23ed85eb..3204dae209025 100644 --- a/app/code/Magento/MediaContentCms/Observer/BlockDelete.php +++ b/app/code/Magento/MediaContentCms/Observer/BlockDelete.php @@ -32,8 +32,8 @@ class BlockDelete implements ObserverInterface private $contentIdentityFactory; /** - * @var ContentAssetLinkInterfaceFactory - */ + * @var ContentAssetLinkInterfaceFactory + */ private $contentAssetLinkFactory; /** @@ -62,6 +62,7 @@ class BlockDelete implements ObserverInterface * @param DeleteContentAssetLinksInterface $deleteContentAssetLinks * @param ContentIdentityInterfaceFactory $contentIdentityFactory * @param ContentAssetLinkInterfaceFactory $contentAssetLinkFactory + * @param array $fields */ public function __construct( ExtractAssetsFromContentInterface $extractAssetsFromContent, @@ -88,7 +89,7 @@ public function __construct( public function execute(Observer $observer): void { $model = $observer->getEvent()->getData('object'); - $contentAssetsLinks = []; + $contentAssetLinks = []; if ($model instanceof CmsBlock) { foreach ($this->fields as $field) { diff --git a/app/code/Magento/MediaContentCms/Observer/PageDelete.php b/app/code/Magento/MediaContentCms/Observer/PageDelete.php index 127764c3fcf12..25d1b3ca772cc 100644 --- a/app/code/Magento/MediaContentCms/Observer/PageDelete.php +++ b/app/code/Magento/MediaContentCms/Observer/PageDelete.php @@ -17,7 +17,7 @@ use Magento\MediaContentApi\Api\ExtractAssetsFromContentInterface; /** - * Observe the adminhtml_cmspage_on_delete event and deletes relation between page content and media asset. + * Observe the cms_page_delete_before event and deletes relation between page content and media asset. */ class PageDelete implements ObserverInterface { @@ -32,8 +32,8 @@ class PageDelete implements ObserverInterface private $contentIdentityFactory; /** - * @var ContentAssetLinkInterfaceFactory - */ + * @var ContentAssetLinkInterfaceFactory + */ private $contentAssetLinkFactory; /** @@ -62,6 +62,7 @@ class PageDelete implements ObserverInterface * @param DeleteContentAssetLinksInterface $deleteContentAssetLinks * @param ContentIdentityInterfaceFactory $contentIdentityFactory * @param ContentAssetLinkInterfaceFactory $contentAssetLinkFactory + * @param arry $fields */ public function __construct( ExtractAssetsFromContentInterface $extractAssetsFromContent, @@ -88,7 +89,7 @@ public function __construct( public function execute(Observer $observer): void { $model = $observer->getEvent()->getData('object'); - $contentAssetsLinks = []; + $contentAssetLinks = []; if ($model instanceof CmsPage) { foreach ($this->fields as $field) { From 34bff1266d63294251bb96798f2c7cafcaba8122 Mon Sep 17 00:00:00 2001 From: Nazar Klovanych Date: Thu, 18 Jun 2020 15:37:55 +0300 Subject: [PATCH 3/3] Satic test fixes --- .../MediaContentCatalog/Observer/CategoryDelete.php | 8 ++++---- .../MediaContentCatalog/Observer/ProductDelete.php | 10 +++++----- .../Magento/MediaContentCms/Observer/BlockDelete.php | 9 ++++----- .../Magento/MediaContentCms/Observer/PageDelete.php | 8 ++++---- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/app/code/Magento/MediaContentCatalog/Observer/CategoryDelete.php b/app/code/Magento/MediaContentCatalog/Observer/CategoryDelete.php index 6c794aca497f0..1565d455cc43f 100644 --- a/app/code/Magento/MediaContentCatalog/Observer/CategoryDelete.php +++ b/app/code/Magento/MediaContentCatalog/Observer/CategoryDelete.php @@ -17,7 +17,7 @@ use Magento\MediaContentApi\Api\ExtractAssetsFromContentInterface; /** - * Observe the catalog_category_delete event and deletes relation between category content and media asset. + * Observe the catalog_category_delete_after event and deletes relation between category content and media asset. */ class CategoryDelete implements ObserverInterface { @@ -88,16 +88,16 @@ public function __construct( */ public function execute(Observer $observer): void { - $model = $observer->getEvent()->getData('category'); + $category = $observer->getEvent()->getData('category'); $contentAssetLinks = []; - if ($model instanceof CatalogCategory) { + if ($category instanceof CatalogCategory) { foreach ($this->fields as $field) { $contentIdentity = $this->contentIdentityFactory->create( [ self::TYPE => self::CONTENT_TYPE, self::FIELD => $field, - self::ENTITY_ID => (string) $model->getEntityId(), + self::ENTITY_ID => (string) $category->getEntityId(), ] ); $content = implode(PHP_EOL, $this->getContent->execute($contentIdentity)); diff --git a/app/code/Magento/MediaContentCatalog/Observer/ProductDelete.php b/app/code/Magento/MediaContentCatalog/Observer/ProductDelete.php index 77285b35ca3f5..421bb5a33fa1d 100644 --- a/app/code/Magento/MediaContentCatalog/Observer/ProductDelete.php +++ b/app/code/Magento/MediaContentCatalog/Observer/ProductDelete.php @@ -88,20 +88,20 @@ public function __construct( */ public function execute(Observer $observer): void { - $model = $observer->getEvent()->getData('product'); + $product = $observer->getEvent()->getData('product'); $contentAssetLinks = []; - if ($model instanceof CatalogProduct) { + if ($product instanceof CatalogProduct) { foreach ($this->fields as $field) { $contentIdentity = $this->contentIdentityFactory->create( [ self::TYPE => self::CONTENT_TYPE, self::FIELD => $field, - self::ENTITY_ID => (string) $model->getEntityId(), + self::ENTITY_ID => (string) $product->getEntityId(), ] ); - $content = implode(PHP_EOL, $this->getContent->execute($contentIdentity)); - $assets = $this->extractAssetsFromContent->execute($content); + $productContent = implode(PHP_EOL, $this->getContent->execute($contentIdentity)); + $assets = $this->extractAssetsFromContent->execute($productContent); foreach ($assets as $asset) { $contentAssetLinks[] = $this->contentAssetLinkFactory->create( diff --git a/app/code/Magento/MediaContentCms/Observer/BlockDelete.php b/app/code/Magento/MediaContentCms/Observer/BlockDelete.php index 3204dae209025..582f0a9ec6701 100644 --- a/app/code/Magento/MediaContentCms/Observer/BlockDelete.php +++ b/app/code/Magento/MediaContentCms/Observer/BlockDelete.php @@ -88,20 +88,19 @@ public function __construct( */ public function execute(Observer $observer): void { - $model = $observer->getEvent()->getData('object'); + $block = $observer->getEvent()->getData('object'); $contentAssetLinks = []; - if ($model instanceof CmsBlock) { + if ($block instanceof CmsBlock) { foreach ($this->fields as $field) { $contentIdentity = $this->contentIdentityFactory->create( [ self::TYPE => self::CONTENT_TYPE, self::FIELD => $field, - self::ENTITY_ID => (string) $model->getId(), + self::ENTITY_ID => (string) $block->getId(), ] ); - - $assets = $this->extractAssetsFromContent->execute((string) $model->getData($field)); + $assets = $this->extractAssetsFromContent->execute((string) $block->getData($field)); foreach ($assets as $asset) { $contentAssetLinks[] = $this->contentAssetLinkFactory->create( diff --git a/app/code/Magento/MediaContentCms/Observer/PageDelete.php b/app/code/Magento/MediaContentCms/Observer/PageDelete.php index 25d1b3ca772cc..96d2bf89873bd 100644 --- a/app/code/Magento/MediaContentCms/Observer/PageDelete.php +++ b/app/code/Magento/MediaContentCms/Observer/PageDelete.php @@ -88,20 +88,20 @@ public function __construct( */ public function execute(Observer $observer): void { - $model = $observer->getEvent()->getData('object'); + $page = $observer->getEvent()->getData('object'); $contentAssetLinks = []; - if ($model instanceof CmsPage) { + if ($page instanceof CmsPage) { foreach ($this->fields as $field) { $contentIdentity = $this->contentIdentityFactory->create( [ self::TYPE => self::CONTENT_TYPE, self::FIELD => $field, - self::ENTITY_ID => (string) $model->getId(), + self::ENTITY_ID => (string) $page->getId(), ] ); - $assets = $this->extractAssetsFromContent->execute((string) $model->getData($field)); + $assets = $this->extractAssetsFromContent->execute((string) $page->getData($field)); foreach ($assets as $asset) { $contentAssetLinks[] = $this->contentAssetLinkFactory->create(