src/Acl/Koe/ObjectUpdatePathBundle/EventListener/ObjectListener.php line 56

Open in your IDE?
  1. <?php
  2. namespace Acl\Koe\ObjectUpdatePathBundle\EventListener;
  3. use Acl\Koe\ImportBundle\Service\ArtikelonlineService;
  4. use AppBundle\Model\DataObject\Marke;
  5. use Carbon\Carbon;
  6. use Pimcore\Event\Model\ElementEventInterface;
  7. use Pimcore\Model\DataObject;
  8. use Pimcore\Model\DataObject\Folder;
  9. use Psr\Log\LoggerInterface;
  10. class ObjectListener
  11. {
  12.     /**
  13.      * check if articles should be put on the update queue. by default we dont want to do that on cli
  14.      * processes (i.e. batch updates), but it can be enabled with setUpdateOnCli
  15.      * @return bool
  16.      */
  17.     protected function isManualRequest(): bool
  18.     {
  19.         return empty($_REQUEST) ? false true;
  20.     }
  21.     public function __construct(LoggerInterface $logger)
  22.     {
  23.         $this->logger $logger;
  24.     }
  25.     public function anyImageChanges($currentVersion$lastVersion)
  26.     {
  27.         //no object found return true to be sure
  28.         if (!$currentVersion) {
  29.             return true;
  30.         }
  31.         for ($i 1$i <= 20$i++) {
  32.             $currentImage $currentVersion->{"getBild" $i}();
  33.             if ($lastVersion) {
  34.                 $lastImage $lastVersion->{"getBild" $i}();
  35.             }
  36.             if ($lastImage && $currentImage && ($lastImage->getId() != $currentImage->getId())) {
  37.                 return true;
  38.             } elseif ((!$lastImage || !$currentImage) && ($lastImage != $currentImage)) {
  39.                 return true;
  40.             }
  41.         }
  42.         return false;
  43.     }
  44.     /**
  45.      * Pre-Save Event
  46.      * @param ElementEventInterface $e
  47.      */
  48.     public function onObjectPreSave(ElementEventInterface $e)
  49.     {
  50.         $ob $e->getElement();
  51.         if ($ob instanceof DataObject\Artikelonline) {
  52.             $id $ob->getId();
  53.             if (!$id) return;
  54.             $versions $ob->getVersions();
  55.             if ($versions) {
  56.                 if (!$this->isManualRequest()) {
  57.                     return;
  58.                 }
  59.                 $lastKey array_key_last($versions);
  60.                 if ($lastKey && array_key_exists($lastKey$versions)) {
  61.                     $latestVersionData $versions[$lastKey];
  62.                     if ($latestVersionData) {
  63.                         $latestVersion $latestVersionData->getData();
  64.                         if ($this->anyImageChanges($ob$latestVersion)) {
  65.                             $ob->setBildUpdate(Carbon::now());
  66.                         }
  67.                     }
  68.                 }
  69.             }
  70.             $parent $ob->getParent();
  71.             if ($parent instanceof Folder) {
  72.                 $currentPath $parent->getFullPath() . "/";
  73.                 if ($currentPath == ArtikelonlineService::DEFAULT_PATH_ARTIKELONLINE ArtikelonlineService::SUB_PATH_INACTIVE_ARTIKELONLINE) {
  74.                     $ob->setAktiv(false);
  75.                     $ob->setAktiv_ch(false);
  76.                     $ob->setAktiv_de(false);
  77.                 } else if (in_array($currentPathArtikelonlineService::PARENT_ACTIVE_LIST)) {
  78.                     if (!$this->isManualRequest()) {
  79.                         return;
  80.                     }
  81.                     if (!$ob->getArtikelok() || !$ob->getBild1()) {
  82.                         return;
  83.                     }
  84.                     $sourcePath = \Pimcore\Db::get()->fetchCol("SELECT o_path FROM _pimcore_koe2.objects WHERE o_id=" $id);
  85.                     if (!$sourcePath[0] || $sourcePath[0] != "/artikelonline/inaktiv/") return;
  86.                     $brandNumber $ob->getMarkennummer();
  87.                     $brand DataObject\Marke::getByMARKENNUMMER($brandNumber1);
  88.                     //no brand found dont update?
  89.                     if (!$brand) {
  90.                         return;
  91.                     }
  92.                     if ($brand->getAktiv()) {
  93.                         $ob->setAktiv(true);
  94.                     }
  95.                     if ($brand->getAktiv_ch()) {
  96.                         $ob->setAktiv_ch(true);
  97.                     }
  98.                     if ($brand->getAktiv_de()) {
  99.                         $ob->setAktiv_de(true);
  100.                     }
  101.                 }
  102.             }
  103.         }
  104.     }
  105. }