src/EventListener/DataObjectListener.php line 134

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\EventListener\Handler\DataObject\AdvantageHandler;
  4. use App\EventListener\Handler\DataObject\AwardHandler;
  5. use App\EventListener\Handler\DataObject\BrandCategoryImageHandler;
  6. use App\EventListener\Handler\DataObject\BrandHandler;
  7. use App\EventListener\Handler\DataObject\CatalogGridBannerHandler;
  8. use App\EventListener\Handler\DataObject\CatalogTopBannerHandler;
  9. use App\EventListener\Handler\DataObject\CategoryHandler;
  10. use App\EventListener\Handler\DataObject\CollectionCategoryImageHandler;
  11. use App\EventListener\Handler\DataObject\CollectionHandler;
  12. use App\EventListener\Handler\DataObject\FeatureHandler;
  13. use App\EventListener\Handler\DataObject\GoodHandler;
  14. use App\EventListener\Handler\DataObject\ProductHandler;
  15. use App\EventListener\Handler\DataObject\ProductLabelHandler;
  16. use App\EventListener\Handler\DataObject\ProductsSetHandler;
  17. use App\EventListener\Handler\DataObject\ProductVariationHandler;
  18. use App\EventListener\Handler\DataObject\VariationsConfigHandler;
  19. use App\Service\Bus\Publisher\AdvantagePublisher;
  20. use App\Service\Bus\Publisher\AwardPublisher;
  21. use App\Service\Bus\Publisher\BrandCategoryImagePublisher;
  22. use App\Service\Bus\Publisher\BrandPublisher;
  23. use App\Service\Bus\Publisher\CatalogGridBannerPublisher;
  24. use App\Service\Bus\Publisher\CatalogTopBannerPublisher;
  25. use App\Service\Bus\Publisher\CollectionCategoryImagePublisher;
  26. use App\Service\Bus\Publisher\CategoryPublisher;
  27. use App\Service\Bus\Publisher\CollectionPublisher;
  28. use App\Service\Bus\Publisher\FeaturePublisher;
  29. use App\Service\Bus\Publisher\ProductPublisher;
  30. use App\Service\Bus\Publisher\ProductLabelPublisher;
  31. use App\Service\Bus\Publisher\ProductSetPublisher;
  32. use App\Service\Bus\Publisher\ProductVariationPublisher;
  33. use Pimcore\Event\Model\DataObjectEvent;
  34. use Pimcore\Model\DataObject\Advantage;
  35. use Pimcore\Model\DataObject\Award;
  36. use Pimcore\Model\DataObject\Brand;
  37. use Pimcore\Model\DataObject\BrandCategoryImage;
  38. use Pimcore\Model\DataObject\CatalogGridBanner;
  39. use Pimcore\Model\DataObject\CatalogTopBanner;
  40. use Pimcore\Model\DataObject\Category;
  41. use Pimcore\Model\DataObject\CategoryBanner;
  42. use Pimcore\Model\DataObject\Collection;
  43. use Pimcore\Model\DataObject\CollectionCategoryImage;
  44. use Pimcore\Model\DataObject\Feature;
  45. use Pimcore\Model\DataObject\Good;
  46. use Pimcore\Model\DataObject\Product;
  47. use Pimcore\Model\DataObject\ProductLabel;
  48. use Pimcore\Model\DataObject\ProductsSet;
  49. use Pimcore\Model\DataObject\ProductVariation;
  50. use Pimcore\Model\DataObject\VariationsConfig;
  51. class DataObjectListener
  52. {
  53.     /**
  54.      * @var array $publishers
  55.      */
  56.     private array $publishers = [];
  57.     /**
  58.      * @param AwardPublisher $awardPublisher
  59.      * @param AdvantagePublisher $advantagePublisher
  60.      * @param FeaturePublisher $featurePublisher
  61.      * @param BrandPublisher $brandPublisher
  62.      * @param BrandCategoryImagePublisher $brandCategoryImagePublisher
  63.      * @param CollectionPublisher $collectionPublisher
  64.      * @param CollectionCategoryImagePublisher $collectionCategoryImagePublisher
  65.      * @param CategoryPublisher $categoryPublisher
  66.      * @param ProductPublisher $productPublisher
  67.      * @param ProductVariationPublisher $productVariationPublisher
  68.      * @param ProductSetPublisher $productSetPublisher
  69.      * @param ProductLabelPublisher $productLabelPublisher
  70.      * @param CatalogTopBannerPublisher $catalogTopBannerPublisher
  71.      * @param CatalogGridBannerPublisher $catalogGridBannerPublisher
  72.      */
  73.     public function __construct(
  74.         AwardPublisher                   $awardPublisher,
  75.         AdvantagePublisher               $advantagePublisher,
  76.         FeaturePublisher                 $featurePublisher,
  77.         BrandPublisher                   $brandPublisher,
  78.         BrandCategoryImagePublisher      $brandCategoryImagePublisher,
  79.         CollectionPublisher              $collectionPublisher,
  80.         CollectionCategoryImagePublisher $collectionCategoryImagePublisher,
  81.         CategoryPublisher                $categoryPublisher,
  82.         ProductPublisher                 $productPublisher,
  83.         ProductVariationPublisher        $productVariationPublisher,
  84.         ProductSetPublisher              $productSetPublisher,
  85.         ProductLabelPublisher            $productLabelPublisher,
  86.         CatalogTopBannerPublisher        $catalogTopBannerPublisher,
  87.         CatalogGridBannerPublisher       $catalogGridBannerPublisher,
  88.     )
  89.     {
  90.         $this->publishers['AWARD'] = $awardPublisher;
  91.         $this->publishers['ADVANTAGE'] = $advantagePublisher;
  92.         $this->publishers['FEATURE'] = $featurePublisher;
  93.         $this->publishers['BRAND'] = $brandPublisher;
  94.         $this->publishers['BRAND_CATEGORY_IMAGE'] = $brandCategoryImagePublisher;
  95.         $this->publishers['COLLECTION'] = $collectionPublisher;
  96.         $this->publishers['COLLECTION_CATEGORY_IMAGE'] = $collectionCategoryImagePublisher;
  97.         $this->publishers['CATEGORY'] = $categoryPublisher;
  98.         $this->publishers['PRODUCT'] = $productPublisher;
  99.         $this->publishers['PRODUCT_VARIATION'] = $productVariationPublisher;
  100.         $this->publishers['PRODUCTS_SET'] = $productSetPublisher;
  101.         $this->publishers['PRODUCT_LABEL'] = $productLabelPublisher;
  102.         $this->publishers['CATALOG_TOP_BANNER_PUBLISHER'] = $catalogTopBannerPublisher;
  103.         $this->publishers['CATALOG_GRID_BANNER_PUBLISHER'] = $catalogGridBannerPublisher;
  104.     }
  105.     /**
  106.      * @param DataObjectEvent $ev
  107.      * @return void
  108.      */
  109.     public function onPostAdd(DataObjectEvent $ev): void
  110.     {
  111.         $this->process($ev__FUNCTION__);
  112.     }
  113.     /**
  114.      * @param DataObjectEvent $ev
  115.      * @return void
  116.      */
  117.     public function onPostUpdate(DataObjectEvent $ev): void
  118.     {
  119.         $this->process($ev__FUNCTION__);
  120.     }
  121.     /**
  122.      * @param DataObjectEvent $ev
  123.      * @return void
  124.      * @throws \Throwable
  125.      */
  126.     public function onPostDelete(DataObjectEvent $ev): void
  127.     {
  128.         $this->process($ev__FUNCTION__);
  129.     }
  130.     /**
  131.      * @param DataObjectEvent $ev
  132.      * @return object
  133.      */
  134.     private function getHandler(DataObjectEvent $ev): object
  135.     {
  136.         $constructorData = [$ev];
  137.         switch (get_class($ev->getObject())) {
  138.             case (Award::class): {
  139.                 $constructorData[] = $this->publishers['AWARD'];
  140.                 $handlerClassName AwardHandler::class;
  141.                 break;
  142.             }
  143.             case (Advantage::class): {
  144.                 $constructorData[] = $this->publishers['ADVANTAGE'];
  145.                 $handlerClassName AdvantageHandler::class;
  146.                 break;
  147.             }
  148.             case (Feature::class): {
  149.                 $constructorData[] = $this->publishers['FEATURE'];
  150.                 $handlerClassName FeatureHandler::class;
  151.                 break;
  152.             }
  153.             case (Brand::class): {
  154.                 $constructorData[] = $this->publishers['BRAND'];
  155.                 $handlerClassName BrandHandler::class;
  156.                 break;
  157.             }
  158.             case (BrandCategoryImage::class): {
  159.                 $constructorData[] = $this->publishers['BRAND_CATEGORY_IMAGE'];
  160.                 $handlerClassName BrandCategoryImageHandler::class;
  161.                 break;
  162.             }
  163.             case (Collection::class): {
  164.                 $constructorData[] = $this->publishers['COLLECTION'];
  165.                 $handlerClassName CollectionHandler::class;
  166.                 break;
  167.             }
  168.             case (CollectionCategoryImage::class): {
  169.                 $constructorData[] = $this->publishers['COLLECTION_CATEGORY_IMAGE'];
  170.                 $handlerClassName CollectionCategoryImageHandler::class;
  171.                 break;
  172.             }
  173.             case (Category::class): {
  174.                 $constructorData[] = $this->publishers['CATEGORY'];
  175.                 $handlerClassName CategoryHandler::class;
  176.                 break;
  177.             }
  178.             case (Good::class): {
  179.                 $handlerClassName GoodHandler::class;
  180.                 break;
  181.             }
  182.             case (Product::class): {
  183.                 $constructorData[] = $this->publishers['PRODUCT'];
  184.                 $handlerClassName ProductHandler::class;
  185.                 break;
  186.             }
  187.             case (ProductVariation::class): {
  188.                 $constructorData[] = $this->publishers['PRODUCT_VARIATION'];
  189.                 $handlerClassName ProductVariationHandler::class;
  190.                 break;
  191.             }
  192.             case (VariationsConfig::class): {
  193.                 $handlerClassName VariationsConfigHandler::class;
  194.                 break;
  195.             }
  196.             case (ProductLabel::class): {
  197.                 $constructorData[] = $this->publishers['PRODUCT_LABEL'];
  198.                 $handlerClassName ProductLabelHandler::class;
  199.                 break;
  200.             }
  201.             case (CatalogTopBanner::class): {
  202.                 $constructorData[] = $this->publishers['CATALOG_TOP_BANNER_PUBLISHER'];
  203.                 $handlerClassName CatalogTopBannerHandler::class;
  204.                 break;
  205.             }
  206.             case (CatalogGridBanner::class): {
  207.                 $constructorData[] = $this->publishers['CATALOG_GRID_BANNER_PUBLISHER'];
  208.                 $handlerClassName CatalogGridBannerHandler::class;
  209.                 break;
  210.             }
  211.             default: {
  212.                 return new class {};
  213.             }
  214.         }
  215.         return new $handlerClassName(...$constructorData);
  216.     }
  217.     /**
  218.      * @param DataObjectEvent $ev
  219.      * @param string $methodName
  220.      * @return void
  221.      */
  222.     private function process(DataObjectEvent $evstring $methodName ''): void
  223.     {
  224.         try {
  225.             $handler $this->getHandler($ev);
  226.             if (method_exists($handler$methodName)) $handler->{$methodName}();
  227.         } catch (\Throwable $e) {
  228.             throw $e;
  229.         }
  230.     }
  231. }