src/Controller/MenuController.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Form\UserType;
  5. use App\Form\LiensType;
  6. use App\Form\DetailsType;
  7. use App\Form\DomaineType;
  8. use App\Repository\UserRepository;
  9. use App\Repository\CuveeRepository;
  10. use Symfony\Component\Mime\Address;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\Mailer\MailerInterface;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use App\Form\ChangePasswordFromSettingFormType;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\HttpFoundation\JsonResponse;
  19. use Symfony\Component\HttpFoundation\RedirectResponse;
  20. use Symfony\Component\String\Slugger\SluggerInterface;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  23. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  24. use SymfonyCasts\Bundle\ResetPassword\Controller\ResetPasswordControllerTrait;
  25. class MenuController extends AbstractController
  26. {
  27.     use ResetPasswordControllerTrait;
  28.     /**
  29.      * @Route("/", name="app_accueil")
  30.      */
  31.     public function index(): Response
  32.     {
  33.         $user $this->getUser();
  34.         return $this->render('menu/pages-starter.html.twig', [
  35.             'user' => $user
  36.         ]);
  37.     }
  38.     /**
  39.      * @Route("/admin", name="app_admin")
  40.      */
  41.     public function admin(UserRepository $ur): Response
  42.     {
  43.         return $this->render('user/index.html.twig', [
  44.             'users' => $ur->findAll(),
  45.         ]);
  46.     }
  47.     /**
  48.      * @Route("/admin/user/{id}", name="user_edit")
  49.      */
  50.     public function userEdit(User $userRequest $requestUserPasswordHasherInterface $userPasswordHasherEntityManagerInterface $em): Response
  51.     {
  52.         $form $this->createForm(UserType::class, $user);
  53.         $form->handleRequest($request);
  54.         if ($form->isSubmitted() && $form->isValid()) {
  55.             $em->flush();
  56.             return $this->redirectToRoute('app_admin');
  57.         }
  58.         return $this->render('user/form.html.twig', [
  59.             'form' => $form->createView(),
  60.             'user' => $user,
  61.             'type' => 'modifier'
  62.         ]);
  63.     }
  64.     /**
  65.      * @Route("/qrCode/telecharger", name="qrcode_telecharger")
  66.      */
  67.     public function qRCode_download(CuveeRepository $cr): Response
  68.     {
  69.         $zip = new \ZipArchive();
  70.         $zipName 'mesQRCodes.zip';
  71.         $zip->open($zipName,  \ZipArchive::CREATE);
  72.         foreach($cr->findBy(['user' => $this->getUser(), 'statut' => 1]) as $cuvee) {
  73.             $zip->addEmptyDir($cuvee->getNomCuvee());
  74.             $zip->addFile(realpath($this->getParameter('external_directory').'/'.$cuvee->getUser()->getEntreprise().'/'.$cuvee->getNomCuvee().'/'.urldecode($cuvee->getQRCode()->getSvg())), $cuvee->getNomCuvee().'/'.$cuvee->getNomCuvee().' - QR Code.svg');
  75.             $zip->addFile(realpath($this->getParameter('external_directory').'/'.$cuvee->getUser()->getEntreprise().'/'.$cuvee->getNomCuvee().'/'.urldecode($cuvee->getQRCode()->getPng())), $cuvee->getNomCuvee().'/'.$cuvee->getNomCuvee().' - QR Code.png');
  76.             $zip->addFile(realpath($this->getParameter('external_directory').'/'.$cuvee->getUser()->getEntreprise().'/'.$cuvee->getNomCuvee().'/'.urldecode($cuvee->getQRCode()->getPdf())), $cuvee->getNomCuvee().'/'.$cuvee->getNomCuvee().' - QR Code.pdf');
  77.         }
  78.         $zip->close();
  79.         if(count($cr->findBy(['user' => $this->getUser(), 'statut' => 1]))){
  80.             
  81.             $response = new Response(file_get_contents($zipName));
  82.             $response->headers->set('Content-Type''application/zip');
  83.             $response->headers->set('Content-Disposition''attachment;filename="' $zipName '"');
  84.             $response->headers->set('Content-length'filesize($zipName));
  85.             
  86.             @unlink($zipName);
  87.             return $response;
  88.         }else{
  89.             @unlink($zipName);
  90.             $this->addFlash(
  91.                'error',
  92.                'Aucun qrCode trouvé sous votre domaine.'
  93.             );
  94.             return $this->redirectToRoute('app_cuvee_index');
  95.         }
  96.     }
  97.     /**
  98.      * @Route("/profil", name="app_profil")
  99.      */
  100.     public function profil(): Response
  101.     {
  102.         /** @var User $user */
  103.         $user $this->getUser();
  104.         $progress ;
  105.         if($user->getAdresse()){
  106.             $progress++;
  107.         }
  108.         if($user->getCodePostal()){
  109.             $progress++;
  110.         }
  111.         if($user->getVille()){
  112.             $progress++;
  113.         }
  114.         if($user->getCodePostal()){
  115.             $progress++;
  116.         }
  117.         if($user->getTelephone()){
  118.             $progress++;
  119.         }
  120.         if($user->getSite()){
  121.             $progress++;
  122.         }
  123.         if($user->getInstagram()){
  124.             $progress++;
  125.         }
  126.         if($user->getFacebook()){
  127.             $progress++;
  128.         }
  129.         if($user->getTexteDomaine()){
  130.             $progress++;
  131.         }
  132.         $progress ceil($progress 100 11);
  133.         return $this->render('menu/pages-profile.html.twig', [
  134.             'user' => $user,
  135.             'progress' => $progress
  136.         ]);
  137.     }
  138.     /**
  139.      * @Route("/profil/savePhotoProfil", name="profil_savePhotoProfil")
  140.      */
  141.     public function savePhotoProfil(Request $requestSluggerInterface $sluggerEntityManagerInterface $em): JsonResponse
  142.     {
  143.         /** @var User $user */
  144.         $user $this->getUser();
  145.         /** @var UploadedFile $file */
  146.         $file $request->files->get('file');
  147.         if(!$file){
  148.             return new JsonResponse('Le fichier n\'a pas été trouvé.'501);
  149.         }
  150.         $originalFileName pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  151.         $safeFileName $slugger->slug($originalFileName);
  152.         $newFileName $safeFileName.'-'.uniqid().'.'.$file->guessExtension();
  153.         try {
  154.             $oldFile $user->getImageProfil();
  155.             $file->move(
  156.                 $this->getParameter('image_profil_directory'),
  157.                 $newFileName
  158.             );
  159.             if($oldFile){
  160.                 unlink($this->getParameter(('image_profil_directory')).'/'.$oldFile);
  161.             }
  162.         }catch (FileException $e) {
  163.             return new JsonResponse('Erreur lors de l\'enregistrement : '.$e501);
  164.         }
  165.         $user->setImageProfil($newFileName);
  166.         $em->flush();
  167.         return new JsonResponse('Enregistré');
  168.     }
  169.     /**
  170.      * @Route("/profil/savePhotoBgProfil", name="profil_savePhotoBgProfil")
  171.      */
  172.     public function savePhotoBgProfil(Request $requestSluggerInterface $sluggerEntityManagerInterface $em): JsonResponse
  173.     {
  174.         /** @var User $user */
  175.         $user $this->getUser();
  176.         /** @var UploadedFile $file */
  177.         $file $request->files->get('file');
  178.         if(!$file){
  179.             return new JsonResponse('Le fichier n\'a pas été trouvé.'501);
  180.         }
  181.         $originalFileName pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  182.         $safeFileName $slugger->slug($originalFileName);
  183.         $newFileName $safeFileName.'-'.uniqid().'.'.$file->guessExtension();
  184.         try {
  185.             $oldFile $user->getImageFondProfil();
  186.             $file->move(
  187.                 $this->getParameter('image_profil_directory'),
  188.                 $newFileName
  189.             );
  190.             if($oldFile){
  191.                 unlink($this->getParameter(('image_profil_directory')).'/'.$oldFile);
  192.             }
  193.         }catch (FileException $e) {
  194.             return new JsonResponse('Erreur lors de l\'enregistrement : '.$e501);
  195.         }
  196.         $user->setImageFondProfil($newFileName);
  197.         $em->flush();
  198.         return new JsonResponse('Enregistré');
  199.     }
  200.     /**
  201.      * @Route("/profil/edit", name="app_profil_edit")
  202.      */
  203.     public function profilEdit(Request $requestEntityManagerInterface $emUserPasswordHasherInterface $userPasswordHasherMailerInterface $mailer): Response
  204.     {
  205.         /** @var User $user */
  206.         $user $this->getUser();
  207.         $progress ;
  208.         if($user->getAdresse()){
  209.             $progress++;
  210.         }
  211.         if($user->getCodePostal()){
  212.             $progress++;
  213.         }
  214.         if($user->getVille()){
  215.             $progress++;
  216.         }
  217.         if($user->getCodePostal()){
  218.             $progress++;
  219.         }
  220.         if($user->getTelephone()){
  221.             $progress++;
  222.         }
  223.         if($user->getSite()){
  224.             $progress++;
  225.         }
  226.         if($user->getInstagram()){
  227.             $progress++;
  228.         }
  229.         if($user->getFacebook()){
  230.             $progress++;
  231.         }
  232.         if($user->getTexteDomaine()){
  233.             $progress++;
  234.         }
  235.         $progress ceil($progress 100 11);
  236.         $formLiens $this->createForm(LiensType::class, $user);
  237.         $formDetails $this->createForm(DetailsType::class, $user);
  238.         $formDomaine $this->createForm(DomaineType::class, $user);
  239.         $formPassword $this->createForm(ChangePasswordFromSettingFormType::class);
  240.         $formLiens->handleRequest($request);
  241.         if ($formLiens->isSubmitted() && $formLiens->isValid()) {
  242.             $em->flush();
  243.             return $this->render('menu/pages-profile-settings.html.twig', [
  244.                 'user' => $user,
  245.                 'progress' => $progress,
  246.                 'formLiens' => $formLiens->createView(),
  247.                 'formDetails' => $formDetails->createView(),
  248.                 'formPassword' => $formPassword->createView(),
  249.                 'formDomaine' => $formDomaine->createView(),
  250.             ]);
  251.         }
  252.         $formDetails->handleRequest($request);
  253.         if ($formDetails->isSubmitted() && $formDetails->isValid()) {
  254.             $em->flush();
  255.             return $this->render('menu/pages-profile-settings.html.twig', [
  256.                 'user' => $user,
  257.                 'progress' => $progress,
  258.                 'formLiens' => $formLiens->createView(),
  259.                 'formDetails' => $formDetails->createView(),
  260.                 'formPassword' => $formPassword->createView(),
  261.                 'formDomaine' => $formDomaine->createView(),
  262.             ]);
  263.         }
  264.         $formPassword->handleRequest($request);
  265.         if ($formPassword->isSubmitted() && $formPassword->isValid()) {
  266.            $oldPlainPassword $formPassword->get('oldPlainPassword')->getData();
  267.             if(!$userPasswordHasher->isPasswordValid($user$oldPlainPassword)){
  268.                 $this->addFlash(
  269.                    'error',
  270.                    'Mot de passe actuel incorrecte'
  271.                 );
  272.             }else{
  273.                 $newEncodedPassword $userPasswordHasher->hashPassword(
  274.                     $user,
  275.                     $formPassword->get('newPlainPassword')->getData()
  276.                 );
  277.                 $user->setPassword($newEncodedPassword);
  278.                 $em->flush();
  279.                 
  280.                 $email = (new TemplatedEmail())
  281.                 ->from(new Address('no-reply@iti-conseil.com''Gestion Administration'))
  282.                 ->to($user->getEmail())
  283.                 ->subject('Mot de passe réinitialisé')
  284.                 ->htmlTemplate('reset_password/confirmation.html.twig')
  285.                 ;
  286.                 $mailer->send($email);
  287.                 // The session is cleaned up after the password has been changed.
  288.                 $this->cleanSessionAfterReset();
  289.                 return $this->redirectToRoute('app_login');
  290.             }
  291.             
  292.         }
  293.         $formDomaine->handleRequest($request);
  294.         if ($formDomaine->isSubmitted() && $formDomaine->isValid()) {
  295.             $em->flush();
  296.             return $this->render('menu/pages-profile-settings.html.twig', [
  297.                 'user' => $user,
  298.                 'progress' => $progress,
  299.                 'formLiens' => $formLiens->createView(),
  300.                 'formDetails' => $formDetails->createView(),
  301.                 'formPassword' => $formPassword->createView(),
  302.                 'formDomaine' => $formDomaine->createView(),
  303.             ]);
  304.         }
  305.         return $this->render('menu/pages-profile-settings.html.twig', [
  306.             'user' => $user,
  307.             'progress' => $progress,
  308.             'formLiens' => $formLiens->createView(),
  309.             'formDetails' => $formDetails->createView(),
  310.             'formPassword' => $formPassword->createView(),
  311.             'formDomaine' => $formDomaine->createView(),
  312.         ]);
  313.     }
  314. }