src/Subscriber/User/MemberRankingSubscriber.php line 54

Open in your IDE?
  1. <?php
  2. namespace App\Subscriber\User;
  3. use App\Event\Content\ContentDeleteEvent;
  4. use App\Event\Content\ContentImagesetDeleteEvent;
  5. use App\Event\Content\ContentPublishedEvent;
  6. use App\Event\Content\ContentVideoDeleteEvent;
  7. use App\Service\Content\ContentService;
  8. use App\Service\MemberService;
  9. use App\Service\User\MemberRankingService;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. class MemberRankingSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var MemberService
  15.      */
  16.     protected $rankingService;
  17.     /**
  18.      * @var ContentService
  19.      */
  20.     protected $contentService;
  21.     /**
  22.      * MemberRankingSubscriber constructor.
  23.      */
  24.     public function __construct(MemberRankingService $rankingServiceContentService $contentService)
  25.     {
  26.         $this->rankingService $rankingService;
  27.         $this->contentService $contentService;
  28.     }
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             ContentPublishedEvent::class => [
  33.                 ['onContentPublishCalculateMemberRankingContentCount'0],
  34.             ],
  35.             ContentVideoDeleteEvent::class => [
  36.                 ['onContentDeleteCalculateMemberRankingContentCount'0],
  37.             ],
  38.             ContentImagesetDeleteEvent::class => [
  39.                 ['onContentDeleteCalculateMemberRankingContentCount'0],
  40.             ],
  41.         ];
  42.     }
  43.     /**
  44.      * @throws \Doctrine\ORM\ORMException
  45.      * @throws \Doctrine\ORM\OptimisticLockException
  46.      */
  47.     public function onContentDeleteCalculateMemberRankingContentCount(ContentDeleteEvent $event)
  48.     {
  49.         $member $event->getEntity()->getContent()->getMember();
  50.         $ranking $this->rankingService->getRankingByMember($member);
  51.         $ranking->setImagesetCount($this->contentService->getImagesetCountByMember($member));
  52.         $ranking->setVideosCount($this->contentService->getVideoCountByMember($member));
  53.         $this->rankingService->storeRanking($ranking);
  54.     }
  55.     /**
  56.      * @throws \Doctrine\ORM\ORMException
  57.      * @throws \Doctrine\ORM\OptimisticLockException
  58.      */
  59.     public function onContentPublishCalculateMemberRankingContentCount(ContentPublishedEvent $event)
  60.     {
  61.         $member $event->getAuthor();
  62.         $ranking $this->rankingService->getRankingByMember($member);
  63.         $ranking->setImagesetCount($this->contentService->getImagesetCountByMember($member));
  64.         $ranking->setVideosCount($this->contentService->getVideoCountByMember($member));
  65.         $this->rankingService->storeRanking($ranking);
  66.     }
  67. }