src/Postroyka/AppBundle/EventListener/ReviewListener.php line 47

Open in your IDE?
  1. <?php
  2. namespace Postroyka\AppBundle\EventListener;
  3. use Postroyka\AppBundle\Provider\CatalogProvider;
  4. use Submarine\PagesBundle\Entity\Page;
  5. use Submarine\PagesBundle\Manager\PagesManager;
  6. use Submarine\ReviewsBundle\Events\ReviewEvent;
  7. use Submarine\ReviewsBundle\Events\ReviewEvents;
  8. use Submarine\ReviewsBundle\Provider\ReviewsProvider;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class ReviewListener implements EventSubscriberInterface
  11. {
  12.     const PRODUCT_VALUE_RATING 'rating';
  13.     const PRODUCT_VALUE_REVIEWS_COUNT 'reviews_count';
  14.     /**
  15.      * @var ReviewsProvider
  16.      */
  17.     private $reviewsProvider;
  18.     /**
  19.      * @var PagesManager
  20.      */
  21.     private $pagesManager;
  22.     /**
  23.      * @param ReviewsProvider $reviewsProvider
  24.      * @param PagesManager $pagesManager
  25.      */
  26.     public function __construct(ReviewsProvider $reviewsProviderPagesManager $pagesManager)
  27.     {
  28.         $this->reviewsProvider $reviewsProvider;
  29.         $this->pagesManager $pagesManager;
  30.     }
  31.     public static function getSubscribedEvents()
  32.     {
  33.         return [
  34.             ReviewEvents::ON_CREATE => 'onReviewEvent',
  35.             ReviewEvents::ON_CHANGE => 'onReviewEvent',
  36.             ReviewEvents::ON_REMOVE => 'onReviewEvent',
  37.         ];
  38.     }
  39.     public function onReviewEvent(ReviewEvent $event)
  40.     {
  41.         $review $event->getReview();
  42.         if ($review->getEntityName() === Page::class) {
  43.             try {
  44.                 $product $this->pagesManager->get($review->getEntityId());
  45.                 if ($product->getId() && $product->getType()->getId() === CatalogProvider::PRODUCT_TYPE) {
  46.                     // Рейтинг товара: 1.0-5.0
  47.                     $rating $this->reviewsProvider->getEntityRating($product);
  48.                     $rating number_format($rating1);
  49.                     $product->setValue(self::PRODUCT_VALUE_RATING$rating);
  50.                     // Кол-во активных отзывов
  51.                     $count $this->reviewsProvider->getEntityReviewsCount($product);
  52.                     $product->setValue(self::PRODUCT_VALUE_REVIEWS_COUNT$count);
  53.                     $this->pagesManager->save($product);
  54.                 }
  55.             } catch (\Exception $e) {
  56.             }
  57.         }
  58.     }
  59. }