menu latéral ville
This commit is contained in:
parent
f4c5e048ff
commit
2e459122b5
11 changed files with 1008 additions and 236 deletions
118
templates/public/city_demandes.html.twig
Normal file
118
templates/public/city_demandes.html.twig
Normal file
|
@ -0,0 +1,118 @@
|
|||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Demandes pour {{ city.name }}{% endblock %}
|
||||
|
||||
{% block stylesheets %}
|
||||
{{ parent() }}
|
||||
<link href='{{ asset('css/city-sidebar.css') }}' rel='stylesheet' />
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<!-- Sidebar de navigation -->
|
||||
<div class="col-12">
|
||||
{% include 'admin/_city_sidebar.html.twig' with {'stats': city, 'active_menu': 'city_demandes'} %}
|
||||
</div>
|
||||
|
||||
<!-- Contenu principal -->
|
||||
<div class="col-md-9 col-lg-10 main-content">
|
||||
<div class="p-4">
|
||||
<div class="row mb-4">
|
||||
<div class="col-md-8">
|
||||
<h1>Demandes pour {{ city.name }}</h1>
|
||||
<p class="text-muted">
|
||||
Code INSEE: {{ city.zone }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-4 text-end">
|
||||
<a href="{{ path('app_public_rss_city_demandes', {'insee_code': city.zone}) }}" class="btn btn-warning" target="_blank">
|
||||
<i class="bi bi-rss"></i> Flux RSS
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h2>
|
||||
Liste des demandes ({{ demandes|length }})
|
||||
</h2>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Nom du commerce</th>
|
||||
<th>Date de création</th>
|
||||
<th>Statut</th>
|
||||
<th>Dernière tentative de contact</th>
|
||||
{% if is_granted('ROLE_ADMIN') %}
|
||||
<th>Actions</th>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for demande in demandes %}
|
||||
<tr>
|
||||
<td>{{ demande.id }}</td>
|
||||
<td>{{ demande.query }}</td>
|
||||
<td>{{ demande.createdAt ? demande.createdAt|date('Y-m-d H:i:s') : '' }}</td>
|
||||
<td>
|
||||
<span class="badge
|
||||
{% if demande.status == 'new' %}bg-primary
|
||||
{% elseif demande.status == 'email_provided' %}bg-info
|
||||
{% elseif demande.status == 'ready' %}bg-success
|
||||
{% elseif demande.status == 'email_sent' %}bg-success
|
||||
{% elseif demande.status == 'email_failed' %}bg-danger
|
||||
{% elseif demande.status == 'email_opened' %}bg-warning
|
||||
{% elseif demande.status == 'edit_form_opened' %}bg-warning
|
||||
{% elseif demande.status == 'place_modified' %}bg-success
|
||||
{% elseif demande.status == 'linked_to_place' %}bg-success
|
||||
{% else %}bg-secondary{% endif %}">
|
||||
{{ demande.status }}
|
||||
</span>
|
||||
</td>
|
||||
<td>{{ demande.lastContactAttempt ? demande.lastContactAttempt|date('Y-m-d H:i:s') : '' }}</td>
|
||||
{% if is_granted('ROLE_ADMIN') %}
|
||||
<td>
|
||||
<div class="btn-group" role="group">
|
||||
<a href="{{ path('app_admin_demande_edit', {'id': demande.id}) }}" class="btn btn-sm btn-primary">
|
||||
<i class="bi bi-pencil"></i> Éditer
|
||||
</a>
|
||||
{% if demande.place %}
|
||||
<a href="{{ path('app_admin_demande_send_email', {'id': demande.id}) }}" class="btn btn-sm btn-success">
|
||||
<i class="bi bi-envelope"></i> Envoyer un email
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="{% if is_granted('ROLE_ADMIN') %}6{% else %}5{% endif %}" class="text-center">Aucune demande trouvée pour cette ville</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<p class="text-muted">
|
||||
<i class="bi bi-info-circle"></i> Les demandes sont des requêtes de modification de commerces sur OpenStreetMap pour la ville de {{ city.name }}.
|
||||
</p>
|
||||
<p>
|
||||
<a href="{{ path('app_public_cities') }}" class="btn btn-outline-secondary">
|
||||
<i class="bi bi-arrow-left"></i> Retour à la liste des villes
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -162,7 +162,7 @@
|
|||
<i class="bi bi-globe text-primary" style="font-size: 3rem;"></i>
|
||||
</div>
|
||||
<h3 class="card-title h5 fw-bold">Visibilité Maximale</h3>
|
||||
<p class="card-text">Vos informations apparaîtront sur Google Maps, Apple Plans, Facebook et des
|
||||
<p class="card-text">Vos informations apparaîtront sur TomTom, Apple Plans, Facebook, CoMaps et des
|
||||
centaines d'autres applications.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -175,8 +175,8 @@
|
|||
<i class="bi bi-clock text-primary" style="font-size: 3rem;"></i>
|
||||
</div>
|
||||
<h3 class="card-title h5 fw-bold">Rapide et Simple</h3>
|
||||
<p class="card-text">Mettez à jour vos horaires, contacts et services en quelques minutes
|
||||
seulement.</p>
|
||||
<p class="card-text">Mettez à jour vos horaires, contacts et services en quelques secondes
|
||||
seulement, sans avoir à créer de compte.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
33
templates/public/rss/city_demandes.xml.twig
Normal file
33
templates/public/rss/city_demandes.xml.twig
Normal file
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Mon Commerce OSM - Demandes pour {{ city.name }}</title>
|
||||
<link>https://{{ base_url }}</link>
|
||||
<description>Flux RSS des demandes de modification de commerces sur OpenStreetMap pour la ville de {{ city.name }}</description>
|
||||
<language>fr-fr</language>
|
||||
<pubDate>{{ "now"|date("D, d M Y H:i:s O") }}</pubDate>
|
||||
<atom:link href="https://{{ base_url }}{{ path('app_public_rss_city_demandes', {'insee_code': city.zone}) }}" rel="self" type="application/rss+xml" />
|
||||
|
||||
{% for demande in demandes %}
|
||||
<item>
|
||||
<title>{{ demande.query }}</title>
|
||||
<link>https://{{ base_url }}{{ path('app_admin_demande_edit', {'id': demande.id}) }}</link>
|
||||
<guid>https://{{ base_url }}{{ path('app_admin_demande_edit', {'id': demande.id}) }}</guid>
|
||||
<pubDate>{{ demande.createdAt|date("D, d M Y H:i:s O") }}</pubDate>
|
||||
<description>
|
||||
<![CDATA[
|
||||
<p><strong>Nom du commerce:</strong> {{ demande.query }}</p>
|
||||
{% if demande.email %}
|
||||
<p><strong>Email:</strong> {{ demande.email }}</p>
|
||||
{% endif %}
|
||||
<p><strong>Statut:</strong> {{ demande.status }}</p>
|
||||
<p><strong>Ville:</strong> {{ city.name }} ({{ city.zone }})</p>
|
||||
{% if demande.lastContactAttempt %}
|
||||
<p><strong>Dernière tentative de contact:</strong> {{ demande.lastContactAttempt|date("d/m/Y H:i:s") }}</p>
|
||||
{% endif %}
|
||||
]]>
|
||||
</description>
|
||||
</item>
|
||||
{% endfor %}
|
||||
</channel>
|
||||
</rss>
|
45
templates/public/rss/city_themes.xml.twig
Normal file
45
templates/public/rss/city_themes.xml.twig
Normal file
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Mon Commerce OSM - Changements thématiques pour {{ city.name }}</title>
|
||||
<link>https://{{ base_url }}</link>
|
||||
<description>Flux RSS des changements thématiques sur OpenStreetMap pour la ville de {{ city.name }}</description>
|
||||
<language>fr-fr</language>
|
||||
<pubDate>{{ "now"|date("D, d M Y H:i:s O") }}</pubDate>
|
||||
<atom:link href="https://{{ base_url }}{{ path('app_public_rss_city_themes', {'insee_code': city.zone}) }}" rel="self" type="application/rss+xml" />
|
||||
|
||||
{% for theme, changes in themeChanges %}
|
||||
{% if changes|length > 0 %}
|
||||
{% set latestChange = changes[0] %}
|
||||
<item>
|
||||
<title>{{ followup_labels[theme]|default(theme|capitalize) }} - {{ latestChange.measure }} objets</title>
|
||||
<link>https://{{ base_url }}{{ path('admin_followup_theme_graph', {'insee_code': city.zone, 'theme': theme}) }}</link>
|
||||
<guid>https://{{ base_url }}{{ path('admin_followup_theme_graph', {'insee_code': city.zone, 'theme': theme}) }}/{{ latestChange.date|date('Y-m-d') }}</guid>
|
||||
<pubDate>{{ latestChange.date|date("D, d M Y H:i:s O") }}</pubDate>
|
||||
<description>
|
||||
<![CDATA[
|
||||
<p><strong>Thème:</strong> {{ followup_labels[theme]|default(theme|capitalize) }}</p>
|
||||
<p><strong>Nombre d'objets:</strong> {{ latestChange.measure }}</p>
|
||||
<p><strong>Date de mesure:</strong> {{ latestChange.date|date("d/m/Y H:i:s") }}</p>
|
||||
<p><strong>Ville:</strong> {{ city.name }} ({{ city.zone }})</p>
|
||||
{% if changes|length > 1 %}
|
||||
<p><strong>Évolution:</strong>
|
||||
{% set previousChange = changes[1] %}
|
||||
{% set diff = latestChange.measure - previousChange.measure %}
|
||||
{% if diff > 0 %}
|
||||
<span style="color: green;">+{{ diff }} objets</span>
|
||||
{% elseif diff < 0 %}
|
||||
<span style="color: red;">{{ diff }} objets</span>
|
||||
{% else %}
|
||||
<span>Pas de changement</span>
|
||||
{% endif %}
|
||||
depuis le {{ previousChange.date|date("d/m/Y") }}
|
||||
</p>
|
||||
{% endif %}
|
||||
]]>
|
||||
</description>
|
||||
</item>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</channel>
|
||||
</rss>
|
|
@ -2,155 +2,171 @@
|
|||
|
||||
{% block title %}Évolutions des objets - {{ stats.name }}{% endblock %}
|
||||
|
||||
{% block stylesheets %}
|
||||
{{ parent() }}
|
||||
<link href='{{ asset('css/city-sidebar.css') }}' rel='stylesheet' />
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div class="container my-5">
|
||||
<h1>Évolutions des objets à {{ stats.name }} ({{ stats.zone }})</h1>
|
||||
<a href="{{ path('app_admin_stats', {'insee_code': stats.zone}) }}" class="btn btn-secondary mb-3"><i class="bi bi-arrow-left"></i> Retour aux stats</a>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<strong>Variation des décomptes d'objets par type</strong>
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<!-- Sidebar de navigation -->
|
||||
<div class="col-12">
|
||||
{% include 'admin/_city_sidebar.html.twig' with {'stats': stats, 'active_menu': 'stats_evolutions'} %}
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-bordered table-striped table-hover table-responsive table-sort">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Type</th>
|
||||
<th class="text-end">Décompte actuel</th>
|
||||
{% for p in periods %}
|
||||
<th class="text-end">Évolution sur {{ p }}</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for type, evo in evolutions %}
|
||||
<tr>
|
||||
<td style="min-width: 15rem;">
|
||||
<a href="{{ path('admin_followup_theme_graph', {'insee_code': stats.zone, 'theme': type}) }}" class="btn btn-outline-secondary btn-sm ms-2"
|
||||
title="Voir le graphe détaillé">
|
||||
<i class="bi bi-bar-chart"></i>
|
||||
</a>
|
||||
{{ tag_emoji(type) }} {{ type }}
|
||||
</td>
|
||||
<td class="text-end">{{ evo.now }}</td>
|
||||
{% for p in periods %}
|
||||
<td class="text-end{% if evo[p] is not null and evo[p] != 0 %} bg-success-subtle{% if evo[p] < 0 %} bg-danger-subtle{% endif %}{% endif %}">
|
||||
{% if evo[p] is not null %}
|
||||
{% if evo[p] > 0 %}
|
||||
<i class="bi bi-arrow-up text-success"></i>
|
||||
{% elseif evo[p] < 0 %}
|
||||
<i class="bi bi-arrow-down text-danger"></i>
|
||||
{% endif %}
|
||||
{{ evo[p] > 0 ? '+' ~ evo[p] : evo[p] }}
|
||||
{% else %}
|
||||
<span class="text-muted">-</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr><td colspan="5" class="text-muted">Aucune donnée d'évolution trouvée.</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- Contenu principal -->
|
||||
<div class="col-md-9 col-lg-10 main-content">
|
||||
<div class="p-4">
|
||||
<h1>Évolutions des objets à {{ stats.name }} ({{ stats.zone }})</h1>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<strong>Variation des décomptes d'objets par type</strong>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-bordered table-striped table-hover table-responsive table-sort">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Type</th>
|
||||
<th class="text-end">Décompte actuel</th>
|
||||
{% for p in periods %}
|
||||
<th class="text-end">Évolution sur {{ p }}</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for type, evo in evolutions %}
|
||||
<tr>
|
||||
<td style="min-width: 15rem;">
|
||||
<a href="{{ path('admin_followup_theme_graph', {'insee_code': stats.zone, 'theme': type}) }}" class="btn btn-outline-secondary btn-sm ms-2"
|
||||
title="Voir le graphe détaillé">
|
||||
<i class="bi bi-bar-chart"></i>
|
||||
</a>
|
||||
{{ tag_emoji(type) }} {{ type }}
|
||||
</td>
|
||||
<td class="text-end">{{ evo.now }}</td>
|
||||
{% for p in periods %}
|
||||
<td class="text-end{% if evo[p] is not null and evo[p] != 0 %} bg-success-subtle{% if evo[p] < 0 %} bg-danger-subtle{% endif %}{% endif %}">
|
||||
{% if evo[p] is not null %}
|
||||
{% if evo[p] > 0 %}
|
||||
<i class="bi bi-arrow-up text-success"></i>
|
||||
{% elseif evo[p] < 0 %}
|
||||
<i class="bi bi-arrow-down text-danger"></i>
|
||||
{% endif %}
|
||||
{{ evo[p] > 0 ? '+' ~ evo[p] : evo[p] }}
|
||||
{% else %}
|
||||
<span class="text-muted">-</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr><td colspan="5" class="text-muted">Aucune donnée d'évolution trouvée.</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-5">
|
||||
<div class="col-md-4">
|
||||
<h3>Lieux modifiés cette semaine</h3>
|
||||
{% if places_7j|length > 0 %}
|
||||
<ul class="list-group mb-4">
|
||||
{% for place in places_7j %}
|
||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||||
<span>
|
||||
<strong>
|
||||
<a href="{{ path('app_public_edit', {'zipcode': place.zipCode, 'name': (place.name|default('sans-nom'))|url_encode, 'uuid': place.uuidForUrl}) }}">
|
||||
{{ place.name ?: '(sans nom)' }}
|
||||
</a>
|
||||
</strong><br>
|
||||
<small>
|
||||
{% if place.street %}
|
||||
<a href="{{ path('app_public_street', {'cityId': stats.zone, 'streetName': place.street|url_encode }) }}">{{ place.street }}</a>
|
||||
{# {% else %}
|
||||
<span class="text-muted">(inconnue)</span> #}
|
||||
{% endif %}
|
||||
{{ place.housenumber }}
|
||||
</small>
|
||||
</span>
|
||||
<span>
|
||||
<span class="badge bg-primary">{{ place.getModifiedDate() ? place.getModifiedDate()|date('Y-m-d H:i') : '' }}</span>
|
||||
<a href="https://www.openstreetmap.org/{{ place.osmKind }}/{{ place.osmId }}" target="_blank" class="btn btn-outline-secondary btn-sm ms-2" title="Voir sur OSM"><i class="bi bi-globe"></i></a>
|
||||
</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p class="text-muted">Aucun lieu modifié dans les 7 derniers jours.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<h3>Ce mois-ci</h3>
|
||||
{% if places_30j|length > 0 %}
|
||||
<ul class="list-group mb-4">
|
||||
{% for place in places_30j %}
|
||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||||
<span>
|
||||
<strong>
|
||||
<a href="{{ path('app_public_edit', {'zipcode': place.zipCode, 'name': (place.name|default('sans-nom'))|url_encode, 'uuid': place.uuidForUrl}) }}">
|
||||
{{ place.name ?: '(sans nom)' }}
|
||||
</a>
|
||||
</strong><br>
|
||||
<small>
|
||||
{% if place.street %}
|
||||
<a href="{{ path('app_public_street', {'cityId': stats.zone, 'streetName': place.street|url_encode }) }}">{{ place.street }}</a>
|
||||
{# {% else %}
|
||||
<span class="text-muted">(inconnue)</span> #}
|
||||
{% endif %}
|
||||
{{ place.housenumber }}
|
||||
</small>
|
||||
</span>
|
||||
<span>
|
||||
<span class="badge bg-primary">{{ place.getModifiedDate() ? place.getModifiedDate()|date('Y-m-d H:i') : '' }}</span>
|
||||
<a href="https://www.openstreetmap.org/{{ place.osmKind }}/{{ place.osmId }}" target="_blank" class="btn btn-outline-secondary btn-sm ms-2" title="Voir sur OSM"><i class="bi bi-globe"></i></a>
|
||||
</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p class="text-muted">Aucun lieu modifié dans les 30 derniers jours.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<h3>6 derniers mois</h3>
|
||||
{% if places_6mois|length > 0 %}
|
||||
<ul class="list-group mb-4">
|
||||
{% for place in places_6mois %}
|
||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||||
<span>
|
||||
<strong>
|
||||
<a href="{{ path('app_public_edit', {'zipcode': place.zipCode, 'name': (place.name|default('sans-nom'))|url_encode, 'uuid': place.uuidForUrl}) }}">
|
||||
{{ place.name ?: '(sans nom)' }}
|
||||
</a>
|
||||
</strong><br>
|
||||
<small>
|
||||
{% if place.street %}
|
||||
<a href="{{ path('app_public_street', {'cityId': stats.zone, 'streetName': place.street|url_encode }) }}">{{ place.street }}</a>
|
||||
{# {% else %}
|
||||
<span class="text-muted">(inconnue)</span> #}
|
||||
{% endif %}
|
||||
{{ place.housenumber }}
|
||||
</small>
|
||||
</span>
|
||||
<span>
|
||||
<span class="badge bg-primary">{{ place.getModifiedDate() ? place.getModifiedDate()|date('Y-m-d H:i') : '' }}</span>
|
||||
<a href="https://www.openstreetmap.org/{{ place.osmKind }}/{{ place.osmId }}" target="_blank" class="btn btn-outline-secondary btn-sm ms-2" title="Voir sur OSM"><i class="bi bi-globe"></i></a>
|
||||
</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p class="text-muted">Aucun lieu modifié dans les 6 derniers mois.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-5">
|
||||
<div class="col-md-4">
|
||||
<h3>Lieux modifiés cette semaine</h3>
|
||||
{% if places_7j|length > 0 %}
|
||||
<ul class="list-group mb-4">
|
||||
{% for place in places_7j %}
|
||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||||
<span>
|
||||
<strong>
|
||||
<a href="{{ path('app_public_edit', {'zipcode': place.zipCode, 'name': (place.name|default('sans-nom'))|url_encode, 'uuid': place.uuidForUrl}) }}">
|
||||
{{ place.name ?: '(sans nom)' }}
|
||||
</a>
|
||||
</strong><br>
|
||||
<small>
|
||||
{% if place.street %}
|
||||
<a href="{{ path('app_public_street', {'cityId': stats.zone, 'streetName': place.street|url_encode }) }}">{{ place.street }}</a>
|
||||
{# {% else %}
|
||||
<span class="text-muted">(inconnue)</span> #}
|
||||
{% endif %}
|
||||
{{ place.housenumber }}
|
||||
</small>
|
||||
</span>
|
||||
<span>
|
||||
<span class="badge bg-primary">{{ place.getModifiedDate() ? place.getModifiedDate()|date('Y-m-d H:i') : '' }}</span>
|
||||
<a href="https://www.openstreetmap.org/{{ place.osmKind }}/{{ place.osmId }}" target="_blank" class="btn btn-outline-secondary btn-sm ms-2" title="Voir sur OSM"><i class="bi bi-globe"></i></a>
|
||||
</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p class="text-muted">Aucun lieu modifié dans les 7 derniers jours.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<h3>Ce mois-ci</h3>
|
||||
{% if places_30j|length > 0 %}
|
||||
<ul class="list-group mb-4">
|
||||
{% for place in places_30j %}
|
||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||||
<span>
|
||||
<strong>
|
||||
<a href="{{ path('app_public_edit', {'zipcode': place.zipCode, 'name': (place.name|default('sans-nom'))|url_encode, 'uuid': place.uuidForUrl}) }}">
|
||||
{{ place.name ?: '(sans nom)' }}
|
||||
</a>
|
||||
</strong><br>
|
||||
<small>
|
||||
{% if place.street %}
|
||||
<a href="{{ path('app_public_street', {'cityId': stats.zone, 'streetName': place.street|url_encode }) }}">{{ place.street }}</a>
|
||||
{# {% else %}
|
||||
<span class="text-muted">(inconnue)</span> #}
|
||||
{% endif %}
|
||||
{{ place.housenumber }}
|
||||
</small>
|
||||
</span>
|
||||
<span>
|
||||
<span class="badge bg-primary">{{ place.getModifiedDate() ? place.getModifiedDate()|date('Y-m-d H:i') : '' }}</span>
|
||||
<a href="https://www.openstreetmap.org/{{ place.osmKind }}/{{ place.osmId }}" target="_blank" class="btn btn-outline-secondary btn-sm ms-2" title="Voir sur OSM"><i class="bi bi-globe"></i></a>
|
||||
</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p class="text-muted">Aucun lieu modifié dans les 30 derniers jours.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<h3>6 derniers mois</h3>
|
||||
{% if places_6mois|length > 0 %}
|
||||
<ul class="list-group mb-4">
|
||||
{% for place in places_6mois %}
|
||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||||
<span>
|
||||
<strong>
|
||||
<a href="{{ path('app_public_edit', {'zipcode': place.zipCode, 'name': (place.name|default('sans-nom'))|url_encode, 'uuid': place.uuidForUrl}) }}">
|
||||
{{ place.name ?: '(sans nom)' }}
|
||||
</a>
|
||||
</strong><br>
|
||||
<small>
|
||||
{% if place.street %}
|
||||
<a href="{{ path('app_public_street', {'cityId': stats.zone, 'streetName': place.street|url_encode }) }}">{{ place.street }}</a>
|
||||
{# {% else %}
|
||||
<span class="text-muted">(inconnue)</span> #}
|
||||
{% endif %}
|
||||
{{ place.housenumber }}
|
||||
</small>
|
||||
</span>
|
||||
<span>
|
||||
<span class="badge bg-primary">{{ place.getModifiedDate() ? place.getModifiedDate()|date('Y-m-d H:i') : '' }}</span>
|
||||
<a href="https://www.openstreetmap.org/{{ place.osmKind }}/{{ place.osmId }}" target="_blank" class="btn btn-outline-secondary btn-sm ms-2" title="Voir sur OSM"><i class="bi bi-globe"></i></a>
|
||||
</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p class="text-muted">Aucun lieu modifié dans les 6 derniers mois.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue