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

@ -318,14 +318,24 @@ class PublicController extends AbstractController
$tags = [];
$request_post = $request->request->all();
$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) {
if (strpos($key, 'commerce_tag_value__') === 0) {
$tagKey = str_replace('commerce_tag_value__', '', $key);
if (!empty($value)) {
$tags[$tagKey] = trim($value);
}
// On ajoute la clé même si la valeur est vide (pour affichage suppression)
$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('request->request->all()', $request->request->all());
// var_dump('tags extraits', $tags);
@ -359,9 +369,6 @@ class PublicController extends AbstractController
$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
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><osm version="0.6"></osm>');
$object = $xml->addChild($osm_kind);
@ -474,6 +481,9 @@ class PublicController extends AbstractController
'maptiler_token' => $_ENV['MAPTILER_TOKEN'],
'hide_filled_inputs' => false,
'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,10 +123,15 @@ 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) {
$has_ask_angela = false;
$remove_ask_angela = false;
$has_opening_hours = false;
@ -136,8 +141,6 @@ out meta;';
if (strpos($key, 'custom__ask_angela') === 0 ) {
if($value == 'ask_angela'){
$has_ask_angela = true;
}else{
$remove_ask_angela = true;
}
}
if (strpos($key, 'custom__opening_hours') === 0 && $value != '') {
@ -149,9 +152,6 @@ out meta;';
if($has_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) {
$modified_request_post['commerce_tag_value__opening_hours'] = $request_post['commerce_tag_value__opening_hours'];

View file

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

View file

@ -63,5 +63,9 @@
<th>
Osm kind</th>
<th>
<i class="bi bi-people"></i>
Lieux par habitants
</th>
</tr>
</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-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>
{% include 'public/edit/address.html.twig' %}
@ -29,10 +29,18 @@
<div id="images" class="d-none">
</div>
<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 %}
<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 : '' }}
@ -71,25 +79,47 @@
</span>
{% endif %}
{% 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' %}
<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">
{% 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,
'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 id="validation_messages" class="alert alert-danger d-none"></div>

View file

@ -4,13 +4,13 @@
<h2>{{ 'display.ask_angela'|trans }}</h2>
<div class="p-4">
<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">
<p class="more-info">
<a href="https://arretonslesviolences.gouv.fr/focus/plan-angela">{{ 'display.ask_angela_more_info'|trans }}</a>
</p>
</div>
<div class="col-6">
<div class="col-12 col-md-8">
<p class="description">
<label for="custom__ask_angela">
{{ 'display.ask_angela_description'|trans }}
@ -33,4 +33,5 @@
</div>
</fieldset>
</div>
{% endblock %}

View file

@ -11,13 +11,16 @@
'tiktok': { 'icon': 'bi-tiktok', 'label': 'TikTok' },
'youtube': { 'icon': 'bi-youtube', 'label': 'YouTube' },
'linkedin': { 'icon': 'bi-linkedin', 'label': 'LinkedIn' },
'pinterest': { 'icon': 'bi-pinterest', 'label': 'Pinterest' },
} %}
<div id="social-media-tags">
{% for key, social in social_medias %}
{% set tag_name = 'contact:' ~ key %}
<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>
{{ social.label }}
</span>
@ -25,10 +28,14 @@
class="form-control"
id="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">
</div>
{% endfor %}
</div>
{# <pre>
{{ dump(commerce_overpass.tags_converted) }}
</pre> #}
</fieldset>
{% endblock social_medias %}

View file

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

View file

@ -62,36 +62,28 @@ moyens de paiement proposés
médias sociaux
</div>
<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" 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" 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" 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" 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: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" 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" 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" 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" 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" 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" 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" 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" 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 class="row mb-3">
<div class="row mb-3">
<div class="col-12 col-md-3">
téléphone
</div>
<div class="col-12 col-md-9">
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>
phone:
<input type="text" 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">
<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>

View file

@ -13,6 +13,102 @@
{% if status == "Les tags ont été mis à jour avec succès" %}
<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">
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.