src/Controller/HomeController.php line 39

  1. <?php
  2. namespace App\Controller;
  3. use DateTimeImmutable;
  4. use App\Entity\Suggest;
  5. use App\Form\SuggestFormType;
  6. use App\Service\PasswordService;
  7. use Symfony\Component\Mime\Address;
  8. use App\Repository\ObjectiveRepository;
  9. use App\Service\EvaluationDatasService;
  10. use App\Repository\EvaluationRepository;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use App\Service\QuestionnaireDatasService;
  13. use Symfony\Bundle\SecurityBundle\Security;
  14. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\Mailer\MailerInterface;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\UX\Chartjs\Builder\ChartBuilderInterface;
  20. use Symfony\Component\Security\Http\Attribute\IsGranted;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  23. class HomeController extends AbstractController
  24. {
  25.     private $security;
  26.     private PasswordService $passwordService;
  27.     public function __construct(Security $securityPasswordService $PasswordService)
  28.     {
  29.         $this->security $security;
  30.         $this->passwordService $PasswordService;
  31.     }
  32.     #[Route('/'name'app_home')]
  33.     public function index(ChartBuilderInterface $chartBuilderAuthenticationUtils $authenticationUtils): Response
  34.     {
  35.         // LOGIN
  36.         // if ($this->getUser()) {
  37.         //     return $this->redirectToRoute('target_path');
  38.         // }
  39.         // get the login error if there is one
  40.         $error $authenticationUtils->getLastAuthenticationError();
  41.         // last username entered by the user
  42.         $lastUsername $authenticationUtils->getLastUsername();
  43.         // Redirection des personnes inactives vers la page de changement de mot de passe
  44.         $user $this->getUser();
  45.         if ($user) {
  46.             if ($user->getAccompanist() && $user->getAccompanist()->isActive() == || $user->getCompanyMember() && $user->getCompanyMember()->isActive() == 0) {
  47.                 if (!$this->security->isGranted('ROLE_ADMIN')) {
  48.                     return $this->redirectToRoute('app_inactive');
  49.                 }
  50.             } elseif ($user->isActive() == 0) {
  51.                 $case $this->passwordService->checkCasePassword($user);
  52.                 return $this->redirectToRoute('app_edit_password', ["case" => $case]);
  53.             } else {
  54.                 if ($this->security->isGranted('ROLE_COMPANY')) {
  55.                     $company $user->getCompanyMember()->getCompany();
  56.                     if (count($company->getCompanyQuestionnaires()) > 0) {
  57.                         return $this->redirectToRoute('app_roadmap_index');
  58.                     } else if ($company->getCompanyLabelNR()) {
  59.                         return $this->redirectToRoute('app_label_nr');
  60.                     }
  61.                 } else {
  62.                     return $this->redirectToRoute('app_backoffice');
  63.                 }
  64.             }
  65.         }
  66.         return $this->render('home/index.html.twig', [
  67.             'controller_name' => 'HomeController',
  68.             'last_username' => $lastUsername,
  69.             'error' => $error,
  70.             // 'chart' => $chart
  71.         ]);
  72.     }
  73.     #[IsGranted('ROLE_USER')]
  74.     #[Route('/suggestions/{confirmation}'name'app_suggest'defaults: ["confirmation" => null])]
  75.     public function suggest($confirmationMailerInterface $mailerEntityManagerInterface $emChartBuilderInterface $chartBuilderAuthenticationUtils $authenticationUtilsRequest $request): Response
  76.     {
  77.         $user $this->getUser();
  78.         $suggest = new Suggest();
  79.         $suggest->setUser($user);
  80.         $suggest->setCreatedAt(new DateTimeImmutable());
  81.         $form $this->createForm(SuggestFormType::class, $suggest);
  82.         $form->handleRequest($request);
  83.         if ($form->isSubmitted() && $form->isValid()) {
  84.             $em->persist($suggest);
  85.             $em->flush();
  86.             $email = (new TemplatedEmail())
  87.                 ->from(new Address($this->getParameter('app.email_domain'), $this->getParameter('app.email_domain_name')))
  88.                 ->to('contact@bilbea.fr')
  89.                 ->subject('Nouvelle suggestion')
  90.                 ->htmlTemplate('email/suggest.html.twig')
  91.                 ->context([
  92.                     'user' => $user,
  93.                     'suggest' => $suggest,
  94.                 ]);
  95.             $mailer->send($email);
  96.             return $this->redirectToRoute('app_suggest',  ['confirmation' => "confirmation"]);
  97.         }
  98.         return $this->render('home/suggest.html.twig', [
  99.             'controller_name' => 'HomeController',
  100.             'form' => $form->createView(),
  101.             'confirmation' => $confirmation
  102.         ]);
  103.     }
  104.     #[IsGranted('ROLE_COMPANY')]
  105.     #[Route('/profil'name'app_profile')]
  106.     public function profile(ChartBuilderInterface $chartBuilderEvaluationDatasService $evaluationDatasServiceObjectiveRepository $objectiveRepositoryEvaluationRepository $evaluationRepository): Response
  107.     {
  108.         $user $this->getUser();
  109.         $company $user->getCompanyMember()->getCompany();
  110.         $activeCompanyQuestionnaires $company->getCompanyQuestionnaires();
  111.         $activeQuestionnaires = [];
  112.         $currentEvaluations = [];
  113.         foreach ($activeCompanyQuestionnaires as $key => $companyQuestionnaire) {
  114.             $questionnaire $companyQuestionnaire->getQuestionnaire();
  115.             $lastEvaluations $evaluationRepository->getLastEvaluationsByQuestionnaire($company$questionnaire);
  116.             foreach ($lastEvaluations as $key => $evaluation) {
  117.                 $currentEvaluations[] = $evaluation;
  118.             }
  119.             if (count($lastEvaluations) >= 1) {
  120.                 $lastEvaluation $evaluationDatasService->getEvaluationDatas($lastEvaluations[0]);
  121.                 $questionnaire->setLastEvaluation($lastEvaluation);
  122.                 if (count($lastEvaluations) >= 1) {
  123.                     unset($lastEvaluations[0]);
  124.                     $questionnaire->setOtherEvaluations($lastEvaluations);
  125.                 }
  126.             }
  127.             $activeQuestionnaires[] = $questionnaire;
  128.         }
  129.         $company->setActiveQuestionnaires($activeQuestionnaires);
  130.         return $this->render('home/profile.html.twig', [
  131.             'controller_name' => 'HomeController',
  132.             'user' => $user,
  133.             'company' => $company
  134.         ]);
  135.     }
  136.     #[Route('/inactif'name'app_inactive')]
  137.     public function inactive(ChartBuilderInterface $chartBuilderAuthenticationUtils $authenticationUtils): Response
  138.     {
  139.         // Redirection des personnes inactives vers la page de changement de mot de passe
  140.         if ($this->getUser()) {
  141.             $user $this->getUser();
  142.             if ($user->hasMembership() && $user->isAccountActive()) {
  143.                 return $this->redirectToRoute('app_home');
  144.             }
  145.             if ($this->security->isGranted('ROLE_ADMIN')) {
  146.                 return $this->redirectToRoute('app_home');
  147.             }
  148.         } else {
  149.             return $this->redirectToRoute('app_home');
  150.         }
  151.         return $this->render('home/inactive.html.twig', [
  152.             'controller_name' => 'HomeController',
  153.         ]);
  154.     }
  155.     #[Route('/mentions-legales'name'app_legal_notice')]
  156.     public function legalNotice(ChartBuilderInterface $chartBuilderAuthenticationUtils $authenticationUtils): Response
  157.     {
  158.         return $this->render('home/legal_notice.html.twig', [
  159.             'controller_name' => 'HomeController',
  160.         ]);
  161.     }
  162.     #[Route('/politique-de-confidentialite'name'app_privacy_policy')]
  163.     public function privacyPolicy(ChartBuilderInterface $chartBuilderAuthenticationUtils $authenticationUtils): Response
  164.     {
  165.         return $this->render('home/privacy_policy.html.twig', [
  166.             'controller_name' => 'HomeController',
  167.         ]);
  168.     }
  169.     #[Route('/declaration-ecoconception'name'app_ecoconception')]
  170.     public function ecoconception(ChartBuilderInterface $chartBuilderAuthenticationUtils $authenticationUtils): Response
  171.     {
  172.         return $this->render('home/declaration-ecoconception.html.twig', [
  173.             'controller_name' => 'HomeController',
  174.         ]);
  175.     }
  176. }