src/EventListener/DamListener.php line 31

Open in your IDE?
  1. <?php
  2. /**
  3.  * Dieser Quellcode ist geistiges Eigentum der Weblizards GmbH
  4.  * und darf ohne vorheriges schriftliches Einverständnis nicht
  5.  * vervielfältigt werden.
  6.  *
  7.  * @copyright  Copyright (c) Weblizards GmbH <https://www.weblizards.de>
  8.  * @license    https://www.gnu.org/licenses/gpl-3.0 GPLv3
  9.  */
  10. namespace App\EventListener;
  11. use App\Message\UpdatePackShotImageMessage;
  12. use App\Message\UpdatePlateShotImageMessage;
  13. use Pimcore\Event\Model\DataObjectEvent;
  14. use Pimcore\Model\Asset;
  15. use Pimcore\Model\DataObject;
  16. use Symfony\Component\Messenger\MessageBusInterface;
  17. class DamListener
  18. {
  19.     use ListenerTrait;
  20.     public static bool $ignoreEvents false;
  21.     public function __construct(private readonly MessageBusInterface $messageBus)
  22.     {
  23.     }
  24.     public function onObjectPostUpdate(DataObjectEvent $event)
  25.     {
  26.         if (static::$ignoreEvents) {
  27.             return;
  28.         }
  29.         if ($event->hasArgument('saveVersionOnly')) {
  30.             return;
  31.         }
  32.         $object $event->getObject();
  33.         /** @var DataObject\Product[] $products */
  34.         $products = [];
  35.         if ($object instanceof DataObject\Recipe || $object instanceof DataObject\Erpitem) {
  36.             $products $this->getDependentProducts($object);
  37.         } elseif ($object instanceof DataObject\Product) {
  38.             $products = [$object];
  39.         } else {
  40.             // none of our business
  41.             return;
  42.         }
  43.         foreach ($products as $product) {
  44.             if ($product->getType() == DataObject\AbstractObject::OBJECT_TYPE_OBJECT) {
  45.                 // is container: update plate image metadata and of all variants
  46.                 $this->handleContainer($product);
  47.                 foreach ($product->getVariants() as $variant) {
  48.                     $this->handleVariant($variant);
  49.                 }
  50.             } else {
  51.                 // is variant
  52.                 $this->handleVariant($product);
  53.             }
  54.         }
  55.     }
  56.     protected function handleContainer(DataObject\Product $container): void
  57.     {
  58.         // plate image
  59.         if (($image $container->getPlateImage()) instanceof Asset\Image) {
  60.             $this->messageBus->dispatch(new UpdatePlateShotImageMessage($image->getId(), $container->getId()));
  61.         }
  62.     }
  63.     protected function handleVariant(DataObject\Product $variant): void
  64.     {
  65.         // packshot image
  66.         foreach (\Pimcore\Tool::getValidLanguages() as $language) {
  67.             $prevGetFallbackValues DataObject\Localizedfield::getGetFallbackValues();
  68.             try {
  69.                 DataObject\Localizedfield::setGetFallbackValues(false);
  70.                 if (($image $variant->getItemMain($language)) !== null) {
  71.                     $this->messageBus->dispatch(new UpdatePackShotImageMessage($image->getId(), $variant->getId(), $language));
  72.                 }
  73.             } finally {
  74.                 DataObject\Localizedfield::setGetFallbackValues($prevGetFallbackValues);
  75.             }
  76.         }
  77.     }
  78. }