src/WebBundle/Controller/TopController.php line 121

Open in your IDE?
  1. <?php
  2. namespace WebBundle\Controller;
  3. use Doctrine\ORM\NonUniqueResultException;
  4. use Exception;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use WebBundle\Entity\Idea;
  8. use WebBundle\Helper\App;
  9. use WebBundle\Helper\LocaleHelper;
  10. use WebBundle\Helper\UserHelper;
  11. use WebBundle\Repository\BuyOrderRepository;
  12. use WebBundle\Repository\IdeaRepository;
  13. use WebBundle\Repository\UserRepository;
  14. use WebBundle\Repository\VisitRepository;
  15. use WebBundle\Service\LocalizationService;
  16. /**
  17.  * Class TopController
  18.  * @package WebBundle\Controller
  19.  */
  20. class TopController extends ExtendedController
  21. {
  22.     private LocalizationService $localizationService;
  23.     public function __construct(
  24.         LocalizationService $localizationService
  25.     ) {
  26.         parent::__construct();
  27.         $this->localizationService $localizationService;
  28.     }
  29.     /**
  30.      * @return JsonResponse
  31.      * @throws NonUniqueResultException
  32.      * @throws Exception
  33.      */
  34.     public function indexAction()
  35.     {
  36.         /** @var IdeaRepository $repoIdea */
  37.         $repoIdea App::getContainer()->get('app.repo.idea');
  38.         /** @var BuyOrderRepository $repoBuyOrder */
  39.         $repoBuyOrder App::getContainer()->get('app.repo.order');
  40.         /** @var VisitRepository $repoVisit */
  41.         $repoVisit App::getRepository('WebBundle:Visit');
  42.         $userInfo UserHelper::getInstance();
  43.         $token $userInfo->getToken();
  44.         $user $this->getUser();
  45.         $em $this->getDoctrine()->getManager();
  46.         // проверяем токен от авторизированого пользователя или нет
  47.         if (!$user && empty($_SESSION['token'])) {
  48.             /** @var UserRepository $userRepo */
  49.             $userRepo $em->getRepository('WebBundle:User');
  50.             $usr $userRepo->getUserByToken($token);
  51.             if ($usr) {
  52.                 $token $userInfo->generateToken();
  53.                 $userInfo->setToken($token);
  54.                 $_SESSION['token'] = $token;
  55.             }
  56.         }
  57.         /** @var Idea $activeIdea */
  58.         $orderArticles $repoBuyOrder->getBuyOrderArticleCount($token);
  59.         $ordersCount count($repoBuyOrder->getBuyOrderCount($token));
  60.         $repoIdea->findBy(['token' => $token], ['updateDate' => 'DESC']);
  61.         $user App::getCurUser();
  62.         $countryList App::getCountryList();
  63.         $showUserLocaleDto $this->localizationService->getShowUserLocaleDto();
  64.         $data = [
  65.             'uri'              => $this->localizationService->getUriWithoutLocale(),
  66.             'showLocale'       => $showUserLocaleDto->isShowLocale(),
  67.             'userLocaleWas'    => $showUserLocaleDto->getUserLocaleWas(),
  68.             'userCountryWas'   => $showUserLocaleDto->getUserCountryWas(),
  69.             'userCurrencyWas'  => $showUserLocaleDto->getUserCurrencyWas(),
  70.             'userMeasureWas'   => $showUserLocaleDto->getUserMeasureWas(),
  71.             'currencyList'     => LocaleHelper::getCurrencyList($showUserLocaleDto->getUserCountryWas()),
  72.             'countryList'      => $countryList,
  73.             'measureList'      => LocaleHelper::getMeasureList(),
  74.             'visitedAll'       => $repoVisit->getVisitedAll($userInfo->getToken()),
  75.             'ideas'            => $repoIdea->countByToken($token),
  76.             'orderArticlesAll' => $orderArticles,
  77.             'selectLocales'    => $this->localizationService->getSelectLocales($showUserLocaleDto),
  78.             'ordersCount'      => $ordersCount,
  79.             'user' => [
  80.                 'name' => $user $user->getAlias() : null,
  81.                 'login' => App::generateUrl('app_login'),
  82.                 'reg' => App::generateUrl('app_reg'),
  83.                 'profile' => App::generateUrl('app_user_profile'),
  84.                 'logout' => App::generateUrl('app_logout'),
  85.             ],
  86.             'links' => [
  87.                 'about' => [
  88.                     'url' => App::generateUrl('app_page', ['url' => 'about']),
  89.                     'name' => App::trans('main_menu_about')
  90.                 ],
  91.                 'payment' => [
  92.                     'url' => App::generateUrl('app_page', ['url' => 'payment']),
  93.                     'name' => App::trans('main_menu_payment_delivery')
  94.                 ],
  95.                 'contacts' => [
  96.                     'url' => App::generateUrl('app_page_contacts'),
  97.                     'name' => App::trans('main_menu_contacts')
  98.                 ]
  99.             ]
  100.         ];
  101.         return new JsonResponse($data);
  102.     }
  103.     /**
  104.      * @return JsonResponse
  105.      * @throws Exception
  106.      */
  107.     public function cookieAction(Request $request): JsonResponse
  108.     {
  109.         $langParam $request->query->get('lang')
  110.             ?? $request->query->get('language')
  111.             ?? $request->query->get('l');
  112.         $countryParam $request->query->get('country')
  113.             ?? $request->query->get('countryCode')
  114.             ?? $request->query->get('c');
  115.         if ($langParam !== null && !preg_match('/^[a-z]{2}$/i'$langParam)) {
  116.             return new JsonResponse(['error' => 'Invalid language'], 400);
  117.         }
  118.         if ($countryParam !== null && !preg_match('/^[a-z]{2}$/i'$countryParam)) {
  119.             return new JsonResponse(['error' => 'Invalid country'], 400);
  120.         }
  121.         $language $langParam strtolower($langParam) : null;
  122.         $country $countryParam strtolower($countryParam) : null;
  123.         $localeRaw $request->query->get('locale') ?? $request->attributes->get('_locale');
  124.         if ($localeRaw && preg_match('/^([a-z]{2})(?:[-_]?([a-z]{2}))?$/i'$localeRaw$matches)) {
  125.             $language $language ?? strtolower($matches[1]);
  126.             if (!empty($matches[2])) {
  127.                 $country $country ?? strtolower($matches[2]);
  128.             }
  129.         }
  130.         if (!$language) {
  131.             $language LocaleHelper::getDefault();
  132.         }
  133.         if (!$country) {
  134.             try {
  135.                 $country LocaleHelper::getCurCountry();
  136.             } catch (Exception $exception) {
  137.                 $country 'us';
  138.             }
  139.         }
  140.         $routeLocale sprintf('%s-%s'$language$country);
  141.         $personalDataPolicyUrl App::generateUrl('app_page', [
  142.             'url' => 'policy-personal-data-process',
  143.             '_locale' => $routeLocale,
  144.         ]);
  145.         $cookiePolicyUrl App::generateUrl('app_page', [
  146.             'url' => 'cookie-policy',
  147.             '_locale' => $routeLocale,
  148.         ]);
  149.         $message App::trans(
  150.             'cookie_msg',
  151.             $language,
  152.             [
  153.                 '%link%' => $personalDataPolicyUrl,
  154.                 '%link2%' => $cookiePolicyUrl,
  155.             ]
  156.         );
  157.         return new JsonResponse([
  158.             'locale' => $language,
  159.             'country' => $country,
  160.             'links' => [
  161.                 'policyPersonalData' => $personalDataPolicyUrl,
  162.                 'cookiePolicy' => $cookiePolicyUrl,
  163.             ],
  164.             'html' => $message,
  165.         ]);
  166.     }
  167. }