mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-06-20 01:44:42 +02:00
up edit form
This commit is contained in:
parent
fd72a1cedc
commit
b1965abe06
6 changed files with 325 additions and 49 deletions
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue