src/EventListener/SonataAdmin/Block/VOD/TitleItemNumberListener.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\SonataAdmin\Block\VOD;
  3. use App\Entity\ProductTVSeries;
  4. use App\Entity\VOD\Title;
  5. use App\Enum\Common\AdminCodesEnum;
  6. use Sonata\BlockBundle\Event\BlockEvent;
  7. use Sonata\BlockBundle\Model\Block;
  8. class TitleItemNumberListener
  9. {
  10.     /**
  11.      * Responsible for providing a form modal for modifying the title item numbers association.
  12.      *
  13.      * @param \Sonata\BlockBundle\Event\BlockEvent $event
  14.      *   The instance of the dispatched event
  15.      */
  16.     public function onShowActionDispatched(BlockEvent $event): void
  17.     {
  18.         if ((!$admin $event->getSetting('admin')) || (!$title $event->getSetting('object'))) {
  19.             return;
  20.         }
  21.         // The sonata.show event is dispatched for every admin, having "Show" action enabled and we don't want
  22.         // this block to render the "Update" button for each admin.
  23.         if (AdminCodesEnum::VOD_TITLE_RELEASE_DATE !== $admin->getCode()) {
  24.             return;
  25.         }
  26.         // We are interested only in VET's of type product series, because they are the ones that can have
  27.         // multiple (different) item numbers for single product (association).
  28.         if (!$title instanceof Title || !$title->getProduct() instanceof ProductTVSeries) {
  29.             return;
  30.         }
  31.         // If for some reason we still don't have NAV items available, then there is nothing we can
  32.         // edit at the moment.
  33.         if (!$title->getItemNumbers()->count()) {
  34.             return;
  35.         }
  36.         $block = new Block();
  37.         $block->setId(uniqid(''true));
  38.         $block->setSettings($event->getSettings());
  39.         $block->setType('app.block.vod.title_item_numbers');
  40.         $event->addBlock($block);
  41.     }
  42. }