up edit form

This commit is contained in:
Tykayn 2025-05-26 16:22:01 +02:00 committed by tykayn
parent fd72a1cedc
commit b1965abe06
6 changed files with 325 additions and 49 deletions

View file

@ -46,6 +46,7 @@ class PublicController extends AbstractController
return $this->render('public/edit.html.twig', [
'commerce' => $commerce,
'name' => $name,
'osm_kind' => $place->getOsmKind(),
"mapbox_token" => $_ENV['MAPBOX_TOKEN'],
"maptiler_token" => $_ENV['MAPTILER_TOKEN'],
]);
@ -74,14 +75,31 @@ class PublicController extends AbstractController
if ($request->isMethod('POST')) {
$status = "non modifié";
// Récupérer le type d'objet (node ou way)
$osm_kind = $request->request->get('osm_kind', 'node');
// Récupérer tous les tags du formulaire
$tags = [];
foreach ($request->request->all() as $key => $value) {
var_dump($key, $value);
if (strpos($key, 'commerce_tag_value__') === 0) {
$tagKey = str_replace('commerce_tag_value__', '', $key);
if (!empty($value)) {
// Validation des données selon le type de tag
if ($tagKey === 'addr:postcode') {
// Vérifier que c'est bien un code postal français (5 chiffres)
if (!preg_match('/^\d{5}$/', $value)) {
$status = "Erreur : Le code postal doit être composé de 5 chiffres";
continue;
}
} elseif ($tagKey === 'contact:phone' || $tagKey === 'phone') {
// Nettoyer le numéro de téléphone
$value = preg_replace('/[^0-9+]/', '', $value);
} elseif (strpos($value, 'http://') === 0) {
$value = str_replace('http://', 'https://', $value);
}
$tags[$tagKey] = $value;
}
}
@ -102,7 +120,7 @@ class PublicController extends AbstractController
$tag = $changeset->addChild('tag');
$tag->addAttribute('k', 'comment');
$tag->addAttribute('v', 'Modification des tags via l\'interface web');
$tag->addAttribute('v', 'Modification des tags via l\'interface web #MonCommerceOSM');
$changesetResponse = $client->put('https://api.openstreetmap.org/api/0.6/changeset/create', [
'body' => $changesetXml->asXML(),
@ -114,19 +132,29 @@ class PublicController extends AbstractController
$newChangesetId = $changesetResponse->getBody()->getContents();
// 2. Modifier le nœud avec le nouveau changeset
// 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>');
$node = $xml->addChild('node');
$node->addAttribute('id', $osm_object_id);
$node->addAttribute('version', $version);
$node->addAttribute('changeset', $newChangesetId);
$node->addAttribute('lat', '49.6504926');
$node->addAttribute('lon', '-1.5722526');
$object = $xml->addChild($osm_kind);
$object->addAttribute('id', $osm_object_id);
$object->addAttribute('version', $version);
$object->addAttribute('changeset', $newChangesetId);
// Ajouter les coordonnées pour les nodes
if ($osm_kind === 'node') {
if (!isset($currentObjectData['@attributes']['lat']) || !isset($currentObjectData['@attributes']['lon'])) {
throw new \Exception("Impossible de récupérer les coordonnées du nœud");
}
$object->addAttribute('lat', $currentObjectData['@attributes']['lat']);
$object->addAttribute('lon', $currentObjectData['@attributes']['lon']);
}
// Ajouter les tags
foreach ($tags as $key => $value) {
if (!empty($key) && !empty($value)) {
$tag = $node->addChild('tag');
$tag = $object->addChild('tag');
$tag->addAttribute('k', htmlspecialchars($key, ENT_XML1));
$tag->addAttribute('v', htmlspecialchars($value, ENT_XML1));
}
@ -134,9 +162,9 @@ class PublicController extends AbstractController
// Debug du XML généré
$xmlString = $xml->asXML();
var_dump($xmlString);
// echo('xml : <br>'.$xmlString);
$response = $client->put('https://api.openstreetmap.org/api/0.6/node/' . $osm_object_id, [
$response = $client->put("https://api.openstreetmap.org/api/0.6/{$osm_kind}/" . $osm_object_id, [
'body' => $xmlString,
'headers' => [
'Authorization' => 'Bearer ' . $osm_api_token,
@ -166,7 +194,7 @@ class PublicController extends AbstractController
}
// après envoi on récupère les données
$commerce = $this->motocultrice->get_osm_object_data($osm_object_id);
$commerce = $this->motocultrice->get_osm_object_data($osm_kind, $osm_object_id);
return $this->render('public/view.html.twig', [
'controller_name' => 'PublicController',
'commerce' => $commerce,