<?php
declare(strict_types=1);
namespace App\Controller\Front;
use App\Application\Service\Helper\PathService;
use App\Application\Service\Menu\MenuService;
use App\Application\Service\Menu\MenuBaseHeaderService;
use App\Application\Service\Session\SessionService;
use App\Entity\System\Customer;
use App\Entity\System\Menu;
use App\Manager\System\CartProductManager;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Security\Core\Security;
class HeaderController extends AbstractController
{
private PathService $pathService;
private MenuBaseHeaderService $menuGeneralService;
private TranslatorInterface $translator;
private RequestStack $requestStack;
private Security $security;
private SessionService $sessionService;
private CartProductManager $cartProductManager;
private MenuService $footerService;
public function __construct(
PathService $pathService,
MenuBaseHeaderService $menuGeneralService,
TranslatorInterface $translator,
RequestStack $requestStack,
Security $security,
SessionService $sessionService,
CartProductManager $cartProductManager,
MenuService $footerService
) {
$this->pathService = $pathService;
$this->menuGeneralService = $menuGeneralService;
$this->translator = $translator;
$this->requestStack = $requestStack;
$this->security = $security;
$this->sessionService = $sessionService;
$this->cartProductManager = $cartProductManager;
$this->footerService = $footerService;
}
/**
* Called in base_corporate.html.twig
*
* @return Response
*/
public function corporateHeader(Request $request, string $parentController, string $uri): Response
{
$dataMenu = $this->menuGeneralService->createMenuGeneralByMenuId(Menu::HEADER_ID, $this->sessionService->getLocale());
$parametersMenu = $this->menuGeneralService->buildParametersMenu($request->get('legacy_controller') ?? [], $uri, Menu::HEADER_ID, $this->sessionService->getLocaleId());
$masterRequestRouteName = $this->requestStack->getMainRequest()->get('_route');
$languages = $masterRequestRouteName ? $this->footerService->getLanguageLinks($parentController, $this->pathService->getUrlFromLegacyController($request)) : [];
$announcement = $this->translator->trans('next.pre_header.christmas', [], 'landings', $this->sessionService->getLocale());
$cartId = (int)$this->sessionService->get('id_cart');
/** @var ?Customer $customer */
$customer = $this->getUser();
return $this->render('front/base/header/corporate/header_corporate.html.twig', [
'languages' => $languages,
'pages' => $dataMenu,
'topbar' => $this->footerService->getTopbarLinks(MenuService::CORPORATE),
'user_packs' => $this->footerService->getCustomerPackInfo(),
'popup_data' => $this->getPopupInformation($request->getSession()->get('lang')),
'cart_number_of_products' => $cartId ? $this->cartProductManager->getNumberProductsInCart($cartId) : 0,
'parameters_menu' => $parametersMenu,
'first_parent' => $this->menuGeneralService->menuFirstLevelChildrenToBeShownIds($dataMenu, $parametersMenu),
'announcement' => $announcement,
'isChristmas' => false,
'routeName' => $masterRequestRouteName,
'right_menu' => $this->footerService->getRightMenuData($customer),
]);
}
protected function getPopupInformation(string $language): ?array
{
/** @var UserInterface|null $user */
$user = $this->security->getUser();
if (!$user instanceof Customer || !$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),
];
}
}