src/App/Subscriber/Sharing/SharingSubscriber.php line 47

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\Sharing;
  3. use App\Entity\Content\AbstractObject;
  4. use App\Enum\ChannelEnum;
  5. use App\Service\Sharing\SharingHandlerInterface;
  6. use Cms\CoreBundle\Util\Doctrine\EntityManager;
  7. use Platform\QueueBundle\Event\AsyncEvent;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. final class SharingSubscriber implements EventSubscriberInterface
  10. {
  11.     /**
  12.      * @var EntityManager
  13.      */
  14.     private EntityManager $em;
  15.     /**
  16.      * @var SharingHandlerInterface
  17.      */
  18.     private SharingHandlerInterface $sharingHandler;
  19.     /**
  20.      * @param EntityManager $em
  21.      * @param SharingHandlerInterface $sharingHandler
  22.      */
  23.     public function __construct(EntityManager $emSharingHandlerInterface $sharingHandler)
  24.     {
  25.         $this->em $em;
  26.         $this->sharingHandler $sharingHandler;
  27.     }
  28.     /**
  29.      * {@inheritDoc}
  30.      */
  31.     public static function getSubscribedEvents(): array
  32.     {
  33.         return [
  34.             SharingHandlerInterface::EVENTS__SHARE_CHANNEL => ['onShareChannel'0],
  35.         ];
  36.     }
  37.     /**
  38.      * @param AsyncEvent $event
  39.      */
  40.     public function onShareChannel(AsyncEvent $event): void
  41.     {
  42.         $object $this->em->getRepository(AbstractObject::class)->find(
  43.             $event->getBody()->get('object'),
  44.         );
  45.         if ( ! $object instanceof AbstractObject) {
  46.             throw new \RuntimeException();
  47.         }
  48.         $event->getOutput()->writeln(
  49.             sprintf(
  50.                 'Sharing to channel %s...',
  51.                 array_search(
  52.                     $channel $event->getBody()->get('channel'),
  53.                     ChannelEnum::SOCIAL_CHANNELS,
  54.                     true,
  55.                 ),
  56.             )
  57.         );
  58.         $this->sharingHandler->handleChannel(
  59.             $object,
  60.             $channel,
  61.         );
  62.         $event->getOutput()->writeln('Shared to channel.');
  63.     }
  64. }