src\Controller\Site\NewsController.php line 92

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Site;
  3. use App\Controller\BaseController;
  4. use App\Entity\News;
  5. use App\Entity\Typenews;
  6. use App\Repository\NewsRepository;
  7. use App\Repository\TypenewsRepository;
  8. use App\Traits\GtranslateTrait;
  9. use Cocur\Slugify\Slugify;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Google\Cloud\Translate\V2\TranslateClient;
  12. use Knp\Component\Pager\PaginatorInterface;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use App\Entity\Commentaire;
  18. use App\Form\CommentaireType;
  19. use App\Repository\CommentaireRepository;
  20. class NewsController extends BaseController
  21. {
  22.     use GtranslateTrait;
  23.     private $em,$paginator;
  24.     public function __construct(EntityManagerInterface $emPaginatorInterface $paginator)
  25.     {
  26.         $this->em=$em;
  27.         $this->paginator $paginator;
  28.     }
  29.     /**
  30.      * @throws \Exception
  31.      */
  32.     #[Route(path'/actualites/{slug?}'name'site_news')]
  33.     public function index(Request $requestCommentaireRepository $commentaireRepository,Typenews $typenews=null)
  34.     {
  35.         //$this->makeSlug();
  36.         $total_per_page 20;
  37.         $selectedDate=$request->query->get('date');
  38.         $date=$selectedDate?new \DateTime($selectedDate):false;
  39.         $q=$request->query->get('q') ?: false;
  40.         $type=$request->query->get('type') ?: false;
  41.         $typeId=($typenews)? $typenews->getId():null;
  42.         $all=$this->em->getRepository(News::class)->findByCat($typeId,$date,$q,$type);
  43.         $paginedData=$this->paginator->paginate($all,$request->query->getInt('page'1),$total_per_page);
  44.         $items $paginedData->getItems();
  45.         $lang $request->query->get('lang');
  46.         if ($lang == 'en'){
  47.             $translated false;
  48.             foreach ($items as $item) {
  49.                 if (!$t_en $item->getTitreEn()){
  50.                     $item->setTitreEn($this->g_translate($item->getTitre()));
  51.                     //dump($t_en, $item);
  52.                     $translated true;
  53.                 }
  54.             }
  55.             if ($translated){
  56.                 $this->em->flush();
  57.                 $all=$this->em->getRepository(News::class)->findByCat($typeId,$date,$q,$type);
  58.                 $paginedData $this->paginator->paginate($all,$request->query->getInt('page'1),$total_per_page);
  59.             }
  60.         }else{
  61.             $lang 'fr';
  62.         }
  63.         //dd($paginedData->getItems());
  64.         return $this->render('site/news/index.html.twig', [
  65.             'newsfinance'=>$paginedData,
  66.             'selectedDate'=>$selectedDate,
  67.             'typeId' => $typeId,
  68.             'commentaires'=>$commentaireRepository->findAll(),
  69.             'type'=>$type,
  70.             'q' => $q,
  71.             'lang' => $lang,
  72.         ]);
  73.     }
  74.       #[Route(path'/actualite/{id}'name'site_news_show')]
  75.     public function show(News $newsNewsRepository $repositoryRequest $request,CommentaireRepository $commentaireRepository) : Response
  76.     {
  77.         $lang $request->query->get('lang');
  78.         //dd($request->headers->get('referer'));
  79.         if ($lang == 'en'){
  80.             //dd($this->g_translate("Bonjour le monde"));
  81.             $t_translated $d_translated false;
  82.             if ($news->getTitreEn() == null) {
  83.                 $t_en $this->g_translate($news->getTitre());
  84.                 $t_translated true;
  85.                 $news->setTitreEn($t_en);
  86.             }
  87.             if ($news->getDescriptionEn() == null){
  88.                 $d_en $this->g_translate($news->getDescription());
  89.                 $d_translated true;
  90.                 $news->setDescriptionEn($d_en);
  91.             }
  92.             if ($t_translated OR $d_translated){
  93.                 $this->em->persist($news);
  94.                 $this->em->flush();
  95.                 $this->em->refresh($news);
  96.             }
  97.             if ($news->getTitreEn() == null OR $news->getDescriptionEn() == null){
  98.                 $r $request->headers->get('referer');
  99.                 return $this->redirect($r ?: '/');
  100.             }
  101.         }else{
  102.             $lang 'fr';
  103.         }
  104.         //dd();
  105.         if(!$news->getStatus()){
  106.             return  $this->redirectToRoute('site_news');
  107.         }
  108.           $idnews=$request->attributes->get('id');
  109.          $commentaire = new Commentaire();
  110.         $form $this->createForm(CommentaireType::class, $commentaire);
  111.         $form->handleRequest($request);
  112.         if ($form->isSubmitted() && $form->isValid()) {
  113.              $commentaire->setUser($this->getUser());
  114.              $commentaire->setNews($news);
  115.             $entityManager $this->getDoctrine()->getManager();
  116.             $entityManager->persist($commentaire);
  117.             $entityManager->flush();
  118.           return $this->redirectToRoute('site_news_show',['id'=>$idnews]);
  119.         }
  120.         $status=true;
  121.         $related=$repository->findRelated($news,3,true);
  122.         $others $repository->findRelated($news,9);
  123.        $nbNews=$this->em->getRepository(Commentaire::class)->getNb($status,$idnews);
  124.         $all=$this->em->getRepository(Commentaire::class)->findByNews($status,$idnews);
  125.         $paginedData=$this->paginator->paginate($all,$request->query->getInt('page'1),2);
  126.         //dd($news->getImageCode());
  127.         return $this->render('site/news/show.html.twig', [
  128.             'news'=>$news,
  129.             'related'=>$related,
  130.             'others'=>$others,
  131.             'nbnews'=>$nbNews,
  132.              'commentaires' => $paginedData,
  133.             'form' => $form->createView(),
  134.             'lang' => $lang,
  135.         ]);
  136.     }
  137.     private function makeSlug(){
  138.         $typenewsRepository $this->em->getRepository(Typenews::class);
  139.         $slugify=new Slugify();
  140.         foreach ($typenewsRepository->findAll() as $item) {
  141.             $item->setSlug($slugify->slugify($item->getLibelle()));
  142.         }
  143.         $this->em->flush();
  144.     }
  145. }