<?php
declare(strict_types=1);
namespace App\Controller\Home;
use App\Entity\Security\Manager;
use App\Entity\Security\ShopManager;
use App\Entity\Security\User;
use App\Helper\LegalTerms\LegalTermsHelper;
use App\Helper\LegalTerms\LegalTermsInterface;
use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
class IndexController extends AbstractController
{
public function __construct(
private LegalTermsHelper $legalTermsHelper,
private EntityManagerInterface $entityManager,
private TranslatorInterface $translator,
) {
}
public function index(): Response
{
$user = $this->getUser();
if ($user instanceof Manager) {
return $this->redirectToRoute('foxorders_franchise_dashboard', ['id' => $user->getFranchise()->getId()]);
}
if ($user instanceof ShopManager) {
return $this->redirectToRoute('foxorders_shop_dashboard', ['id' => $user->getShop()->getId()]);
}
if ($this->isGranted('ROLE_SUPPORT')) {
return $this->redirectToRoute('foxorders_admin_dashboard');
}
return $this->redirectToRoute('foxorders_dashboard');
}
public function home(): Response
{
return $this->redirectToRoute('foxorders_dashboard');
}
public function legalNotice(): Response
{
return $this->renderForm('Home/legal_notice.html.twig');
}
/**
* @IsGranted("ROLE_SHOP_MANAGER")
*/
public function acceptTOU(): Response
{
/** @var User $user */
$user = $this->getUser();
if (!$user->hasAcceptedTOU()) {
$user->setAcceptedTOU(true);
$this->entityManager->flush();
}
return $this->redirectToRoute('foxorders_dashboard');
}
public function legalTermsPreview(string $type): Response
{
if (!\in_array($type, LegalTermsInterface::TYPES, true)) {
$this->addFlash('danger', $this->translator->trans('app.legal_terms.flash_messages.error.invalid_type'));
return $this->redirectToRoute('security_login');
}
return $this->renderForm('Home/legal_terms_preview.html.twig', [
'fileContent' => $this->legalTermsHelper->getFileContent("{$type}.html"),
]);
}
}