src/Controller/ProcedureController.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\File;
  4. use App\Entity\Procedure;
  5. use App\Entity\ProcedureContactValidation;
  6. use App\Form\ProcedureType;
  7. use App\Repository\FileRepository;
  8. use App\Repository\ProcedureContactValidationRepository;
  9. use App\Repository\ProcedureRepository;
  10. use App\Repository\ProcedureStatusRepository;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. /**
  16.  * @Route("/procedure", name="procedure_")
  17.  */
  18. class ProcedureController extends AbstractController
  19. {
  20.     private YouSignController $yousign;
  21.     public function __construct(YouSignController $yousign)
  22.     {
  23.         $this->yousign $yousign;
  24.     }
  25.     /**
  26.      * @Route("/", name="list")
  27.      */
  28.     public function list(ProcedureRepository $procedureRepository): Response
  29.     {
  30.         $user $this->getUser();
  31.         if(!$user) {
  32.             return $this->redirectToRoute('app_login');
  33.         }
  34.         if (in_array('ROLE_ADMIN'$user->getRoles(), true)) {
  35.             $procedures $procedureRepository->findBy([], ['id' => 'DESC']);
  36.         } else {
  37.             $procedures $procedureRepository->findBy(['user' => $user], ['id' => 'DESC']);
  38.         }
  39.         return $this->render('procedure/list.html.twig', [
  40.             'procedures' => $procedures,
  41.         ]);
  42.     }
  43.     /**
  44.      * @Route("/create", name="create")
  45.      */
  46.     public function create(Request $requestProcedureStatusRepository $procedureStatusRepositoryProcedureRepository $procedureRepository,
  47.                            ProcedureContactValidationRepository $procedureContactValidationRepositoryFileRepository $fileRepository): Response
  48.     {
  49.         $procedure = new Procedure();
  50.         $form $this->createForm(ProcedureType::class, $procedure);
  51.         if($request->isMethod('POST')) {
  52.             $form->handleRequest($request);
  53.             if($form->isSubmitted() && $form->isValid()) {
  54.                 foreach($_FILES['procedure']['tmp_name']['files'] as $file_uploaded) {
  55.                     $mimetype mime_content_type($file_uploaded);
  56.                     if($mimetype !== 'application/pdf') {
  57.                         $this->addFlash('warning''Only PDF files are allowed.');
  58.                         return $this->redirectToRoute('procedure_create');
  59.                     }
  60.                 }
  61.                 $user $this->getUser();
  62.                 $procedure->setUser($user);
  63.                 $contacts $form->getData()->getContacts();
  64.                 $subscribers $form->getData()->getSubscribers();
  65.                 $status $procedureStatusRepository->find(1);
  66.                 $procedure->setProcedureStatus($status);
  67.                 $procedureRepository->add($proceduretrue);
  68.                 foreach ($subscribers as $subscriber) {
  69.                     $procedure->addSubscriber($subscriber);
  70.                 }
  71.                 foreach($contacts as $contact) {
  72.                     $procedureContactValidation = new ProcedureContactValidation();
  73.                     $procedureContactValidation->setContact($contact);
  74.                     $procedureContactValidation->setProcedure($procedure);
  75.                     $procedureContactValidationRepository->add($procedureContactValidationtrue);
  76.                     $procedure->addContact($contact);
  77.                 }
  78.                 foreach($_FILES['procedure']['tmp_name']['files'] as $key => $file_uploaded) {
  79.                     $size filesize($file_uploaded);
  80.                     if ($size 500000000) {
  81.                         $this->addFlash('warning''The file you try to upload exceed the maximum upload file size.');
  82.                         return $this->render('procedure/create.html.twig', [
  83.                             'controller_name' => 'ProcedureController',
  84.                             'form'            => $form->createView(),
  85.                         ]);
  86.                     }
  87.                     $file       = new File();
  88.                     $file_token $this->yousign->files($file_uploaded$_FILES['procedure']['name']['files'][$key])['id'];
  89.                     $file->setFileToken($file_token);
  90.                     $fileRepository->add($filetrue);
  91.                     $procedure->addFile($file);
  92.                 }
  93.                 $procedureRepository->add($proceduretrue);
  94.                 $this->addFlash('success''Success, procedure is created.');
  95.                 if ((int)$form->get('launch')->getData() === 1) {
  96.                     return $this->redirectToRoute('procedure_placeit', array('procedure' => $procedure->getId()));
  97.                 }
  98.                 return $this->redirectToRoute('procedure_list');
  99.             }
  100.         }
  101.         return $this->render('procedure/create.html.twig', [
  102.             'controller_name' => 'ProcedureController',
  103.             'form'            => $form->createView(),
  104.         ]);
  105.     }
  106.     /**
  107.      * @Route("/edit/{procedure}", name="edit")
  108.      */
  109.     public function edit(Request $requestProcedure $procedureFileRepository $fileRepositoryProcedureRepository $procedureRepository,
  110.                          ProcedureContactValidationRepository $procedureContactValidationRepository): Response
  111.     {
  112.         $form $this->createForm(ProcedureType::class, $procedure);
  113.         if($request->isMethod('POST')) {
  114.             $form->handleRequest($request);
  115.             if($form->isSubmitted() && $form->isValid()) {
  116.                 
  117.                 $contacts_select = [];
  118.                 
  119.                 foreach($form->getData()->getContacts() as $contact) {
  120.                     $contacts_select[] = $contact->getId();
  121.                     $if_link_exist $procedureContactValidationRepository->findBy(['contact' => $contact]);
  122.                     if(!$if_link_exist) {
  123.                         $procedure->addContact($contact);
  124.                     }
  125.                 }
  126.                 foreach($procedure->getContacts() as $contact) {
  127.                     
  128.                     if(!in_array($contact->getId(), $contacts_selecttrue)) {
  129.                         $procedure->removeContact($contact);
  130.                     }
  131.                 }
  132.                 foreach($procedure->getFiles() as $file) {
  133.                     $this->yousign->delete_file($file->getFileToken());
  134.                     $procedure->removeFile($file);
  135.                 } 
  136.                 foreach($_FILES['procedure']['tmp_name']['files'] as $key => $file_uploaded) {
  137.                     $file       = new File();
  138.                     $file_token $this->yousign->files($file_uploaded$_FILES['procedure']['tmp_name']['files'][$key])['id'];
  139.                     $file->setFileToken($file_token);
  140.                     $fileRepository->add($filetrue);
  141.                     
  142.                     $procedure->addFile($file);
  143.                 }
  144.                 $procedureRepository->add($proceduretrue);
  145.                 return $this->redirectToRoute('procedure_list');
  146.             }
  147.         }
  148.         
  149.         return $this->render('procedure/edit.html.twig', [
  150.             'controller_name' => 'ProcedureController',
  151.             'form'            => $form->createView(),
  152.         ]);
  153.     }
  154.     /**
  155.      * @Route("/{procedure}", name="delete", methods={"DELETE"})
  156.      */
  157.     public function delete(Request $requestProcedure $procedureFileRepository $fileRepositoryProcedureRepository $procedureRepository): Response
  158.     {
  159.         if ($this->isCsrfTokenValid('delete'.$procedure->getId(), $request->request->get('_token'))) {
  160.             foreach ($procedure->getFiles() as $file) {
  161.                 $fileYousign $this->yousign->get_file($file->getFileToken());
  162.                 if ($fileYousign) {
  163.                     $this->yousign->delete_file($file->getFileToken());
  164.                 }
  165.                 $procedure->removeFile($file);
  166.                 $fileRepository->remove($filetrue);
  167.             }
  168.             foreach ($procedure->getProcedureContactValidations() as $procedureContactValidation) {
  169.                 $procedure->removeProcedureContactValidation($procedureContactValidation);
  170.             }
  171.             foreach ($procedure->getContacts() as $contact) {
  172.                 $procedure->removeContact($contact);
  173.             }
  174.             $procedureRepository->remove($proceduretrue);
  175.         }
  176.         return $this->redirectToRoute('procedure_list');
  177.     }
  178.     /**
  179.      * @Route("/launch/{procedure}", name="launch")
  180.      */
  181.     public function launch(Request $requestProcedure $procedureProcedureStatusRepository $procedureStatusRepositoryProcedureRepository $procedureRepository): Response
  182.     {
  183.         if($request->isMethod('POST')) {
  184.             $json_tab json_decode($request->request->all()['form']['position']);
  185.             $json_tab_subscriber json_decode($request->request->all()['form']['subscribers']);
  186.             $token_ps base64_encode('webhook_procedure_success.'.$procedure->getId());
  187.             $token_ms base64_encode('webhook_member_success.'.$procedure->getId());
  188.             $response $this->yousign->procedure($procedure$json_tab$token_ps$token_ms$json_tab_subscriber);
  189.             $status $procedureStatusRepository->find(2);
  190.             $procedure->setProcedureStatus($status);
  191.             $procedure->setProcedureToken($response['id']);
  192.             $procedureRepository->add($proceduretrue);
  193.             $this->addFlash('success''Your procedure is launched');
  194.             return $this->redirectToRoute('procedure_list');
  195.         }
  196.         return new Response(null404);
  197.     }
  198.     /**
  199.      * @Route("/visualize/{procedure}", name="visualize")
  200.      */
  201.     public function visualize(Procedure $procedure): Response
  202.     {
  203.         $files $procedure->getFiles();
  204.         foreach($files as $file) {
  205.             $aFiles[] = stripslashes ($this->yousign->get_file($file->getFileToken()));
  206.         }
  207.         return $this->render('procedure/visualize.html.twig', [
  208.             'files' => $aFiles,
  209.         ]);
  210.     }
  211.     /**
  212.      * @Route("/placeit/{procedure}", name="placeit")
  213.      */
  214.     public function placeit(Procedure $procedure): Response
  215.     {
  216.         $contacts $procedure->getContacts();
  217.         $subscribers $procedure->getSubscribers();
  218.         foreach($procedure->getFiles() as $key_file => $file) {
  219.             $imagick = new \Imagick();
  220.             $imagick->setResolution(300300);
  221.             $imagick->setBackgroundColor('#ffffff');
  222.             $imagick->readImageBlob(base64_decode($this->yousign->get_file($file->getFileToken())));
  223.             
  224.             $imagick->setFormat('png32');
  225.             $num_pages $imagick->getNumberImages();
  226.             for($i 0;$i $num_pages$i++) {
  227.                 $imagick->setIteratorIndex($i);
  228.                 $files[$key_file][$i]['image'] = base64_encode($imagick);
  229.                 $d $imagick->getImageGeometry();
  230.                 $w $d['width'];
  231.                 $h $d['height'];
  232.                 $files[$key_file][$i]['w'] = $w;
  233.                 $files[$key_file][$i]['h'] = $h;
  234.             }
  235.             $imagick->destroy();
  236.             $files_ids[] = $file->getFileToken();
  237.         }
  238.         return $this->render('procedure/placeit.html.twig', [
  239.             'files'     => $files,
  240.             'files_ids' => $files_ids,
  241.             'contacts'  => $contacts,
  242.             'subscribers' => $subscribers
  243.         ]);
  244.     }
  245. }