<?php
declare(strict_types=1);
namespace App\Basket\EventSubscriber;
use App\Basket\Service\BasketService;
use Carbon\Carbon;
use Pimcore\Event\DataObjectEvents;
use Pimcore\Event\Model\ElementEventInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class DataObjectSubscriber implements EventSubscriberInterface
{
/** @var BasketService */
private BasketService $basketService;
public function __construct(
BasketService $basketService
) {
$this->basketService = $basketService;
}
public static function getSubscribedEvents()
{
return [
DataObjectEvents::POST_UPDATE => 'onPostUpdate',
];
}
public function onPostUpdate(ElementEventInterface $e)
{
$needSave = false;
$object = $e->getElement();
if (method_exists($object, 'getUnpublishDate')) {
if (!$object->getPublished()) {
if (!$object->getUnpublishDate()) {
$object->setUnpublishDate(Carbon::now());
$needSave = true;
}
} else {
if ($object->getUnpublishDate()) {
$object->setUnpublishDate(null);
$needSave = true;
}
}
}
if ($needSave) {
$object->save();
if (!$object->getPublished()) {
$this->basketService->moveToBasket($object);
} else {
$this->basketService->restoreFromBasket($object);
}
}
}
}