<?php
namespace WebBundle\Service;
use Exception;
use FlexApp\Entity\CommentEntity;
use FlexApp\Service\CommentablePageDataProvider;
use FlexApp\Service\CurrentUserProvider;
use FlexApp\Service\TranslatorWrapper;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use WebBundle\Entity\Idea;
use WebBundle\Helper\App;
use WebBundle\Helper\CookieHelper;
use WebBundle\Helper\LocaleHelper;
use WebBundle\Helper\StrHelper;
use WebBundle\Helper\UserHelper;
use WebBundle\Repository\BuyOrderRepository;
use WebBundle\Repository\IdeaRepository;
use WebBundle\Repository\UserRepository;
use WebBundle\Repository\VisitRepository;
use function Symfony\Component\String\u;
class CommonDataService
{
/** @required */
public AuthorizationCheckerInterface $authorizationChecker;
/** @required */
public CurrentUserProvider $currentUserProvider;
/** @required */
public RouterInterface $router;
/** @required */
public TranslatorWrapper $translatorWrapper;
/** @required */
public CommentablePageDataProvider $commentablePageDataProvider;
/** @required */
public RequestStack $requestStack;
/** @required */
public LocalizationService $localizationService;
/**
* @return array
* @throws Exception
*/
public function top(): array
{
/** @var IdeaRepository $repoIdea */
$repoIdea = App::getContainer()->get('app.repo.idea');
/** @var BuyOrderRepository $repoBuyOrder */
$repoBuyOrder = App::getContainer()->get('app.repo.order');
/** @var VisitRepository $repoVisit */
$repoVisit = App::getRepository('WebBundle:Visit');
$userInfo = UserHelper::getInstance();
$token = $userInfo->getToken();
$user = App::getCurUser();
$deviceDetect = App::getContainer()->get('mobile_detect.mobile_detector.default');
$device = [
'mobile' => $deviceDetect->isMobile(),
'tablet' => $deviceDetect->isTablet(),
];
// проверяем токен от авторизированого пользователя или нет
if (!$user && empty($_SESSION['token'])) {
/** @var UserRepository $userRepo */
$userRepo = App::getRepository('WebBundle:User');
$usr = $userRepo->getUserByToken($token);
if ($usr) {
$token = $userInfo->generateToken();
$userInfo->setToken($token);
$_SESSION['token'] = $token;
}
}
/** @var Idea $activeIdea */
$orderArticles = $repoBuyOrder->getBuyOrderArticleCount($token);
$ordersCount = count($repoBuyOrder->getBuyOrderCount($token));
$repoIdea->findBy(['token' => $token], ['updateDate' => 'DESC']);
$user = App::getCurUser();
$userUnidChat = null;
$countryList = App::getCountryList();
$country = App::getCurCountry();
//если страна в списке и баннер еще не был показан, показываем
$showBanner = false;
if (in_array($country, explode(' ', 'gb ca us it fr de es bg dk lt fi hu ee no pl nl se cz pt gr be ch at'))) {
if (!CookieHelper::get('locationBannerShown')) {
$showBanner = true;
//ставим куки, чтобы не показывать баннер снова
CookieHelper::set('locationBannerShown', '1');
}
}
$locationBanner = [
'show' => $showBanner,
'code' => $country,
];
$showUserLocaleDto = $this->localizationService->getShowUserLocaleDto();
$showBurger = !StrHelper::isInStr($this->localizationService->getUriWithoutLocale(), 'advanced-search');
return [
'uri' => $this->localizationService->getUriWithoutLocale(),
'userUnidChat' => $userUnidChat, // unid клиента на портале
'showLocale' => $showUserLocaleDto->isShowLocale(),
'userLocaleWas' => $showUserLocaleDto->getUserLocaleWas(),
'userCountryWas' => $showUserLocaleDto->getUserCountryWas(),
'userCurrencyWas' => $showUserLocaleDto->getUserCurrencyWas(),
'userMeasureWas' => $showUserLocaleDto->getUserMeasureWas(),
'userLocale' => App::getCurLocale(),
'userCountry' => App::getCurCountry(),
'userCurrency' => LocaleHelper::getCur(),
'userMeasure' => LocaleHelper::getUserMeasure(),
'currencyList' => LocaleHelper::getCurrencyList($showUserLocaleDto->getUserCountryWas()),
'countryList' => $countryList,
'measureList' => LocaleHelper::getMeasureList(),
'visitedAll' => $repoVisit->getVisitedAll($userInfo->getToken()),
'ideas' => $repoIdea->countByToken($token),
'orderArticlesAll' => $orderArticles,
'selectLocales' => $this->localizationService->getSelectLocales($showUserLocaleDto),
'ordersCount' => $ordersCount,
'locationBanner' => $locationBanner,
'showBurger' => $showBurger,
'device' => $device,
'user' => [
'name' => $user ? $user->getAlias() : null,
'login' => [
'url' => App::generateUrl('app_login'),
'name' => App::trans('main_menu_about'),
],
'reg' => [
'url' => App::generateUrl('app_reg'),
'name' => App::trans('main_menu_about'),
],
'profile' => [
'url' => App::generateUrl('app_user_profile'),
'name' => App::trans('main_menu_about'),
],
'logout' => [
'url' => App::generateUrl('app_logout'),
'name' => App::trans('main_menu_about'),
],
],
'links' => [
'logo' => [
'url' => App::generateUrl('app_home'),
'name' => App::trans('home_page'),
],
'about' => [
'url' => App::generateUrl('app_page', ['url' => 'about']),
'name' => App::trans('main_menu_about'),
],
'payment' => [
'url' => App::generateUrl('app_page', ['url' => 'payment']),
'name' => App::trans('main_menu_payment_delivery'),
],
'contacts' => [
'url' => App::generateUrl('app_page_contacts'),
'name' => App::trans('main_menu_contacts'),
],
],
'trans' => [
'logo' => '',
'home_page' => '',
'left_menu_slogan' => '',
'main' => '',
'header' => [
'chat' => '',
'history' => '',
'idea' => '',
'order' => '',
],
'header_storage_ideas_add' => '',
'header_storage_ideas_del' => '',
'header_storage_ideas_move' => '',
'header_idea_list' => '',
'collection_interior' => '',
'collection_interiors' => '',
],
];
}
/**
* @return array
*
* @throws Exception
*/
public function footer(): array
{
return [
'footer_short_address' => App::transReact('footer_short_address'),
'links' => [
'privacyPolicy' => [
'url' => App::generateUrl('app_page', ['url' => 'privacypolicy']),
'name' => App::trans('footer_privacy'),
],
'conditions' => [
'url' => App::generateUrl('app_page', ['url' => 'conditions']),
'name' => App::trans('footer_general_terms'),
],
'about' => [
'url' => App::generateUrl('app_page', ['url' => 'about']),
'name' => App::trans('main_menu_about'),
],
'payment' => [
'url' => App::generateUrl('app_page', ['url' => 'payment']),
'name' => App::trans('main_menu_payment_delivery'),
],
'contacts' => [
'url' => App::generateUrl('app_page_contacts'),
'name' => App::trans('main_menu_contacts'),
],
'improvingSite' => [
'url' => App::generateUrl('app_page', ['url' => 'improving-site']),
'name' => App::trans('footer_anadvice'),
],
],
];
}
public function constants(): array
{
return [
'COMMENT_QA' => CommentEntity::QA,
'COMMENT_BOTTOM' => CommentEntity::BOTTOM,
];
}
public function userData(): array
{
return [
'isGrantedRoleAdmin' => $this->authorizationChecker->isGranted('ROLE_ADMIN'),
'isGrantedRoleCons' => $this->authorizationChecker->isGranted('ROLE_CONS'),
'userAlias' => $this->currentUserProvider->getUser() ? $this->currentUserProvider->getUser()->getAlias() : null,
'foreignAlias' => $this->currentUserProvider->getUser() ? $this->currentUserProvider->getUser()->getForeignAlias() : null,
];
}
public function urls(): array
{
$host = $this->requestStack->getCurrentRequest()->getHost();
$isJobSite = u($host)->containsAny(['jobs.']);
return [
'getConsOnlineAttributeUrl' => $this->router->generate('get_cons_online_attribute', [], RouterInterface::ABSOLUTE_URL),
'appCommentSubscribeForm' => $isJobSite ? $this->router->generate('app_job_comment_subscribe_form', [], RouterInterface::ABSOLUTE_URL) : $this->router->generate('app_comment_subscribe_form', [], RouterInterface::ABSOLUTE_URL),
'appCommentSubscribe' => $isJobSite ? $this->router->generate('app_job_comment_subscribe', [], RouterInterface::ABSOLUTE_URL) : $this->router->generate('app_comment_subscribe', [], RouterInterface::ABSOLUTE_URL),
];
}
public function trans()
{
return [
'error' => $this->translatorWrapper->translate('error'),
'subscribe' => $this->translatorWrapper->translate('subscribe'),
'subscribed_successfully' => $this->translatorWrapper->translate('subscribed_successfully'),
];
}
public function commentablePageData()
{
return $this->commentablePageDataProvider->getCommentablePageData();
}
}