diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml
index 965dc41..5086845 100644
--- a/config/packages/framework.yaml
+++ b/config/packages/framework.yaml
@@ -8,7 +8,7 @@ framework:
default_locale: 'fr'
translator:
default_path: '%kernel.project_dir%/translations'
- fallbacks: ['fr']
+ fallbacks: ['en']
# Enables session support. Note that the session will ONLY be started if you read or write from it.
# Remove or comment this section to explicitly disable session support.
diff --git a/src/Controller/PublicController.php b/src/Controller/PublicController.php
index cb27b3e..d6a7462 100644
--- a/src/Controller/PublicController.php
+++ b/src/Controller/PublicController.php
@@ -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('
'.$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,
diff --git a/src/Service/Motocultrice.php b/src/Service/Motocultrice.php
index 19a379f..1124218 100644
--- a/src/Service/Motocultrice.php
+++ b/src/Service/Motocultrice.php
@@ -8,6 +8,7 @@ use Doctrine\ORM\EntityManagerInterface;
class Motocultrice
{
private $overpassApiUrl = 'https://overpass-api.de/api/interpreter';
+ private $osmApiUrl = 'https://www.openstreetmap.org/api/0.6';
public function __construct(
private HttpClientInterface $client,
@@ -141,4 +142,98 @@ QUERY;
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
);
}
+
+ public function formatOsmDataForSubmit(array $data): array
+ {
+ // Garder uniquement les tags essentiels
+ $essentialTags = [
+ 'name',
+ 'opening_hours',
+ 'phone',
+ 'contact:email',
+ 'contact:phone',
+ 'website',
+ 'contact:website',
+ 'wheelchair',
+ 'addr:housenumber',
+ 'addr:street',
+ 'addr:city',
+ 'addr:postcode',
+ 'amenity',
+ 'shop',
+ 'tourism',
+ 'source',
+ 'ref:FR:SIRET'
+ ];
+
+ $formattedData = [
+ 'node' => [
+ '@attributes' => [
+ 'id' => $data['@attributes']['id'],
+ 'version' => $data['@attributes']['version'],
+ 'changeset' => $data['@attributes']['changeset'],
+ 'lat' => $data['@attributes']['lat'],
+ 'lon' => $data['@attributes']['lon']
+ ],
+ 'tag' => []
+ ]
+ ];
+
+ // Filtrer et ajouter uniquement les tags essentiels
+ if (isset($data['tag'])) {
+ foreach ($data['tag'] as $tag) {
+ if (in_array($tag['@attributes']['k'], $essentialTags)) {
+ $formattedData['node']['tag'][] = $tag;
+ }
+ }
+ }
+
+ return $formattedData;
+ }
+
+ private function arrayToXml(array $data): string
+ {
+ $xml = new \SimpleXMLElement('