src/Controller/Backend/Media/DocumentController.php line 138

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Backend\Media;
  3. use App\Entity\Media\Document;
  4. use App\Entity\Media\Import;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use App\Form\Media\DocumentType;
  10. use App\Form\Media\DocumentsType;
  11. use App\Entity\Site\Site;
  12. use App\Entity\Media\Conversion;
  13. use App\Entity\Federation\Race;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. use App\Service\Aws\AwsManager;
  16. use App\Service\Media\DocumentCloneInformation;
  17. use App\Service\Media\DocumentIptcInformation;
  18. use App\Service\Media\GenerateCustomizedFile;
  19. use App\Service\Export\ExportManager;
  20. /**
  21.  * Document controller.
  22.  *
  23.  */
  24. class DocumentController extends AbstractController
  25. {
  26.     public function deleteAction(Request $requestDocument $document$redirect nullTranslatorInterface $translator)
  27.     {
  28.         $em $this->getDoctrine()->getManager();
  29.         $form $this->createDeleteForm($document$redirect);
  30.         $form->handleRequest($request);
  31.         if($request->isXmlHttpRequest()) {
  32.             if($request->isMethod('DELETE'))
  33.             {
  34.                 if ($form->isValid())
  35.                 {
  36.                     $em->remove($document);
  37.                     $em->flush();
  38.                 }
  39.             }
  40.             $form_view $this->renderView('Backend/Views/Media/Document/delete.html.twig', array(
  41.                 'form' => $form->createView(),
  42.                 'redirect' => urldecode($redirect)
  43.             ));
  44.             $response['view'] = $this->renderView('Backend/Global/Partials/modal.html.twig', array(
  45.                 'modal_title' => $translator->trans('document.content.document_remove'),
  46.                 'modal_content' => $form_view,
  47.             ));
  48.             return new JsonResponse($response200);
  49.         }
  50.     }
  51.     
  52.     public function depositDeleteAction(Request $requestRace $racestring $documentType$key nullAwsManager $aws)
  53.     {
  54.         $key base64_decode($key);
  55.         $bucket $race->getDirectoryName();
  56.         $aws->deleteObject($bucket$key);
  57.         $directoryName explode('/'$key);
  58.         array_pop($directoryName);
  59.         $directoryName implode('/'$directoryName).'/';
  60.                        
  61.         return $this->redirectToRoute('race_deposit', array('id' => $race->getId(), 'directoryName' => base64_encode($directoryName)));
  62.     }
  63.     /**
  64.      * Creates a form to delete a Document entity.
  65.      *
  66.      * @param Document $document The Document entity
  67.      *
  68.      * @return \Symfony\Component\Form\Form The form
  69.      */
  70.     private function createDeleteForm(Document $document)
  71.     {
  72.         return $this->createFormBuilder()
  73.             ->setAction($this->generateUrl('ajax_document_delete', array('id' => $document->getId())))
  74.             ->setMethod('DELETE')
  75.             ->getForm()
  76.         ;
  77.     }
  78.     
  79.     private function createMultipleDeleteForm($documents)
  80.     {
  81.         return $this->createFormBuilder()
  82.         ->setAction($this->generateUrl('ajax_multiple_document_delete', ['documents' => $documents]))
  83.         ->setMethod('DELETE')
  84.         ->getForm()
  85.         ;
  86.     }
  87.     
  88.     public function multipleDeleteAction(Request $request$documents null$redirect nullTranslatorInterface $translator)
  89.     {
  90.         $em $this->getDoctrine()->getManager();
  91.         
  92.         $form $this->createMultipleDeleteForm($documents);
  93.         $form->handleRequest($request);
  94.         
  95.         if($request->isXmlHttpRequest()) {
  96.             
  97.             if($request->isMethod('DELETE'))
  98.             {
  99.                 if ($form->isValid())
  100.                 {
  101.                     $documents explode('-'$documents);
  102.                     if(is_array($documents))
  103.                     {
  104.                         $datas $em->getRepository(Document::class)->findByMultipleIds($documents);
  105.                         if(!empty($datas))
  106.                             foreach($datas as $value)
  107.                                 $em->remove($value);
  108.                     }
  109.                     
  110.                     $em->flush();
  111.                 }
  112.             }
  113.             
  114.             $form_view $this->renderView('Backend/Views/Media/Document/delete.html.twig', array(
  115.                 'form' => $form->createView(),
  116.                 'redirect' => urldecode($redirect)
  117.             ));
  118.             
  119.             $response['view'] = $this->renderView('Backend/Global/Partials/modal.html.twig', array(
  120.                 'modal_title' => $translator->trans('document.content.document_remove'),
  121.                 'modal_content' => $form_view,
  122.             ));
  123.             
  124.             return new JsonResponse($response200);
  125.         }
  126.     }
  127.     
  128.     public function multipleUpdateAction(Request $request$documents null$redirect nullTranslatorInterface $translatorDocumentCloneInformation $documentCloneInformation)
  129.     {
  130.         $code 200;
  131.         $document = new Document();
  132.         $em $this->getDoctrine()->getManager();
  133.         $datas $em->getRepository(Document::class)->findByMultipleIds(explode('-'$documents));
  134.         
  135.         if(!empty($datas))
  136.         {
  137.             $form $this->createForm(DocumentsType::class, $document, array(
  138.                 'action' => $this->generateUrl('ajax_multiple_document_update', ['documents' => $documents'redirect' => $redirect]),
  139.                 'race' => $datas[0]->getRace(),
  140.                 'documentType' => $datas[0]->getDocumentType(),
  141.                 'validation_groups' => ['DocumentTypeMultiple']
  142.             ));
  143.             
  144.             $form->handleRequest($request);
  145.             
  146.             if($request->isXmlHttpRequest()) {
  147.                 
  148.                 if($request->isMethod('POST'))
  149.                 {
  150.                     if ($form->isValid())
  151.                     {
  152.                         foreach($datas as $value)
  153.                         {
  154.                             $documentCloneInformation->clone($document$value);
  155.                         }
  156.                         
  157.                         $em->flush();
  158.                         
  159.                     } else {
  160.                         
  161.                         $code 500;
  162.                     }
  163.                 }
  164.                 
  165.                 $form_view $this->renderView('Backend/Views/Media/Document/updateMultiple.html.twig', array(
  166.                     'form' => $form->createView(),
  167.                     'redirect' => urldecode($redirect)
  168.                 ));
  169.                 
  170.                 $response['view'] = $this->renderView('Backend/Global/Partials/modal.html.twig', array(
  171.                     'modal_title' => $translator->trans('document.content.document_update'),
  172.                     'modal_content' => $form_view,
  173.                 ));
  174.                 
  175.                 if($code == 500)
  176.                     $response['view'] = $form_view;
  177.                 
  178.                 return new JsonResponse($response$code);
  179.             }
  180.         }        
  181.     }
  182.     
  183.     public function regenerateLowQualityPicturesAction(Request $requestRace $race\App\Entity\Media\DocumentType $documentTypeGenerateCustomizedFile $fileManager)
  184.     {
  185.         $cpt $fileManager->regenerateLowQualityPictures();
  186.         
  187.         $request->getSession()->getFlashBag()->add('success'$cpt.' Documents créé(s)');
  188.         return $this->redirectToRoute('race_documentType', array('id' => $race->getId(), 'documentType' => $documentType->getId()));
  189.     }
  190.     public function exportAction(Request $requeststring $format\App\Entity\Media\DocumentType $documentTypeRace $raceExportManager $exportManager)
  191.     {
  192.         $em $this->getDoctrine()->getManager();
  193.         $orderby 'id';
  194.         $sort 'DESC';
  195.         if(!empty($this->get('session')->get('documentFilterRequest')))
  196.         {
  197.             $datas $this->get('session')->get('documentFilterRequest')->get('document_filter');
  198.             //Get Query Result
  199.             $documents $this->getDoctrine()
  200.                 ->getManager()
  201.                 ->getRepository(Document::class)
  202.                 ->getAllDocuments(nullnullfalse$orderby$sort$documentType$datas['title'], $datas['categories'], $race$datas['classes'], $datas['boats'], $datas['teams'], $datas['skippers'], $datas['status'], $datas['import']);
  203.         } else {
  204.             //Get All Result
  205.             $documents $this->getDoctrine()
  206.                 ->getManager()
  207.                 ->getRepository(Document::class)
  208.                 ->getAllDocuments(nullnullfalse$orderby$sort$documentTypenullnull$race);
  209.         }
  210.         if(!empty($documents))
  211.         {
  212.             $exports = array();
  213.             foreach($documents as $document)
  214.             {
  215.                 $tmp $boats $classes $skippers $teams $categories $tags = array();
  216.                 foreach($document->getCategories() as $category)
  217.                     array_push($categories$category->getName());
  218.                 foreach($document->getBoats() as $boat)
  219.                     array_push($boats$boat->getName());
  220.                 foreach($document->getSkippers() as $skipper)
  221.                     array_push($skippers$skipper->getName());
  222.                 foreach($document->getClasses() as $class)
  223.                     array_push($classes$class->getName());
  224.                 foreach($document->getTeams() as $team)
  225.                     array_push($teams$team->getName());
  226.                 foreach($document->getTags() as $tag)
  227.                     array_push($tags$tag->getName());
  228.                 $tmp = array(
  229.                     'race' => $document->getRace()->getName(),
  230.                     'documentType' => $document->getDocumentType()->getName(),
  231.                     'title' => $document->getTitle(),
  232.                     'legend' => $document->getLegend(),
  233.                     'copyright' => $document->getCopyright(),
  234.                     'author' => $document->getAuthor(),
  235.                     'localization' => $document->getLocalization(),
  236.                     'description' => $document->getDescription(),
  237.                     'notification' => $document->isNotify(),
  238.                     'date' => $document->getDate()->format('d/m/Y H:i:s'),
  239.                     'directory' => $document->getDirectoryName(),
  240.                     'categories' => implode(' / '$categories),
  241.                     'classes' => implode(' / '$classes),
  242.                     'boats' => implode(' / '$boats),
  243.                     'skippers' => implode(' / '$skippers),
  244.                     'teams' => implode(' / '$teams),
  245.                     'tags' => implode(' / '$tags),
  246.                     'status' => $document->getStatus(),
  247.                     'createdDate' => $document->getCreatedDate()->format('d/m/Y H:i:s')
  248.                 );
  249.                 array_push($exports$tmp);
  250.             }
  251.             $datas $exportManager->createCSVexport($exports);
  252.             $response = new Response($datas);
  253.             $response->headers->set('Content-Type''text/csv');
  254.             $response->headers->set('Content-Disposition''attachment; filename="export_documents_'.date('YmdHis').'.csv"');
  255.             return $response;
  256.         }
  257.         return new Response();
  258.     }
  259.     public function progressImportAction(Request $requestImport $import): JsonResponse
  260.     {
  261.         return new JsonResponse($import->data(), Response::HTTP_OK);
  262.     }
  263. }