src/Controller/HomeController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use App\Repository\CenterRepository;
  7. use App\Repository\CategoryRepository;
  8. use App\Repository\ContinentRepository;
  9. use App\Repository\PageRepository;
  10. class HomeController extends AbstractController
  11. {
  12.     
  13.     /**
  14.      * @Route("/legal-notice", name="app_legal")
  15.      */
  16.     //affiche carte
  17.     public function legacyAction(PageRepository $pageRepository): Response
  18.     {
  19.         return $this->render('home/legal.html.twig', array(
  20.             'page'=>$pageRepository->findOneById(1)
  21.         ));
  22.         
  23.         //$response->setSharedMaxAge(3600);
  24.             
  25.         
  26.         
  27.     }
  28.      /**
  29.      * @Route("/", name="app_home")
  30.      */
  31.     //affiche carte
  32.     public function mapAction(CenterRepository $centerRepositoryCategoryRepository $categoryRepository,
  33.                              ContinentRepository $continentRepository): Response
  34.     {
  35.         $centers $centerRepository->findBy(array(), array('id' => 'ASC'));       
  36.         $centers_tri_by_continent $centerRepository->getCenters();
  37.         $categories $categoryRepository->findAll();
  38.         $continent $continentRepository->findby(array(),array('titleen'=>'asc'));
  39.         
  40.         
  41.         $place_init['lat']=48.1399203;$place_init['long']=-3.3841425;
  42.         $code_carte_gps=$this->newcarteutilisateursspeeder($centers,$place_init,0,2);
  43.         
  44.         
  45.         return $this->render('home/index.html.twig', array(
  46.             'code_carte_gps' => $code_carte_gps,
  47.             'centers' => $centers_tri_by_continent,
  48.             'categories' => $categories,
  49.             'continent' => $continent
  50.             ));
  51.         
  52.         //$response->setSharedMaxAge(3600);
  53.             
  54.         
  55.         
  56.     }
  57.     public function listcoordgpsAction($centers){
  58.     
  59.         if(is_array($centers)){
  60.             if ($centers) {
  61.                 
  62.                 $i=0;$nb_no_adress=0;
  63.                 $url_img='/../../../uploads/';
  64.                 //$url_marker='/../../../../img/';//site local
  65.                 $url_marker='/../../../img/';//site en ligne
  66.                 $url_img_from_public 'uploads/';
  67.                 foreach($centers as $center){
  68.                     
  69.                     if(    $center->getGpslong()!=null&&$center->getGpslat()!=null){
  70.                         
  71.                         
  72.                         $html='<div class=\"card\" style=\"width:180px; border-color:'.$center->getCategory()->getColormenu().'\">';
  73.                         if (!$center->GetImages()->isEmpty()){
  74.                             
  75.                             list($width_img$height_img$type_img) = getimagesize($url_img_from_public.$center->GetImages()[0]->GetImage());
  76.                         
  77.                             if($width_img<180){
  78.                                 $html.='<img src=\"'.$url_img.$center->GetImages()[0]->GetImage().'\" class=\"mx-auto \" alt=\" '.$center->GetImages()[0]->GetAlt().' \"  >';
  79.                             }else{
  80.                                 $html.='<img src=\"'.$url_img.$center->GetImages()[0]->GetImage().'\" class=\"img-fluid card-img-top\" alt=\" '.$center->GetImages()[0]->GetAlt().' \" >';
  81.                             }
  82.                         }
  83.                         //$html.='<h4>'.$center->getId().'</h4>';<h4 >'.$center->getTitle1().'</h4>'
  84.                         $html.='<div class=\"card-body center_box \">';
  85.                         $html.='<h3>'.$center->getTitle1().'</h3>';
  86.                         if($center->getTitle2()!=null){$html.='<h4>'.$center->getTitle2().'</h4>';}
  87.                         $html.='<p class=\"card-text color-'.strtolower($center->getCategory()->getTitleen()).'\" >';
  88.                         if($center->getWebsite()!=null){$html.='<a href=\"'.$center->getWebsite().'\" target=\"_blank\" ><i class=\"fas fa-globe fa-2x\" title=\" '.$center->getWebsite().' \"></i></a> ';}
  89.                         if($center->getFacebook()!=null){$html.='<a href=\"'.$center->getFacebook().'\" target=\"_blank\" ><i class=\"fab fa-facebook fa-2x\" title=\" '.$center->getFacebook().' \"></i></a> ';}
  90.                         if($center->getEmail()!=null){$html.='<a href=\"mailto:'.$center->getEmail().'\" target=\"_blank\"><i class=\"fas fa-envelope fa-2x\"></i></a> ';}
  91.                         if($center->getTel()!=null){$html.='<a href=\"tel:'.$center->getTel().'\" ><i class=\"fas fa-phone-square fa-2x\" title=\" '.$center->getTel().'\"></i></a> ';}
  92.                         $html.='<a href=\"#\" onclick=\"gotoCenter(\''.$center->getId().'\',\''.$center->getCategory()->getName().'\',\''.$this->slug($center->getTitle1()).'\');\" class=\"btn btn-sm btn-cat-'.strtolower($center->getCategory()->getTitleen()).'\">see infos</a>';
  93.                         $html.='</p></div></div>';
  94.                         
  95.                         $marker='{
  96.                             url: "'.$url_marker.$center->getCategory()->getUrlimg().'",
  97.                             size: new google.maps.Size(27, 40),
  98.                             origin: new google.maps.Point(0,0),
  99.                             anchor: new google.maps.Point(13.5, 40)
  100.                             }';
  101.                             
  102.                         if($i==0){
  103.                             $list_coord_gps='["'.$center->getTitle1().'",'.$center->getGpslat().','.$center->getGpslong().',"'.$html.'",'.$marker.']';
  104.                         }else{
  105.                             $list_coord_gps.=',["'.$center->getTitle1().'",'.$center->getGpslat().','.$center->getGpslong().',"'.$html.'",'.$marker.']';
  106.                         }
  107.                         $i++;
  108.                     }    
  109.                 }
  110.                     
  111.             }else{
  112.                 $list_coord_gps=null;
  113.             }
  114.         }else{//si pas tableau donc un seul element
  115.             $center=$centers;
  116.             
  117.             if($center->getGpslong()!=null&&$center->getGpslat()!=null){
  118.                 
  119.                 $html='<div><h3>'.$center->getTitle1().'</h3><h3>'.$center->getTitle2().'</h3><a href=\"http://'.$center->getWebsite().'\">'.$center->getWebsite().'</a><br />';
  120.                         
  121.                 $list_coord_gps='["'.$center->getTitle1().'",'.$center->getGpslat().','.$center->getGpslong().',"'.$html.'"]';
  122.                         
  123.             }else{
  124.                 $list_coord_gps=null;
  125.             }    
  126.             
  127.         }    
  128.             return $list_coord_gps;
  129.     }
  130.             
  131.             
  132.             
  133.     
  134.     Public function newcarteutilisateursspeeder($centers,$place_init,$zoom_paysage,$zoom_portrait){
  135.         $code_carte='
  136.         <script type="text/javascript">
  137.             
  138.             var zoom_var;
  139.             zoom_var = zoom_map();
  140.             var options = {
  141.                 center: new google.maps.LatLng('.$place_init['lat'].','.$place_init['long'].'),
  142.                 zoom:2,
  143.                 mapTypeControlOptions: {
  144.                     style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
  145.                     position: google.maps.ControlPosition.TOP_CENTER,
  146.                   },
  147.                 zoomControl: true,
  148.                 zoomControlOptions: {
  149.                     position: google.maps.ControlPosition.right_BOTTOM,
  150.                 },
  151.                 scaleControl: false,
  152.                 streetViewControl: false,
  153.                 streetViewControlOptions: {
  154.                     position: google.maps.ControlPosition.LEFT_TOP,
  155.                   },
  156.                 fullscreenControl: true,
  157.                 
  158.                 mapTypeId: google.maps.MapTypeId.ROADMAP
  159.             };
  160.              
  161.             var map = new google.maps.Map(document.getElementById("map_canvas"), options);
  162.             
  163.             map.addListener(\'zoom_changed\', function() {
  164.                 var currentZoom = map.getZoom();
  165.                 console.log(\'Zoom: \' + currentZoom);
  166.                 
  167.             }); 
  168.             oms = new OverlappingMarkerSpiderfier(map, {markersWontMove: false, markersWontHide: false, keepSpiderfied:true});
  169.             
  170.             var cities = getCities();
  171.             
  172.             var markers = [];
  173.             for (var i = 0; i < cities.length; i++) {
  174.                 var markerOptions = {
  175.                     position: new google.maps.LatLng(cities[i][1], cities[i][2]),
  176.                     title: cities[i][0],
  177.                     city: cities[i],
  178.                     icon: cities[i][4]
  179.                 };
  180.                 var marker = new google.maps.Marker(markerOptions);
  181.                 markers.push(marker);
  182.                 oms.addMarker(marker);
  183.             }
  184.              
  185.            /* var markerClusterer = new MarkerClusterer(map, markers, {
  186.                 maxZoom: 12, // maxZoom set when clustering will stop
  187.                 imagePath: \'https://cdn.rawgit.com/googlemaps/js-marker-clusterer/gh-pages/images/m\'
  188.             });*/
  189.          
  190.             var bounds = new google.maps.LatLngBounds();
  191.             for (var i = 0; i < markers.length; ++i) {
  192.                 bounds.extend(this.markers[i].position);
  193.             }
  194.             map.fitBounds(bounds);
  195.              
  196.             var infoWindow = new google.maps.InfoWindow();
  197.             oms.addListener(\'click\', function(marker, event) {
  198.                 infoWindow.setContent(marker.city[3]);
  199.                 infoWindow.open(map, marker);
  200.             });
  201.             
  202.             declaration_tabs();
  203.              /* google.maps.event.addListener(markerClusterer, \'clusterclick\', function(cluster) {
  204.                 map.fitBounds(cluster.getBounds());
  205.                 if (map.getZoom() > 14) {
  206.                     map.setZoom(14);
  207.                 }
  208.               });*/
  209.             
  210.             
  211.             function getCities() {
  212.                 return ['.$this->listcoordgpsAction($centers).'];
  213.             
  214.             }
  215.             
  216.             function dump(obj) {
  217.             var out = \'\';
  218.             for (var i in obj) {
  219.                 out += i + ": " + obj[i] + "\n";
  220.             }
  221.             
  222.             alert(out);
  223.         
  224.             // or, if you wanted to avoid alerts...
  225.         /*
  226.             var pre = document.createElement(\'pre\');
  227.             pre.innerHTML = out;
  228.             document.body.appendChild(pre)*/
  229.         }
  230.             //cherche marker parmi tableau markers
  231.             function findMarker(title){
  232.                 
  233.                 for( var i = 0, len = markers.length; i < len; i++ ) {
  234.                     if( markers[i][\'title\'] === title ) {
  235.                         //dump(markers[i]);
  236.                         return markers[i];
  237.                         
  238.                     }
  239.                 }    
  240.                 
  241.                 
  242.                 
  243.             }
  244.             
  245.             function declaration_tabs(){
  246.                 var triggerTabList = [].slice.call(document.querySelectorAll(\'#myTab a\'))
  247.                 triggerTabList.forEach(function (triggerEl) {
  248.                 var tabTrigger = new bootstrap.Tab(triggerEl)
  249.                     triggerEl.addEventListener(\'click\', function (event) {
  250.                         event.preventDefault()
  251.                         tabTrigger.show()
  252.                     })
  253.                 })
  254.             }
  255.             //ouvre tab où se situe map et ouvre infoWindow
  256.             function gotoPoint(myTitle){
  257.             
  258.             //$(\'#myTab a[href = "#map"]\').tab("show");
  259.             var triggerEl = document.querySelector(\'#myTab a[href = "#map"]\');
  260.                 
  261.                 triggerEl.addEventListener(\'shown.bs.tab\', function (event) {
  262.                     //alert(id);
  263.                     location.href = "#map";
  264.                     var ourMarker = findMarker(myTitle);
  265.                     google.maps.event.trigger(ourMarker, \'click\');
  266.                     if (typeof( window.infoopened ) == \'undefined\'){google.maps.event.trigger(ourMarker, \'click\');}
  267.                         
  268.                   });
  269.             bootstrap.Tab.getInstance(triggerEl).show(); // Select tab by name
  270.             
  271.             
  272.             }
  273.             
  274.             /*function jump(h){
  275.                 var url = location.href;               //Save down the URL without hash.
  276.                 location.href = "#"+h;alert(url);                 //Go to the target element.
  277.                 //history.replaceState(null,null,url);   //Don\'t like hashes. Changing it back.
  278.             }*/
  279.             function scrollToCenter(id){
  280.                 
  281.                 var nav = $(\'div[name = "\'+id+\'"]\');
  282.                 console.log(\'id:\'+id);console.log(\'objet:\'+nav.length);//console.log(\'length position:\'+nav.offset().top);
  283.                 if (nav.length) {
  284.                     
  285.                     var contentNav = nav.offset().top;//alert(contentNav.top);
  286.                     $(\'html, body\').animate({scrollTop: contentNav-75}, \'slow\');
  287.                     //window.scrollTo(contentNav, 0);
  288.                     var divCentre=$(\'#\'+id);//.parent(".contenair_address");
  289.                     //dump(divCentre);
  290.                     divCentre.addClass("gotocentre").removeClass("contenair_address_background");
  291.                     $(\'.contenair_address\').removeClass("contenair_address_hover");
  292.                     setTimeout(function() { 
  293.                         divCentre.removeClass("gotocentre", 10000).addClass("contenair_address_background").addClass("contenair_address_hover");
  294.                         $(\'.contenair_address\').addClass("contenair_address_hover");
  295.                         },5000);
  296.                     
  297.                     //return false;
  298.                     
  299.                 }//else{alert("no");}
  300.             }
  301.             //ouvre tab où se situe center et va au centre
  302.             function gotoCenter(id,category,url){
  303.                 //dump(category);
  304.                 //hash = document.location.hash;
  305.                 //$(\'#myTab a[href = "#\'+category+\'"]\').tab("show");
  306.                 
  307.                 //debut code bootstrap pour changer de tab
  308.                 
  309.                 var triggerEl = document.querySelector(\'#myTab a[href="#\'+category+\'"]\');
  310.                 
  311.                 triggerEl.addEventListener(\'shown.bs.tab\',function (event) {
  312.                     //alert(id);
  313.                     closeFullscreen()
  314.                     location.href = "#"+url;
  315.                     scrollToCenter(id);
  316.                         
  317.                   }, {once:true});
  318.                 bootstrap.Tab.getInstance(triggerEl).show(); // Select tab by name
  319.                 
  320.                 //fin code bootstrap pour changer de tab    
  321.             
  322.             }
  323.             
  324.             /* Close fullscreen */
  325.             function closeFullscreen() {
  326.                 if (document.exitFullscreen) {
  327.                     document.exitFullscreen();
  328.                 } else if (document.webkitExitFullscreen) { /* Safari */
  329.                     document.webkitExitFullscreen();
  330.                 } else if (document.msExitFullscreen) { /* IE11 */
  331.                     document.msExitFullscreen();
  332.                 }
  333.             }
  334.             function zoom_map (){
  335.                 if(window.innerHeight > window.innerWidth){
  336.                     return '.$zoom_portrait.';
  337.                     return '.$zoom_paysage.';
  338.                 }
  339.             }
  340.             var listener = google.maps.event.addListener(map, "idle", function() { 
  341.                 map.setZoom(zoom_var); 
  342.                 google.maps.event.removeListener(listener); 
  343.            });
  344.            
  345.            
  346.                       
  347.         </script>
  348.         ';
  349.         
  350.         return $code_carte;
  351.     }
  352.         
  353.     /* Remplace caractères accentués d'une chaine */
  354.     private function remove_accent($str)
  355. {
  356.   $a = array('À''Á''Â''Ã''Ä''Å''Æ''Ç''È''É''Ê''Ë''Ì''Í''Î''Ï''Ð',
  357.                 'Ñ''Ò''Ó''Ô''Õ''Ö''Ø''Ù''Ú''Û''Ü''Ý''ß''à''á''â''ã',
  358.                 'ä''å''æ''ç''è''é''ê''ë''ì''í''î''ï''ñ''ò''ó''ô''õ',
  359.                 'ö''ø''ù''ú''û''ü''ý''ÿ''Ā''ā''Ă''ă''Ą''ą''Ć''ć''Ĉ',
  360.                 'ĉ''Ċ''ċ''Č''č''Ď''ď''Đ''đ''Ē''ē''Ĕ''ĕ''Ė''ė''Ę''ę',
  361.                 'Ě''ě''Ĝ''ĝ''Ğ''ğ''Ġ''ġ''Ģ''ģ''Ĥ''ĥ''Ħ''ħ''Ĩ''ĩ''Ī''ī',
  362.                 'Ĭ''ĭ''Į''į''İ''ı''IJ''ij''Ĵ''ĵ''Ķ''ķ''Ĺ''ĺ''Ļ''ļ''Ľ''ľ',
  363.                 'Ŀ''ŀ''Ł''ł''Ń''ń''Ņ''ņ''Ň''ň''ʼn''Ō''ō''Ŏ''ŏ''Ő''ő''Œ',
  364.                 'œ''Ŕ''ŕ''Ŗ''ŗ''Ř''ř''Ś''ś''Ŝ''ŝ''Ş''ş''Š''š''Ţ''ţ''Ť',
  365.                 'ť''Ŧ''ŧ''Ũ''ũ''Ū''ū''Ŭ''ŭ''Ů''ů''Ű''ű''Ų''ų''Ŵ''ŵ''Ŷ',
  366.                 'ŷ''Ÿ''Ź''ź''Ż''ż''Ž''ž''ſ''ƒ''Ơ''ơ''Ư''ư''Ǎ''ǎ''Ǐ''ǐ',
  367.                 'Ǒ''ǒ''Ǔ''ǔ''Ǖ''ǖ''Ǘ''ǘ''Ǚ''ǚ''Ǜ''ǜ''Ǻ''ǻ''Ǽ''ǽ''Ǿ''ǿ');
  368.   $b = array('A''A''A''A''A''A''AE''C''E''E''E''E''I''I''I''I''D''N''O',
  369.                 'O''O''O''O''O''U''U''U''U''Y''s''a''a''a''a''a''a''ae''c',
  370.                 'e''e''e''e''i''i''i''i''n''o''o''o''o''o''o''u''u''u''u',
  371.                 'y''y''A''a''A''a''A''a''C''c''C''c''C''c''C''c''D''d''D',
  372.                 'd''E''e''E''e''E''e''E''e''E''e''G''g''G''g''G''g''G''g',
  373.                 'H''h''H''h''I''i''I''i''I''i''I''i''I''i''IJ''ij''J''j''K',
  374.                 'k''L''l''L''l''L''l''L''l''L''l''N''n''N''n''N''n''n''O''o',
  375.                 'O''o''O''o''OE''oe''R''r''R''r''R''r''S''s''S''s''S''s''S',
  376.                 's''T''t''T''t''T''t''U''u''U''u''U''u''U''u''U''u''U''u''W',
  377.                 'w''Y''y''Y''Z''z''Z''z''Z''z''s''f''O''o''U''u''A''a''I''i',
  378.                 'O''o''U''u''U''u''U''u''U''u''U''u''A''a''AE''ae''O''o');
  379.   return str_replace($a$b$str);
  380. }
  381. private function slug($str){
  382.   return mb_strtolower(preg_replace(array('/[^a-zA-Z0-9 \'-]/''/[ -\']+/''/^-|-$/'),
  383.   array('''-'''), $this->remove_accent($str)));
  384. }
  385. }