<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\CenterRepository;
use App\Repository\CategoryRepository;
use App\Repository\ContinentRepository;
use App\Repository\PageRepository;
class HomeController extends AbstractController
{
/**
* @Route("/legal-notice", name="app_legal")
*/
//affiche carte
public function legacyAction(PageRepository $pageRepository): Response
{
return $this->render('home/legal.html.twig', array(
'page'=>$pageRepository->findOneById(1)
));
//$response->setSharedMaxAge(3600);
}
/**
* @Route("/", name="app_home")
*/
//affiche carte
public function mapAction(CenterRepository $centerRepository, CategoryRepository $categoryRepository,
ContinentRepository $continentRepository): Response
{
$centers = $centerRepository->findBy(array(), array('id' => 'ASC'));
$centers_tri_by_continent = $centerRepository->getCenters();
$categories = $categoryRepository->findAll();
$continent = $continentRepository->findby(array(),array('titleen'=>'asc'));
$place_init['lat']=48.1399203;$place_init['long']=-3.3841425;
$code_carte_gps=$this->newcarteutilisateursspeeder($centers,$place_init,0,2);
return $this->render('home/index.html.twig', array(
'code_carte_gps' => $code_carte_gps,
'centers' => $centers_tri_by_continent,
'categories' => $categories,
'continent' => $continent
));
//$response->setSharedMaxAge(3600);
}
public function listcoordgpsAction($centers){
if(is_array($centers)){
if ($centers) {
$i=0;$nb_no_adress=0;
$url_img='/../../../uploads/';
//$url_marker='/../../../../img/';//site local
$url_marker='/../../../img/';//site en ligne
$url_img_from_public = 'uploads/';
foreach($centers as $center){
if( $center->getGpslong()!=null&&$center->getGpslat()!=null){
$html='<div class=\"card\" style=\"width:180px; border-color:'.$center->getCategory()->getColormenu().'\">';
if (!$center->GetImages()->isEmpty()){
list($width_img, $height_img, $type_img) = getimagesize($url_img_from_public.$center->GetImages()[0]->GetImage());
if($width_img<180){
$html.='<img src=\"'.$url_img.$center->GetImages()[0]->GetImage().'\" class=\"mx-auto \" alt=\" '.$center->GetImages()[0]->GetAlt().' \" >';
}else{
$html.='<img src=\"'.$url_img.$center->GetImages()[0]->GetImage().'\" class=\"img-fluid card-img-top\" alt=\" '.$center->GetImages()[0]->GetAlt().' \" >';
}
}
//$html.='<h4>'.$center->getId().'</h4>';<h4 >'.$center->getTitle1().'</h4>'
$html.='<div class=\"card-body center_box \">';
$html.='<h3>'.$center->getTitle1().'</h3>';
if($center->getTitle2()!=null){$html.='<h4>'.$center->getTitle2().'</h4>';}
$html.='<p class=\"card-text color-'.strtolower($center->getCategory()->getTitleen()).'\" >';
if($center->getWebsite()!=null){$html.='<a href=\"'.$center->getWebsite().'\" target=\"_blank\" ><i class=\"fas fa-globe fa-2x\" title=\" '.$center->getWebsite().' \"></i></a> ';}
if($center->getFacebook()!=null){$html.='<a href=\"'.$center->getFacebook().'\" target=\"_blank\" ><i class=\"fab fa-facebook fa-2x\" title=\" '.$center->getFacebook().' \"></i></a> ';}
if($center->getEmail()!=null){$html.='<a href=\"mailto:'.$center->getEmail().'\" target=\"_blank\"><i class=\"fas fa-envelope fa-2x\"></i></a> ';}
if($center->getTel()!=null){$html.='<a href=\"tel:'.$center->getTel().'\" ><i class=\"fas fa-phone-square fa-2x\" title=\" '.$center->getTel().'\"></i></a> ';}
$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>';
$html.='</p></div></div>';
$marker='{
url: "'.$url_marker.$center->getCategory()->getUrlimg().'",
size: new google.maps.Size(27, 40),
origin: new google.maps.Point(0,0),
anchor: new google.maps.Point(13.5, 40)
}';
if($i==0){
$list_coord_gps='["'.$center->getTitle1().'",'.$center->getGpslat().','.$center->getGpslong().',"'.$html.'",'.$marker.']';
}else{
$list_coord_gps.=',["'.$center->getTitle1().'",'.$center->getGpslat().','.$center->getGpslong().',"'.$html.'",'.$marker.']';
}
$i++;
}
}
}else{
$list_coord_gps=null;
}
}else{//si pas tableau donc un seul element
$center=$centers;
if($center->getGpslong()!=null&&$center->getGpslat()!=null){
$html='<div><h3>'.$center->getTitle1().'</h3><h3>'.$center->getTitle2().'</h3><a href=\"http://'.$center->getWebsite().'\">'.$center->getWebsite().'</a><br />';
$list_coord_gps='["'.$center->getTitle1().'",'.$center->getGpslat().','.$center->getGpslong().',"'.$html.'"]';
}else{
$list_coord_gps=null;
}
}
return $list_coord_gps;
}
Public function newcarteutilisateursspeeder($centers,$place_init,$zoom_paysage,$zoom_portrait){
$code_carte='
<script type="text/javascript">
var zoom_var;
zoom_var = zoom_map();
var options = {
center: new google.maps.LatLng('.$place_init['lat'].','.$place_init['long'].'),
zoom:2,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.TOP_CENTER,
},
zoomControl: true,
zoomControlOptions: {
position: google.maps.ControlPosition.right_BOTTOM,
},
scaleControl: false,
streetViewControl: false,
streetViewControlOptions: {
position: google.maps.ControlPosition.LEFT_TOP,
},
fullscreenControl: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), options);
map.addListener(\'zoom_changed\', function() {
var currentZoom = map.getZoom();
console.log(\'Zoom: \' + currentZoom);
});
oms = new OverlappingMarkerSpiderfier(map, {markersWontMove: false, markersWontHide: false, keepSpiderfied:true});
var cities = getCities();
var markers = [];
for (var i = 0; i < cities.length; i++) {
var markerOptions = {
position: new google.maps.LatLng(cities[i][1], cities[i][2]),
title: cities[i][0],
city: cities[i],
icon: cities[i][4]
};
var marker = new google.maps.Marker(markerOptions);
markers.push(marker);
oms.addMarker(marker);
}
/* var markerClusterer = new MarkerClusterer(map, markers, {
maxZoom: 12, // maxZoom set when clustering will stop
imagePath: \'https://cdn.rawgit.com/googlemaps/js-marker-clusterer/gh-pages/images/m\'
});*/
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < markers.length; ++i) {
bounds.extend(this.markers[i].position);
}
map.fitBounds(bounds);
var infoWindow = new google.maps.InfoWindow();
oms.addListener(\'click\', function(marker, event) {
infoWindow.setContent(marker.city[3]);
infoWindow.open(map, marker);
});
declaration_tabs();
/* google.maps.event.addListener(markerClusterer, \'clusterclick\', function(cluster) {
map.fitBounds(cluster.getBounds());
if (map.getZoom() > 14) {
map.setZoom(14);
}
});*/
function getCities() {
return ['.$this->listcoordgpsAction($centers).'];
}
function dump(obj) {
var out = \'\';
for (var i in obj) {
out += i + ": " + obj[i] + "\n";
}
alert(out);
// or, if you wanted to avoid alerts...
/*
var pre = document.createElement(\'pre\');
pre.innerHTML = out;
document.body.appendChild(pre)*/
}
//cherche marker parmi tableau markers
function findMarker(title){
for( var i = 0, len = markers.length; i < len; i++ ) {
if( markers[i][\'title\'] === title ) {
//dump(markers[i]);
return markers[i];
}
}
}
function declaration_tabs(){
var triggerTabList = [].slice.call(document.querySelectorAll(\'#myTab a\'))
triggerTabList.forEach(function (triggerEl) {
var tabTrigger = new bootstrap.Tab(triggerEl)
triggerEl.addEventListener(\'click\', function (event) {
event.preventDefault()
tabTrigger.show()
})
})
}
//ouvre tab où se situe map et ouvre infoWindow
function gotoPoint(myTitle){
//$(\'#myTab a[href = "#map"]\').tab("show");
var triggerEl = document.querySelector(\'#myTab a[href = "#map"]\');
triggerEl.addEventListener(\'shown.bs.tab\', function (event) {
//alert(id);
location.href = "#map";
var ourMarker = findMarker(myTitle);
google.maps.event.trigger(ourMarker, \'click\');
if (typeof( window.infoopened ) == \'undefined\'){google.maps.event.trigger(ourMarker, \'click\');}
});
bootstrap.Tab.getInstance(triggerEl).show(); // Select tab by name
}
/*function jump(h){
var url = location.href; //Save down the URL without hash.
location.href = "#"+h;alert(url); //Go to the target element.
//history.replaceState(null,null,url); //Don\'t like hashes. Changing it back.
}*/
function scrollToCenter(id){
var nav = $(\'div[name = "\'+id+\'"]\');
console.log(\'id:\'+id);console.log(\'objet:\'+nav.length);//console.log(\'length position:\'+nav.offset().top);
if (nav.length) {
var contentNav = nav.offset().top;//alert(contentNav.top);
$(\'html, body\').animate({scrollTop: contentNav-75}, \'slow\');
//window.scrollTo(contentNav, 0);
var divCentre=$(\'#\'+id);//.parent(".contenair_address");
//dump(divCentre);
divCentre.addClass("gotocentre").removeClass("contenair_address_background");
$(\'.contenair_address\').removeClass("contenair_address_hover");
setTimeout(function() {
divCentre.removeClass("gotocentre", 10000).addClass("contenair_address_background").addClass("contenair_address_hover");
$(\'.contenair_address\').addClass("contenair_address_hover");
},5000);
//return false;
}//else{alert("no");}
}
//ouvre tab où se situe center et va au centre
function gotoCenter(id,category,url){
//dump(category);
//hash = document.location.hash;
//$(\'#myTab a[href = "#\'+category+\'"]\').tab("show");
//debut code bootstrap pour changer de tab
var triggerEl = document.querySelector(\'#myTab a[href="#\'+category+\'"]\');
triggerEl.addEventListener(\'shown.bs.tab\',function (event) {
//alert(id);
closeFullscreen()
location.href = "#"+url;
scrollToCenter(id);
}, {once:true});
bootstrap.Tab.getInstance(triggerEl).show(); // Select tab by name
//fin code bootstrap pour changer de tab
}
/* Close fullscreen */
function closeFullscreen() {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitExitFullscreen) { /* Safari */
document.webkitExitFullscreen();
} else if (document.msExitFullscreen) { /* IE11 */
document.msExitFullscreen();
}
}
function zoom_map (){
if(window.innerHeight > window.innerWidth){
return '.$zoom_portrait.';
return '.$zoom_paysage.';
}
}
var listener = google.maps.event.addListener(map, "idle", function() {
map.setZoom(zoom_var);
google.maps.event.removeListener(listener);
});
</script>
';
return $code_carte;
}
/* Remplace caractères accentués d'une chaine */
private function remove_accent($str)
{
$a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð',
'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã',
'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ',
'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ',
'ĉ', 'Ċ', 'ċ', 'Č', 'č', 'Ď', 'ď', 'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę',
'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ', 'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī',
'Ĭ', 'ĭ', 'Į', 'į', 'İ', 'ı', 'IJ', 'ij', 'Ĵ', 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', 'ľ',
'Ŀ', 'ŀ', 'Ł', 'ł', 'Ń', 'ń', 'Ņ', 'ņ', 'Ň', 'ň', 'ʼn', 'Ō', 'ō', 'Ŏ', 'ŏ', 'Ő', 'ő', 'Œ',
'œ', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 'ś', 'Ŝ', 'ŝ', 'Ş', 'ş', 'Š', 'š', 'Ţ', 'ţ', 'Ť',
'ť', 'Ŧ', 'ŧ', 'Ũ', 'ũ', 'Ū', 'ū', 'Ŭ', 'ŭ', 'Ů', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Ŵ', 'ŵ', 'Ŷ',
'ŷ', 'Ÿ', 'Ź', 'ź', 'Ż', 'ż', 'Ž', 'ž', 'ſ', 'ƒ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ǎ', 'ǎ', 'Ǐ', 'ǐ',
'Ǒ', 'ǒ', 'Ǔ', 'ǔ', 'Ǖ', 'ǖ', 'Ǘ', 'ǘ', 'Ǚ', 'ǚ', 'Ǜ', 'ǜ', 'Ǻ', 'ǻ', 'Ǽ', 'ǽ', 'Ǿ', 'ǿ');
$b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O',
'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c',
'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u',
'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D',
'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g',
'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K',
'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o',
'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S',
's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W',
'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i',
'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
return str_replace($a, $b, $str);
}
private function slug($str){
return mb_strtolower(preg_replace(array('/[^a-zA-Z0-9 \'-]/', '/[ -\']+/', '/^-|-$/'),
array('', '-', ''), $this->remove_accent($str)));
}
}