src/Controller/Admin/AdminAutopromoController.php line 136

Open in your IDE?
  1. <?php
  2. namespace Acme\SudcmsBundle\Controller\Admin;
  3. use Acme\SudcmsBundle\Entity\Autopromo;
  4. use Acme\SudcmsBundle\Form\AutopromoType;
  5. use Acme\SudcmsBundle\Repository\AutopromoRepository;
  6. use Acme\SudcmsBundle\Repository\ModuleRepository;
  7. use Acme\SudcmsBundle\Repository\OptionsRepository;
  8. use Acme\SudcmsBundle\Service\FileService;
  9. use Acme\SudcmsBundle\Service\FlashNotificationAjax;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\Filesystem\Filesystem;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Session\Session;
  16. use Symfony\Component\HttpKernel\KernelInterface;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\String\Slugger\SluggerInterface;
  19. use Twig\Environment;
  20. #[Route(path'/admin/autopromo')]
  21. class AdminAutopromoController extends AbstractController
  22. {
  23.     private $entityManager;
  24.     private $fileService;
  25.     private $autorizedMedias = ['jpg''jpeg''png'];
  26.     private $autorizedVideos = ['mp4'];
  27.     private $session;
  28.     private $moduleName;
  29.     private $twig null;
  30.     public function __construct(EntityManagerInterface $entityManagerKernelInterface $appKernelSluggerInterface $sluggerFilesystem $filesystemFileService $fileServiceModuleRepository $repoModOptionsRepository $repoOptEnvironment $twig)
  31.     {
  32.         $this->entityManager $entityManager;
  33.         $this->fileService $fileService;
  34.         $this->slugger $slugger;
  35.         $this->filesystem $filesystem;
  36.         $this->postMaxSize substr(ini_get('post_max_size'), 0, -1);
  37.         $this->uploadMaxFilesize substr(ini_get('upload_max_filesize'), 0, -1);
  38.         $this->session = new Session();
  39.         $this->twig $twig;
  40.         $this->moduleName "admin_autopromo";
  41.         $optionsModule $repoOpt->findBy(['option_name' => $this->moduleName], ['option_order' => 'ASC']);
  42.         $this->twig->addGlobal("optionsModule"$optionsModule);
  43.         //Création des répertoires lors de la première installation
  44.         $directory[] = $appKernel->getProjectDir() . '/public/medias_front/autopromo';
  45.         foreach ($directory as $dir) {
  46.             if (!file_exists($dir)) {
  47.                 mkdir($dir755);
  48.             }
  49.         }
  50.     }
  51.     #[Route(path'/'name'admin_autopromo')]
  52.     public function listAutopromo(Request $requestAutopromoRepository $autoPromoRepository)
  53.     {
  54.         if (isset($_FILES['video_fichier']) && !empty($_FILES['video_fichier'])) {
  55.             $file_name $_FILES['video_fichier']['name'];
  56.             $file_extension strrchr($file_name".");
  57.             $file_tmp_name $_FILES['video_fichier']['tmp_name'];
  58.             $filedest $this->getParameter("upload_directory_" $this->session->get('admin_site_uid')) . '/video_accueil/';
  59.             $extension_autorisees = array(
  60.                 => '.mp4',
  61.                 => '.MP4'
  62.             );
  63.             $message $file_extension "<br>";
  64.             $message $file_extension "<br>";
  65.             $message $file_extension "<br>";
  66.             if (in_array($file_extension$extension_autorisees)) {
  67. //                var_dump($_FILES['video_fichier']) ;
  68.                 $neoFile_name "home-loop.mp4";
  69.                 if (move_uploaded_file($file_tmp_name$filedest $neoFile_name)) {
  70. //                    echo "OK";
  71.                     $message .= "La vidéo à bien été enregistrée";
  72.                     $this->addFlash('success'$message);
  73.                 } else {
  74. //                    echo'Erreur';
  75. //                    $message .= "Erreur";
  76.                     $message .= "Erreur";
  77.                     if ($_FILES['video_fichier']['error'] == 1) {
  78.                         $message .= " : Poids du fichier supérieur à la limite autorisée";
  79.                         $message .= "<br>";
  80.                         $message .= "upload_max_filesize : " ini_get('upload_max_filesize');
  81.                         $message .= "<br>";
  82.                     }
  83.                     $this->addFlash('danger'$message);
  84.                 }
  85.             } else {
  86.                 $message .= "Erreur : Le format doit-être de type '.mp4'";
  87. //                echo'Uniquement .mp4, .MP4';
  88.                 $this->addFlash('danger'$message);
  89.             }
  90.         }
  91.         $verifVideo $this->verifVideo();
  92.         return $this->render('admin/admin_autopromo/index.html.twig', [
  93.             'autopromoList' => $autoPromoRepository->findBy(['siteUid' => $this->session->get('admin_site_uid'), 'siteLang' => $this->session->get('admin_site_lang')], array('autopromoOrder' => 'ASC')),
  94.             'autorizedVideos' => $this->autorizedVideos,
  95.             'postMaxSize' => $this->postMaxSize,
  96.             'uploadMaxFilesize' => $this->uploadMaxFilesize,
  97.             'verifVideo' => $verifVideo,
  98.         ]);
  99.     }
  100.     public function verifVideo()
  101.     {
  102.         $exist false;
  103.         $directory[] = $this->getParameter("upload_directory_" $this->session->get('admin_site_uid')) . '/video_accueil';
  104.         foreach ($directory as $dir) {
  105.             if (!file_exists($dir)) {
  106.                 mkdir($dir755);
  107.             }
  108.         }
  109.         $allFiles scandir($this->getParameter("upload_directory_" $this->session->get('admin_site_uid')) . '/video_accueil');
  110.         $files array_diff($allFiles, array('.''..'));
  111.         foreach ($files as $file) {
  112.             if ($file == 'home-loop.mp4') {
  113.                 $exist true;
  114.             }
  115.         }
  116.         return $exist;
  117.     }
  118.     #[Route(path'/edit/{id}'name'admin_autopromo_edit'defaults: ['id' => 0])]
  119.     public function editAutopromo($idAutopromoRepository $repoRequest $request)
  120.     {
  121.         $promo = new AutoPromo;
  122.         if ($id 0)
  123.             $promo $repo->find($id);
  124.         $form $this->createForm(AutoPromoType::class, $promo);
  125.         $oldFileName $promo->getImage();
  126.         $form->handleRequest($request);
  127.         if ($form->isSubmitted() && $form->isValid()) {
  128.             if ($id == 0) {
  129.                 $promo->setCreationDatetime(new \DateTime());
  130.                 $promo->setSiteUid($this->session->get('admin_site_uid'));
  131.                 $promo->setSiteLang($this->session->get('admin_site_lang'));
  132.             }
  133.             // upload du fichier
  134.             if ($form->get("image")->getData() !== null) {
  135.                 $upload $this->fileService->startUpload(
  136.                     [
  137.                         "fileData" => $form->get("image")->getData(),
  138.                         "oldFileName" => $oldFileName,
  139.                         "fileDestination" => $this->getParameter("upload_autopromo_" $this->session->get('admin_site_uid')),
  140.                         "autorizedExtensions" => $this->autorizedMedias,
  141.                         "createWebp" => true
  142.                     ]);
  143.                 // upload OK
  144.                 if (isset($upload['state']) && $upload['state'] && isset($upload['filename']) && is_string($upload['filename'])) {
  145.                     $promo->setImage($upload['filename']);
  146.                 } // upload KO avec message perso
  147.                 elseif (isset($upload['error_msg'])) {
  148.                     $errorMsg $upload['error_msg'];
  149.                     $promo->setImage($oldFileName);
  150.                 } // upload KO avec message générique
  151.                 else {
  152.                     $errorMsg "Une erreur s'est produite lors de l'enregistrement du fichier";
  153.                     $promo->setImage($oldFileName);
  154.                 }
  155.             } else {
  156.                 $promo->setImage($oldFileName);
  157.             }
  158.             try {
  159.                 $this->entityManager->persist($promo);
  160.                 $this->entityManager->flush();
  161.             } catch (Exception $e) {
  162.                 $errorMsg "Une erreur s'est produite lors de l'enregistrement";
  163.             }
  164.             $txt $id "modifiée" "ajoutée";
  165.             // il y a eu une erreur
  166.             if (isset($errorMsg)) {
  167.                 $this->addFlash('danger'$errorMsg);
  168.             } // pas d'erreur
  169.             else {
  170.                 $this->addFlash('success'"L'autopromo <b>" $promo->getTitle() . "</b> a été " $txt);
  171.                 return $this->redirectToRoute('admin_autopromo');
  172.             }
  173.         }
  174.         return $this->render('admin/admin_autopromo/edit_autopromo.html.twig', [
  175.             'form' => $form->createView(),
  176.             'autopromo' => $promo,
  177.             'autorizedImages' => $this->autorizedMedias,
  178.         ]);
  179.     }
  180.     #[Route(path'/remove/{id}'name'admin_autopromo_remove')]
  181.     public function removeAutopromo($idAutopromoRepository $promo)
  182.     {
  183.         $promo $promo->find($id);
  184.         $filename $promo->getImage();
  185.         $title $promo->getTitle();
  186.         $this->entityManager->remove($promo);
  187.         $this->entityManager->flush();
  188.         try {
  189.             if (is_string($filename) && $filename != "" && $this->filesystem->exists($file $this->getParameter('upload_autopromo_' $this->session->get('admin_site_uid')) . "/" $filename)) {
  190.                 $this->fileService->removeFile([
  191.                     "filePath" => $this->getParameter('upload_autopromo_' $this->session->get('admin_site_uid')),
  192.                     "filename" => $filename,
  193.                 ]);
  194.             }
  195.             $this->addFlash('success'"L'autopromo <b>" $title "</b> a pas été supprimée");
  196.         } catch (FileException $e) {
  197.             $this->addFlash('danger'"L'autopromo <b>" $title "</b> n'a pas été supprimée");
  198.         }
  199.         return $this->redirectToRoute('admin_autopromo');
  200.     }
  201.     /**
  202.      * @param Request $request
  203.      */
  204.     #[Route(path'/axSortAutopromo'name'admin_axSortAutopromo'options: ['expose' => true])]
  205.     public function axSortAutopromo(Request $requestAutoPromoRepository $autoPromoRepositoryFlashNotificationAjax $flash)
  206.     {
  207.         if (isset($_POST['update'])) {
  208.             $error 0;
  209.             foreach ($_POST['positions'] as $position) {
  210.                 $index $position[0];
  211.                 $newPosition $position[1];
  212.                 $autoPromo $autoPromoRepository->find($index);
  213.                 $autoPromo->setAutopromoOrder($newPosition);
  214.                 try {
  215.                     $this->entityManager->persist($autoPromo);
  216.                     $this->entityManager->flush();
  217.                 } catch (FileException $e) {
  218.                     $error++;
  219.                 }
  220.             }
  221.             if ($error == 0) {
  222.                 return new JsonResponse([
  223.                     'status' => true,
  224.                     'flashMessage' => $flash->notification('success'"L'ordre des autopromos a été mis à jour"),
  225.                 ]);
  226.             } else {
  227.                 return new JsonResponse([
  228.                     'status' => true,
  229.                     'flashMessage' => $flash->notification('danger'"L'ordre des autopromos n'pas été mis à jour"),
  230.                 ]);
  231.             }
  232.         }
  233.         return new JsonResponse([
  234.             'status' => false,
  235.         ]);
  236.     }
  237. }