ajout infos formulaire envoi

This commit is contained in:
Tykayn 2025-07-07 23:06:04 +02:00 committed by tykayn
parent 44b4f49289
commit 2bcec59281
11 changed files with 211 additions and 61 deletions

View file

@ -316,16 +316,26 @@ class PublicController extends AbstractController
$osm_kind = $request->request->get('osm_kind', 'node'); $osm_kind = $request->request->get('osm_kind', 'node');
// Récupérer tous les tags du formulaire // Récupérer tous les tags du formulaire
$tags = []; $tags = [];
$request_post = $request->request->all(); $request_post = $request->request->all();
$request_post = $this->motocultrice->map_post_values($request_post); $request_post = $this->motocultrice->map_post_values($request_post);
$request_post = $request_post ?? [];
// Log temporaire pour debug POST
file_put_contents('/tmp/debug_post.txt', print_r($request_post, true));
// Debug visuel immédiat
$excluded_post_fields = [];
foreach ($request_post as $key => $value) { foreach ($request_post as $key => $value) {
if (strpos($key, 'commerce_tag_value__') === 0) { if (strpos($key, 'commerce_tag_value__') === 0) {
$tagKey = str_replace('commerce_tag_value__', '', $key); $tagKey = str_replace('commerce_tag_value__', '', $key);
if (!empty($value)) { // On ajoute la clé même si la valeur est vide (pour affichage suppression)
$tags[$tagKey] = trim($value); $tags[$tagKey] = trim($value);
} } else {
$excluded_post_fields[] = $key;
} }
} }
// Récupérer les tags Overpass avant modification
$currentObjectData = $this->motocultrice->get_osm_object_data($osm_kind, $osm_object_id);
$tags_before_modif = $currentObjectData['tags_converted'] ?? [];
$tags_after_modif = $tags;
// var_dump('POST brut', $_POST); // var_dump('POST brut', $_POST);
// var_dump('request->request->all()', $request->request->all()); // var_dump('request->request->all()', $request->request->all());
// var_dump('tags extraits', $tags); // var_dump('tags extraits', $tags);
@ -359,9 +369,6 @@ class PublicController extends AbstractController
$newChangesetId = $changesetResponse->getBody()->getContents(); $newChangesetId = $changesetResponse->getBody()->getContents();
// Récupérer les données actuelles de l'objet
$currentObjectData = $this->motocultrice->get_osm_object_data($osm_kind, $osm_object_id);
// 2. Modifier l'objet avec le nouveau changeset // 2. Modifier l'objet avec le nouveau changeset
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><osm version="0.6"></osm>'); $xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><osm version="0.6"></osm>');
$object = $xml->addChild($osm_kind); $object = $xml->addChild($osm_kind);
@ -474,6 +481,9 @@ class PublicController extends AbstractController
'maptiler_token' => $_ENV['MAPTILER_TOKEN'], 'maptiler_token' => $_ENV['MAPTILER_TOKEN'],
'hide_filled_inputs' => false, 'hide_filled_inputs' => false,
'excluded_tags_to_render' => $this->motocultrice->excluded_tags_to_render, 'excluded_tags_to_render' => $this->motocultrice->excluded_tags_to_render,
'tags_before_modif' => $tags_before_modif ?? null,
'tags_after_modif' => $tags_after_modif ?? null,
'excluded_post_fields' => $excluded_post_fields ?? null,
]); ]);
} }

View file

