src/Controller/ArticlesController.php line 41

  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Component\Routing\Annotation\Method;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\HttpFoundation\File\UploadedFile;
  10. // use Symfony\Component\HttpFoundation\File\File;
  11. use Symfony\Component\HttpFoundation\File\File as SymfonyFile;
  12. use Doctrine\Common\Collections\ArrayCollection;
  13. use Symfony\Component\Validator\Validator\ValidatorInterface;
  14. use App\Entity\Articles;
  15. use App\Entity\Banners;
  16. use App\Entity\Documents;
  17. use App\Form\ArticlesType;
  18. use App\Entity\ArticlesPictures;
  19. use App\Entity\Pictures;
  20. use App\Entity\Picture;
  21. use App\Entity\File;
  22. use App\Entity\UsersActivities;
  23. use App\QrCodeService\QrCodeService;
  24. use App\DompdfService\DompdfService;
  25. use OlaSoft\Common;
  26. /**
  27.  * @Route("/os-admin/articles")
  28.  */
  29. class ArticlesController extends OSController
  30. {
  31.     /**
  32.      * @Route("/page/{offset}/",name="articles-admin-page")
  33.      * @Route("/",name="articles-admin")
  34.      * @Route("/search/{keywords}/page/{offset}/",name="articles-search-admin-page")
  35.      * @Route("/search/{keywords}/",name="articles-search-admin")
  36.      */
  37.     public function admin(Request $request$keywords=null,$offset=1)
  38.     {
  39.         $offset--;
  40.         $limit 20;
  41.         $of=$offset*$limit;
  42.         $em $this->getDoctrine()->getManager();
  43.         $list$em->getRepository(Articles::class)->getAll($limit,$of,null,$keywords?$keywords:null);
  44.         $count=$em->getRepository(Articles::class)->getCount();
  45.         $ajax $request->isXmlHttpRequest();
  46.         $response $this->render('Admin\index.html.twig',[
  47.             'list'=>$list,
  48.             'ajax'=>$ajax,
  49.             'count'=>$count,
  50.             'table_limit'=>$limit,
  51.             'offset'=>$offset,
  52.             'addBtnClass'=>'btn-popup semi',
  53.             "title"=>"Gestion des articles ",
  54.             "subtitle"=>"Liste de tous les articles"
  55.         ]);
  56.         return $ajax ?
  57.             new Response(\json_encode([
  58.                 'content'=>$response->getContent(),
  59.                 "title"=>"Gestion des articles ",
  60.                 "subtitle"=>"Liste de tous les articles"
  61.             ]))
  62.         : $response;
  63.     }
  64.     /**
  65.      * @Route("/add/",name="articles-new", defaults={"isEdit":false})
  66.      * @Route("/{id}/edit",name="articles-edit")
  67.      */
  68.     public function edit(Request $requestArticles $item=null$isEdit true)
  69.     {
  70.         $em $this->getDoctrine()->getManager();
  71.         if($item === null){
  72.             $item = new Articles();
  73.             $item->setUser($this->getUser());
  74.         }
  75.         else
  76.             $item->setUpdatedBy($this->getUser() ? $this->getUser() : null);
  77.         $form=$this->createForm(ArticlesType::class,$item);
  78.         $form->handleRequest($request);
  79.         if($form->isSubmitted() && $form->isValid()){
  80.             $item->setSlug(Common::slug($item->getTitle()));
  81.             if(!$isEdit$item->setCreatedAt(new \DateTime);
  82.             $item->setLastUpdate(new \DateTime);
  83.             if($form->get('date')->getData()!=null){
  84.                 $date $form->get('date')->getData()->format('Y-m-d').' '.$form->get('time')->getData()->format('H:i:s');
  85.                 $item->setDate(\DateTime::createFromFormat('Y-m-d H:i:s'$date));
  86.             }
  87.             if(!$item->isHasGeneratedPdf() && $isEdit && $item->getQrcode() && $item->getGeneratedPdf()){
  88.                 unlink($item->getQrcode()->getRootFile());
  89.                 unlink($item->getGeneratedPdf()->getRootFile());
  90.                 $item->setQrcode(null);
  91.                 $item->setGeneratedPdf(null);
  92.             }
  93.             if($item->isHasGeneratedPdf()){
  94.                 $qrCode = new QrCodeService;
  95.                 $namePng uniqid('''').'.png';
  96.                 $data $request->getSchemeAndHttpHost().$request->getBasePath().$this->generateUrl('article',['id'=>$item->getId(), 'slug'=>$item->getSlug()]);
  97.                 $qrCodePng $qrCode->generate($data,$namePng);
  98.                 $pathPng dirname(__DIR__3).'/public/upload/images/qrcode/'.$namePng;
  99.                 $pic = new Picture($pathPng);
  100.                 $pic->setSource($namePng);
  101.                 if($isEdit && $item->getQrcode()){
  102.                     unlink($item->getQrcode()->getRootFile());
  103.                     $pic->setLastUpdate(new \DateTime);
  104.                 }
  105.                 $item->setQrcode($pic);
  106.                 /////generate PDF
  107.                 $pdf = new DompdfService;
  108.                 $conf = [
  109.                     'imageSrc'  => $pdf->imageToBase64(dirname(__DIR__2).'/public/images/logo.png'),
  110.                     'qrcode'  => $pdf->imageToBase64(dirname(__DIR__2).'/public/upload/qrcode/articles/'.$namePng),
  111.                     'data'         => $item,
  112.                 ];
  113.                 $html =  $this->renderView('Default/generated-pdf.html.twig'$conf);
  114.                 $namePdf uniqid('''').'.pdf';
  115.                 $pdfFile =  $pdf->getpdf($html,$namePdf);
  116.                 $pathPdf dirname(__DIR__3).'/public/upload/files/generated-pdf/'.$namePdf;
  117.                 $gPDF = new File($pathPdf);
  118.                 $gPDF->setSource($item->getSlug()."pdf");
  119.                 if($isEdit && $item->getGeneratedPdf()){
  120.                     unlink($item->getGeneratedPdf()->getRootFile());
  121.                     $gPDF->setLastUpdate(new \DateTime);
  122.                 }
  123.                 $item->setGeneratedPdf($gPDF);
  124.             }
  125.             $em->persist($item);
  126.             $em->flush();
  127.             Common::trackChange($em$item$this->getUser(), 'edit'"Édition d'un article");
  128.             $this->addFlash('notice','Enregistrement effectué avec succès');
  129.             return $this->redirectToRoute('articles-admin');
  130.         }
  131.         $ajax $request->isXmlHttpRequest();
  132.         $response $this->render('Admin\edit.html.twig',[
  133.             'form' => $form->createView(),
  134.             'ajax' => $ajax,
  135.             'title' => "Gestion des articles ",
  136.             'subtitle' => "Edition d'un article",
  137.         ]);
  138.         return $ajax ?
  139.             new Response(\json_encode([
  140.                 'content' => $response->getContent(),
  141.                 'title' => "Gestion des articles ",
  142.                 'subtitle' => "Edition d'un article"
  143.             ]))
  144.         : $response;
  145.     }
  146.     /**
  147.      * @Route("/{id}/enable", name="articles-enable")
  148.      */
  149.     public function enable(Request $requestArticles $item)
  150.     {
  151.         $em $this->getDoctrine()->getManager();
  152.         $item->setIsEnabled(!$item->getIsEnabled());
  153.         $em->persist($item);
  154.         $em->flush();
  155.         Common::trackChange($em$item$this->getUser(), $item->getIsEnabled() ? 'enable' 'disable'$item->getIsEnabled() ? "Activation d'un article" "Désactivation d'un article");
  156.         $ajax $request->isXmlHttpRequest();
  157.         if(!$ajax$this->addFlash("notice","Activation / Désactivation effectuée avec succès.");
  158.         return $ajax
  159.             ? new Response(\json_encode(['status'=>$item->getIsEnabled(), 'notice'=>'Activation / Désactivation effectuée avec succès.']))
  160.             : $this->redirectToRoute('articles-admin');
  161.     }
  162.     /**
  163.      * @Route("/{id}/oneFrontPage", name="articles-onefrontpage")
  164.      */
  165.     public function oneFrontPage(Request $requestArticles $item)
  166.     {
  167.         $em $this->getDoctrine()->getManager();
  168.         $item->setIsOnFrontPage(1);
  169.         $banner = new Banners;
  170.         $banner->setBanner($item->getBanner(), true);
  171.         $banner->setTitle($item->getTitle());
  172.         $banner->setDate($item->getDate());
  173.         $banner->setDescription($item->getDescription());
  174.         $banner->setBtnTitle("Lire l'article");
  175.         $banner->setLink($this->generateUrl('article',['id'=>$item->getId(), 'slug'=>$item->getSlug()]));
  176.         $banner->setIsEnabled(true);
  177.         $em->persist($banner);
  178.         $em->flush();
  179.         Common::trackChange($em$item$this->getUser(), $item->getIsOnFrontPage() ? 'addtofront' 'removefromfront'$item->getIsOnFrontPage() ? "Ajout d'un article de la Une" "Retrait d'un article de la Une");
  180.         $this->addFlash("notice","Ajout d'article sur la bannière effectué avec succès.");
  181.         return $this->redirectToRoute('banners-admin');
  182.     }
  183. }