diff --git a/controllers/d.poi.php b/controllers/d.poi.php index 87d7098..6831b48 100755 --- a/controllers/d.poi.php +++ b/controllers/d.poi.php @@ -1,6 +1,7 @@ -splitted_url[1]) { case "new": - if($user->rankIsHigher("registered")) { - if(isset($_POST['submit'])) { + if ($user->rankIsHigher("registered")) { + if (isset($_POST['submit'])) { $poi->name = $_POST['name']; $poi->locale = $_POST['locale']; $poi->poi_type = $_POST['poi_type']; @@ -19,19 +20,18 @@ switch ($controller->splitted_url[1]) { $poi->ele = $_POST['ele']; $poi->author = $user->id; $poi->source = "kab"; - $poi->is_commentable = isset($_POST['is_commentable'])?'t':'f'; - $poi->parameters = new \stdClass(); - if(!$poi->checkPermalink($_POST['permalink'],1)) { + $poi->is_commentable = isset($_POST['is_commentable']) ? 't' : 'f'; + $poi->parameters = new \stdClass(); // tu pourras y mettre ton JSON plus tard + + if (!$poi->checkPermalink($_POST['permalink'], 1)) { $poi->permalink = $_POST['permalink']; $poi->insert(); header('Location: '.$config['rel_root_folder']."poi/".$poi->permalink); - } - else { + } else { $head['title'] = $poi->name; $error = "permalink"; } - } - else { + } else { $head['title'] = "Nouvel hébergement"; } @@ -42,123 +42,143 @@ switch ($controller->splitted_url[1]) { $head['css'] .= ";../third/leaflet/leaflet.css;../third/leaflet-fullscreen/leaflet.fullscreen.css;../third/leaflet-easybutton/easy-button.css"; $head['js'] = "d.poi_map.js"; - $poi->lat = ""; $poi->lon = ""; $poi->ele = ""; + $poi->lat = ""; + $poi->lon = ""; + $poi->ele = ""; $new = 1; include ($config['views_folder']."d.poi.edit.html"); break; + } else { + $notfound = 1; } - else { - $notfound = 1; - } + break; + case "elevation_proxy": - if(isset($_GET['location'])) { + if (isset($_GET['location'])) { header("Content-Type: application/json;charset=utf-8"); echo(file_get_contents("https://api.opentopodata.org/v1/mapzen?locations=".$_GET['location'])); break; + } else { + $notfound = 1; } - else { - $notfound = 1; - } + break; + default: - // If the page exists - if ($poi->checkPermalink($controller->splitted_url[1],$user->rankIsHigher("premium"))) { - // if (isset($controller->splitted_url[2]) && $controller->splitted_url[2] == "delete" && $user->rankIsHigher("moderator")) { - // $poi->delete(); - // header('Location: '.$config['rel_root_folder']."blog/".$poi->permalink); - // } - // else if (isset($controller->splitted_url[2]) && $controller->splitted_url[2] == "restore" && $user->rankIsHigher("moderator")) { - // $poi->restore(); - // header('Location: '.$config['rel_root_folder']."blog/".$poi->permalink); - // } - // else if (isset($controller->splitted_url[2]) && $controller->splitted_url[2] == "edit" && $user->rankIsHigher("moderator")) { - // if(isset($_POST['submit'])) { - // $poi->content = $_POST['content']; - // $poi->locale = $_POST['locale']; - // $poi->name = $_POST['name']; - // $poi->is_commentable = $_POST['is_commentable']; - // $poi->author = $user->id; - // $poi->update(); - // header('Location: '.$config['rel_root_folder']."blog/".$poi->permalink); - // } - // else { - // $locales = new Kabano\Locales(); - // $locales->getAll(); + // Affichage / édition / suppression d’un POI + if ($poi->checkPermalink($controller->splitted_url[1], $user->rankIsHigher("premium"))) { - // $head['title'] = $poi->name; - // include ($config['views_folder']."d.blog.edit.html"); - // } - // } - // else { - // Manage history of an article - if($user->rankIsHigher("premium")) { - $blogHistory = new Kabano\pois(); - $blogHistory->getHistory($controller->splitted_url[1]); + // Suppression + if (isset($controller->splitted_url[2]) && $controller->splitted_url[2] == "delete" && $user->rankIsHigher("moderator")) { + $poi->delete(); + header('Location: '.$config['rel_root_folder']."poi/".$poi->permalink); + } + + // Restauration + else if (isset($controller->splitted_url[2]) && $controller->splitted_url[2] == "restore" && $user->rankIsHigher("moderator")) { + $poi->restore(); + header('Location: '.$config['rel_root_folder']."poi/".$poi->permalink); + } + + // Édition + else if (isset($controller->splitted_url[2]) && $controller->splitted_url[2] == "edit" && $user->rankIsHigher("moderator")) { + if (isset($_POST['submit'])) { + $poi->name = $_POST['name']; + $poi->locale = $_POST['locale']; + $poi->poi_type = $_POST['poi_type']; + $poi->lat = $_POST['lat']; + $poi->lon = $_POST['lon']; + $poi->ele = $_POST['ele']; + $poi->is_commentable = isset($_POST['is_commentable']) ? 't' : 'f'; + $poi->author = $user->id; + // $poi->parameters = ... // à remplir si tu veux éditer les champs dynamiques + $poi->update(); + header('Location: '.$config['rel_root_folder']."poi/".$poi->permalink); + } else { + $locales = new Kabano\Locales(); + $locales->getAll(); + + $head['third'] = "leaflet/leaflet.js;leaflet-fullscreen/Leaflet.fullscreen.min.js;leaflet-easybutton/easy-button.js"; + $head['css'] .= ";../third/leaflet/leaflet.css;../third/leaflet-fullscreen/leaflet.fullscreen.css;../third/leaflet-easybutton/easy-button.css"; + $head['js'] = "d.poi_map.js"; + + $head['title'] = $poi->name; + include ($config['views_folder']."d.poi.edit.html"); } - if (isset($controller->splitted_url[2]) && is_numeric($controller->splitted_url[2])) - $poi->checkPermalink($controller->splitted_url[1],$user->rankIsHigher("premium"),$controller->splitted_url[2]); + } - // Manage comment creation - if (isset($controller->splitted_url[2]) && $controller->splitted_url[2]=="new_comment") { + // Affichage + else { + // Historique + if ($user->rankIsHigher("premium")) { + $Pois = new Kabano\Pois(); + $Pois->getHistory($controller->splitted_url[1]); + } + if (isset($controller->splitted_url[2]) && is_numeric($controller->splitted_url[2])) { + $poi->checkPermalink($controller->splitted_url[1], $user->rankIsHigher("premium"), $controller->splitted_url[2]); + } + + // Création d’un commentaire + if (isset($controller->splitted_url[2]) && $controller->splitted_url[2] == "new_comment") { if (isset($_POST['submit']) && $user->rankIsHigher("registered")) { - $blogComment = new Kabano\BlogComment(); - $blogComment->locale = $user->locale; - $blogComment->author = $user->id; - $blogComment->content = $poi->content_id; - $blogComment->comment = $_POST['comment']; - $blogComment->insert(); + $Comment = new Kabano\Comment(); + $Comment->locale = $user->locale; + $Comment->author = $user->id; + $Comment->content = $poi->content_id; + $Comment->comment = $_POST['comment']; + $Comment->insert(); } } - // Manage comment deletion - if (isset($controller->splitted_url[2]) && $controller->splitted_url[2]=="delete_comment") { + // Suppression d’un commentaire + if (isset($controller->splitted_url[2]) && $controller->splitted_url[2] == "delete_comment") { if (isset($controller->splitted_url[3]) && is_numeric($controller->splitted_url[3])) { - $blogComment = new Kabano\BlogComment(); - if($blogComment->checkId($controller->splitted_url[3])) - if ($user->rankIsHigher("moderator") || $user->id == $blogComment->author) - $blogComment->delete(); + $Comment = new Kabano\Comment(); + if ($Comment->checkId($controller->splitted_url[3])) + if ($user->rankIsHigher("moderator") || $user->id == $Comment->author) + $Comment->delete(); } } - // Manage comment restoration - if (isset($controller->splitted_url[2]) && $controller->splitted_url[2]=="restore_comment") { + // Restauration d’un commentaire + if (isset($controller->splitted_url[2]) && $controller->splitted_url[2] == "restore_comment") { if (isset($controller->splitted_url[3]) && is_numeric($controller->splitted_url[3])) { - $blogComment = new Kabano\BlogComment(); - if($blogComment->checkId($controller->splitted_url[3])) - if ($user->rankIsHigher("moderator") || $user->id == $blogComment->author) - $blogComment->restore(); + $Comment = new Kabano\Comment(); + if ($Comment->checkId($controller->splitted_url[3])) + if ($user->rankIsHigher("moderator") || $user->id == $Comment->author) + $Comment->restore(); } } - $poi->md2html(); - - // Manage comments + // Commentaires if ($poi->is_commentable == "t") { - $pois_comments = new Kabano\BlogComments(); - $pois_comments->listComments($poi->content_id, ($user->rankIsHigher("premium"))); + $poi_comments = new Kabano\Comments(); + $poi_comments->listComments($poi->content_id, ($user->rankIsHigher("premium"))); - $i = 0; - foreach ($pois_comments->objs as $comment) { + foreach ($poi_comments->objs as $comment) { $comment->md2html(); $comment->author_obj = new Kabano\User(); $comment->author_obj->checkId($comment->author); } } - + // Auteur $tempUser = new Kabano\User(); $tempUser->checkId($poi->author); $poi->author_name = $tempUser->name; unset($tempUser); + $head['third'] = "leaflet/leaflet.js;leaflet-fullscreen/Leaflet.fullscreen.min.js;leaflet-easybutton/easy-button.js"; + $head['css'] .= ";../third/leaflet/leaflet.css;../third/leaflet-fullscreen/leaflet.fullscreen.css;../third/leaflet-easybutton/easy-button.css"; + $head['js'] = "d.poi_map.js"; + $head['title'] = $poi->name; - include ($config['views_folder']."d.blog.view.html"); - // } - } - else { - $notfound = 1; + include ($config['views_folder']."d.poi.view.html"); + } + } else { + $notfound = 1; } break; } -?> \ No newline at end of file +?> diff --git a/models/d.poi.php b/models/d.poi.php index 12a5c28..749721e 100755 --- a/models/d.poi.php +++ b/models/d.poi.php @@ -38,37 +38,79 @@ class Poi public $lat; public $lon; public $ele; + public $author_name; /***** ** Checks if a page at this URL exists and return the ID *****/ public function checkPermalink($permalink, $withArchive=0, $elementNb=0) { - global $config; - + global $config; + $con = pg_connect("host=".$config['SQL_host']." dbname=".$config['SQL_db']." user=".$config['SQL_user']." password=".$config['SQL_pass']) or die ("Could not connect to server\n"); - $query = "SELECT content_versions.id AS version_id, * FROM contents INNER JOIN content_locales ON contents.id = content_locales.content_id INNER JOIN content_versions ON content_locales.id = content_versions.locale_id WHERE permalink=$1 AND type='poi'"; - if($withArchive==0) { - $query .= " AND is_archive=FALSE AND is_public=TRUE"; - } - $query .= " ORDER BY update_date DESC LIMIT 1 OFFSET $2"; + $query = "SELECT + content_versions.id AS version_id, + content_versions.version, + content_versions.update_date, + content_versions.is_archive, + content_versions.name, + content_versions.content AS parameters, - pg_prepare($con, "prepare1", $query) - or die ("Cannot prepare statement\n"); - $result = pg_execute($con, "prepare1", array($permalink, $elementNb)) - or die ("Cannot execute statement\n"); + contents.id AS content_id, + contents.permalink, + contents.creation_date, + contents.is_public, + contents.is_commentable, + contents.type, + contents.poi_type, - pg_close($con); + content_locales.id AS locale_id, + content_locales.locale, + content_locales.author, - if(pg_num_rows($result) == 1) { - $row = pg_fetch_assoc($result); - $this->populate($row); - return 1; - } - else { - return 0; - } + specs.source_id, + specs.remote_source_id, + ST_X(specs.geom) AS lon, + ST_Y(specs.geom) AS lat, + ST_Z(specs.geom) AS ele, + + sources.display_name AS source + + FROM contents + INNER JOIN content_locales + ON contents.id = content_locales.content_id + INNER JOIN content_versions + ON content_locales.id = content_versions.locale_id + LEFT JOIN content_version_poi_specifications specs + ON specs.content_version_id = content_versions.id + LEFT JOIN sources + ON sources.id = specs.source_id + + WHERE contents.permalink = $1 + AND contents.type = 'poi'"; + + if ($withArchive == 0) { + $query .= " AND content_versions.is_archive = FALSE AND contents.is_public = TRUE"; + } + + $query .= " ORDER BY content_versions.update_date DESC LIMIT 1 OFFSET $2"; + + pg_prepare($con, "poi_check_permalink", $query) + or die ("Cannot prepare statement\n"); + + $result = pg_execute($con, "poi_check_permalink", [$permalink, $elementNb]) + or die ("Cannot execute statement\n"); + + pg_close($con); + + if (pg_num_rows($result) == 1) { + $row = pg_fetch_assoc($result); + $this->populate($row); + return 1; + } + + return 0; } /***** @@ -147,7 +189,7 @@ class Poi pg_prepare($con, "prepare4", $query) or die ("Cannot prepare statement\n"); - $result = pg_execute($con, "prepare4", array($this->version_id, $this->lon, $this->lat, $this->ele ,$this->source, $this->remote_source_id)) + $result = pg_execute($con, "prepare4", array($this->version_id, $this->lon, $this->lat, $this->ele ,$this->source_id, $this->remote_source_id)) or die ("Cannot execute statement\n"); $query = "INSERT INTO content_contributors (content, contributor) VALUES @@ -201,7 +243,7 @@ class Poi $this->version_id = pg_fetch_assoc($result)['id']; // 3) Insert new geometry + source info for this new version - $query = "INSERT INTO content_version_poi_specifications,(content_version_id, geom, source_id, remote_source_id) VALUES + $query = "INSERT INTO content_version_poi_specifications (content_version_id, geom, source_id, remote_source_id) VALUES ($1, ST_SetSRID(ST_MakePoint($2, $3, $4), 4326), $5, $6)"; pg_prepare($con, "poi_insert_specs_update", $query); @@ -289,18 +331,51 @@ class Pois $con = pg_connect("host=".$config['SQL_host']." dbname=".$config['SQL_db']." user=".$config['SQL_user']." password=".$config['SQL_pass']) or die ("Could not connect to server\n"); - $query = " - SELECT content_versions.id AS version_id, * - FROM contents - INNER JOIN content_locales ON contents.id = content_locales.content_id - INNER JOIN content_versions ON content_locales.id = content_versions.locale_id - WHERE type='poi' AND is_archive=FALSE - "; + $query = "SELECT + content_versions.id AS version_id, + content_versions.version, + content_versions.update_date, + content_versions.is_archive, + content_versions.name, + content_versions.content AS parameters, + + contents.id AS content_id, + contents.permalink, + contents.creation_date, + contents.is_public, + contents.is_commentable, + contents.type, + contents.poi_type, + + content_locales.id AS locale_id, + content_locales.locale, + content_locales.author, + + specs.source_id, + specs.remote_source_id, + ST_X(specs.geom) AS lon, + ST_Y(specs.geom) AS lat, + ST_Z(specs.geom) AS ele, + + sources.display_name AS source + + FROM contents + INNER JOIN content_locales + ON contents.id = content_locales.content_id + INNER JOIN content_versions + ON content_locales.id = content_versions.locale_id + LEFT JOIN content_version_poi_specifications specs + ON specs.content_version_id = content_versions.id + LEFT JOIN sources + ON sources.id = specs.source_id + + WHERE contents.type = 'poi' + AND content_versions.is_archive = FALSE"; if ($archive != 1) - $query .= " AND is_public=TRUE "; + $query .= " AND contents.is_public=TRUE "; - $query .= " ORDER BY update_date DESC LIMIT $1 OFFSET $2"; + $query .= " ORDER BY content_versions.update_date DESC LIMIT $1 OFFSET $2"; pg_prepare($con, "pois_list", $query); $result = pg_execute($con, "pois_list", array($count, $first)); @@ -320,13 +395,48 @@ class Pois $con = pg_connect("host=".$config['SQL_host']." dbname=".$config['SQL_db']." user=".$config['SQL_user']." password=".$config['SQL_pass']) or die ("Could not connect to server\n"); - $query = " - SELECT content_versions.id AS version_id, * - FROM contents - INNER JOIN content_locales ON contents.id = content_locales.content_id - INNER JOIN content_versions ON content_locales.id = content_versions.locale_id - WHERE permalink=$1 AND type='poi' - ORDER BY update_date DESC + $query = "SELECT + content_versions.id AS version_id, + content_versions.version, + content_versions.update_date, + content_versions.is_archive, + content_versions.name, + content_versions.content AS parameters, + + contents.id AS content_id, + contents.permalink, + contents.creation_date, + contents.is_public, + contents.is_commentable, + contents.type, + contents.poi_type, + + content_locales.id AS locale_id, + content_locales.locale, + content_locales.author, + + specs.source_id, + specs.remote_source_id, + ST_X(specs.geom) AS lon, + ST_Y(specs.geom) AS lat, + ST_Z(specs.geom) AS ele, + + sources.display_name AS source + + FROM contents + INNER JOIN content_locales + ON contents.id = content_locales.content_id + INNER JOIN content_versions + ON content_locales.id = content_versions.locale_id + LEFT JOIN content_version_poi_specifications specs + ON specs.content_version_id = content_versions.id + LEFT JOIN sources + ON sources.id = specs.source_id + + WHERE contents.permalink = $1 + AND contents.type = 'poi' + + ORDER BY content_versions.update_date DESC "; pg_prepare($con, "poi_history", $query); diff --git a/views/d.poi.edit.html b/views/d.poi.edit.html index b176371..7799d78 100755 --- a/views/d.poi.edit.html +++ b/views/d.poi.edit.html @@ -158,6 +158,14 @@ $( "#name" ).change(function() { + + + + + + + + diff --git a/views/js/d.poi_map.js b/views/js/d.poi_map.js index 50b9809..f2fb68b 100755 --- a/views/js/d.poi_map.js +++ b/views/js/d.poi_map.js @@ -1,82 +1,132 @@ var mymap; var poi_layer; -$( document ).ready(function() { - // Differents layers for the map - var topo_maptiler = L.tileLayer('https://api.maptiler.com/maps/topographique/{z}/{x}/{y}.png?key=Sm8M7mJ53GtYdl773rpi', {tms: false, attribution: 'Carte © MapTiler, Données © Contributeurs OpenStreetMap', tileSize: 512, zoomOffset: -1, minZoom: 1}); - var ign = L.tileLayer('https://data.geopf.fr/private/wmts?&REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE=normal&TILEMATRIXSET=PM&FORMAT=image/jpeg&LAYER=GEOGRAPHICALGRIDSYSTEMS.MAPS&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&apikey=ign_scan_ws', {attribution: 'Carte & Connées © IGN-F/Géoportail'}); - // Base layers - var baseLayers = { - "OpenStreetMap": topo_maptiler, - "IGN France": ign - }; +$(document).ready(function() { + // Mode : edit (formulaire) ou view (affichage) + var isEdit = (typeof poi_mode === "undefined" || poi_mode === "edit"); - mymap = L.map('mapid', { - zoomControl: false, - layers: [topo_maptiler] - }).setView([47, 3], 6); - $("#map-credits").html(topo_maptiler.getAttribution()); + // Differents layers for the map + var topo_maptiler = L.tileLayer( + 'https://api.maptiler.com/maps/topographique/{z}/{x}/{y}.png?key=Sm8M7mJ53GtYdl773rpi', + { + tms: false, + attribution: 'Carte © MapTiler, Données © Contributeurs OpenStreetMap', + tileSize: 512, + zoomOffset: -1, + minZoom: 1 + } + ); + var ign = L.tileLayer( + 'https://data.geopf.fr/private/wmts?&REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE=normal&TILEMATRIXSET=PM&FORMAT=image/jpeg&LAYER=GEOGRAPHICALGRIDSYSTEMS.MAPS&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&apikey=ign_scan_ws', + { + attribution: 'Carte & Connées © IGN-F/Géoportail' + } + ); + // Base layers + var baseLayers = { + "OpenStreetMap": topo_maptiler, + "IGN France": ign + }; - L.control.scale({ - position: "bottomleft", - imperial: false - }).addTo(mymap); + mymap = L.map('mapid', { + zoomControl: false, + layers: [topo_maptiler] + }).setView([47, 3], 6); + $("#map-credits").html(topo_maptiler.getAttribution()); - L.control.fullscreen({ - position: "bottomleft" - }).addTo(mymap); + L.control.scale({ + position: "bottomleft", + imperial: false + }).addTo(mymap); - L.control.zoom({ - zoomOutText: "", - zoomInText: "", - position: "bottomleft" - }).addTo(mymap); + L.control.fullscreen({ + position: "bottomleft" + }).addTo(mymap); - L.control.layers(baseLayers,null,{ - position: "bottomright" - }).addTo(mymap); + L.control.zoom({ + zoomOutText: "", + zoomInText: "", + position: "bottomleft" + }).addTo(mymap); - mymap.removeControl(mymap.attributionControl); + L.control.layers(baseLayers, null, { + position: "bottomright" + }).addTo(mymap); - mymap.on('baselayerchange', function(e) { - $("#map-credits").html(e.layer.getAttribution()); - }); + mymap.removeControl(mymap.attributionControl); - poi_layer = L.marker([47, 3], {draggable: true}).addTo(mymap); - poi_layer.bindTooltip("Glissez moi au bon endroit.", {permanent: true, direction: 'auto'}).openTooltip(); + mymap.on('baselayerchange', function(e) { + $("#map-credits").html(e.layer.getAttribution()); + }); - mymap.on('click', function(e){ - poi_layer.setLatLng(e.latlng); - }) - poi_layer.on('move', function(e){ - poi_layer.unbindTooltip(); - $("#lat").val(+e.latlng.lat.toFixed(6)); - $("#lon").val(+e.latlng.lng.toFixed(6)); - $("#elevation_icon").show(); - }) - $("#lat,#lon").change(function() { // If the user changes the lat/lon input values manualy - if(isNaN($("#lat").val()) || isNaN($("#lon").val()) || $("#lat").val().length==0 || $("#lon").val()==null) - $("#elevation_icon").hide(); - else { - $("#elevation_icon").show(); - poi_layer.setLatLng([$("#lat").val(),$("#lon").val()]); - } - }); + // Position initiale : soit celle du POI, soit le centre par défaut + var startLat = (typeof poi_lat !== "undefined" && poi_lat) ? poi_lat : 47; + var startLon = (typeof poi_lon !== "undefined" && poi_lon) ? poi_lon : 3; - var poiicon = L.icon({ - iconSize: [24, 24], - iconAnchor: [12, 12] - }); - $("#type_selector label").click(function(e) { - poi_layer.unbindTooltip(); - poiicon.options.iconUrl = e.currentTarget.firstChild.currentSrc; - poi_layer.setIcon(poiicon); - }) - $("#elevation_icon").click(function(e) { - $(this).find($(".fas")).removeClass('fa-search-location').addClass('fa-spinner').addClass('fa-spin'); - $.get("./elevation_proxy", {location:$("#lat").val()+","+$("#lon").val()}, function(result){ - $("#ele").val(result.results[0].elevation); - $("#elevation_icon").find($(".fas")).removeClass('fa-spinner').removeClass('fa-spin').addClass('fa-search-location'); - }); - }) -}); \ No newline at end of file + // Icône : si poi_type défini, on l’utilise, sinon icône Leaflet par défaut + var poiicon = null; + if (typeof poi_type !== "undefined" && poi_type) { + poiicon = L.icon({ + iconSize: [24, 24], + iconAnchor: [12, 12], + iconUrl: root + "views/img/" + poi_type + ".svg" + }); + } + + if (poiicon) { + poi_layer = L.marker([startLat, startLon], {draggable: isEdit, icon: poiicon}).addTo(mymap); + } else { + poi_layer = L.marker([startLat, startLon], {draggable: isEdit}).addTo(mymap); + } + + if (isEdit) { + poi_layer.bindTooltip("Glissez moi au bon endroit.", {permanent: true, direction: 'auto'}).openTooltip(); + } + + // Interactions uniquement en mode édition + if (isEdit) { + mymap.on('click', function(e){ + poi_layer.setLatLng(e.latlng); + }); + + poi_layer.on('move', function(e){ + poi_layer.unbindTooltip(); + $("#lat").val(+e.latlng.lat.toFixed(6)); + $("#lon").val(+e.latlng.lng.toFixed(6)); + $("#elevation_icon").show(); + }); + + $("#lat,#lon").change(function() { // If the user changes the lat/lon input values manualy + if(isNaN($("#lat").val()) || isNaN($("#lon").val()) || $("#lat").val().length==0 || $("#lon").val()==null) + $("#elevation_icon").hide(); + else { + $("#elevation_icon").show(); + poi_layer.setLatLng([$("#lat").val(),$("#lon").val()]); + } + }); + + var editPoiIcon = L.icon({ + iconSize: [24, 24], + iconAnchor: [12, 12] + }); + + $("#type_selector label").click(function(e) { + poi_layer.unbindTooltip(); + editPoiIcon.options.iconUrl = e.currentTarget.firstChild.currentSrc; + poi_layer.setIcon(editPoiIcon); + }); + + $("#elevation_icon").click(function(e) { + $(this).find($(".fas")).removeClass('fa-search-location').addClass('fa-spinner').addClass('fa-spin'); + $.get("./elevation_proxy", {location:$("#lat").val()+","+$("#lon").val()}, function(result){ + $("#ele").val(result.results[0].elevation); + $("#elevation_icon").find($(".fas")).removeClass('fa-spinner').removeClass('fa-spin').addClass('fa-search-location'); + }); + }); + } else { + // Mode affichage : centrer sur le POI si coordonnées présentes + if (typeof poi_lat !== "undefined" && typeof poi_lon !== "undefined") { + mymap.setView([poi_lat, poi_lon], 14); + } + } +});