<?php
declare(strict_types=1);
namespace App\Controller\Front;
use App\Application\Service\Helper\ConfigurationService;
use App\Application\Service\Helper\PathService;
use App\Application\Service\Menu\BaseMenuService;
use App\Application\Service\Menu\CorporateMenuService;
use App\Application\Service\Menu\MenuBaseHeaderService;
use App\Application\Service\Menu\ShopMenuService;
use App\Entity\System\Customer;
use App\Entity\System\Menu;
use App\Service\Customer\CustomerPackService;
use Psr\Cache\InvalidArgumentException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Security\Core\Security;
class HeaderController extends AbstractController
{
private ShopMenuService $shopMenuService;
private CorporateMenuService $corporateMenuService;
private PathService $pathService;
private MenuBaseHeaderService $menuGeneralService;
private TranslatorInterface $translator;
private RequestStack $requestStack;
private ConfigurationService $configurationService;
private Security $security;
private CustomerPackService $customerPackService;
public function __construct(
ShopMenuService $shopMenuService,
CorporateMenuService $corporateMenuService,
PathService $pathService,
MenuBaseHeaderService $menuGeneralService,
TranslatorInterface $translator,
RequestStack $requestStack,
ConfigurationService $configurationService,
Security $security,
CustomerPackService $customerPackService
) {
$this->shopMenuService = $shopMenuService;
$this->corporateMenuService = $corporateMenuService;
$this->pathService = $pathService;
$this->menuGeneralService = $menuGeneralService;
$this->translator = $translator;
$this->requestStack = $requestStack;
$this->configurationService = $configurationService;
$this->security = $security;
$this->customerPackService = $customerPackService;
}
/**
* @param Request $request
* @param string $parentController
* @param string $uri
* @param RequestStack $requestStack
*
* @return Response
*/
public function corporateHeader(Request $request, string $parentController, string $uri, RequestStack $requestStack): Response
{
$dataMenu = $this->menuGeneralService->createMenuGeneralByMenuId(Menu::HEADER_ID, $this->requestStack->getSession()->get('lang'));
$parametersMenu = $this->menuGeneralService->buildParametersMenu($request->get('legacy_controller') ?? [], $uri, Menu::HEADER_ID, (int)$this->requestStack->getSession()->get('id_lang'));
$masterRequestRouteName = $requestStack->getMainRequest()->get('_route');
$languages = $masterRequestRouteName ? $this->shopMenuService->getLanguageLinks($masterRequestRouteName, $parentController, $this->pathService->getUrlFromLegacyController($request)) : [];
$announcement = null;
return $this->render('front/base/header/corporate/header_corporate.html.twig', [
'languages' => $languages,
'pages' => $dataMenu,
'topbar' => $this->corporateMenuService->getTopbarLinks(BaseMenuService::CORPORATE),
'user_packs' => $this->corporateMenuService->getCustomerPackInfo(),
'popup_data' => $this->getPopupInformation($request->getSession()->get('lang')),
'cart_number_of_products' => $this->corporateMenuService->getCartNumberOfProducts(),
'parameters_menu' => $parametersMenu,
'first_parent' => $this->menuGeneralService->menuFirstLevelChildrenToBeShownIds($dataMenu, $parametersMenu),
'announcement' => $announcement,
'isChristmas' => $this->configurationService->getCachedValue('LOGO_NAVIDAD'),
'routeName' => $masterRequestRouteName,
'right_menu' => $this->corporateMenuService->getRightMenuData($this->getUser()),
]);
}
/**
* @param Request $request
* @param string $parentController
* @param string $uri
* @param RequestStack $requestStack
* @param string $menuHtml
*
* @return Response
*
* @throws InvalidArgumentException
*/
public function shopHeader(Request $request, string $parentController, string $uri, RequestStack $requestStack, string $menuHtml = ''): Response
{
$languageIsoCode = $request->getSession()->get('lang');
$languageId = (int)$request->getSession()->get('id_lang');
$customer = $this->getUser();
$packInfo = ['pack_name' => null, 'pack_id' => null, ];
$dataMenu = $this->menuGeneralService->createMenuGeneralByMenuId(Menu::HEADER_ID, $languageIsoCode);
$parametersMenu = $this->menuGeneralService->buildParametersMenu($request->get('legacy_controller'), $uri, Menu::HEADER_ID, $languageId);
$masterRequestRouteName = $requestStack->getMainRequest()->get('_route');
if ($customer !== null) {
$customerPackInfo = $this->customerPackService->getCustomerPackInfo((int)$customer->getUserIdentifier(), $languageId);
$packInfo['pack_name'] = $customerPackInfo['packName'] ?? null;
$packInfo['pack_id'] = $customerPackInfo['packId'] ?? null;
}
return $this->render('front/base/header/shop/header_shop.html.twig', [
'pages' => $dataMenu,
'topbar' => $this->shopMenuService->getTopbarLinks(BaseMenuService::SHOP),
'languages' => $this->shopMenuService->getLanguageLinks($masterRequestRouteName, $parentController, $this->pathService->getUrlFromLegacyController($request)),
'featured_links' => $this->shopMenuService->getFeaturedLinks($languageId),
'user_packs' => $packInfo,
'popup_data' => $this->getPopupInformation($languageIsoCode),
'cart_number_of_products' => $this->shopMenuService->getCartNumberOfProducts(),
'menu_html' => $menuHtml,
'mobileTreeCategory' => $this->shopMenuService->getCategoryTreeInfo(),
'taxonomyTree' => $this->shopMenuService->getTaxonomyTreeInfo(),
'parameters_menu' => $parametersMenu,
'first_parent' => $this->menuGeneralService->menuFirstLevelChildrenToBeShownIds($dataMenu, $parametersMenu),
'announcement' => null,
'isChristmas' => $this->configurationService->getCachedValue('LOGO_NAVIDAD'),
'right_menu' => $this->shopMenuService->getRightMenuData($customer),
]);
}
protected function getPopupInformation(string $language): ?array
{
/** @var Customer|null $user */
$user = $this->security->getUser();
if ($user === null || !$user->getForcePasswordUpdate() || isset($_COOKIE['popup_psw_update'])) {
return null;
}
\setcookie('popup_psw_update', '1', time() + (60 * 60 * 24), '/');
return [
'title' => $this->translator->trans('forcepassword.title', [], 'messages', $language),
'msg1' => $this->translator->trans('forcepassword.msg1', [], 'messages', $language),
'msg2' => $this->translator->trans('forcepassword.msg2', [], 'messages', $language),
];
}
}