src/WebBundle/Service/WidjetReviewService.php line 57

Open in your IDE?
  1. <?php
  2. namespace WebBundle\Service;
  3. use Exception;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use WebBundle\Helper\App;
  6. use WebBundle\Repository\ListCountryRepository;
  7. use WebBundle\Repository\ReviewsCacheRepository;
  8. class WidjetReviewService
  9. {
  10.     private ReviewsService $serviceReviews;
  11.     private ListCountryRepository $listCountryRepository;
  12.     public function __construct(
  13.         ReviewsService        $reviewsService,
  14.         ListCountryRepository $listCountryRepository
  15.     )
  16.     {
  17.         $this->serviceReviews $reviewsService;
  18.         $this->listCountryRepository $listCountryRepository;
  19.     }
  20.     /**
  21.      * Выводим данные отзывов
  22.      * @param Request $request
  23.      * @return array
  24.      * @throws Exception
  25.      */
  26.     public function getReviews($request)
  27.     {
  28.         $locale App::getCurLocale();
  29.         // Устанавливаем типы
  30.         if (!empty($request->get('service'))) {
  31.             $this->serviceReviews->setServiceType($request->get('service'));
  32.         }
  33.         if (!empty($request->get('type'))) {
  34.             $this->serviceReviews->setReviewsType($request->get('type'));
  35.         }
  36.         // Опции настроек
  37.         $options = [
  38.             'cleanTotal' => true,
  39.             'sku' => !empty($request->get('sku')) ? $request->get('sku') : null,
  40.             'count' => !empty($request->get('count')) ? $request->get('count') : false,
  41.             'current' => !empty($request->get('current')) ? $request->get('current') : 0,
  42.             'limit' => !empty($request->get('limit')) ? $request->get('limit') : 15
  43.         ];
  44.         if ($request->get('lang')) {
  45.             $options['lang'] = $request->get('lang');
  46.         }
  47.         $dataReviews $this->getData($options);
  48.         $result['status'] = is_array($dataReviews);
  49.         if ($result['status']) {
  50.             $result['resource'] = $dataReviews;
  51.             if ($this->serviceReviews->getReviewsType() === 'service') {
  52.                 $result['resource']['langs'] = $this->getLangs(
  53.                     $dataReviews['total'// передаём дынные
  54.                 );
  55.                 $countries $this->listCountryRepository->getListForReviewsAndProfile($localetrue);
  56.                 $langs = !empty($result['resource']['langs']) ? $result['resource']['langs'] : [];
  57.                 // Добвляем данные о странах
  58.                 $result['resource']['langs'] = array_merge(
  59.                     $langs,
  60.                     ['countries' => $countries// Страны
  61.                 );
  62.             }
  63.         } else {
  64.             $result['messages'] = explode(". "App::getTranslator()->trans('error404.info1'))[0] . "...";
  65.         }
  66.         return $result;
  67.     }
  68.     /**
  69.      * Получаем данные
  70.      * @param $options
  71.      * @return array|null
  72.      */
  73.     private function getData($options): ?array
  74.     {
  75.         // Получаем данные с БД
  76.         $total $this->serviceReviews->getSummariesToDB($options);
  77.         $reviews $this->serviceReviews->getListReviewsToDB($options);
  78.         // Проверяем доступность данных из кеша
  79.         $total = (count($total) > 0) ?
  80.             ($this->serviceReviews->getReviewsType() === 'service') ? $total[0] : $total
  81.             null;
  82.         $reviews = (count($reviews) > 0) ? $reviews null;
  83.         // Если не равно, изменить кол-во
  84.         if ($options['count']) {
  85.             if ($total['count'] !== count($reviews)) {
  86.                 $total['count'] = count($reviews);
  87.             }
  88.         }
  89.         // Получаем общее кол-во отзывов в БД
  90.         if ($this->serviceReviews->getReviewsType() === 'service') {
  91.             /** @var ReviewsCacheRepository $repoReviews */
  92.             $repoReviews $this->serviceReviews->getRepoReviews();
  93.             $total['reviews'] = $repoReviews->getReviewsCount();
  94.         }
  95.         // отправляем данные
  96.         if (count($total) > && count($reviews) > 0) {
  97.             // Чистим не нужное на выводе
  98.             if ($options['cleanTotal']) {
  99.                 unset($total['hash']);
  100.             }
  101.             return [
  102.                 'total' => $total,
  103.                 'reviews' => $reviews,
  104.             ];
  105.         }
  106.         return null;
  107.     }
  108.     /**
  109.      * Получаем данные для вставки в first-item
  110.      * @param $array
  111.      * @return array
  112.      * @throws Exception
  113.      */
  114.     public function getLangs($array)
  115.     {
  116.         $trans App::getTranslator();
  117.         // Возвращяем результат
  118.         return [
  119.             'reviews' => $trans->trans('reviews', ['%d%' => $array['count']]),
  120.             'wordscore' => $trans->trans('stars.' $array['star']),
  121.             'businessinfo' => $trans->trans('businessinfo'),
  122.         ];
  123.     }
  124. }