src/Controller/DamFileController.php line 58

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\DamFile;
  4. use App\Entity\Product;
  5. use App\Repository\DamCategoryRepository;
  6. use App\Repository\DamFileRepository;
  7. use App\Repository\DamGroupRepository;
  8. use App\Repository\ProductLangRepository;
  9. use App\Repository\ProductRepository;
  10. use App\Services\ZipService;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  12. use Symfony\Component\Security\Core\Security;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\String\Slugger\SluggerInterface;
  19. use Symfony\Contracts\Translation\TranslatorInterface;
  20. #[Route('/dam/file'name'app_dam_file')]
  21. #[IsGranted('ROLE_CONTENT_MANAGER')]
  22. class DamFileController extends AbstractController
  23. {
  24.     private array $breadcrumb = [];
  25.     private array $twigData = [];
  26.     private TranslatorInterface $translator;
  27.     private Security $security;
  28.     public function __construct(Security $securityTranslatorInterface $translator)
  29.     {
  30.         $this->twigData = [];
  31.         $this->translator $translator;
  32.         $this->security $security;
  33.         $this->twigData = [
  34.             'user' => $security->getUser(),
  35.         ];
  36.     }
  37.     #[Route('/'name'_index')]
  38.     public function index(DamFileRepository $damFileRepository): Response
  39.     {
  40.         $this->breadcrumb[0]['name'] = $this->translator->trans('page.dam.Manage');
  41.         $this->breadcrumb[0]['link'] = $this->generateUrl('app_dam_manage');
  42.         $this->breadcrumb[0]['last'] = false;
  43.         $this->breadcrumb[1]['name'] = $this->translator->trans('page.damFile.Files');
  44.         $this->breadcrumb[1]['last'] = true;
  45.         $this->twigData['breadcrumb'] = $this->breadcrumb;
  46.         $this->twigData['controller_name'] = "dam";
  47.         $files $damFileRepository->findAll();
  48.         $this->twigData['files'] = $files;
  49.         return $this->render('dam/file/index.html.twig'$this->twigData);
  50.     }
  51.     #[Route('/new'name'_new'methods: ['GET''POST'])]
  52.     public function new(SluggerInterface $sluggerRequest $requestDamFileRepository $damFileRepositoryDamGroupRepository $damGroupRepositoryDamCategoryRepository $damCategoryRepository): Response
  53.     {
  54.         $this->breadcrumb[0]['name'] = $this->translator->trans('page.dam.Manage');
  55.         $this->breadcrumb[0]['link'] = $this->generateUrl('app_dam_index');
  56.         $this->breadcrumb[0]['last'] = false;
  57.         $this->breadcrumb[1]['name'] = $this->translator->trans('page.damFile.Files');
  58.         $this->breadcrumb[1]['link'] = $this->generateUrl('app_dam_file_index');
  59.         $this->breadcrumb[1]['last'] = false;
  60.         $this->breadcrumb[2]['name'] = $this->translator->trans('page.damFile.new');
  61.         $this->breadcrumb[2]['last'] = true;
  62.         $this->twigData['breadcrumb'] = $this->breadcrumb;
  63.         $this->twigData['controller_name'] = "dam";
  64.         $categories $damCategoryRepository->findAll();
  65.         $categoriesSelect = [];
  66.         foreach ($categories as $category) {
  67.             $groups $damGroupRepository->findBy(['damCategory' => $category]);
  68.             if(count($groups) > 0) {
  69.                 $categoriesSelect[$category->getId()]['categories']['name'] = $category->getName();
  70.                 $categoriesSelect[$category->getId()]['categories']['id'] = $category->getId();
  71.                 $categoriesSelect[$category->getId()]['groups'] = [];
  72.                 foreach ($groups as $group) {
  73.                     $categoriesSelect[$category->getId()]['groups'][$group->getId()]['id'] = $group->getId();
  74.                     $categoriesSelect[$category->getId()]['groups'][$group->getId()]['name'] = $group->getName();
  75.                 }
  76.             }
  77.         }
  78.         $this->twigData['categoriesSelect'] = $categoriesSelect;
  79.         $this->twigData['categories'] = $categories;
  80.         $submit $request->get("submit");
  81.         if ($submit == 1) {
  82.             $file $request->files->get('file');
  83.             if ($file) {
  84.                 $originalFilename pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  85.                 // this is needed to safely include the file name as part of the URL
  86.                 $safeFilename $slugger->slug($originalFilename);
  87.                 $newFilename $safeFilename.'-'.uniqid().'_.'.$file->guessExtension();
  88.                 
  89.                 // Move the file to the directory where product file are stored
  90.                 try {
  91.                     $file->move(
  92.                         $this->getParameter('dam_file_directory'),
  93.                         $newFilename
  94.                     );
  95.                     $fileNameDisplay $request->request->get('name');
  96.                     $fileFormDatas $request->request->all();
  97.                     $damFile = new DamFile();
  98.                     $damFile->setName($newFilename);
  99.                     $damFile->setDisplayName($fileNameDisplay);
  100.                     $damFile->setDateAdd(new \DateTime());
  101.                     $damFile->setDateUpd(new \DateTime());
  102.                     $damGroupIds $fileFormDatas['damGroups'];
  103.                     foreach ($damGroupIds as $key => $damGroupId) {
  104.                         $damGroup $damGroupRepository->find($damGroupId);
  105.                         $damFile->addDamGroup($damGroup);
  106.                     }
  107.                     $damFileRepository->add($damFiletrue);
  108.                 } catch (FileException $e) {
  109.                     return new Response($eResponse::HTTP_INTERNAL_SERVER_ERROR);
  110.                 }
  111.             }
  112.             return $this->redirectToRoute('app_dam_file_index', [], Response::HTTP_SEE_OTHER);
  113.         }
  114.         return $this->render('dam/file/new.html.twig'$this->twigData);
  115.     }
  116.     #[Route('/new-multiple'name'_new_multiple'methods: ['GET''POST'])]
  117.     public function newMultiple(SluggerInterface $sluggerDamCategoryRepository $damCategoryRepositoryDamGroupRepository $damGroupRepositoryRequest $requestDamFileRepository $damFileRepository): Response
  118.     {
  119.         $this->breadcrumb[0]['name'] = $this->translator->trans('page.dam.Manage');
  120.         $this->breadcrumb[0]['link'] = $this->generateUrl('app_dam_index');
  121.         $this->breadcrumb[0]['last'] = false;
  122.         $this->breadcrumb[1]['name'] = $this->translator->trans('page.damFile.Files');
  123.         $this->breadcrumb[1]['link'] = $this->generateUrl('app_dam_file_index');
  124.         $this->breadcrumb[1]['last'] = false;
  125.         $this->breadcrumb[2]['name'] = $this->translator->trans('page.damFile.new multiple');
  126.         $this->breadcrumb[2]['last'] = true;
  127.         $this->twigData['breadcrumb'] = $this->breadcrumb;
  128.         $this->twigData['controller_name'] = "dam";
  129.         $categories $damCategoryRepository->findAll();
  130.         $categoriesSelect = [];
  131.         foreach ($categories as $category) {
  132.             $groups $damGroupRepository->findBy(['damCategory' => $category]);
  133.             if(count($groups) > 0) {
  134.                 $categoriesSelect[$category->getId()]['categories']['name'] = $category->getName();
  135.                 $categoriesSelect[$category->getId()]['categories']['id'] = $category->getId();
  136.                 $categoriesSelect[$category->getId()]['groups'] = [];
  137.                 foreach ($groups as $group) {
  138.                     $categoriesSelect[$category->getId()]['groups'][$group->getId()]['id'] = $group->getId();
  139.                     $categoriesSelect[$category->getId()]['groups'][$group->getId()]['name'] = $group->getName();
  140.                 }
  141.             }
  142.         }
  143.         $this->twigData['categoriesSelect'] = $categoriesSelect;
  144.         $this->twigData['categories'] = $categories;
  145.         $submit $request->get("submit");
  146.         if ($submit == 1) {
  147.             $files $request->files->all();
  148.             $files $files['files'];
  149.             foreach($files as $keyFile => $file) {
  150.                 $clientFileName $file->getClientOriginalName();
  151.                 $originalFilename pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  152.                 // this is needed to safely include the file name as part of the URL
  153.                 $safeFilename $slugger->slug($originalFilename);
  154.                 $newFilename $safeFilename.'-'.uniqid().'_.'.$file->guessExtension();
  155.                 
  156.                 // Move the file to the directory where product file are stored
  157.                 try {
  158.                     $file->move(
  159.                         $this->getParameter('dam_file_directory'),
  160.                         $newFilename
  161.                     );
  162.                     $fileNameDisplay $request->request->get('name');
  163.                     $fileFormDatas $request->request->all();
  164.                     $damFile = new DamFile();
  165.                     $damFile->setName($newFilename);
  166.                     $damFile->setDisplayName($clientFileName);
  167.                     $damFile->setDateAdd(new \DateTime());
  168.                     $damFile->setDateUpd(new \DateTime());
  169.                     $damGroupIds $fileFormDatas['damGroups'];
  170.                     foreach ($damGroupIds as $key => $damGroupId) {
  171.                         $damGroup $damGroupRepository->find($damGroupId);
  172.                         $damFile->addDamGroup($damGroup);
  173.                     }
  174.                     $damFileRepository->add($damFiletrue);
  175.                 } catch (FileException $e) {
  176.                     return new Response($eResponse::HTTP_INTERNAL_SERVER_ERROR);
  177.                 }
  178.             }
  179.         }
  180.         return $this->render('dam/file/new-multiple.html.twig'$this->twigData);
  181.     }
  182.     #[Route('/{id}/edit'name'_edit'methods: ['GET''POST'])]
  183.     public function edit(DamFile $damFileRequest $requestSluggerInterface $sluggerDamGroupRepository $damGroupRepositoryDamFileRepository $damFileRepositoryDamCategoryRepository $damCategoryRepository): Response
  184.     {
  185.         $this->breadcrumb[0]['name'] = $this->translator->trans('page.dam.Manage');
  186.         $this->breadcrumb[0]['link'] = $this->generateUrl('app_dam_manage');
  187.         $this->breadcrumb[0]['last'] = false;
  188.         $this->breadcrumb[1]['name'] = $this->translator->trans('page.damFile.Files');
  189.         $this->breadcrumb[1]['link'] = $this->generateUrl('app_dam_file_index');
  190.         $this->breadcrumb[1]['last'] = false;
  191.         $this->breadcrumb[2]['name'] = $this->translator->trans('page.damFile.edit');
  192.         $this->breadcrumb[2]['last'] = true;
  193.         $this->twigData['breadcrumb'] = $this->breadcrumb;
  194.         $this->twigData['controller_name'] = "dam";
  195.         $categories $damCategoryRepository->findAll();
  196.         $this->twigData['categories'] = $categories;
  197.         $this->twigData['file'] = $damFile;
  198.         $categories $damCategoryRepository->findAll();
  199.         $categoriesSelect = [];
  200.         foreach ($categories as $category) {
  201.             $groups $damGroupRepository->findBy(['damCategory' => $category]);
  202.             if(count($groups) > 0) {
  203.                 $categoriesSelect[$category->getId()]['categories']['name'] = $category->getName();
  204.                 $categoriesSelect[$category->getId()]['categories']['id'] = $category->getId();
  205.                 $categoriesSelect[$category->getId()]['groups'] = [];
  206.                 foreach ($groups as $group) {
  207.                     $categoriesSelect[$category->getId()]['groups'][$group->getId()]['id'] = $group->getId();
  208.                     $categoriesSelect[$category->getId()]['groups'][$group->getId()]['name'] = $group->getName();
  209.                     //check if group is selected among the groups of the file
  210.                     if($damFile->getDamGroups()->contains($group)) {
  211.                         $categoriesSelect[$category->getId()]['groups'][$group->getId()]['selected'] = true;
  212.                     } else {
  213.                         $categoriesSelect[$category->getId()]['groups'][$group->getId()]['selected'] = false;
  214.                     }
  215.                 }
  216.             }
  217.         }
  218.         $this->twigData['categoriesSelect'] = $categoriesSelect;
  219.         $submit $request->get("submit");
  220.         
  221.         if ($submit == 1) {
  222.             $file $request->files->get('file');
  223.             $fileNameDisplay $request->request->get('name');
  224.             if ($file) {
  225.                 $originalFilename pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  226.                 // this is needed to safely include the file name as part of the URL
  227.                 $safeFilename $slugger->slug($originalFilename);
  228.                 $newFilename $safeFilename.'-'.uniqid().'_.'.$file->guessExtension();
  229.                             
  230.                 // Move the file to the directory where product file are stored
  231.                 try {
  232.                     $fileName $damFile->getName();
  233.                     $filePath $this->getParameter('dam_file_directory') . '/' $fileName;
  234.                     try {
  235.                         unlink($filePath);
  236.                     } catch (\Throwable $th) {
  237.                         dd($th);
  238.                     }
  239.                     $file->move(
  240.                         $this->getParameter('dam_file_directory'),
  241.                         $newFilename
  242.                     );
  243.                     $damFile->setName($newFilename);
  244.                     $damFile->setDisplayName($fileNameDisplay);
  245.                 } catch (FileException $e) {
  246.                     return new Response($eResponse::HTTP_INTERNAL_SERVER_ERROR);
  247.                 }
  248.             }
  249.             
  250.             $fileFormDatas $request->request->all();
  251.             
  252.             $damFile->setDateUpd(new \DateTime());
  253.             $damFile->getDamGroups()->clear();
  254.             $damGroupIds $fileFormDatas['damGroups'];
  255.             foreach ($damGroupIds as $key => $damGroupId) {
  256.                 $damGroup $damGroupRepository->find($damGroupId);
  257.                 $damFile->addDamGroup($damGroup);
  258.             }
  259.             $damFileRepository->add($damFiletrue);
  260.             return $this->redirectToRoute('app_dam_file_index', [], Response::HTTP_SEE_OTHER);
  261.         }
  262.         return $this->render('dam/file/edit.html.twig'$this->twigData);
  263.     }
  264.     #[Route('/{id}'name'_delete'methods: ['POST'])]
  265.     public function delete(DamFile $damFileDamFileRepository $damFileRepositoryRequest $request): Response
  266.     {
  267.         if ($this->isCsrfTokenValid('delete'.$damFile->getId(), $request->request->get('_token'))) {
  268.             $fileName $damFile->getName();
  269.             $damFileRepository->remove($damFiletrue);
  270.             $filePath $this->getParameter('dam_file_directory') . '/' $fileName;
  271.             try {
  272.                 unlink($filePath);
  273.             } catch (\Throwable $th) {
  274.                 dd($th);
  275.             }
  276.         }
  277.         return $this->redirectToRoute('app_dam_file_index', [], Response::HTTP_SEE_OTHER);
  278.     }
  279. }