src/Controller/Front/ProjectFrontController.php line 72

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  9. use Symfony\Contracts\Translation\TranslatorInterface;
  10. use App\Entity\Locale;
  11. use App\Entity\Projects;
  12. use App\Entity\ProjectParts;
  13. use App\Entity\ProjectPartFiles;
  14. use App\Entity\ProjectsLocal;
  15. use App\Entity\Category;
  16. use App\Entity\CategoryLocal;
  17. use App\Service\LocalList;
  18. use Symfony\Component\Routing\RouterInterface;
  19. use App\Repository\ProjectsRepository;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use Symfony\Component\HttpFoundation\Cookie;
  22. class ProjectFrontController extends AbstractController
  23. {
  24.     private $translator;
  25.     protected $entityManager;
  26.     private $repository_project;
  27.     private $localList;
  28.     private $router;
  29.     const max_item_image 4;
  30.     
  31.     
  32.     
  33.     
  34.     
  35.     public function __construct(ProjectsRepository $repository,TranslatorInterface $translator,EntityManagerInterface $entityManager LocalList $localList RouterInterface $router)
  36.     {
  37.         $this->repository_project $repository;
  38.         $this->translator $translator;
  39.         $this->entityManager $entityManager;
  40.         $this->localList $localList;
  41.         $this->router $router;
  42.     }
  43.     
  44.     
  45.     
  46.     
  47.     
  48.     public function FlatRecursiveArray ($childs,array &$tab=null)
  49.     {
  50.         foreach($childs as $key => $child){
  51.             $tab[] = $key;
  52.             
  53.             if($child != null)        $this->FlatRecursiveArray($child $tab);
  54.         }
  55.         
  56.         return $tab;
  57.     }
  58.     
  59.     
  60.     
  61.     
  62.     
  63.     
  64.     /**
  65.      * @Route("/{_locale}", name="index")
  66.     */
  67.     public function index(string $_localeRequest $request)
  68.     {        
  69.         $item_selected $request->cookies->get('item_selected');
  70.         
  71.         $url $request->getUri();
  72.         $this->localList->add_log($url,$item_selected);
  73.         
  74.         if(!$_locale)    $_locale Locale::DEFAULT_LANG;
  75.         
  76.         return $this->redirectToRoute('dashboard',["_locale"=>$_locale]);
  77.     }    
  78.     
  79.     
  80.     
  81.     
  82.     /**
  83.      * @Route("/projects/{_locale}", name="front_projects")
  84.     */
  85.     public function front_projects(string $_localeRequest $request)
  86.     {    
  87.         $item_selected $request->cookies->get('item_selected');
  88.         
  89.         if($request->get("f")){
  90.             $filters $request->get("f");
  91.             $categoriesSlugs explode(" ",$filters);
  92.             $categoriesGroup = array();
  93.             
  94.             foreach($categoriesSlugs as $categorieSlug){
  95.                 if($categorieSlug){
  96.                     $categorie $this->getDoctrine()->getRepository(CategoryLocal::class)->findOneBy(["slug" => $categorieSlug]);
  97.                     
  98.                     if($categorie)        array_push($categoriesGroup$categorie->getCatgeory()->getId());
  99.                 }
  100.             }
  101.             $this->localList->creat_cookie_for_item_selected($categoriesGroup);
  102.             
  103.             $item_selected '[';
  104.             
  105.             foreach ($categoriesGroup as $categorieId){
  106.                 $item_selected .= "'".$categorieId."',";
  107.             }
  108.             
  109.             $item_selected ']';
  110.         }
  111.         
  112.         $locale $this->entityManager->getRepository(Locale::class)->findOneBy(array('iso_code' => $_locale));
  113.         if(!$locale)        return $this->redirectToRoute('front_projects', ['_locale' => Locale::DEFAULT_LANG]);
  114.         
  115.         $list_categories_filters $this->getListCategoryInFilter($item_selected,$locale);
  116.         $url $request->getUri();
  117.         $this->localList->add_log($url,$list_categories_filters);
  118.         
  119.         $Projects_list $this->repository_project->getProjectId([],$locale,0,self::max_item_image);
  120.         $all_projects $this->repository_project->findByLocale($locale);
  121.         
  122.         $category_list_null_parent $this->getDoctrine() ->getRepository(Category::class) ->findBy(array('deleted'=>null 'parent' =>null),array('id' => 'DESC'));
  123.         
  124.         $categrie_list $this->getDoctrine() ->getRepository(Category::class) ->findByLocale($locale);
  125.         $null_parent_categories = array();
  126.         $childs_categories = array();
  127.         $nb_categorie = array();
  128.         $bn_total_categorie = array();
  129.         
  130.         foreach($category_list_null_parent as $key => $category){    
  131.             $childs_corrdonnee = array();
  132.             
  133.             $caterogy_have_parent = array();
  134.             
  135.             $category_nullParent_childs $this->localList->buildTree($categrie_list$category->getId());
  136.             
  137.             $projectsOfCategory =  $this->entityManager->getRepository(Projects::class)->findProjByCategory($category);
  138.             
  139.             $category_nullParent_childs $this->FlatRecursiveArray($category_nullParent_childs);
  140.             
  141.             $bn_total_categorie[$category->getId()] = 0;
  142.             if($category_nullParent_childs)        $bn_total_categorie[$category->getId()] = count($category_nullParent_childs);
  143.                         
  144.             $childs_categories[$category->getId()] = $category_nullParent_childs;
  145.         }
  146.         
  147.         $top_projects_list $this->repository_project->findTopProjectsByLocale($locale);
  148.         
  149.         return $this->render('front/projects/index.html.twig', [
  150.             'controller_name' => $this->translator->trans('Front.Controller.name'),
  151.             'titre_page' => $this->translator->trans('Front.Controller.front_page_title'),
  152.             'Projects_list' => $Projects_list,
  153.             'category_list_null_parent' => $category_list_null_parent,
  154.             'all_projects' => count($all_projects),
  155.             'childs_categories' => $childs_categories,
  156.             "bn_total_categorie"=>$bn_total_categorie,
  157.             "top_projects_list" => $top_projects_list,
  158.             'item_selected'=> $item_selected
  159.         ]);
  160.     }
  161.     
  162.     
  163.     
  164.     
  165.     
  166.     /**
  167.      * @Route("/project/{slug}/{_locale}", name="front_project_details")
  168.      */
  169.     public function front_project_details(Request $request,string $slug string $_locale)
  170.     {    
  171.         $locale $this->entityManager->getRepository(Locale::class)->findOneBy(array('iso_code' => $_locale));
  172.     
  173.         $item_selected $request->cookies->get('item_selected');
  174.         
  175.         $list_categories_filters $this->getListCategoryInFilter($item_selected,$locale);
  176.         $url $request->getUri();
  177.         $this->localList->add_log($url,$list_categories_filters);
  178.         
  179.         if(!$locale){
  180.             return $this->redirectToRoute('front_project_details', [
  181.                 'slug' => $slug,
  182.                 '_locale' => Locale::DEFAULT_LANG
  183.             ]);
  184.         }
  185.         
  186.         $projectlocale $this->entityManager->getRepository(ProjectsLocal::class)->findBy(array('slug' => $slug));
  187.         
  188.         if(!$projectlocale){
  189.             return $this->redirectToRoute('front_projects', [
  190.                 '_locale' => Locale::DEFAULT_LANG
  191.             ]);
  192.         }
  193.         
  194.         $project $this->repository_project->findProjBySlug($slug);
  195.         
  196.         $projectParts $this->entityManager->getRepository(ProjectParts::class)->getActiveItemProj($project,$locale);
  197.         
  198.         $part_images $this->localList->getProjectParts($projectParts);
  199.     
  200.                 
  201.         return $this->render('front/projects/details.html.twig', [
  202.             'controller_name' => $this->translator->trans('Front.Controller.name'),
  203.             'project' => $project,
  204.             'date_creation' => $this->localList->FormattedCreationDate($project->getDateRealisation() , $_locale),
  205.             'projectParts' => $projectParts,
  206.             'part_images' => $part_images,
  207.             'titre_page' => $this->translator->trans('Project.Controller.index.titre_page'),
  208.         ]);
  209.     }
  210.     
  211.     
  212.     
  213.     
  214.     
  215.     
  216.     
  217.     /**
  218.      * @Route("/project/creat_tags_btn_ajax", options = { "expose" = true },name="creat_tags_btn_ajax")
  219.     */
  220.     public function creat_tags_btn_ajax(Request $request)
  221.     {    
  222.         $html "";
  223.         
  224.         $_locale $request->get("local");
  225.         
  226.         $categoriesGroup =  $request->get("liste_categorie_selected");
  227.         
  228.         if( $request->get("filtre") == true )        $this->localList->creat_cookie_for_item_selected($categoriesGroup);
  229.         
  230.         if($categoriesGroup == null && $request->get("filtre")== true){
  231.             $this->localList->creat_cookie_for_item_selected(null);            
  232.         }else{
  233.             $locale $this->entityManager->getRepository(Locale::class)->findOneBy(array('iso_code' => $_locale));
  234.             $categories $this->entityManager->getRepository(Category::class)->findByLocaleAndIdCategorie($locale,$categoriesGroup);
  235.             
  236.             $html  $this->get('twig')->render('front/projects/btn_tags.html.twig', [
  237.                 'categories' =>$categories,
  238.             ]);
  239.         }
  240.         return new JsonResponse($html);
  241.     }
  242.     
  243.     
  244.     
  245.     
  246.     
  247.     
  248.     
  249.     
  250.     /**
  251.      * @Route("/project/update_cookie_item_selected", options = { "expose" = true },name="update_cookie_item_selected")
  252.     */
  253.     public function update_cookie_item_selected(Request $request)
  254.     {    
  255.         $response = new Response();
  256.         
  257.         $categorie $request->get("categorie_selected");
  258.             
  259.         $cookie = new Cookie('item_selected'json_encode($categorie), time() + (365 24 60 60), '/'nullfalsefalse);
  260.         $response->headers->setCookie($cookie);            
  261.         
  262.         $response->sendHeaders();
  263.         return new Response('ok');
  264.     }
  265.     
  266.     /**
  267.      * @Route("/project/project_charger_ajax", options = { "expose" = true },name="project_charger_ajax")
  268.     */
  269.     public function project_charger_ajax(Request $request)
  270.     {    
  271.         $ChargmentPosition $request->get("position");
  272.         
  273.         $_locale $request->get("local");
  274.         
  275.         $categoriesGroup = [];
  276.         
  277.         $current_projet null;
  278.     
  279.         if($request->get("current_projet") != null$current_projet $request->get("current_projet");
  280.         
  281.         if ($request->get("liste_categorie_selected") != null)        $categoriesGroup =  $request->get("liste_categorie_selected");
  282.     
  283.         $locale $this->entityManager->getRepository(Locale::class)->findOneBy(array('iso_code' => $_locale));
  284.         $others true;
  285.         $Projects_path = array ();
  286.         $Projects_list $this->repository_project->getProjectId($categoriesGroup$locale,intval($ChargmentPosition));
  287.         
  288.         $project_liste_count count($Projects_list["project"]);
  289.         
  290.         if($Projects_list["count"] <= $project_liste_count)        $others false;
  291.         $html $this->get('twig')->render('front/projects/add_projects.html.twig', [
  292.             'Projects_list' =>$Projects_list["project"],
  293.             "locale"=>$_locale,
  294.             "current_projet"=>$current_projet,
  295.             "localList"=>$this->localList
  296.                 
  297.         ]);
  298.         
  299.         $Projects_path = array(
  300.             "html_content" => $html,
  301.             "others_test" => $others,
  302.             "count"=>$project_liste_count
  303.             
  304.         );
  305.         
  306.         return new JsonResponse($Projects_path);
  307.     }
  308.     
  309.     public function getListCategoryInFilter ($itemselected,$locale)
  310.     {
  311.         $categories_ids array_slice(explode('"'$itemselected),1,-1);
  312.         
  313.         foreach (array_keys($categories_ids","true) as $key) {
  314.             unset($categories_ids[$key]);
  315.         }
  316.         
  317.         $list_categories_filters "";
  318.         foreach ($categories_ids as $key => $value){
  319.             if ($value != ","){
  320.                 $category $this->getDoctrine()->getRepository(CategoryLocal::class)->findOneBy(["catgeory" => $value,"locale"=>$locale]);
  321.                 
  322.                 if($category)     $list_categories_filters.=$category->getLibelle()."|";
  323.             }
  324.         }
  325.         
  326.         return $list_categories_filters ;
  327.     }
  328. }
  329. ?>