src/App/Doctrine/Listener/DownloadableContentBidListener.php line 91

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace App\Doctrine\Listener;
  3. use App\Contract\Content\DownloadableContentBid;
  4. use App\Entity\DealBid;
  5. use App\Entity\Message\MessageBid;
  6. use App\Entity\ProjectBid;
  7. use App\Entity\ShopVideoBid;
  8. use App\RabbitMq\Handler\DownloadableContentBidHandler;
  9. use App\RabbitMq\TasksPool;
  10. use Doctrine\Common\Util\ClassUtils;
  11. use Doctrine\ORM\Event\PostLoadEventArgs;
  12. use Doctrine\ORM\Event\PostPersistEventArgs;
  13. use Doctrine\ORM\Event\PostUpdateEventArgs;
  14. use Symfony\Component\Console\ConsoleEvents;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use Symfony\Component\HttpKernel\KernelEvents;
  17. class DownloadableContentBidListener implements EventSubscriberInterface
  18. {
  19.     private TasksPool $tasksPool;
  20.     private bool $dirty false;
  21.     public function __construct(TasksPool $tasksPool)
  22.     {
  23.         $this->tasksPool $tasksPool;
  24.     }
  25.     /**
  26.      * @param DealBid|ProjectBid|ShopVideoBid|MessageBid $contentBid
  27.      */
  28.     public function postLoad(DownloadableContentBid $contentBidPostLoadEventArgs $args): void
  29.     {
  30.         $contentBid->setWasAccessible($contentBid->isStillAccessible() && $contentBid->getContent()->isContentAccessible());
  31.     }
  32.     /**
  33.      * @param DealBid|ProjectBid|ShopVideoBid|MessageBid $contentBid
  34.      */
  35.     public function postPersist(DownloadableContentBid $contentBidPostPersistEventArgs $args): void
  36.     {
  37.         $contentBid->setWasAccessible($contentBid->isStillAccessible() && $contentBid->getContent()->isContentAccessible());
  38.         if (null === $contentBid->getId() || false === $contentBid->isStillAccessible()) {
  39.             return;
  40.         }
  41.         if (!$contentBid->getContent()->isContentAccessible()) {
  42.             return;
  43.         }
  44.         $this->dirty true;
  45.         $this->tasksPool->addTask(
  46.             DownloadableContentBidHandler::class,
  47.             'handle',
  48.             ClassUtils::getClass($contentBid),
  49.             $contentBid->getId(),
  50.             [DownloadableContentBidHandler::ADD]
  51.         );
  52.     }
  53.     /**
  54.      * @param DealBid|ProjectBid|ShopVideoBid|MessageBid $contentBid
  55.      */
  56.     public function postUpdate(DownloadableContentBid $contentBidPostUpdateEventArgs $args): void
  57.     {
  58.         // do not process new or unchanged content.
  59.         if (null === $contentBid->getId() || false === $contentBid->wasAccessible() || $contentBid->wasAccessible() === $contentBid->isStillAccessible()) {
  60.             return;
  61.         }
  62.         if (!$contentBid->getContent()->isContentAccessible()) {
  63.             return;
  64.         }
  65.         $this->dirty true;
  66.         $this->tasksPool->addTask(
  67.             DownloadableContentBidHandler::class,
  68.             'handle',
  69.             ClassUtils::getClass($contentBid),
  70.             $contentBid->getId(),
  71.             [DownloadableContentBidHandler::REMOVE]
  72.         );
  73.     }
  74.     public function sendPool(): void
  75.     {
  76.         if (!$this->dirty) {
  77.             return;
  78.         }
  79.         $this->tasksPool->send();
  80.     }
  81.     /**
  82.      * @return array<string, array<int|string, array<int|string, int|string>|int|string>|string>
  83.      */
  84.     public static function getSubscribedEvents(): array
  85.     {
  86.         $events = [];
  87.         if (class_exists(KernelEvents::class)) {
  88.             $events[KernelEvents::TERMINATE] = 'sendPool';
  89.         }
  90.         if (class_exists(ConsoleEvents::class)) {
  91.             $events[ConsoleEvents::TERMINATE] = 'sendPool';
  92.         }
  93.         return $events;
  94.     }
  95. }