src/AclStylesAndLooksBundle/EventListener/StylesAndLooksGalleryEventListener.php line 33

Open in your IDE?
  1. <?php
  2. namespace AclStylesAndLooksBundle\EventListener;
  3. use AclStylesAndLooksBundle\Service\StylesAndLooksService;
  4. use AppBundle\EventListener\DataObjectEventListener;
  5. use Pimcore\Event\Model\ElementEventInterface;
  6. use Pimcore\Model\DataObject\StylesAndLooksGallery;
  7. use Pimcore\Model\DataObject\StylesAndLooksOnline;
  8. class StylesAndLooksGalleryEventListener extends DataObjectEventListener
  9. {
  10.     const PIMCORE_DATA_OBJECT_CLASS_PATH StylesAndLooksGallery::class;
  11.     protected $object;
  12.     /**
  13.      * @param ElementEventInterface $event
  14.      * @return void
  15.      * @throws \Doctrine\DBAL\DBALException
  16.      */
  17.     public function onObjectPreAdd(ElementEventInterface $event): void {
  18.         // Not StylesAndLooksGallery?
  19.         if(!$this->eventBelongsToThisClass($event)){
  20.             return;
  21.         }
  22.         $object $event->getObject();
  23.         $object->setName($object->getKey());
  24.         $object->setShop(1);
  25.     }
  26.     public function onObjectPreUpdate(ElementEventInterface $event): void {
  27.         if(!$this->eventBelongsToThisClass($event)){
  28.             return;
  29.         }
  30.         $object $event->getObject();
  31.         $gallery $object->getGallery();
  32.         $styleName $object->getName();
  33.         $stylesService = new StylesAndLooksService();
  34.         $imageIndex 0;
  35.         $faultyIds = [];
  36.         //If trendname is changed, delete all old children first
  37.         $oldObject StylesAndLooksGallery::getById($object->getId(), true);
  38.         if ($styleName != $oldObject->getName()) {
  39.             $oldStylesonline $object->getChildren();
  40.             foreach ($oldStylesonline as $child) {
  41.                 if ($child instanceof StylesAndLooksOnline) {
  42.                     $child->delete();
  43.                 }
  44.             }
  45.         }
  46.         //Generate StylesAndLooksOnline[76] objects as children based on the data from image names
  47.         foreach ($gallery as $image) {
  48.             $imageIndex++;
  49.             $imageName $image->getImage();
  50.             $imageData $stylesService->parseImageName($imageName);
  51.             $slug 'styles-' $stylesService->createSlug($styleName) . '-' $imageIndex;
  52.             $stylesonline StylesAndLooksOnline::getBySeoUrl($slug1);
  53.             if(!$stylesonline) {
  54.                 $stylesonline = new StylesAndLooksOnline();
  55.             }
  56.             $stylesonline->setKey(\Pimcore\Model\Element\Service::getValidKey($slug'object'));
  57.             $stylesonline->setTrendname($styleName);
  58.             $stylesonline->setSeoUrl($slug);
  59.             $stylesonline->setParentId($object->getId());
  60.             $stylesonline->setBild($image->getImage());
  61.             $articleRelationData $stylesService->getArticlesForRelation($imageData$imageName);
  62.             $faultyIds array_merge($faultyIds$articleRelationData['faultyIDs']);
  63.             $stylesonline->setArtikel($articleRelationData['relatedProducts']);
  64.             $stylesonline->save();
  65.         }
  66.         //If image is removed from parent object, remove excess children
  67.         $childrenCount StylesAndLooksOnline::getByTrendname($object->getName())->getCount();
  68.         if (count($gallery->getItems()) < $childrenCount) {
  69.             $excessChildren = new StylesAndLooksOnline();
  70.             while ($excessChildren) {
  71.                 $imageIndex++;
  72.                 $slug 'styles-' $stylesService->createSlug($styleName) . '-' $imageIndex;
  73.                 $excessChildren StylesAndLooksOnline::getBySeoUrl($slug1);
  74.                 if ($excessChildren) {
  75.                     $excessChildren->delete();
  76.                 }
  77.             }
  78.         }
  79. //        if (!empty($faultyIds)) {
  80. //            throw new \Error('Some articles cannot be found based on the following IDs: ' . implode(',', $faultyIds) . '. Please review the images uploaded and update the styles parent object.');
  81. //        }
  82.     }
  83. }