src/Controller/HomeController.php line 39
<?php
namespace App\Controller;
use DateTimeImmutable;
use App\Entity\Suggest;
use App\Form\SuggestFormType;
use App\Service\PasswordService;
use Symfony\Component\Mime\Address;
use App\Repository\ObjectiveRepository;
use App\Service\EvaluationDatasService;
use App\Repository\EvaluationRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Service\QuestionnaireDatasService;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\UX\Chartjs\Builder\ChartBuilderInterface;
use Symfony\Component\Security\Http\Attribute\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class HomeController extends AbstractController
{
private $security;
private PasswordService $passwordService;
public function __construct(Security $security, PasswordService $PasswordService)
{
$this->security = $security;
$this->passwordService = $PasswordService;
}
#[Route('/', name: 'app_home')]
public function index(ChartBuilderInterface $chartBuilder, AuthenticationUtils $authenticationUtils): Response
{
// LOGIN
// if ($this->getUser()) {
// return $this->redirectToRoute('target_path');
// }
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
// Redirection des personnes inactives vers la page de changement de mot de passe
$user = $this->getUser();
if ($user) {
if ($user->getAccompanist() && $user->getAccompanist()->isActive() == 0 || $user->getCompanyMember() && $user->getCompanyMember()->isActive() == 0) {
if (!$this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_inactive');
}
} elseif ($user->isActive() == 0) {
$case = $this->passwordService->checkCasePassword($user);
return $this->redirectToRoute('app_edit_password', ["case" => $case]);
} else {
if ($this->security->isGranted('ROLE_COMPANY')) {
$company = $user->getCompanyMember()->getCompany();
if (count($company->getCompanyQuestionnaires()) > 0) {
return $this->redirectToRoute('app_roadmap_index');
} else if ($company->getCompanyLabelNR()) {
return $this->redirectToRoute('app_label_nr');
}
} else {
return $this->redirectToRoute('app_backoffice');
}
}
}
return $this->render('home/index.html.twig', [
'controller_name' => 'HomeController',
'last_username' => $lastUsername,
'error' => $error,
// 'chart' => $chart
]);
}
#[IsGranted('ROLE_USER')]
#[Route('/suggestions/{confirmation}', name: 'app_suggest', defaults: ["confirmation" => null])]
public function suggest($confirmation, MailerInterface $mailer, EntityManagerInterface $em, ChartBuilderInterface $chartBuilder, AuthenticationUtils $authenticationUtils, Request $request): Response
{
$user = $this->getUser();
$suggest = new Suggest();
$suggest->setUser($user);
$suggest->setCreatedAt(new DateTimeImmutable());
$form = $this->createForm(SuggestFormType::class, $suggest);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em->persist($suggest);
$em->flush();
$email = (new TemplatedEmail())
->from(new Address($this->getParameter('app.email_domain'), $this->getParameter('app.email_domain_name')))
->to('contact@bilbea.fr')
->subject('Nouvelle suggestion')
->htmlTemplate('email/suggest.html.twig')
->context([
'user' => $user,
'suggest' => $suggest,
]);
$mailer->send($email);
return $this->redirectToRoute('app_suggest', ['confirmation' => "confirmation"]);
}
return $this->render('home/suggest.html.twig', [
'controller_name' => 'HomeController',
'form' => $form->createView(),
'confirmation' => $confirmation
]);
}
#[IsGranted('ROLE_COMPANY')]
#[Route('/profil', name: 'app_profile')]
public function profile(ChartBuilderInterface $chartBuilder, EvaluationDatasService $evaluationDatasService, ObjectiveRepository $objectiveRepository, EvaluationRepository $evaluationRepository): Response
{
$user = $this->getUser();
$company = $user->getCompanyMember()->getCompany();
$activeCompanyQuestionnaires = $company->getCompanyQuestionnaires();
$activeQuestionnaires = [];
$currentEvaluations = [];
foreach ($activeCompanyQuestionnaires as $key => $companyQuestionnaire) {
$questionnaire = $companyQuestionnaire->getQuestionnaire();
$lastEvaluations = $evaluationRepository->getLastEvaluationsByQuestionnaire($company, $questionnaire);
foreach ($lastEvaluations as $key => $evaluation) {
$currentEvaluations[] = $evaluation;
}
if (count($lastEvaluations) >= 1) {
$lastEvaluation = $evaluationDatasService->getEvaluationDatas($lastEvaluations[0]);
$questionnaire->setLastEvaluation($lastEvaluation);
if (count($lastEvaluations) >= 1) {
unset($lastEvaluations[0]);
$questionnaire->setOtherEvaluations($lastEvaluations);
}
}
$activeQuestionnaires[] = $questionnaire;
}
$company->setActiveQuestionnaires($activeQuestionnaires);
return $this->render('home/profile.html.twig', [
'controller_name' => 'HomeController',
'user' => $user,
'company' => $company
]);
}
#[Route('/inactif', name: 'app_inactive')]
public function inactive(ChartBuilderInterface $chartBuilder, AuthenticationUtils $authenticationUtils): Response
{
// Redirection des personnes inactives vers la page de changement de mot de passe
if ($this->getUser()) {
$user = $this->getUser();
if ($user->hasMembership() && $user->isAccountActive()) {
return $this->redirectToRoute('app_home');
}
if ($this->security->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_home');
}
} else {
return $this->redirectToRoute('app_home');
}
return $this->render('home/inactive.html.twig', [
'controller_name' => 'HomeController',
]);
}
#[Route('/mentions-legales', name: 'app_legal_notice')]
public function legalNotice(ChartBuilderInterface $chartBuilder, AuthenticationUtils $authenticationUtils): Response
{
return $this->render('home/legal_notice.html.twig', [
'controller_name' => 'HomeController',
]);
}
#[Route('/politique-de-confidentialite', name: 'app_privacy_policy')]
public function privacyPolicy(ChartBuilderInterface $chartBuilder, AuthenticationUtils $authenticationUtils): Response
{
return $this->render('home/privacy_policy.html.twig', [
'controller_name' => 'HomeController',
]);
}
#[Route('/declaration-ecoconception', name: 'app_ecoconception')]
public function ecoconception(ChartBuilderInterface $chartBuilder, AuthenticationUtils $authenticationUtils): Response
{
return $this->render('home/declaration-ecoconception.html.twig', [
'controller_name' => 'HomeController',
]);
}
}