src/Controller/CommitmentController.php line 84

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Badge;
  4. use App\Entity\Commitment;
  5. use App\Entity\User;
  6. use App\Entity\YpareoController;
  7. use App\Entity\HistoryUser;
  8. use App\Entity\StepAnimation;
  9. use App\Form\CommitmentUserFormType;
  10. use App\Form\DraftCommitment;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. class CommitmentController extends AbstractController
  16. {
  17.     #[Route('/engagement-saisie'name'app_commitment_new')]
  18.     public function commitment(Request $requestEntityManagerInterface $entityManager)
  19.     {
  20.         if (!$this->getUser()) {
  21.             return $this->redirectToRoute('app_dashboard');
  22.         }
  23.         $user $entityManager->getRepository(User::class)->find($this->getUser());
  24.         $commitmentUser $entityManager->getRepository(Commitment::class)->findOneBy(
  25.             ['user' => $user->getId(), 'isArchived' => false ]
  26.         );
  27.         $form $this->createForm(CommitmentUserFormType::class, $commitmentUser);
  28.         $form->handleRequest($request);
  29.         if ($form->isSubmitted() && $form->isValid()) {
  30.             $data $form->getData();
  31.             if (!$commitmentUser) {
  32.                 $commitment = new Commitment();
  33.             } else {
  34.                 $commitment $commitmentUser;
  35.             }
  36.             if (!$commitmentUser) {
  37.                 if (!$commitment->getToken()) {
  38.                     $token md5(uniqid((string)rand(), true));
  39.                     $commitment->setToken($token);
  40.                 }
  41.             }
  42.             $user->setHasCompany(true);
  43.             $entityManager->persist($user);
  44.             $commitment->setCompanyName($data['company_name']);
  45.             $commitment->setCompanyManagerFirstname($data['company_manager_firstname']);
  46.             $commitment->setCompanyManagerLastname($data['company_manager_lastname']);
  47.             $commitment->setCompanyEmail($data['company_email']);
  48.             $commitment->setCompanyPhone($data['company_phone']);
  49.             $commitment->setIsArchived(false);
  50.             $commitment->setUser($user);
  51.             $commitment->setState(0);
  52.             $commitment->setReceivedOn(new \DateTime());
  53.             $commitment->setAuthor('user');
  54.             $commitment->setRf(false);
  55.             $commitment->setDraft(false);
  56.             $user->setEditedAt(new \DateTimeImmutable());
  57.             $commitment->setStartDate(new \DateTimeImmutable($request->request->get('date')));
  58.             $entityManager->persist($user);
  59.             $entityManager->flush();
  60.             $entityManager->persist($commitment);
  61.             $entityManager->flush();
  62.             // history
  63.             return $this->redirectToRoute('app_dashboard');
  64.         }
  65.         return $this->render('user/commitment/commitment_new.html.twig', [
  66.             'form' => $form->createView(),
  67.         ]);
  68.     }
  69.     #[Route('/engagement/creer/sans-offre'name'app_commitment_new_unknown')]
  70.     public function newDraftCommitment(Request $requestEntityManagerInterface $entityManager)
  71.     {
  72.         $commitmentUser = new Commitment();
  73.         if ($this->getUser()) {
  74.             $userConnected =  $entityManager->getRepository(User::class)->find($this->getUser());
  75.         }
  76.         $form $this->createForm(DraftCommitment::class, $commitmentUser);
  77.         $form->handleRequest($request);
  78.         if ($form->isSubmitted() && $form->isValid()) {
  79.             if ($request->request->get('recaptchaResponse') && $request->request->get('recaptchaResponse') != null) {
  80.                 $recaptcha_url 'https://www.google.com/recaptcha/api/siteverify'// URL to the reCAPTCHA server
  81.                 $recaptcha_secret '6Lf982YpAAAAADyzWvftfXuFWHEJHPUHbqmSs54D'// Secret key
  82.                 $recaptcha_response $request->request->get('recaptchaResponse'); // Response from reCAPTCHA server, added to the form during processing
  83.                 $recaptcha file_get_contents($recaptcha_url '?secret=' $recaptcha_secret '&response=' $recaptcha_response); // Send request to the server
  84.                 $recaptcha json_decode($recaptcha); // Decode the JSON response
  85.                 if ($recaptcha->success == false || $recaptcha->action != "submit") { // If the response is valid
  86.                     $this->addFlash('error''Captcha invalide, veuillez réessayer ou contacter l\'administrateur');
  87.                     return $this->redirectToRoute("app_commitment_new_unknown");
  88.                 } elseif ($recaptcha->score <= 0.5) {
  89.                     $this->addFlash('error''Votre demande n\'a pas pu être envoyée, veuillez réessayer.');
  90.                     return $this->redirectToRoute("app_commitment_new_unknown");
  91.                 }
  92.             } else {
  93.                 $this->addFlash('error''Votre demande n\'a pas pu être envoyée, veuillez réessayer.');
  94.                 return $this->redirectToRoute("app_commitment_new_unknown");
  95.             }
  96.             $data $form->getData();
  97.             $fields $request->request;
  98.             $user null;
  99.             if ($fields->get("phone")) {
  100.                 $user $entityManager->getRepository(User::class)->findOneBy(["phone" => $fields->get("phone")]);
  101.             }
  102.             if (!$user && $fields->get("email")) {
  103.                 $user $entityManager->getRepository(User::class)->findOneBy(["email" => $fields->get("email")]);
  104.             }
  105.             if ($user) {
  106.                 if (!empty($user->getCommitments()->getValues())) {
  107.                     $this->addFlash('error''L\'étudiant possède déjà un engagement');
  108.                     return $this->redirectToRoute("app_commitment_new_admin_unknown");
  109.                 }
  110.                 $commitmentUser = new Commitment();
  111.                 $commitmentUser->setUser($user);
  112.                 $token md5(uniqid((string)rand(), true));
  113.                 $commitmentUser->setToken($token);
  114.                 $user->setHasCompany(true);
  115.                 $entityManager->persist($user);
  116.                 $commitmentUser->setUser($user);
  117.                 $commitmentUser->setReceivedOn(new \DateTime());
  118.                 $commitmentUser->setRf(false);
  119.                 $commitmentUser->setDraft(false);
  120.                 $user->setEditedAt(new \DateTimeImmutable());
  121.                 $history = new HistoryUser();
  122.                 $history->setUser($user);
  123.                 $history->setDescription(
  124.                     'Création de l\'engagement par '
  125.                     $userConnected->getLastname() . " " $userConnected->getFirstname()
  126.                 );
  127.                 $history->setCreatedAt(new \DateTimeImmutable());
  128.                 $entityManager->persist($history);
  129.                 $entityManager->persist($user);
  130.                 $entityManager->persist($commitmentUser);
  131.                 $entityManager->flush();
  132.                 return $this->redirect("/adminterfor/etudiant/" $user->getId());
  133.             } else {
  134.                 $commitmentUser->setUserName($fields->get("firstname"));
  135.                 $commitmentUser->setUserLastname($fields->get("lastname"));
  136.                 $commitmentUser->setUserPhone($fields->get("phone"));
  137.                 $commitmentUser->setUserEmail($fields->get("email"));
  138.             }
  139.             // si l'utilisateur n'existe pas
  140.             $token md5(uniqid((string)rand(), true));
  141.             $commitmentUser->setState(4);
  142.             $commitmentUser->setToken($token);
  143.             $commitmentUser->setReceivedOn(new \DateTime());
  144.             $commitmentUser->setRf(false);
  145.             $commitmentUser->setDraft(false);
  146.             $entityManager->persist($commitmentUser);
  147.             $entityManager->flush();
  148.             // history
  149.             $this->addFlash(
  150.                 'success',
  151.                 "Votre demande a été prise en compte, nous vous recontactons sous 48h pour finaliser votre engagement"
  152.             );
  153.             return $this->redirectToRoute('company_send_mail_commitment');
  154.         }
  155.         return $this->render('company/draftCommitment.html.twig', [
  156.             'form' => $form->createView(),
  157.             'commitment' => $commitmentUser,
  158.         ]);
  159.     }
  160. }