diff --git a/assets/app.js b/assets/app.js index 89eb288..01af674 100644 --- a/assets/app.js +++ b/assets/app.js @@ -529,17 +529,21 @@ document.addEventListener('DOMContentLoaded', () => { const completionPercentage = (filledInputs / totalInputs) * 100; const progressBar = document.querySelector('#completion_progress .progress-bar'); - progressBar.style.width = completionPercentage + '%'; - progressBar.setAttribute('aria-valuenow', completionPercentage); - - document.querySelector('#completion_display').innerHTML = `Votre commerce est complété à ${Math.round(completionPercentage)}%`; + if (progressBar) { + progressBar.style.width = completionPercentage + '%'; + progressBar.setAttribute('aria-valuenow', completionPercentage); + document.querySelector('#completion_display').innerHTML = `Votre commerce est complété à ${Math.round(completionPercentage)}%`; + } } document.querySelectorAll('input[type="text"]').forEach(input => { input.addEventListener('blur', updateCompletionProgress); }); - - document.querySelector('form').addEventListener('submit', check_validity); + const form = document.querySelector('form') + if (form) { + form.addEventListener('submit', check_validity); + updateCompletionProgress() + } document.addEventListener('DOMContentLoaded', updateCompletionProgress); // Focus sur le premier champ texte au chargement @@ -574,5 +578,6 @@ document.addEventListener('DOMContentLoaded', () => { parseCuisine(); -}); + +}); diff --git a/public/css/main.css b/public/css/main.css index 52bc912..fd657ac 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -56,6 +56,10 @@ box-shadow: 0 -2px 4px rgba(0, 0, 0, .1); } +#completion_progress .container { + padding: 0; +} + /* Media queries */ @media (max-width: 768px) { .main-header h1 { diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index 792053d..3016ef1 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -72,7 +72,9 @@ final class AdminController extends AbstractController return $this->render('admin/stats.html.twig', [ 'stats' => $stats, 'zip_code' => $zip_code, - 'counters' => $calculatedStats['counters'] + 'counters' => $calculatedStats['counters'], + 'maptiler_token' => $_ENV['MAPTILER_TOKEN'], + 'mapbox_token' => $_ENV['MAPBOX_TOKEN'], ]); } diff --git a/src/Controller/PublicController.php b/src/Controller/PublicController.php index 61b5b9c..7e86e8e 100644 --- a/src/Controller/PublicController.php +++ b/src/Controller/PublicController.php @@ -127,7 +127,7 @@ class PublicController extends AbstractController { $place = $this->entityManager->getRepository(Place::class)->findOneBy(['uuid_for_url' => $uuid]); if (!$place) { - $this->addFlash('warning', 'Ce lien de modification n\'existe pas.'); + $this->addFlash('warning', 'Ce lien de modification n\'existe pas.'+$uuid); return $this->redirectToRoute('app_public_index'); } @@ -152,6 +152,7 @@ class PublicController extends AbstractController 'commerce_overpass' => $commerce_overpass, 'name' => $name, 'commerce' => $place, + 'completion_percentage' => $place->getCompletionPercentage(), 'hide_filled_inputs' => $this->hide_filled_inputs, 'excluded_tags_to_render' => $this->motocultrice->excluded_tags_to_render, 'osm_kind' => $place->getOsmKind(), @@ -169,6 +170,8 @@ class PublicController extends AbstractController $places = $this->entityManager->getRepository(Place::class)->findBy([], ['zip_code' => 'ASC', 'name' => 'ASC']); return $this->render('public/dashboard.html.twig', [ 'controller_name' => 'PublicController', + 'mapbox_token' => $_ENV['MAPBOX_TOKEN'], + 'maptiler_token' => $_ENV['MAPTILER_TOKEN'], 'stats' => $stats, 'places' => $places, ]); diff --git a/src/Entity/Place.php b/src/Entity/Place.php index aa65cdb..1b3e685 100644 --- a/src/Entity/Place.php +++ b/src/Entity/Place.php @@ -76,7 +76,29 @@ class Place #[ORM\Column(nullable: true)] private ?bool $has_note = null; - public function update_place_from_overpass_data(array $overpass_data) { + public function getCompletionPercentage(): ?int + { + $completion_percentage = 0; + $total_fields = 5; + $filled_fields = 0; + if ($this->has_opening_hours) { + $filled_fields += 1; + } + if ($this->has_address) { + $filled_fields += 1; + } + if ($this->has_website) { + $filled_fields += 1; + } + if ($this->has_wheelchair) { + $filled_fields += 1; + } + if ($this->has_note) { + $filled_fields += 1; + } + return round($filled_fields / $total_fields * 100); + } + public function update_place_from_overpass_data(array $overpass_data) { $overpass_data = $overpass_data['tags_converted'] ; // Remplir les clés attendues avec des valeurs par défaut si non définies diff --git a/templates/admin/stats.html.twig b/templates/admin/stats.html.twig index 3ccc08a..44df53d 100644 --- a/templates/admin/stats.html.twig +++ b/templates/admin/stats.html.twig @@ -24,7 +24,7 @@ {{ stats.getAvecNote() }} commerces avec note renseignée.
- +

Tableau des commerces

@@ -41,7 +41,7 @@ {% for commerce in stats.places %} @@ -54,22 +54,88 @@
- {{ commerce.name }} + {% if commerce.name |length %} {{ commerce.name |slice(0, 20) }}... {% else %} (lieu sans nom) {% endif %} {{ commerce.address }}
- + - + console.log('go faire une carte '); + + const request = `[out:json][timeout:25]; + area["postal_code"="{{ zip_code }}"]->.searchArea; + ( + nw["amenity"]["cafe|bar|restaurant|library|cinema|fast_food"](area.searchArea); + nw["shop"](area.searchArea); + nw["tourism"="museum|hotel|chalet|apartment"](area.searchArea); + nw["office"](area.searchArea); + ); + out center; + >; + out skel qt; + `; + + + document.addEventListener('DOMContentLoaded', function() { + async function fetchland() { + + // Construire la requête Overpass + + const encodedRequest = encodeURIComponent(request); + console.log('encodedRequest', encodedRequest); + const overpassUrl = `https://overpass-api.de/api/interpreter?data=${encodedRequest}`; + const response = await fetch(overpassUrl); + const data = await response.json(); + console.log('data', data); + mapboxgl.accessToken = '{{ mapbox_token }}'; + const map = new mapboxgl.Map({ + container: 'map', + style: 'https://api.maptiler.com/maps/basic-v2/style.json?key={{ maptiler_token }}', + + zoom: 17 + }); + + // Ajouter les marqueurs pour chaque point + + if (data.elements && data.elements.length > 0) { + const firstPoint = data.elements[0]; + if (firstPoint.lat && firstPoint.lon) { + // Centrer la carte sur le premier point + map.setCenter([firstPoint.lon, firstPoint.lat]); + + // Ajouter un marqueur pour le premier point + new mapboxgl.Marker() + .setLngLat([firstPoint.lon, firstPoint.lat]) + .setPopup(new mapboxgl.Popup({ offset: 25 }) + .setHTML(`

${firstPoint.tags?.name || 'Sans nom'}

`)) + .addTo(map); + } + } + + } + + + function colorizeHeaders() { + const headers = document.querySelectorAll('th'); + if(headers.length > 0) { + headers.forEach(header => { + const text = header.textContent; + const match = text.match(/\((\d+)\s*\/\s*(\d+)\)/); + if (match) { + const [_, completed, total] = match; + const ratio = completed / total; + const alpha = ratio.toFixed(2); + header.style.backgroundColor = `rgba(154, 205, 50, ${alpha})`; + } + }); + } + } + + console.log(request); + colorizeHeaders(); + fetchland(); + }) + + + {% endblock %} \ No newline at end of file diff --git a/templates/base.html.twig b/templates/base.html.twig index a2d609f..0b9e7d6 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -13,9 +13,13 @@ + + {# Run `composer require symfony/webpack-encore-bundle` to start using Symfony UX #} {% block stylesheets %} {{ encore_entry_link_tags('app') }} + + {% endblock %} @@ -91,7 +95,7 @@ {% block javascripts %} {{ encore_entry_script_tags('app') }} - + {# #} {% endblock %} diff --git a/templates/public/dashboard.html.twig b/templates/public/dashboard.html.twig index 373a0c1..3902a32 100644 --- a/templates/public/dashboard.html.twig +++ b/templates/public/dashboard.html.twig @@ -14,10 +14,82 @@ {% block javascripts %} {{ parent() }} + + {% endblock %} @@ -29,9 +101,10 @@

Statistiques : {{ stats|length }} commerces

- - - +mapDashboard: +
+ + @@ -61,7 +134,8 @@
-

Lieux

+

{{ places|length }} Lieux

+ {# @@ -104,7 +178,8 @@ {% endfor %} -
+ + #}
diff --git a/templates/public/edit.html.twig b/templates/public/edit.html.twig index 9bf8a1b..ad6bbe2 100644 --- a/templates/public/edit.html.twig +++ b/templates/public/edit.html.twig @@ -4,7 +4,6 @@ {% block stylesheets %} {{ parent() }} -