@ -123,22 +123,25 @@ out meta;';
) { ) {
} }
/**
* fait le lien entre les tags du formulaire et les tags OSM pour les champs personnalisés
*
* @param [type] $request_post
* @return void
*/
public function map_post_values($request_post) { public function map_post_values($request_post) {
$has_ask_angela = false; $has_ask_angela = false;
$remove_ask_angela = false;
$has_opening_hours = false; $has_opening_hours = false;
$modified_request_post = []; $modified_request_post = [];
foreach ($request_post as $key => $value) { foreach ($request_post as $key => $value) {
if (strpos($key, 'custom__ask_angela') === 0 ) { if (strpos($key, 'custom__ask_angela') === 0 ) {
if($value == 'ask_angela'){ if($value == 'ask_angela'){
$has_ask_angela = true; $has_ask_angela = true;
}else{ }
$remove_ask_angela = true;
}
} }
if (strpos($key, 'custom__opening_hours') === 0 && $value != '') { if (strpos($key, 'custom__opening_hours') === 0 && $value != '') {
$has_opening_hours = true; $has_opening_hours = true;
@ -148,10 +151,7 @@ out meta;';
if($has_ask_angela) { if($has_ask_angela) {
$modified_request_post['commerce_tag_value__harassment_prevention'] = 'ask_angela'; $modified_request_post['commerce_tag_value__harassment_prevention'] = 'ask_angela';
} }
if($remove_ask_angela) {
unset($modified_request_post['commerce_tag_value__harassment_prevention']);
}
if($has_opening_hours) { if($has_opening_hours) {
$modified_request_post['commerce_tag_value__opening_hours'] = $request_post['commerce_tag_value__opening_hours']; $modified_request_post['commerce_tag_value__opening_hours'] = $request_post['commerce_tag_value__opening_hours'];

View file

@ -97,6 +97,13 @@
{% endif %} {% endif %}
<td>
{% if stats.population > 0 %}
{{ (1 / (stats.population / stats.places|length))|number_format(3, '.', ' ') }}
{% else %}
-
{% endif %}
</td>
<td> <td>
{# (si siret clos) #} {# (si siret clos) #}
</td> </td>

View file

@ -63,5 +63,9 @@
<th> <th>
Osm kind</th> Osm kind</th>
<th>
<i class="bi bi-people"></i>
Lieux par habitants
</th>
</tr> </tr>
</thead> </thead>

View file

@ -0,0 +1,4 @@
{# Partial pour afficher un textarea de tags OSM clé=valeur #}
<textarea class="form-control" rows="{{ tags|length > 10 ? 10 : tags|length + 2 }}" readonly style="font-family:monospace;">
{% for key, value in tags %}{% if value is not empty %}{{ key }}={{ value }}
{% endif %}{% endfor %}</textarea>

View file

@ -8,7 +8,7 @@
<div class="card shadow-sm"> <div class="card shadow-sm">
<div class="card-body"> <div class="card-body">
<h1 class="card-title h2 mb-4">{{ 'display.welcome'|trans }} {{ commerce_overpass.tags_converted.name }}</h1> <h1 class="card-title h2 mb-4">{{ 'display.welcome'|trans }} {{ commerce_overpass.tags_converted.name }} - {{ commerce.stats.name }}</h1>
<div id="map" style="height: 400px; width: 100%;" class="rounded mb-4"></div> <div id="map" style="height: 400px; width: 100%;" class="rounded mb-4"></div>
{% include 'public/edit/address.html.twig' %} {% include 'public/edit/address.html.twig' %}
@ -29,10 +29,18 @@
<div id="images" class="d-none"> <div id="images" class="d-none">
</div> </div>
<div id="images" > <div id="images" >
<img class="img-fluid img-thumbnail mb-3" src="{{ commerce_overpass.tags_converted.image }}" /> {% if commerce_overpass.tags_converted.image is defined and commerce_overpass.tags_converted.image|length > 0 %}
<img class="img-fluid img-thumbnail mb-3" style="height: 500px; width: auto;" src="{{ commerce_overpass.tags_converted.image }}" />
{% endif %}
<label for="commerce_tag_value__image" class="form-label">URL de l'image de la façade</label>
<input type="text" class="form-control mb-2" id="commerce_tag_value__image" name="commerce_tag_value__image" value="{{ commerce_overpass.tags_converted.image is defined ? commerce_overpass.tags_converted.image : '' }}" placeholder="https://...">
{% if commerce_overpass.tags_converted.image is defined and commerce_overpass.tags_converted.image|length > 0 %}
<img src="{{ commerce_overpass.tags_converted.image }}" alt="Image de la façade" class="img-fluid img-thumbnail mb-2" style="max-height:200px;">
{% endif %}
{{ commerce_overpass.tags_converted.image }}
url d'image de la facade : {{ commerce_overpass.tags_converted.image }}
{% if commerce_overpass.tags_converted.panoramax is defined or commerce_overpass.tags_converted.wikimedia_commons is defined %} {% if commerce_overpass.tags_converted.panoramax is defined or commerce_overpass.tags_converted.wikimedia_commons is defined %}
<input type="text" class="form-control" name="commerce_tag_value__image" value="{{ commerce_overpass.tags_converted.image }}"> <input type="text" class="form-control" name="commerce_tag_value__image" value="{{ commerce_overpass.tags_converted.image }}">
url d'image sur Panoramax : {{ commerce_overpass.tags_converted.panoramax is defined ? commerce_overpass.tags_converted.panoramax : '' }} url d'image sur Panoramax : {{ commerce_overpass.tags_converted.panoramax is defined ? commerce_overpass.tags_converted.panoramax : '' }}
@ -71,25 +79,47 @@
</span> </span>
{% endif %} {% endif %}
{% include 'public/edit/ask_angela.html.twig' %} {% include 'public/edit/ask_angela.html.twig' %}
<fieldset class="input-group mb-2 phone-group">
<div class="input-group mb-2">
<span class="input-group-text" style="width: 10rem;">
<i class="bi bi-phone me-2"></i>
Téléphone
</span>
<input type="text" class="form-control"
id="commerce_tag_value__contact:phone"
name="commerce_tag_value__contact:phone"
value="{{ commerce_overpass.tags_converted['contact:phone'] ?? '' }}"
placeholder="+33 1 23 45 67 89">
</div>
</fieldset>
{% include 'public/edit/social_media.html.twig' %} {% include 'public/edit/social_media.html.twig' %}
<div class="input-group mb-2 phone-group">
<span class="input-group-text" style="width: 120px;">
<i class="bi bi-phone me-2"></i>
Téléphone
</span>
<input type="text"
class="form-control"
id="commerce_tag_value__contact:phone"
name="commerce_tag_value__contact:phone"
value="{{ place.tags['contact:phone'] ?? '' }}"
placeholder="+33 1 23 45 67 89">
</div>
<div id="advanced_tags" class="d-none"> <div id="advanced_tags" class="d-none">
{% include 'public/edit/tags.html.twig' with { 'excluded_tags_to_render': excluded_tags_to_render, {# {% include 'public/edit/tags.html.twig' with { 'excluded_tags_to_render': excluded_tags_to_render,
'commerce_overpass': commerce_overpass, 'commerce_overpass': commerce_overpass,
'hide_filled_inputs': hide_filled_inputs } %} 'hide_filled_inputs': hide_filled_inputs } %}
#}
{% include 'public/edit/tags.html.twig' with { 'excluded_tags_to_render': {},
'commerce_overpass': commerce_overpass,
'hide_filled_inputs': hide_filled_inputs } %}
</div>
<div class="mb-4">
<h4>Prévisualisation des tags OSM (texte à copier-coller)</h4>
{% set tags_for_textarea = {} %}
{% for k, v in commerce_overpass.tags_converted %}
{% if v is not empty %}
{% set tags_for_textarea = tags_for_textarea|merge({ (k): v }) %}
{% endif %}
{% endfor %}
{% include 'public/_tags_textarea.html.twig' with { 'tags': tags_for_textarea } %}
</div> </div>
<div id="validation_messages" class="alert alert-danger d-none"></div> <div id="validation_messages" class="alert alert-danger d-none"></div>

View file

@ -4,13 +4,13 @@
<h2>{{ 'display.ask_angela'|trans }}</h2> <h2>{{ 'display.ask_angela'|trans }}</h2>
<div class="p-4"> <div class="p-4">
<div class="row mb-3"> <div class="row mb-3">
<div class="col-2 col-md-3"> <div class="col-2 col-md-4">
<img src="https://i0.wp.com/askforangela.co.uk/wp-content/uploads/2022/10/Ask-for-Angela-primary.png?fit=300%2C300&ssl=1" class="img-fluid img-thumbnail mb-3" alt="Image du lieu"> <img src="https://i0.wp.com/askforangela.co.uk/wp-content/uploads/2022/10/Ask-for-Angela-primary.png?fit=300%2C300&ssl=1" class="img-fluid img-thumbnail mb-3" alt="Image du lieu">
<p class="more-info"> <p class="more-info">
<a href="https://arretonslesviolences.gouv.fr/focus/plan-angela">{{ 'display.ask_angela_more_info'|trans }}</a> <a href="https://arretonslesviolences.gouv.fr/focus/plan-angela">{{ 'display.ask_angela_more_info'|trans }}</a>
</p> </p>
</div> </div>
<div class="col-6"> <div class="col-12 col-md-8">
<p class="description"> <p class="description">
<label for="custom__ask_angela"> <label for="custom__ask_angela">
{{ 'display.ask_angela_description'|trans }} {{ 'display.ask_angela_description'|trans }}
@ -33,4 +33,5 @@
</div> </div>
</fieldset> </fieldset>
</div>
{% endblock %} {% endblock %}

View file

@ -11,24 +11,31 @@
'tiktok': { 'icon': 'bi-tiktok', 'label': 'TikTok' }, 'tiktok': { 'icon': 'bi-tiktok', 'label': 'TikTok' },
'youtube': { 'icon': 'bi-youtube', 'label': 'YouTube' }, 'youtube': { 'icon': 'bi-youtube', 'label': 'YouTube' },
'linkedin': { 'icon': 'bi-linkedin', 'label': 'LinkedIn' }, 'linkedin': { 'icon': 'bi-linkedin', 'label': 'LinkedIn' },
'pinterest': { 'icon': 'bi-pinterest', 'label': 'Pinterest' },
} %} } %}
<div id="social-media-tags"> <div id="social-media-tags">
{% for key, social in social_medias %} {% for key, social in social_medias %}
{% set tag_name = 'contact:' ~ key %} {% set tag_name = 'contact:' ~ key %}
<div class="input-group mb-2"> <div class="input-group mb-2">
<span class="input-group-text" style="width: 120px;"> <span class="input-group-text" style="width: 10rem;">
<i class="bi {{ social.icon }} me-2"></i> <i class="bi {{ social.icon }} me-2"></i>
{{ social.label }} {{ social.label }}
</span> </span>
<input type="text" <input type="text"
class="form-control" class="form-control"
id="commerce_tag_value__{{ tag_name }}" id="commerce_tag_value__{{ tag_name }}"
name="commerce_tag_value__{{ tag_name }}" name="commerce_tag_value__{{ tag_name }}"
value="{{ place.tags[tag_name] ?? '' }}" value="{{ commerce_overpass.tags_converted[tag_name] is defined and commerce_overpass.tags_converted[tag_name] |length > 0 ? commerce_overpass.tags_converted[tag_name] : '' }}"
placeholder="@compte ou URL complète"> placeholder="@compte ou URL complète">
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
{# <pre>
{{ dump(commerce_overpass.tags_converted) }}
</pre> #}
</fieldset> </fieldset>
{% endblock social_medias %} {% endblock social_medias %}

View file

@ -24,11 +24,10 @@
{% endif %} {% endif %}
<span class="label-translated" title="{{ k }}">{{ ('display.keys.' ~ k)|trans }}</span> <span class="label-translated" title="{{ k }}">{{ ('display.keys.' ~ k)|trans }}</span>
</div> </div>
<input type="text" class="form-control d-none" name="commerce_tag_key__{{ k }}" value="{{ k }}" title="{{ k }}" readonly>
{% endif %} {% endif %}
</div> </div>
<div class="col-md-5"> <div class="col-md-5">
{% if k not in excluded_tags_to_render %} {# {% if k not in excluded_tags_to_render %} #}
<div class="input-group"> <div class="input-group">
<input type="text" <input type="text"
class="form-control" class="form-control"
@ -37,7 +36,7 @@
value="{{ v }}" value="{{ v }}"
{% if hide_filled_inputs is defined and v %}style="display: none;"{% endif %}> {% if hide_filled_inputs is defined and v %}style="display: none;"{% endif %}>
</div> </div>
{% endif %} {# {% endif %} #}
</div> </div>
</div> </div>
{% endfor %} {% endfor %}

View file

@ -62,36 +62,28 @@ moyens de paiement proposés
médias sociaux médias sociaux
</div> </div>
<div class="col-12 col-md-9"> <div class="col-12 col-md-9">
<input type="text" class="form-control" name="commerce_tag_value__contact:mastodon" value="{{ commerce.tags_converted['contact:mastodon'] is defined ? commerce.tags_converted['contact:mastodon'] : '' }}"> <input type="text" id="commerce_tag_value__contact:mastodon" class="form-control" name="commerce_tag_value__contact:mastodon" value="{{ commerce.tags_converted['contact:mastodon'] is defined ? commerce.tags_converted['contact:mastodon'] : '' }}">
<input type="text" class="form-control" name="commerce_tag_value__contact:facebook" value="{{ commerce.tags_converted['contact:facebook'] is defined ? commerce.tags_converted['contact:facebook'] : '' }}"> <input type="text" id="commerce_tag_value__contact:facebook" class="form-control" name="commerce_tag_value__contact:facebook" value="{{ commerce.tags_converted['contact:facebook'] is defined ? commerce.tags_converted['contact:facebook'] : '' }}">
<input type="text" class="form-control" name="commerce_tag_value__contact:instagram" value="{{ commerce.tags_converted['contact:instagram'] is defined ? commerce.tags_converted['contact:instagram'] : '' }}"> <input type="text" id="commerce_tag_value__contact:instagram" class="form-control" name="commerce_tag_value__contact:instagram" value="{{ commerce.tags_converted['contact:instagram'] is defined ? commerce.tags_converted['contact:instagram'] : '' }}">
<input type="text" class="form-control" name="commerce_tag_value__contact:twitter" value="{{ commerce.tags_converted['contact:twitter'] is defined ? commerce.tags_converted['contact:twitter'] : '' }}"> <input type="text" id="commerce_tag_value__contact:twitter" class="form-control" name="commerce_tag_value__contact:twitter" value="{{ commerce.tags_converted['contact:twitter'] is defined ? commerce.tags_converted['contact:twitter'] : '' }}">
<input type="text" class="form-control" name="commerce_tag_value__contact:youtube" value="{{ commerce.tags_converted['contact:youtube'] is defined ? commerce.tags_converted['contact:youtube'] : '' }}"> <input type="text" id="commerce_tag_value__contact:youtube" class="form-control" name="commerce_tag_value__contact:youtube" value="{{ commerce.tags_converted['contact:youtube'] is defined ? commerce.tags_converted['contact:youtube'] : '' }}">
<input type="text" class="form-control" name="commerce_tag_value__contact:tiktok" value="{{ commerce.tags_converted['contact:tiktok'] is defined ? commerce.tags_converted['contact:tiktok'] : '' }}"> <input type="text" id="commerce_tag_value__contact:tiktok" class="form-control" name="commerce_tag_value__contact:tiktok" value="{{ commerce.tags_converted['contact:tiktok'] is defined ? commerce.tags_converted['contact:tiktok'] : '' }}">
<input type="text" class="form-control" name="commerce_tag_value__contact:linkedin" value="{{ commerce.tags_converted['contact:linkedin'] is defined ? commerce.tags_converted['contact:linkedin'] : '' }}"> <input type="text" id="commerce_tag_value__contact:linkedin" class="form-control" name="commerce_tag_value__contact:linkedin" value="{{ commerce.tags_converted['contact:linkedin'] is defined ? commerce.tags_converted['contact:linkedin'] : '' }}">
<input type="text" class="form-control" name="commerce_tag_value__contact:pinterest" value="{{ commerce.tags_converted['contact:pinterest'] is defined ? commerce.tags_converted['contact:pinterest'] : '' }}"> <input type="text" id="commerce_tag_value__contact:pinterest" class="form-control" name="commerce_tag_value__contact:pinterest" value="{{ commerce.tags_converted['contact:pinterest'] is defined ? commerce.tags_converted['contact:pinterest'] : '' }}">
<input type="text" class="form-control" name="commerce_tag_value__contact:snapchat" value="{{ commerce.tags_converted['contact:snapchat'] is defined ? commerce.tags_converted['contact:snapchat'] : '' }}"> <input type="text" id="commerce_tag_value__contact:snapchat" class="form-control" name="commerce_tag_value__contact:snapchat" value="{{ commerce.tags_converted['contact:snapchat'] is defined ? commerce.tags_converted['contact:snapchat'] : '' }}">
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-12 col-md-3"> <div class="col-12 col-md-3">
téléphone téléphone
</div> </div>
<div class="col-12 col-md-9"> <div class="col-12 col-md-9">
contact:phone contact:phone
<input type="text" class="form-control" name="commerce_tag_value__contact:phone" value="{{ commerce.tags_converted['contact:phone'] is defined ? commerce.tags_converted['contact:phone'] : '' }}"> <input type="text" id="commerce_tag_value__contact:phone" class="form-control" name="commerce_tag_value__contact:phone" value="{{ commerce.tags_converted['contact:phone'] is defined ? commerce.tags_converted['contact:phone'] : '' }}">
<br> <br>
phone: phone:
<input type="text" class="form-control" name="commerce_tag_value__phone" value="{{ commerce.tags_converted['phone'] is defined ? commerce.tags_converted['phone'] : '' }}"> <input type="text" id="commerce_tag_value__phone" class="form-control" name="commerce_tag_value__phone" value="{{ commerce.tags_converted['phone'] is defined ? commerce.tags_converted['phone'] : '' }}">
</div>
</div>
<div class="row mb-3">
<div class="col-12 col-md-3">
</div>
<div class="col-12 col-md-9">
</div> </div>
</div> </div>
</div> </div>

View file

@ -13,6 +13,102 @@
{% if status == "Les tags ont été mis à jour avec succès" %} {% if status == "Les tags ont été mis à jour avec succès" %}
<span class="badge bg-success p-4">{{status}}</span> <span class="badge bg-success p-4">{{status}}</span>
{# Tableau comparatif des tags avant/après modification #}
{% if tags_before_modif is defined and tags_after_modif is defined %}
<h3 class="mt-4">Comparatif des tags avant/après modification</h3>
<div class="table-responsive mb-4">
<table class="table table-bordered table-sm align-middle">
<thead class="table-light">
<tr>
<th>Tag</th>
<th>Avant</th>
<th>Après</th>
</tr>
</thead>
<tbody>
{# Construction manuelle de la liste des clés sans filtre unique #}
{% set all_keys = [] %}
{% for k in tags_before_modif|keys %}{% if k not in all_keys %}{% set all_keys = all_keys|merge([k]) %}{% endif %}{% endfor %}
{% for k in tags_after_modif|keys %}{% if k not in all_keys %}{% set all_keys = all_keys|merge([k]) %}{% endif %}{% endfor %}
{% set all_keys = all_keys|sort %}
{% for key in all_keys %}
{% set before = tags_before_modif[key]|default(null) %}
{% set after = tags_after_modif[key]|default(null) %}
{% if before is not null and (after is null or after == '') %}
{# Suppression #}
<tr>
<td><code>{{ key }}</code></td>
<td class="bg-danger text-white">{{ before }}</td>
<td class="bg-danger text-white">(supprimé)</td>
</tr>
{% elseif before is null and after is not null and after != '' %}
{# Ajout #}
<tr>
<td><code>{{ key }}</code></td>
<td class="bg-success text-white">(nouveau)</td>
<td class="bg-success text-white">{{ after }}</td>
</tr>
{% elseif before != after and after != '' %}
{# Modification #}
<tr>
<td><code>{{ key }}</code></td>
<td class="bg-warning">{{ before }}</td>
<td class="bg-warning">{{ after }}</td>
</tr>
{% else %}
<tr>
<td><code>{{ key }}</code></td>
<td>{{ before }}</td>
<td>{{ after }}</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
<small class="text-muted">
<span class="bg-danger text-white px-2">&nbsp;</span> supprimé &nbsp;
<span class="bg-warning px-2">&nbsp;</span> modifié &nbsp;
<span class="bg-success text-white px-2">&nbsp;</span> ajouté
</small>
</div>
{% if excluded_post_fields is defined and excluded_post_fields|length > 0 %}
<div class="alert alert-info">
<b>Champs du formulaire non pris en compte dans OpenStreetMap :</b>
<ul class="mb-0">
{% for field in excluded_post_fields %}
<li><code>{{ field }}</code></li>
{% endfor %}
</ul>
</div>
{% endif %}
{% endif %}
{# Affichage en lecture seule des nouveaux tags #}
<h3 class="mt-4">Nouveaux tags enregistrés</h3>
<div class="table-responsive mb-4">
<table class="table table-bordered table-sm align-middle">
<thead class="table-light">
<tr>
<th>Tag</th>
<th>Valeur</th>
</tr>
</thead>
<tbody>
{% for key, value in tags_after_modif %}
{% if value is not empty %}
<tr>
<td><code>{{ key }}</code></td>
<td>{{ value }}</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
<h4 class="mt-4">Tags OSM (texte à copier-coller)</h4>
{% include 'public/_tags_textarea.html.twig' with { 'tags': tags_after_modif } %}
<p class="p-4 col-12 col-lg-8"> <p class="p-4 col-12 col-lg-8">
Merci d'avoir contribué à l'amélioration de la base de données OSM, votre contribution sera visible sur de nombreux sites web et dans la base adresse nationale des lieux et commerces. Merci d'avoir contribué à l'amélioration de la base de données OSM, votre contribution sera visible sur de nombreux sites web et dans la base adresse nationale des lieux et commerces.