src/Basket/EventSubscriber/DataObjectSubscriber.php line 31

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Basket\EventSubscriber;
  4. use App\Basket\Service\BasketService;
  5. use Carbon\Carbon;
  6. use Pimcore\Event\DataObjectEvents;
  7. use Pimcore\Event\Model\ElementEventInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10. class DataObjectSubscriber implements EventSubscriberInterface
  11. {
  12.     /** @var BasketService  */
  13.     private BasketService $basketService;
  14.     public function __construct(
  15.         BasketService $basketService
  16.     ) {
  17.         $this->basketService $basketService;
  18.     }
  19.     public static function getSubscribedEvents()
  20.     {
  21.         return [
  22.             DataObjectEvents::POST_UPDATE => 'onPostUpdate',
  23.         ];
  24.     }
  25.     public function onPostUpdate(ElementEventInterface $e)
  26.     {
  27.         $needSave false;
  28.         $object $e->getElement();
  29.         if (method_exists($object'getUnpublishDate')) {
  30.             if (!$object->getPublished()) {
  31.                 if (!$object->getUnpublishDate()) {
  32.                     $object->setUnpublishDate(Carbon::now());
  33.                     $needSave true;
  34.                 }
  35.             } else {
  36.                 if ($object->getUnpublishDate()) {
  37.                     $object->setUnpublishDate(null);
  38.                     $needSave true;
  39.                 }
  40.             }
  41.         }
  42.         if ($needSave) {
  43.             $object->save();
  44.             if (!$object->getPublished()) {
  45.                 $this->basketService->moveToBasket($object);
  46.             } else {
  47.                 $this->basketService->restoreFromBasket($object);
  48.             }
  49.         }
  50.     }
  51. }