![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-media-content-cms/Observer/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\MediaContentCms\Observer; use Magento\Cms\Model\Block as CmsBlock; use Magento\Framework\Event\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\MediaContentApi\Api\Data\ContentIdentityInterfaceFactory; use Magento\MediaContentApi\Api\Data\ContentAssetLinkInterfaceFactory; use Magento\MediaContentApi\Api\DeleteContentAssetLinksInterface; use Magento\MediaContentApi\Model\GetEntityContentsInterface; use Magento\MediaContentApi\Api\ExtractAssetsFromContentInterface; use Magento\MediaContentApi\Model\Config; /** * Observe the adminhtml_cmspage_on_delete event and deletes relation between page content and media asset. */ class BlockDelete implements ObserverInterface { private const CONTENT_TYPE = 'cms_block'; private const TYPE = 'entityType'; private const ENTITY_ID = 'entityId'; private const FIELD = 'field'; /** * @var Config */ private $config; /** * @var ContentIdentityInterfaceFactory */ private $contentIdentityFactory; /** * @var ContentAssetLinkInterfaceFactory */ private $contentAssetLinkFactory; /** * @var DeleteContentAssetLinksInterface */ private $deleteContentAssetLinks; /** * @var array */ private $fields; /** * @var GetEntityContentsInterface */ private $getContent; /** * @var ExtractAssetsFromContentInterface */ private $extractAssetsFromContent; /** * @param ExtractAssetsFromContentInterface $extractAssetsFromContent * @param GetEntityContentsInterface $getContent * @param DeleteContentAssetLinksInterface $deleteContentAssetLinks * @param ContentIdentityInterfaceFactory $contentIdentityFactory * @param ContentAssetLinkInterfaceFactory $contentAssetLinkFactory * @param Config $config * @param array $fields */ public function __construct( ExtractAssetsFromContentInterface $extractAssetsFromContent, GetEntityContentsInterface $getContent, DeleteContentAssetLinksInterface $deleteContentAssetLinks, ContentIdentityInterfaceFactory $contentIdentityFactory, ContentAssetLinkInterfaceFactory $contentAssetLinkFactory, Config $config, array $fields ) { $this->extractAssetsFromContent = $extractAssetsFromContent; $this->getContent = $getContent; $this->deleteContentAssetLinks = $deleteContentAssetLinks; $this->contentAssetLinkFactory = $contentAssetLinkFactory; $this->contentIdentityFactory = $contentIdentityFactory; $this->config = $config; $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 { if (!$this->config->isEnabled()) { return; } $block = $observer->getEvent()->getData('object'); $contentAssetLinks = []; 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) $block->getId(), ] ); $assets = $this->extractAssetsFromContent->execute((string) $block->getData($field)); foreach ($assets as $asset) { $contentAssetLinks[] = $this->contentAssetLinkFactory->create( [ 'assetId' => $asset->getId(), 'contentIdentity' => $contentIdentity ] ); } } if (!empty($contentAssetLinks)) { $this->deleteContentAssetLinks->execute($contentAssetLinks); } } } }