src/Controller/DefaultController.php line 392

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Ads;
  4. use App\Entity\Article;
  5. use App\Entity\ArticleCategory;
  6. use App\Entity\CountryState;
  7. use App\Entity\Notification;
  8. use App\Entity\OpenDay;
  9. use App\Entity\Page;
  10. use App\Entity\Phone;
  11. use App\Entity\School;
  12. use App\Entity\SchoolCycle;
  13. use App\Entity\SchoolFee;
  14. use App\Entity\SchoolLanguage;
  15. use App\Entity\SchoolReligion;
  16. use App\Entity\SchoolType;
  17. use App\Entity\Town;
  18. use App\Entity\User;
  19. use App\Service\MySerializer;
  20. use App\Service\PDODbImporter;
  21. use App\Service\SocialMedia;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use Knp\Component\Pager\PaginatorInterface;
  24. use Symfony\Component\DependencyInjection\ContainerInterface;
  25. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  26. use Symfony\Component\HttpFoundation\JsonResponse;
  27. use Symfony\Component\HttpFoundation\Request;
  28. use Symfony\Component\HttpFoundation\Response;
  29. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  30. class DefaultController extends BaseController
  31. {
  32.     private $session;
  33.     private $bag;
  34.     private $schoolLimit;
  35.     /**
  36.      * DefaultController constructor.
  37.      * @param ContainerInterface $c
  38.      * @param EntityManagerInterface $em
  39.      * @param ParameterBagInterface $params
  40.      * @param SessionInterface $s
  41.      * @param ParameterBagInterface $bag
  42.      */
  43.     public function __construct(ContainerInterface $cEntityManagerInterface $emParameterBagInterface $paramsSessionInterface $sParameterBagInterface $bag)
  44.     {
  45.         $this->session $s;
  46.         $this->bag $bag;
  47.         $this->schoolLimit 102;
  48.         parent::__construct($c,  $em$params);
  49.     }
  50.     public function index(Request $requestPaginatorInterface $paginator):Response{
  51.         if(strtolower($request->getMethod())==="get"){
  52.         /*$pdo = new PDODbImporter($this->params->get('pdo_dsn'),$this->params->get('pdo_user'),$this->params->get('pdo_password'),'mydb2');
  53.             $r = $pdo->importSQL($this->params->get('projectDir').'/'.$this->params->get('school_base_sql'));*/
  54.             $data $this->session->get("data");
  55.             if($request->query->get('s') !== NULL && $data !== NULL ){
  56.                 $required = ['school_type','school_fee','school_language','school_religion','school_cycle','town'];
  57.                 $opt = ['boarding_school_boy','boarding_school_girl','school_cafetaria','transport_service','street'];
  58.                 if(!array_key_exists('school_fee',$data)){
  59.                     $data['school_fee']=[];
  60.                 }
  61.                 if(!array_key_exists('school_cycle',$data)){
  62.                     $data['school_cycle']=[];
  63.                 }
  64.                 foreach ($required as $req){
  65.                     if(!array_key_exists($req,$data)){
  66.                         $this->addFlash(
  67.                             'notice',
  68.                             ' required field '.$req
  69.                         );
  70.                         return $this->redirectToRoute('index');
  71.                     }
  72.                 }
  73.                 $list $this->em->getRepository(School::class)->findAdvanced($data);
  74.                 foreach ($list as $item){
  75.                     $item->setTranslatableLocale($this->locale);
  76.                     $this->em->refresh($item);
  77.                 }
  78.             }
  79.             else{
  80.                 $this->session->set("data"NULL);
  81.                 $searchKeyword '';
  82.                 if($request->query->get('keywords') !== NULL && strlen($request->query->get('keywords'))>0){
  83.                     $searchKeyword $request->query->get('keywords');
  84.                     $list $this->em->getRepository(School::class)->searchByName($request->query->get('keywords'));
  85.                     foreach ($list as $item){
  86.                         $item->setTranslatableLocale($this->locale);
  87.                         $this->em->refresh($item);
  88.                     }
  89.                 }
  90.                 else{
  91.                     $list $this->em->getRepository(School::class)->findBy(['isActive'=>true,'isDisplayed'=>true],['ranking'=>'ASC','name'=>'ASC']);
  92.                     foreach ($list as $item){
  93.                         $item->setTranslatableLocale($this->locale);
  94.                         $this->em->refresh($item);
  95.                     }
  96.                 }
  97.                 $this->siteInfo['keywords'] = $searchKeyword;
  98.             }
  99.         }
  100.         else{
  101.             $data $request->request->all();
  102.             $this->session->set("data",$data);
  103.             return $this->redirect($this->generateUrl('index').'?s=a');
  104.         }
  105.         $School_types $this->em->getRepository(SchoolType::class)->findBy(['isActive'=>true],['name'=>'ASC']);
  106.         foreach ($School_types as $item){
  107.             $item->setTranslatableLocale($this->locale);
  108.             $this->em->refresh($item);
  109.         }
  110.         $school_languages $this->em->getRepository(SchoolLanguage::class)->findBy(['isActive'=>true],['name'=>'ASC']);
  111.         foreach ($school_languages as $item){
  112.             $item->setTranslatableLocale($this->locale);
  113.             $this->em->refresh($item);
  114.         }
  115.         $school_religions $this->em->getRepository(SchoolReligion::class)->findBy(['isActive'=>true],['name'=>'ASC']);
  116.         foreach ($school_religions as $item){
  117.             $item->setTranslatableLocale($this->locale);
  118.             $this->em->refresh($item);
  119.         }
  120.         $school_cycles $this->em->getRepository(SchoolCycle::class)->findBy(['isActive'=>true],['name'=>'ASC']);
  121.         foreach ($school_cycles as $item){
  122.             $item->setTranslatableLocale($this->locale);
  123.             $this->em->refresh($item);
  124.         }
  125.         $towns $this->em->getRepository(Town::class)->findBy(['isActive'=>true],['name'=>'ASC']);
  126.         foreach ($towns as $item){
  127.             $item->setTranslatableLocale($this->locale);
  128.             $this->em->refresh($item);
  129.         }
  130.         $townsArray = [];
  131.         foreach ($towns as $t){
  132.             $townsArray[]=['id'=>$t->getId(),'state'=>$t->getCountryState()===null?0:$t->getCountryState()->getId(),'name'=>$t->getName()];
  133.         }
  134.         $states $this->em->getRepository(CountryState::class)->findBy(['isActive'=>true],['name'=>'ASC']);
  135.         foreach ($states as $item){
  136.             $item->setTranslatableLocale($this->locale);
  137.             $this->em->refresh($item);
  138.         }
  139.         $schoolFees $this->em->getRepository(SchoolFee::class)->findBy(['isActive'=>true],['id'=>'ASC']);
  140.         foreach ($schoolFees as $item){
  141.             $item->setTranslatableLocale($this->locale);
  142.             $this->em->refresh($item);
  143.         }
  144.         foreach ($list as $i){
  145.             $stype $i->getSchoolType();
  146.             $sreli $i->getSchoolReligion();
  147.             $slang $i->getSchoolLanguage();
  148.             $scycles $i->getSchoolCycles();
  149.             $stype->setTranslatableLocale($this->locale);
  150.             $sreli->setTranslatableLocale($this->locale);
  151.             $slang->setTranslatableLocale($this->locale);
  152.             $this->em->refresh($stype);
  153.             $this->em->refresh($sreli);
  154.             $this->em->refresh($slang);
  155.             foreach ($scycles as $c){
  156.                 $c->setTranslatableLocale($this->locale);
  157.                 $this->em->refresh($c);
  158.                 $i->addSchoolCycle($c);
  159.             }
  160.             $i->setSchoolType($stype);
  161.             $i->setSchoolReligion($sreli);
  162.             $i->setSchoolLanguage($slang);
  163.             if($i->getIsEducati()){
  164.                 if($i->getLink()!=null && $i->getLink()!= '' ){
  165.                     $i->setOpenLink($i->getLink());
  166.                 }else{
  167.                     if(file_exists($this->params->get('projectDir').'/../'.$this->params->get('school_folder').'/'.$i->getSlug())){
  168.                         $i->setOpenLink($this->params->get('school_root_path').$i->getSlug().'/public');
  169.                     }
  170.                 }
  171.             }
  172.             else{
  173.                 if($i->getLink()!=null && $i->getLink()!= '' ){
  174.                     $i->setOpenLink($i->getLink());
  175.                 }
  176.                 else{
  177.                     $i->setOpenLink('#');
  178.                 }
  179.             }
  180.         }
  181.         $data $paginator->paginate(
  182.             $list,$request->query->getInt('page'1), $this->schoolLimit
  183.         );
  184.         $this->siteInfo['schools'] = $data;
  185.         $this->siteInfo['last_school_nb'] = count($data);
  186.         $this->siteInfo['school_limit'] = $this->schoolLimit;
  187.         $this->siteInfo['school_types'] = $School_types;
  188.         $this->siteInfo['school_languages'] = $school_languages;
  189.         $this->siteInfo['school_religions'] = $school_religions;
  190.         $this->siteInfo['school_cycles'] = $school_cycles;
  191.         $this->siteInfo['towns'] = $towns;
  192.         $this->siteInfo['towns_array'] = $townsArray;
  193.         $this->siteInfo['states'] = $states;
  194.         $this->siteInfo['school_fees'] = $schoolFees;
  195.         /*$this->addFlash(
  196.             'notice',
  197.             $this->mycontainer->get('translator')->trans('page_not_found')
  198.         );*/
  199.         return $this->render('index.html.twig'$this->siteInfo);
  200.     }
  201.     public function showMoreSchool(Request $request,$offset): JsonResponse{
  202.         $data $this->session->get("data");
  203.         if($request->query->get('s') !== NULL && $data !== NULL ){
  204.             $required = ['school_type','school_fee','school_language','school_religion','school_cycle','town'];
  205.             $opt = ['boarding_school_boy','boarding_school_girl','school_cafetaria','transport_service','street'];
  206.             if(!array_key_exists('school_fee',$data)){
  207.                 $data['school_fee']=[];
  208.             }
  209.             if(!array_key_exists('school_cycle',$data)){
  210.                 $data['school_cycle']=[];
  211.             }
  212.             foreach ($required as $req){
  213.                 if(!array_key_exists($req,$data)){
  214.                     return new JsonResponse(['data'=>' required field '.$req,'message'=>''],401);
  215.                 }
  216.             }
  217.             $list $this->em->getRepository(School::class)->findAdvancedOffset($data,$offset,$this->schoolLimit);
  218.             foreach ($list as $item){
  219.                 $item->setTranslatableLocale($this->locale);
  220.                 $this->em->refresh($item);
  221.             }
  222.         }
  223.         else{
  224.             $this->session->set("data"NULL);
  225.             $searchKeyword '';
  226.             if($request->query->get('keywords') !== NULL && strlen($request->query->get('keywords'))>0){
  227.                 $searchKeyword $request->query->get('keywords');
  228.                 $list $this->em->getRepository(School::class)->searchByNameOffset($request->query->get('keywords'),$offset,$this->schoolLimit);
  229.                 foreach ($list as $item){
  230.                     $item->setTranslatableLocale($this->locale);
  231.                     $this->em->refresh($item);
  232.                 }
  233.             }
  234.             else{
  235.                 $list $this->em->getRepository(School::class)->findBy(['isActive'=>true],['ranking'=>'ASC','name'=>'ASC'],$this->schoolLimit,$offset);
  236.                 foreach ($list as $item){
  237.                     $item->setTranslatableLocale($this->locale);
  238.                     $this->em->refresh($item);
  239.                 }
  240.             }
  241.             $this->siteInfo['keywords'] = $searchKeyword;
  242.         }
  243.         $schools = [];
  244.         foreach ($list as $i){
  245.             $stype $i->getSchoolType();
  246.             $sreli $i->getSchoolReligion();
  247.             $slang $i->getSchoolLanguage();
  248.             $scycles $i->getSchoolCycles();
  249.             $stype->setTranslatableLocale($this->locale);
  250.             $sreli->setTranslatableLocale($this->locale);
  251.             $slang->setTranslatableLocale($this->locale);
  252.             $this->em->refresh($stype);
  253.             $this->em->refresh($sreli);
  254.             $this->em->refresh($slang);
  255.             foreach ($scycles as $c){
  256.                 $c->setTranslatableLocale($this->locale);
  257.                 $this->em->refresh($c);
  258.                 $i->addSchoolCycle($c);
  259.             }
  260.             $i->setSchoolType($stype);
  261.             $i->setSchoolReligion($sreli);
  262.             $i->setSchoolLanguage($slang);
  263.             if($i->getIsEducati()){
  264.                 if(file_exists($this->params->get('projectDir').'/../'.$this->params->get('school_folder').'/'.$i->getSlug())){
  265.                     $i->setOpenLink($this->params->get('school_root_path').$i->getSlug().'/public');
  266.                 }
  267.             }
  268.             else{
  269.                 if($i->getLink()!=null && $i->getLink()!= '' ){
  270.                     $i->setOpenLink($i->getLink());
  271.                 }
  272.                 else{
  273.                     $i->setOpenLink('#');
  274.                 }
  275.             }
  276.             $schools[] = $this->mycontainer->get(MySerializer::class)->singleObjectToArray($i,'school_all');
  277.         }
  278.         return new JsonResponse(['data'=>$schools,'message'=>''],201);
  279.     }
  280.     public function cgu():Response
  281.     {
  282.         return $this->render('cgu.html.twig'$this->siteInfo);
  283.     }
  284.     public function getOneEntity(Request $request,$entity$id): JsonResponse{
  285.         switch ($entity){
  286.             case 'article':
  287.                 $class Article::class;
  288.                 $trans true;
  289.                 $group 'article_all';
  290.                 break;
  291.             case 'category':
  292.                 $class ArticleCategory::class;
  293.                 $trans true;
  294.                 $group 'category_all';
  295.                 break;
  296.             case 'ads':
  297.                 $class Ads::class;
  298.                 $trans true;
  299.                 $group 'ads_all';
  300.                 break;
  301.             case 'phone':
  302.                 $class Phone::class;
  303.                 $trans false;
  304.                 $group 'phone_all';
  305.                 break;
  306.             case 'open_hour':
  307.                 $class OpenDay::class;
  308.                 $trans false;
  309.                 $group 'day_all';
  310.                 break;
  311.             default:
  312.                 return new JsonResponse(["data"=>null,"message"=>"bad object"],401);
  313.         }
  314.         $item $this->em->getRepository($class)->findOneBy(['id'=>$id]);
  315.         if($trans){
  316.             $item->setTranslatableLocale($this->locale);
  317.             $this->em->refresh($item);
  318.         }
  319.         if($item !== null){
  320.             $data $this->mycontainer->get(MySerializer::class)->singleObjectToArray($item,$group);
  321.             return new JsonResponse(['data'=>$data,'message'=>''],201);
  322.         }
  323.         return new JsonResponse(["data"=>null,"message"=>$this->mycontainer->get('translator')->trans('object_not_found')],401);
  324.     }
  325.     public function getLatestArticle(Request $request,$limit=10,$offset=0): JsonResponse{
  326.         $tot $this->em->getRepository(Article::class)->countAll();
  327.         $total $tot[0]['nb'];
  328.         $item $this->em->getRepository(Article::class)->findBy(['isActive'=>true],['id'=>'DESC'],$limit,$offset);
  329.         $lang $request->query->get('lang');
  330.         if(!in_array($lang,$this->languages)){
  331.             $lang 'second';
  332.         }
  333.         foreach ($item as $i){
  334.             $i->setTranslatableLocale($lang);
  335.             $this->em->refresh($i);
  336.         }
  337.         if(count($item)>0){
  338.             $data $this->mycontainer->get(MySerializer::class)->multipleObjectToArray($item,'article_all');
  339.             return new JsonResponse(['data'=>$data,'message'=>'',"total"=>$total],201);
  340.         }
  341.         return new JsonResponse(["data"=>[],"message"=>$this->mycontainer->get('translator')->trans('object_not_found'),"total"=>$total],201);
  342.     }
  343.     public function getLatestNotification(Request $request): JsonResponse{
  344.         $item $this->em->getRepository(Notification::class)->findBy(['isActive'=>true],['id'=>'DESC']);
  345.         $data = [];
  346.         $now = new \DateTime();
  347.         $lang $request->query->get('lang');
  348.         if(!in_array($lang,$this->languages)){
  349.             $lang 'second';
  350.         }
  351.         foreach ($item as $i){
  352.             if($i->getExpiredAt() === null){
  353.                 $i->setTranslatableLocale($lang);
  354.                 $this->em->refresh($i);
  355.                 $data[]=$i;
  356.             }
  357.             else{
  358.                 if($i->getExpiredAt()>= $now){
  359.                     $i->setTranslatableLocale($lang);
  360.                     $this->em->refresh($i);
  361.                     $data[]=$i;
  362.                 }
  363.             }
  364.         }
  365.         if(count($data)>0){
  366.             $send $this->mycontainer->get(MySerializer::class)->multipleObjectToArray($item,'notif_all');
  367.             return new JsonResponse(['data'=>$send,'message'=>''],201);
  368.         }
  369.         return new JsonResponse(["data"=>[],"message"=>$this->mycontainer->get('translator')->trans('object_not_found')],201);
  370.     }
  371.     public function showArticle(Request $request$slug){
  372.         $referer $request->headers->get('referer');
  373.         $article $this->em->getRepository(Article::class)->findOneBy(['slug'=>$slug]);
  374.         if($article === null){
  375.             $this->addFlash(
  376.                 'notice',
  377.                 $this->mycontainer->get('translator')->trans('page_not_found')
  378.             );
  379.             return $this->redirect($referer ?? '/');
  380.         }
  381.         $article->setTranslatableLocale($this->locale);
  382.         $this->em->refresh($article);
  383.         $recents $this->em->getRepository(Article::class)->findRecentExcept($article->getId());
  384.         foreach ($recents as $n){
  385.             $cat $n->getCategory();
  386.             $cat->setTranslatableLocale($this->locale);
  387.             $this->em->refresh($cat);
  388.             $n->setTranslatableLocale($this->locale);
  389.             $this->em->refresh($n);
  390.             $n->setCategory($cat);
  391.         }
  392.         $this->siteInfo['article'] = $article;
  393.         $this->siteInfo['recents'] = $recents;
  394.         $social = new SocialMedia();
  395.         $links $social->GetSocialMediaSiteLinks_WithShareLinks([
  396.             'url'=>$this->bag->get('base_url').$this->generateUrl('blog_show_article',['slug'=>$article->getSlug()]),
  397.             'title'=>$article->getTitle()
  398.         ]);
  399.         $this->siteInfo['links'] = $links;
  400.         return $this->render('blog/show_article_model_1.html.twig'$this->siteInfo);
  401.     }
  402.     public function showArticleByUser(Request $request,$idPaginatorInterface $paginator){
  403.         $referer $request->headers->get('referer');
  404.         $tab explode('-',$id);
  405.         $user $this->em->getRepository(User::class)->findOneBy(['id'=>$tab[array_key_last($tab)]]);
  406.         if($user === null){
  407.             $this->addFlash(
  408.                 'notice',
  409.                 $this->mycontainer->get('translator')->trans('user_not_found')
  410.             );
  411.             return $this->redirect($referer ?? '/');
  412.         }
  413.         $entities2 $this->em->getRepository(Article::class)->findBy(['isActive'=>true,'stage'=>1,'user'=>$user]);
  414.         foreach ($entities2 as $n){
  415.             $cat $n->getCategory();
  416.             $cat->setTranslatableLocale($this->locale);
  417.             $this->em->refresh($cat);
  418.             $n->setTranslatableLocale($this->locale);
  419.             $this->em->refresh($n);
  420.             $n->setCategory($cat);
  421.         }
  422.         $articles $paginator->paginate(
  423.             $entities2,$request->query->getInt('page'1), 10
  424.         );
  425.         $entities $this->em->getRepository(ArticleCategory::class)->findBy(['isActive'=>true,'stage'=>1]);
  426.         foreach ($entities as $n){
  427.             $n->setTranslatableLocale($this->locale);
  428.             $this->em->refresh($n);
  429.         }
  430.         $this->siteInfo['articles'] = $articles;
  431.         $this->siteInfo['categories'] = $entities;
  432.         $this->siteInfo['user'] = $user;
  433.         return $this->render('blog/articles_user_model_1.html.twig'$this->siteInfo);
  434.     }
  435.     public function blog(Request $requestPaginatorInterface $paginator){
  436.         $entities $this->em->getRepository(ArticleCategory::class)->findBy(['isActive'=>true]);
  437.         $entities2 $this->em->getRepository(Article::class)->findBy(['isActive'=>true],['id'=>'DESC']);
  438.         $notifs $this->em->getRepository(Notification::class)->findBy(['isActive'=>true],['date'=>'DESC']);
  439.         foreach ($notifs as $n){
  440.             $n->setTranslatableLocale($this->locale);
  441.             $this->em->refresh($n);
  442.         }
  443.         foreach ($entities as $n){
  444.             $n->setTranslatableLocale($this->locale);
  445.             $this->em->refresh($n);
  446.         }
  447.         foreach ($entities2 as $n){
  448.             $cat $n->getCategory();
  449.             $cat->setTranslatableLocale($this->locale);
  450.             $this->em->refresh($cat);
  451.             $n->setTranslatableLocale($this->locale);
  452.             $this->em->refresh($n);
  453.             $n->setCategory($cat);
  454.         }
  455.         $this->siteInfo['date_now'] =new \DateTime();
  456.         $articles $paginator->paginate(
  457.             $entities2,$request->query->getInt('page'1), 10
  458.         );
  459.         $this->siteInfo['categories'] = $entities;
  460.         $this->siteInfo['articles'] = $articles;
  461.         $this->siteInfo['school_notifs'] =$notifs;
  462.         return $this->render('blog/articles.html.twig'$this->siteInfo);
  463.     }
  464.     public function showArticleByCategory(Request $request,$slugPaginatorInterface $paginator){
  465.         $referer $request->headers->get('referer');
  466.         $cat $this->em->getRepository(ArticleCategory::class)->findOneBy(['slug'=>$slug]);
  467.         if($cat === null){
  468.             $this->addFlash(
  469.                 'notice',
  470.                 $this->mycontainer->get('translator')->trans('category_not_found')
  471.             );
  472.             return $this->redirect($referer ?? '/');
  473.         }
  474.         $cat->setTranslatableLocale($this->locale);
  475.         $this->em->refresh($cat);
  476.         $entities2 $this->em->getRepository(Article::class)->findBy(['isActive'=>true,'category'=>$cat]);
  477.         foreach ($entities2 as $n){
  478.             $cat $n->getCategory();
  479.             $cat->setTranslatableLocale($this->locale);
  480.             $this->em->refresh($cat);
  481.             $n->setTranslatableLocale($this->locale);
  482.             $this->em->refresh($n);
  483.             $n->setCategory($cat);
  484.         }
  485.         $articles $paginator->paginate(
  486.             $entities2,$request->query->getInt('page'1), 10
  487.         );
  488.         $entities $this->em->getRepository(ArticleCategory::class)->findBy(['isActive'=>true]);
  489.         foreach ($entities as $n){
  490.             $n->setTranslatableLocale($this->locale);
  491.             $this->em->refresh($n);
  492.         }
  493.         $this->siteInfo['articles'] = $articles;
  494.         $this->siteInfo['categories'] = $entities;
  495.         $this->siteInfo['current_category'] = $cat;
  496.         return $this->render('blog/articles_category.html.twig'$this->siteInfo);
  497.     }
  498.     public function about():Response
  499.     {
  500.         return $this->render('about.html.twig'$this->siteInfo);
  501.     }
  502.     public function contact():Response
  503.     {
  504.         $entities $this->em->getRepository(Phone::class)->findBy(['isActive'=>true]);
  505.         $entities2 $this->em->getRepository(OpenDay::class)->findBy(['isActive'=>true]);
  506.         $this->siteInfo['phones'] = $entities;
  507.         $this->siteInfo['days'] = $entities2;
  508.         return $this->render('contact.html.twig'$this->siteInfo);
  509.     }
  510.     // listes des annonces
  511.     // afficher une annonce
  512.     public function getAds(Request $request,$limit=8,$offset=0): JsonResponse{
  513.         $item $this->em->getRepository(Ads::class)->findBy(['isActive'=>true],['position'=>'ASC','id'=>'DESC']);
  514.         $ok = [];
  515.         $res = [];
  516.         $now = new \DateTime();
  517.         $lang $request->query->get('lang');
  518.         if(!in_array($lang,$this->languages)){
  519.             $lang 'second';
  520.         }
  521.         foreach ($item as $i){
  522.             if($i->getStartAt() !== null){
  523.                 if($i->getStartAt() <= $now){
  524.                     if($i->getExpiredAt() !== null){
  525.                         if($i->getExpiredAt()>= $now){
  526.                             $i->setTranslatableLocale($lang);
  527.                             $this->em->refresh($i);
  528.                             $ok[]=$i;
  529.                         }
  530.                     }
  531.                     else{
  532.                         $i->setTranslatableLocale($lang);
  533.                         $this->em->refresh($i);
  534.                         $ok[]=$i;
  535.                     }
  536.                 }
  537.             }
  538.             else{
  539.                 if($i->getExpiredAt() !== null){
  540.                     if($i->getExpiredAt()>= $now){
  541.                         $i->setTranslatableLocale($lang);
  542.                         $this->em->refresh($i);
  543.                         $ok[]=$i;
  544.                     }
  545.                 }
  546.                 else{
  547.                     $i->setTranslatableLocale($lang);
  548.                     $this->em->refresh($i);
  549.                     $ok[]=$i;
  550.                 }
  551.             }
  552.         }
  553.         if(count($ok)>0){
  554.             foreach ($ok as $k => $i){
  555.                 if($k >=$offset && $k$limit){
  556.                     $res[] = $this->mycontainer->get(MySerializer::class)->singleObjectToArray($i,'ads_all');
  557.                 }
  558.             }
  559.         }
  560.         return new JsonResponse(['data'=>$res,'message'=>''],201);
  561.     }
  562.     public function displayAds(Request $request$slug):Response
  563.     {
  564.         $referer $request->headers->get('referer');
  565.         $ads $this->em->getRepository(Ads::class)->findOneBy(['slug'=>$slug]);
  566.         if($ads === null){
  567.             $this->addFlash(
  568.                 'notice',
  569.                 $this->mycontainer->get('translator')->trans('object_not_found')
  570.             );
  571.             return $this->redirect($referer ?? '/');
  572.         }
  573.         $ads->incNbView();
  574.         $this->em->persist($ads);
  575.         $this->em->flush();
  576.         if(strlen($ads->getLink())>=4){
  577.             return $this->redirect($ads->getLink());
  578.         }else{
  579.             return $this->redirectToRoute('index');
  580.         }
  581.     }
  582. }