src/Controller/PubliciteController.php line 101

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\Filesystem\Filesystem;
  10. use App\Entity\HistoriquePublicite;
  11. use App\Entity\Etat;
  12. use App\Entity\Competences;
  13. use App\Entity\PiecesPublicite;
  14. use App\Entity\Publicite;
  15. use App\Entity\Pays;
  16. use DateTime;
  17. use App\Repository\AdministrateursRepository;
  18. use App\Repository\GroupeRestrictionRepository;
  19. use App\Repository\GroupeRestrictionPageRepository;
  20. use App\Repository\PaysRepository;
  21. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  22. class PubliciteController extends AbstractController
  23. {
  24.     private $em;
  25.     private $session  ;
  26.     public function __construct(SessionInterface $session,EntityManagerInterface $entityManager)
  27.     {
  28.         $this->em $entityManager;
  29.         $this->session $session ;
  30.     }
  31.    
  32.     #[Route('/gestion_publicites'name'gestion_publicites')]
  33.     public function index(Request $request,AdministrateursRepository $AdministrateursRepository,GroupeRestrictionRepository $groupeRestrictionRepository,GroupeRestrictionPageRepository $grouprestrictionpageRepository): Response
  34.     {
  35.         $accessArray=[];
  36.         $niveauAcessPages = [];
  37.         $groupeRestrictions = [];
  38.         if( ($this->session->get('susrD3p9LjjY86') == 'gA64ya3G5N') && ($request->hasSession()) ){
  39.             $admin $this->session->get('supAdT9m2XJzn4');
  40.         }else if(($this->session->get('supAdT9m2XJzn4') != null) && ($request->hasSession())){
  41.             $admin $AdministrateursRepository->findOneBy(['email'=>$this->session->get('supAdT9m2XJzn4')['email']]);
  42.             $adminId $admin->getId();
  43.             $groupeRestrictions $groupeRestrictionRepository->findByAdminId($adminId);
  44.             $restrictionPages $grouprestrictionpageRepository->findByRestriction($groupeRestrictions[0]->getId());
  45.             $accessArray $restrictionPages[0]->getAccess();
  46.             $niveauAcessPagesCollection $restrictionPages[0]->getNiveauAcessPages();
  47.             $niveauAcessPagesCollection->initialize();
  48.             $niveauAcessPages $niveauAcessPagesCollection->toArray();
  49.         }else {
  50.             return $this->redirectToRoute('connexion');
  51.         }
  52.         
  53.         $pays $this->em->getRepository(Pays::class)->findAll();
  54.         $etat $this->em->getRepository(Etat::class)->findAll();
  55.         $query $this->em->createQuery(
  56.             'SELECT cj
  57.             FROM App\Entity\CoutJournalier cj
  58.             JOIN cj.type tc
  59.             WHERE tc.nom = \'Publicité\'
  60.             '
  61.         );
  62.         $coutsJournaliers $query->getResult();
  63.        
  64.         return $this->render('publicites/publicites.html.twig', [
  65.             'admin' => $admin,
  66.             'pays' => $pays,
  67.             'etats' => $etat,
  68.             'access' => $accessArray,
  69.             'pages' => $niveauAcessPages,
  70.             'CoutJournalier'=>$coutsJournaliers[0],
  71.         ]);
  72.     }
  73.     /**
  74.      * @Route("/servePublicites", name="servePublicites", methods={"GET","POST"}, options = {"expose" = true})
  75.      */
  76.     public function servePublicites(Request $request,AdministrateursRepository $AdministrateursRepositoryPaysRepository $paysRepository): Response
  77.     {
  78.         $sql_where "" ;
  79. //        $sql_where .= ' AND (ARRAY_CONTAINS(u.motCles, @searchValue) OR u.titre LIKE "%'.$searchValue.'%")';
  80.         if (($this->session->get('susrD3p9LjjY86') == 'gA64ya3G5N') && ($request->hasSession())) {
  81.             $admin $this->session->get('supAdT9m2XJzn4');
  82.             $sql_where_geo ''
  83.         } else {
  84.             $admin $AdministrateursRepository->findOneBy(['email' => $this->session->get('supAdT9m2XJzn4')['email']]);
  85.             $adminCodesGeo $admin->getGeo();
  86.             if (!empty($adminCodesGeo) && $adminCodesGeo[0] !== "") {
  87.                 foreach ($adminCodesGeo as $code) {
  88.                     if (str_ends_with($code'*')) {
  89.                         $conditions[] = "u.code_pays_dep LIKE '" rtrim($code'*') . "%'";
  90.                     } else {
  91.                         $conditions[] = "u.code_pays_dep = '$code'";
  92.                     }
  93.                 }
  94.                 $sql_where_geo implode(' OR '$conditions);
  95.             } else {
  96.                 $sql_where_geo '';
  97.             }
  98.         }
  99.         if($request->get('search')['value']!=""){
  100.             $searchValue $request->get('search')['value'];
  101.             
  102.            //$sql_where .= ' AND ( u.id LIKE \'%'.$request->get('search')['value'].'%\' )';
  103.             $sql_where .= ' AND ( u.titre LIKE \'%'.$request->get('search')['value'].'%\' )';
  104.        }
  105.          
  106.         $user_array = [] ;
  107.         
  108.         $limit =  $request->get('length') ;
  109.             
  110.         $offset $request->get('start') ;
  111.         
  112.         $array_search = array();
  113.         
  114.         $columns = ['u.titre','u.entreprise','u.date_creation'];
  115.         
  116.         $orders = [] ;
  117.         
  118.         for($i=$i<count($request->get('order')) ;$i++ ){
  119.             
  120.              $orders[] = $columns$request->get('order')[$i]['column'] ].' '.$request->get('order')[$i]['dir'] ;
  121.             
  122.         }
  123.         
  124.         if( count($orders)>0){
  125.         $order " ORDER BY ".implode(' , ',$orders) ;
  126.         }
  127.         else{
  128.         $order "" ;  
  129.         }
  130.         
  131.         
  132.         $total_publicites $this->em->createQuery(
  133.             'SELECT u 
  134.             FROM App\Entity\Publicite u
  135.             
  136.             
  137.             WHERE 1=1  ' $sql_where.'
  138.              
  139.             '
  140.             )
  141.                 
  142.             ->getResult()  ;
  143.       
  144.                 
  145.         
  146.         $I_nbResultatsTotal count$total_publicites ) ;
  147.         
  148.         $selectedStatusId $request->get('etatId');
  149.       
  150.         if ($selectedStatusId !== null) {
  151.             $whereClause " AND u.etat = '$selectedStatusId'";
  152.         } else {
  153.             $whereClause " AND u.etat = '4'";
  154.         }
  155.         // Initialisation de $entreprises
  156.         $entreprises = [];
  157.         if (($this->session->get('susrD3p9LjjY86') == 'gA64ya3G5N') && ($request->hasSession())) {
  158.              $entreprises $this->em->createQuery(
  159.                  'SELECT u 
  160.                  FROM App\Entity\Entreprise u'
  161.              )
  162.              ->setMaxResults($limit)
  163.              ->setFirstResult($offset)
  164.              ->getResult();
  165.          } else {
  166.              // Récupérer les pays géographiques de l'administrateur
  167.              $paysGeo $admin->getPaysGeo();
  168.  
  169.              // Si $paysGeo est null, ne pas filtrer par pays
  170.              if ($paysGeo !== null) {
  171.                  // Récupérer les entités Pays par leurs noms
  172.                  $paysEntities $paysRepository->createQueryBuilder('p')
  173.                      ->where('p.id IN (:id)')
  174.                      ->setParameter('id'$paysGeo)
  175.                      ->getQuery()
  176.                      ->getResult();
  177.  
  178.                  // Récupérer les IDs des pays
  179.                  $paysIds array_map(fn($pays) => $pays->getId(), $paysEntities);
  180.  
  181.                  // Construire le SQL WHERE pour filtrer par pays
  182.                  $sql_where_geo_pays '';
  183.                  if (!empty($paysIds)) {
  184.                      $sql_where_geo_pays ' AND u.Pays IN (:paysIds)';
  185.                  } else {
  186.                      $sql_where_geo_pays ' AND 1 = 0';
  187.                  }
  188.  
  189.                  if ($sql_where_geo == "") {
  190.                      $entreprises $this->em->createQuery(
  191.                          'SELECT u 
  192.                          FROM App\Entity\Entreprise u
  193.                          WHERE 1=1 '  
  194.                          $sql_where_geo_pays
  195.                      )
  196.                      ->setParameter('paysIds'$paysIds)
  197.                      ->setMaxResults($limit)
  198.                      ->setFirstResult($offset)
  199.                      ->getResult();
  200.                  } else {
  201.                      $entreprises $this->em->createQuery(
  202.                          'SELECT u 
  203.                          FROM App\Entity\Entreprise u
  204.                          WHERE 1=1 ' 
  205.                          . ($sql_where_geo ' AND (' $sql_where_geo ')' ''
  206.                          . $sql_where_geo_pays
  207.                      )
  208.                      ->setParameter('paysIds'$paysIds)
  209.                      ->setMaxResults($limit)
  210.                      ->setFirstResult($offset)
  211.                      ->getResult();
  212.                  }
  213.              } else {
  214.                  // Si $paysGeo est null, ne filtrer que par $sql_where_geo
  215.                  if ($sql_where_geo == "") {
  216.                      $entreprises $this->em->createQuery(
  217.                          'SELECT u 
  218.                          FROM App\Entity\Entreprise u'
  219.                      )
  220.                      ->setMaxResults($limit)
  221.                      ->setFirstResult($offset)
  222.                      ->getResult();
  223.                  } else {
  224.                      $entreprises $this->em->createQuery(
  225.                          'SELECT u 
  226.                          FROM App\Entity\Entreprise u
  227.                          WHERE 1=1 ' 
  228.                          . ($sql_where_geo ' AND (' $sql_where_geo ')' ''
  229.                      )
  230.                      ->setMaxResults($limit)
  231.                      ->setFirstResult($offset)
  232.                      ->getResult();
  233.                  }
  234.              }
  235.  
  236.          }
  237.         $entrepriseIds array_map(fn($entreprise) => $entreprise->getId(), $entreprises);
  238.         /* $publicites = $this->em->createQuery(
  239.             'SELECT u 
  240.             FROM App\Entity\Publicite u
  241.             WHERE 1=1  ' .$sql_where .' '. $whereClause.' '.$order
  242.         )
  243.         ->setMaxResults($limit)
  244.         ->setFirstResult($offset)
  245.         ->getResult(); */
  246.         if (!empty($entrepriseIds)) {
  247.             $publicites $this->em->createQuery(
  248.                 'SELECT u 
  249.                 FROM App\Entity\Publicite u
  250.                 WHERE u.entreprise IN (:entrepriseIds) ' $sql_where ' ' $whereClause ' ' $order
  251.             )
  252.             ->setParameter('entrepriseIds'$entrepriseIds)
  253.             ->setMaxResults($limit)
  254.             ->setFirstResult($offset)
  255.             ->getResult();
  256.         } else {
  257.             $publicites = []; // Aucun résultat si pas d'IDs d'entreprise
  258.         }
  259.  
  260.             
  261.         
  262.         $output = [] ;
  263.                
  264.         foreach($publicites as $publicite){
  265.             
  266.             // dd($evenement->getParticulier()->getNom());
  267.                 $output[] = [
  268.                         
  269.                         'id'=> $publicite->getId() ,
  270.                         'titre'=> $publicite->getTitre(),
  271.                         'entreprise'=> $publicite->getEntreprise()->getNomEntreprise(),
  272.                         'dateCreation'=> $publicite->getDateCreation() !== null date_format($publicite->getDateCreation(), 'd/m/Y H:i') : '--',
  273.                         'dateValidation'=> $publicite->getDateValidation() !== null date_format($publicite->getDateValidation(), 'd/m/Y H:i') : '--',
  274.                         'status' => $publicite->getEtat()->getEtat()
  275.                 ];
  276.          
  277.         }
  278.         
  279.         $JSON json_encode($output);
  280.         $JSON '{"draw": '.$request->get('draw').',"recordsTotal":'.$I_nbResultatsTotal.',"recordsFiltered":'.$I_nbResultatsTotal.',"data":'.$JSON.'}';
  281.         $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  282.         return $response;
  283.         
  284.     }
  285.      /**
  286.      * @Route("/get_pub_byId/{id}", name="get_pub_byId", methods={"GET","POST"}, options = {"expose" = true})
  287.      */
  288.     public function get_pub_byId$id){
  289.         $pub=$this->em->getRepository(Publicite::class)->find($id);
  290.         if (!$pub) {
  291.             return new JsonResponse(['error' => 'Publicité non trouvé'], Response::HTTP_NOT_FOUND);
  292.         }
  293.         $publicitespiecesJointes = [];
  294.                 $piecesJointes $this->em->getRepository(PiecesPublicite::class)->findBy(['publicite' => $id]);
  295.                foreach( $piecesJointes as $p){
  296.                // dd($p);
  297.                $src $p->getDir() . '/' $p->getNom();
  298.                 if (strpos($src'/uploads') === 0) {
  299.                     $src str_replace('/uploads''/uploadsFront'$src);
  300.                 }
  301.                 $publicitespiecesJointes[] = ['id'=>$p->getId(),
  302.             'isPrincipale'=>$p->isPrincipale(),
  303.             'src'=>$src,
  304.         ];
  305.                }
  306.         // dd($EventspiecesJointes); 
  307.         $servicesPub=$pub->getServices();
  308.                $servicesArr=[];
  309.                if ($servicesPub !== null && (is_array($servicesPub) || $servicesPub instanceof \Countable) && count($servicesPub) > 0) {
  310.                 foreach ($servicesPub as $service_id) {
  311.                     $service $this->em->getRepository(Competences::class)->find($service_id);
  312.                     if ($service) {
  313.                         $servicesArr[] = [
  314.                             'id' => $service->getId(),
  315.                             'nom' => $service->getNom(),
  316.                             'type' => ($service->getParents()) ? 'child' :'parent' ,
  317.                         ];
  318.                     }
  319.                 }
  320.             }
  321.             
  322.          $data = [
  323.             'titre'=>$pub->getTitre(),
  324.             'etat'=>$pub->getEtat()->getEtat(),
  325.             'dateDebut' => $pub->getDateDebut()->format('d/m/Y H:i'),
  326.             'dateFin' => $pub->getDateFin()->format('d/m/Y H:i'),
  327.             
  328.             'motCles' =>  implode(', '$pub->getMotsCles()),
  329.             'contenu'=>$pub->getContenu(),
  330.             'documents'=>$publicitespiecesJointes,
  331.             'etatId'=>$pub->getEtat()->getId(),
  332.             'duree'=>$pub->getDuree(),
  333.             'CoutTotal'=>$pub->getCoutTotal(),
  334.             'url'=>$pub->getUrl(),
  335.             'description'=>$pub->getMetaDescription(),
  336.             'servicesArr'=>$servicesArr,
  337.         ];
  338.         return new JsonResponse($data);
  339.     
  340.     }
  341.     /**
  342.      * @Route("/edit_publicite", name="edit_publicite", methods={"GET","POST"}, options = {"expose" = true})
  343.      */
  344.     public function edit_publicite(Request $request,AdministrateursRepository $AdministrateursRepository,GroupeRestrictionRepository $groupeRestrictionRepository,GroupeRestrictionPageRepository $grouprestrictionpageRepository){
  345.         $adminId=null;
  346.         if( ($this->session->get('susrD3p9LjjY86') == 'gA64ya3G5N') && ($request->hasSession()) ){
  347.             $admin $this->session->get('supAdT9m2XJzn4');
  348.         }else if(($this->session->get('supAdT9m2XJzn4') != null) && ($request->hasSession())){
  349.             $admin $AdministrateursRepository->findOneBy(['email'=>$this->session->get('supAdT9m2XJzn4')['email']]);
  350.             $adminId $admin->getId();
  351.             $groupeRestrictions $groupeRestrictionRepository->findByAdminId($adminId);
  352.             $restrictionPages $grouprestrictionpageRepository->findByRestriction($groupeRestrictions[0]->getId());
  353.             $accessArray $restrictionPages[0]->getAccess();
  354.             $niveauAcessPagesCollection $restrictionPages[0]->getNiveauAcessPages();
  355.             $niveauAcessPagesCollection->initialize();
  356.             $niveauAcessPages $niveauAcessPagesCollection->toArray();
  357.         }else {
  358.             return $this->redirectToRoute('connexion');
  359.         }
  360.        //dd($request->request->all());
  361.         //dd($request->files->get('Autresfichiers'));
  362.         $pub=$this->em->getRepository(Publicite::class)->find($request->get('idPub'));
  363.         if (!$pub) {
  364.             return new JsonResponse(['error' => 'publicité non trouvé'], Response::HTTP_NOT_FOUND);
  365.         }
  366.         
  367.         
  368.         
  369.        $etat $this->em->getRepository(Etat::class)->find($request->get('pubEtat'));
  370.         
  371.         $pub->setTitre($request->get('titre'));
  372.         $pub->setContenu($request->get('pub_content'));
  373.         
  374.        $pub->setDateUpdate(new \DateTime());
  375.         $dateDebut=\DateTime::createFromFormat('d/m/Y  H:i'$request->get('deb_date'));
  376.         $dateFin=\DateTime::createFromFormat('d/m/Y  H:i'$request->get('fin_date'));
  377.         $pub->setDateDebut($dateDebut);
  378.         $pub->setDateFin($dateFin);
  379.         
  380.         $keyWords=$request->get('keyWords');
  381.         if(isset($keyWords) && !empty($keyWords)) {
  382.             $keyWords str_replace("; "";"$keyWords);
  383.             $keyWordsArray explode(";"$keyWords);
  384.             $pub->setMotsCles($keyWordsArray);
  385.         }
  386.         $pub->setUrl($request->get('url_pub'));
  387.         $pub->setCoutTotal($request->get('CoutTotal'));
  388.         $pub->setEtat($etat);
  389.         $pub->setDuree($request->get('dureePublicite'));
  390.         
  391.         $pub->setMetaDescription($request->get('description'));
  392.        $pub->setDateUpdate(new \DateTime());
  393.        if($request->get('pubEtat')==1){
  394.             $pub->setDateValidation(new \DateTime());
  395.          }
  396.          $historyEdit=new HistoriquePublicite();
  397.          $historyEdit->setPublicite($pub);
  398.          $historyEdit->setEtat($etat);
  399.          $historyEdit->setCommentaire($request->get('Commentaire'));
  400.          $historyEdit->setDateCreation(new \DateTime());
  401.          if($admin["email"] === "sadmin")
  402.              {
  403.                  $historyEdit->setResponsable('sadmin');
  404.              }
  405.          else
  406.              {
  407.                  $historyEdit->setResponsable($adminId);
  408.              }
  409.      
  410.       
  411. $this->em->persist($historyEdit);
  412.           
  413.         $this->em->persist($pub);
  414.         $this->em->flush();
  415.     
  416.         return new JsonResponse(['success' => true]);
  417.     
  418.     }   
  419.     /**
  420.      * @Route("/delete_publicite", name="delete_publicite", methods={"DELETE"}, options = {"expose" = true})
  421.      */
  422.     public function delete_publicite($nomLangue$id): Response
  423.     //dd($id);
  424.         $pub =$this->em->getRepository(Publicite::class)->find($id);
  425.         
  426.         if (!$pub) {
  427.             $msg = ['msg'=>'KOO']  ;
  428.         
  429.             $JSON json_encode($msg);
  430.             $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  431.             return $response;
  432.         }
  433.         $piecesJointes $this->em->getRepository(PiecesPublicite::class)->findBy(['publicite' => $id]);
  434.         $historiquePub $this->em->getRepository(HistoriquePublicite::class)->findBy(['publicite' => $id]);
  435.         foreach( $piecesJointes as $p){
  436.             $filesystem = new Filesystem();
  437.             $uploadDirRoot $this->getParameter('uploads_directory') ;
  438.             $filePath =  $p->getDir() . '/' $p->getNom();
  439.             $filePath$uploadDirRoot.'/entreprises/'.$pub->getEntreprise()->getId().'/publicites/'.$pub->getId().'/'$p->getNom() ; 
  440.        // dd( $uploadDirRoot,$filePath);
  441.             
  442.             $filesystem->remove($filePath);
  443.         
  444.             $this->em->remove($p);
  445.         }
  446.         foreach( $historiquePub as $historique){
  447.            
  448.         
  449.             $this->em->remove($historique);
  450.         }
  451.       
  452.         $this->em->remove($pub);
  453.         $this->em->flush();
  454.         $msg = ['msg'=>'OK']  ;
  455.         
  456.         $JSON json_encode($msg);
  457.         $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  458.        
  459.         return $response;
  460.     }  
  461. }