<?php
namespace Entrepreneurs\Bundle\Enseignant\Controller;
use Entrepreneurs\Bundle\Admin\Controller\AdminController;
use Entrepreneurs\Bundle\AppBundle\Manager\MailManager;
use Entrepreneurs\Bundle\AppBundle\Propel\Enseignant;
use Entrepreneurs\Bundle\AppBundle\Propel\EnseignantQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\EnseignantStatut;
use Entrepreneurs\Bundle\AppBundle\Propel\Message;
use Entrepreneurs\Bundle\AppBundle\Propel\MessageQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\TypeIntervention;
use Entrepreneurs\Bundle\AppBundle\Propel\TypeInterventionQuery;
use Entrepreneurs\Bundle\Enseignant\DTO\EpaDTO;
use Entrepreneurs\Bundle\Enseignant\EventListener\EpaRequestListener;
use Entrepreneurs\Bundle\Enseignant\Form\QuestionnaireSEFType;
use Entrepreneurs\Bundle\Enseignant\Form\QuestionnaireType;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Webmozart\Assert\Assert;
class InscriptionController extends AdminController
{
/**
* @Route(name="enseignant_inscription", path="/inscription/{uid}", defaults={"uid": ""})
*/
public function indexAction(Request $request): Response
{
if ($request->get('uid')) {
if (!$enseignant = EnseignantQuery::create()->findOneByUid($request->get('uid'))) {
throw $this->createNotFoundException("Aucun utilisateur n'existe pour l'UID renseigné.");
}
if ($enseignant->getMotDePasse()) {
return $this->renderTwig('Enseignant:Inscription:deja_inscrit.html.twig');
}
}
return $this->redirectToRoute('enseignant_questionnaire', ['from_sign_up' => true]);
}
/**
* @Route(name="enseignant_questionnaire", path="/questionnaire")
*/
public function surveyAddAction(Request $request, MailManager $manager): Response
{
/** @var Enseignant $enseignant */
$enseignant = $this->getUser() ?: new Enseignant();
$isFromSignUp = (bool) $request->get('from_sign_up');
/** @var ?EpaDTO $epaDTO */
$epaDTO = $request->getSession()->get(EpaRequestListener::SESSION_EPA_KEY);
Assert::nullOrIsInstanceOf($epaDTO, EpaDTO::class);
$form = $this->createForm(QuestionnaireType::class, $enseignant,
[
'enseignant' => $enseignant,
'isFromSignUp' => $isFromSignUp,
'epaDTO' => $epaDTO,
]
);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$enseignant->setDateMajFront(time());
if ($enseignant->getPassword()) {
$enseignant->save();
} else {
$enseignant->initQuestionnaire()->save();
}
$enseignant->logSurvey();
if (in_array($enseignant->getParticiperAssociation(), [
Enseignant::PARTICIPATION_COMMUNAUTE_OUI,
Enseignant::PARTICIPATION_COMMUNAUTE_POURQUOI_PAS,
])) {
$manager->sendMailParticipationAssociation($enseignant);
}
$successMessage = 'Merci pour votre réponse au questionnaire et à bientôt pour les interventions auprès de vos jeunes';
if ($enseignant->getPassword()) {
$this->addFlash('success', $successMessage);
return $this->redirectToRoute('enseignant_demande_intervention_list');
} elseif (EnseignantStatut::EN_ATTENTE_ACTIVATION === $enseignant->getStatutId()) { // Only for new Enseignants
$manager->sendMailEnseignantInscription(
$enseignant,
$this->generateUrl('enseignant_security_activation', [
'uid' => $enseignant->getUid(),
'mail' => $enseignant->getEmail(),
], UrlGeneratorInterface::ABSOLUTE_URL)
);
}
return $this->render('Enseignant/Inscription/remerciements.html.twig', ['message' => $successMessage]);
} else {
$this->addFlash('warning', "Les modifications n'ont pu être enregistrées. Merci de vérifier les informations renseignées et de les modifier au besoin.");
}
}
return $this->render('Enseignant/Inscription/questionnaire.html.twig', [
'form' => $form->createView(),
'isFromSignUp' => $isFromSignUp,
]);
}
/**
* @Route(name="enseignant_questionnaire_edit", path="/modifier/questionnaire")
*/
public function surveyEditAction(Request $request, MailManager $manager): Response
{
return $this->redirectToRoute('enseignant_questionnaire');
}
/**
* @Route(name="enseignant_questionnaire_verif_compte", path="/questionnaire/verif")
*/
public function verifAction(Request $request): JsonResponse
{
$telephone = $request->get('telephone');
$email = $request->get('email');
$enseignantQuery = EnseignantQuery::create();
if ($telephone) {
$enseignantQuery->filterByTelephone1($telephone);
}
if ($email) {
$enseignantQuery->filterByEmail($email);
}
$enseignant = $enseignantQuery->findOne();
return new JsonResponse(['enseignantExist' => (bool) $enseignant]);
}
/**
* @Route(name="enseignant_questionnaire_sef", path="/questionnaire-sef")
*/
public function surveySEFAction(Request $request, MailManager $manager): Response
{
/** @var Enseignant $enseignant */
$enseignant = $this->getUser() ?: new Enseignant();
$isFromSignUp = (bool) $request->get('from_sign_up');
$form = $this->createForm(QuestionnaireSEFType::class, $enseignant,
[
'enseignant' => $enseignant,
'isFromSignUp' => $isFromSignUp,
]
);
$typeInterventionEF = TypeInterventionQuery::create()->findOneByLabel(TypeIntervention::ENTREPRENEURIAT_FEMININ);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
if ($typeInterventionEF) {
$enseignant->addTypeIntervention($typeInterventionEF);
}
if ($enseignant->getPassword()) {
$enseignant->save();
} else {
$enseignant->initQuestionnaire()->save();
}
$enseignant->logSurveySEF();
$successMessage = 'Merci pour votre réponse au questionnaire et à bientôt pour les interventions auprès de vos jeunes ';
if ($enseignant->getPassword()) {
$this->addFlash('success', $successMessage);
$manager->sendMailEnseignantSefSurvey(
$enseignant,
$this->generateUrl('enseignant_security_activation', [
'uid' => $enseignant->getUid(),
'mail' => $enseignant->getEmail(),
], UrlGeneratorInterface::ABSOLUTE_URL)
);
return $this->redirectToRoute('enseignant_demande_intervention_list', ['fromSurveySef' => true]);
} elseif (EnseignantStatut::EN_ATTENTE_ACTIVATION === $enseignant->getStatutId()) { // Only for new Enseignants
$manager->sendMailEnseignantInscription(
$enseignant,
$this->generateUrl('enseignant_security_activation', [
'uid' => $enseignant->getUid(),
'mail' => $enseignant->getEmail(),
], UrlGeneratorInterface::ABSOLUTE_URL),
true
);
}
return $this->renderTwig('Enseignant:Inscription:remerciements.html.twig', ['message' => $successMessage, 'fromSurveySef' => true]);
} else {
$this->addFlash('warning', "Les modifications n'ont pu être enregistrées. Merci de vérifier les informations renseignées et de les modifier au besoin.");
}
}
return $this->renderTwig('Enseignant:Inscription:questionnaire_sef.html.twig', [
'form' => $form->createView(),
'isFromSignUp' => $isFromSignUp,
'enseignantId' => $enseignant->getId(),
'introMessage' => MessageQuery::create()->findOneByCode(Message::SURVEY_SEF_INTRO_MESSAGE_ENS)->getMessage(),
]);
}
/**
* @Route(name="enseignant_questionnaire_sef_edit", path="/modifier/questionnaire-sef")
*/
public function surveySefEditAction(): Response
{
return $this->redirectToRoute('enseignant_questionnaire_sef');
}
}