From bcecc476fd6a1fff2ba2debdec5b5ec341c10eab Mon Sep 17 00:00:00 2001 From: Sebastian Castro <sebastian.castro@protonmail.com> Date: Wed, 5 May 2021 14:12:28 +0200 Subject: [PATCH] import: ability to test element export (for OSM) --- config/routes/gogo_admin.yaml | 6 +++++- src/Admin/ImportAdmin.php | 9 ++++++++ src/Controller/ImportController.php | 16 ++++++++++++++ .../ElementSynchronizationService.php | 4 +++- .../import-test-osm-export.html.twig | 8 +++++++ translations/admin+intl-icu.fr.yaml | 21 +++++++++++-------- 6 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 templates/admin/core_custom/custom-fields/import-test-osm-export.html.twig diff --git a/config/routes/gogo_admin.yaml b/config/routes/gogo_admin.yaml index efa07ea00..fe1c0d2aa 100755 --- a/config/routes/gogo_admin.yaml +++ b/config/routes/gogo_admin.yaml @@ -60,4 +60,8 @@ gogo_element_generate: controller: App\Controller\ImportController::generateRandomAction defaults: nombre: '1' - generateVotes: '0' \ No newline at end of file + generateVotes: '0' + +gogo_element_test_export: + path: /elements/{id}/test-export + controller: App\Controller\ImportController::testElementExportAction \ No newline at end of file diff --git a/src/Admin/ImportAdmin.php b/src/Admin/ImportAdmin.php index c97648985..a6e1312fe 100755 --- a/src/Admin/ImportAdmin.php +++ b/src/Admin/ImportAdmin.php @@ -16,6 +16,7 @@ use App\Helper\GoGoHelper; class ImportAdmin extends GoGoAbstractAdmin { public $config; + public $elementId; public function getTemplate($name) { @@ -149,10 +150,17 @@ class ImportAdmin extends GoGoAbstractAdmin if ($this->getSubject()->isDynamicImport() && $this->getSubject()->getIsSynchronized()) { // TAB - Custom Code For Export + $elementIdToTest = $dm->query('Element')->field('source')->references($this->getSubject())->getOne(); + $this->elementId = $elementIdToTest ? $elementIdToTest->getId() : null; $formMapper->tab('customCodeForExportTab') ->panel('customCodeForExportPanel') ->add('customCodeForExport', null, [ 'attr' => ['class' => 'gogo-code-editor', 'format' => 'php', 'height' => '500']]) + ->add('test', TextType::class, [ + 'mapped' => false, + 'label' => false, + 'attr' => ['class' => 'gogo-import-test-osm-export'] + ]) ->end() ->end(); } @@ -164,6 +172,7 @@ class ImportAdmin extends GoGoAbstractAdmin $collection->add('refresh', $this->getRouterIdParameter().'/refresh'); $collection->add('collect', $this->getRouterIdParameter().'/collect'); $collection->add('showData', $this->getRouterIdParameter().'/show-data'); + $collection->add('testElementExport', $this->getRouterIdParameter().'/show-data'); } protected function configureDatagridFilters(DatagridMapper $datagridMapper) diff --git a/src/Controller/ImportController.php b/src/Controller/ImportController.php index e1f0d71a0..c51084355 100755 --- a/src/Controller/ImportController.php +++ b/src/Controller/ImportController.php @@ -6,6 +6,7 @@ use App\Services\RandomCreationService; use Doctrine\ODM\MongoDB\DocumentManager; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController as Controller; use Symfony\Component\HttpFoundation\Response; +use App\Services\ElementSynchronizationService; class ImportController extends Controller { @@ -25,6 +26,21 @@ class ImportController extends Controller return new Response(join('<br>', $optionsNames)); } + public function testElementExportAction($id, DocumentManager $dm, ElementSynchronizationService $syncService) + { + $element = $dm->get('Element')->find($id); + $object = $element->getSource(); + $result = $syncService->elementToOsm($element); + $dataDisplay = print_r($result, true); + $url = $this->generateUrl('admin_app_importdynamic_edit', ['id' => $object->getId()]); + + return $this->render('admin/pages/import/show-data.html.twig', [ + 'dataDisplay' => $dataDisplay, + 'redirectUrl' => $url, + 'import' => $object, + ]); + } + public function currStateAction($id, DocumentManager $dm) { $import = $dm->get('Import')->find($id); diff --git a/src/Services/ElementSynchronizationService.php b/src/Services/ElementSynchronizationService.php index 043e1f95d..6290bf758 100755 --- a/src/Services/ElementSynchronizationService.php +++ b/src/Services/ElementSynchronizationService.php @@ -260,7 +260,9 @@ class ElementSynchronizationService // execute custom code try { eval(str_replace('<?php', '', $element->getSource()->getCustomCodeForExport())); - } catch (\Exception $e) {} + } catch (\Exception $e) { + $gogoFeature['error'] = $e; + } return $gogoFeature; } diff --git a/templates/admin/core_custom/custom-fields/import-test-osm-export.html.twig b/templates/admin/core_custom/custom-fields/import-test-osm-export.html.twig new file mode 100644 index 000000000..5c39f882d --- /dev/null +++ b/templates/admin/core_custom/custom-fields/import-test-osm-export.html.twig @@ -0,0 +1,8 @@ +{% trans_default_domain 'admin' %} + +{% set elementId = form.vars.sonata_admin.admin.elementId %} +{% if elementId %} + <a href="{{ url('gogo_element_test_export', {id: elementId}) }}" class="btn btn-primary">{{ 'imports.edit.test_export.see_osm_export'|trans }}</a> +{% else %} + {{ 'imports.edit.test_export.no_element'|trans }} +{% endif %} \ No newline at end of file diff --git a/translations/admin+intl-icu.fr.yaml b/translations/admin+intl-icu.fr.yaml index 6a5f6be4a..20db2bff7 100755 --- a/translations/admin+intl-icu.fr.yaml +++ b/translations/admin+intl-icu.fr.yaml @@ -307,6 +307,9 @@ imports: clear-elements: "Effacer tous les éléments" delete: "Supprimer l'import (ainsi que tous les éléments importés)" saving: "Sauvegarde et lecture des données en cours..." + test_export: + see_osm_export: Tester à quoi ressemblera l'export OSM d'un élément + no_element: Aucun élément trouvé. Veuillez d'abords importer des données avant de pouvoir faire un test last: # templates/admin/partials/import/list_last_refresh.html.twig import: "Import - " progress: # templates/admin/pages/import/import-progress.html.twig @@ -348,28 +351,28 @@ imports: customCodeForExportTab: "Convertir les données pour l'export" customCodeForExportPanel: "Entrez du code qui sera exécuté lors de l'export, avant leur envoi pour synchronisation" customCodeForExportPanel_description: >- - La variable <b>$element</b> représente l'élément dans GoGoCarto, la variable <b>$osmFeature</b> représente la donnée OSM reconstruite à partir de l''élement GoGoCarto</br> + La variable <b>$element</b> représente l'élément dans GoGoCarto, la variable <b>$gogoFeature</b> représente la donnée OSM reconstruite à partir de l''élement GoGoCarto</br> <pre>Quelques examples de transformations simple:</pre> Si l''élement contient la catégorie "Vrac", on rajoute un tag OSM - <pre><?php + <pre> if (in_array(''Vrac'', $element->getCategoriesNames())) '{ - $osmFeature[''tags''][''bulk_purchase''] = ''yes''; + $gogoFeature[''tags''][''bulk_purchase''] = ''yes''; '}</pre> Si l''élement contient la catégorie numéro 12, on rajoute un tag OSM<br/> Cette méthode est à préférer car si on change le nom de la catégorie le code fonctionnera toujours<br/> L''ID d''une catégorie est noté entre parenthèse après son nom dans Personnalisation / Catégories - <pre><?php + <pre> if (in_array(12, $element->getCategoriesIds())) '{ - $osmFeature[''tags''][''bulk_purchase''] = ''yes''; + $gogoFeature[''tags''][''bulk_purchase''] = ''yes''; '}</pre> Si l''élement a une valeur spécifique pour un champ définit dans le formulaire - <pre><?php + <pre> if ($element->getProperty(''vrac'') == ''oui'') '{ - $osmFeature[''tags''][''bulk_purchase''] = ''yes''; + $gogoFeature[''tags''][''bulk_purchase''] = ''yes''; '}</pre> On ajoute un tag pour tous les éléments - <pre><?php - $osmFeature[''tags''][''bulk_purchase''] = ''yes''; + <pre> + $gogoFeature[''tags''][''bulk_purchase''] = ''yes''; </pre> historic: "Historique" dynamicList: "Liste des imports dynamiques (les données importées seront en lecture seule car elles sont gérées par un autre site)" -- GitLab