src/EventSubscriber/ElCourseRatingSubscriber.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\ElCourseRating;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use App\Event\ElCourseRatingPreRemoveEvent;
  6. use App\Event\ElCourseRatingPostUpdateEvent;
  7. use App\Event\ElCourseRatingPostPersistEvent;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class ElCourseRatingSubscriber implements EventSubscriberInterface
  10. {
  11.     public function __construct(
  12.         private EntityManagerInterface $_em
  13.     ) {
  14.     }
  15.     public static function getSubscribedEvents(): array
  16.     {
  17.         return [
  18.             ElCourseRatingPostPersistEvent::NAME => 'onPostCreate',
  19.             ElCourseRatingPostUpdateEvent::NAME => 'onPostUpdate',
  20.             ElCourseRatingPreRemoveEvent::NAME => 'onPreRemove'
  21.         ];
  22.     }
  23.     public function onPostCreate(ElCourseRatingPostPersistEvent $event)
  24.     {
  25.         $this->updateTotalRatings($event);
  26.     }
  27.     public function onPostUpdate(ElCourseRatingPostUpdateEvent $event)
  28.     {
  29.         $this->updateTotalRatings($event);
  30.     }
  31.     public function onPreRemove(ElCourseRatingPreRemoveEvent $event)
  32.     {
  33.         $this->updateTotalRatings($eventtrue);
  34.     }
  35.     private function updateTotalRatings($event$isExclude false)
  36.     {
  37.         $object $event->getObject();
  38.         $elCourse $object->getElCourse();
  39.         $excludeId $isExclude $object->getId() : null;
  40.         $result $this->_em->getRepository(ElCourseRating::class)->getRatingStat($elCourse$excludeId);
  41.         $elCourse
  42.             ->setTotalRating($result['totalRating'])
  43.             ->setAverageRating($result['averageRating'])
  44.         ;
  45.         $this->_em->persist($elCourse);
  46.         $this->_em->flush();
  47.     }
  48. }