From 885b0fdf9dcf1c16cbf7a425808812150d801583 Mon Sep 17 00:00:00 2001 From: Sebastian Castro <sebastian.castro@protonmail.com> Date: Thu, 22 Aug 2019 13:27:49 +0200 Subject: [PATCH] Element import: prevent import if mapping is not filled prevent auto match if latitude and longitude is empty --- .../Controller/Admin/ImportAdminController.php | 10 +++++++++- .../Services/ElementImportOneService.php | 8 +++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Biopen/GeoDirectoryBundle/Controller/Admin/ImportAdminController.php b/src/Biopen/GeoDirectoryBundle/Controller/Admin/ImportAdminController.php index 4ba8ccabb..756e65c7d 100755 --- a/src/Biopen/GeoDirectoryBundle/Controller/Admin/ImportAdminController.php +++ b/src/Biopen/GeoDirectoryBundle/Controller/Admin/ImportAdminController.php @@ -15,7 +15,9 @@ class ImportAdminController extends Controller $result = $this->get('biopen.element_import')->collectData($object); $showUrl = $this->admin->generateUrl('showData', ['id' => $object->getId()]); - if (count($result) > 0) + if (!in_array("name",array_values($object->getOntologyMapping()))) + $this->addFlash('sonata_flash_error', "Avant de lire les données, vous devez d'abords remplir le tableau de correspondance des champs. Renseignez au moins le Titre de la fiche"); + else if (count($result) > 0) $this->addFlash('sonata_flash_success', "Les données ont été chargées avec succès.</br>Voici le résultat obtenu pour le premier élément à importer :<pre>" . print_r($result[0], true) . '</pre>' . "<a href='$showUrl'>Voir toutes les données</a>"); else $this->addFlash('sonata_flash_error', "Erreur pendant le chargement des données, le résultat est vide"); @@ -41,6 +43,12 @@ class ImportAdminController extends Controller { $object = $this->admin->getSubject(); + if (!in_array("name",array_values($object->getOntologyMapping()))) { + $this->addFlash('sonata_flash_error', "Avant d'importer les données, vous devez d'abords remplir le tableau de correspondance des champs. Renseignez au moins le Titre de la fiche"); + $url = $this->admin->generateUrl('edit', ['id' => $object->getId()]); + return $this->redirect($url); + } + $object->setCurrState(ImportState::Started); $object->setCurrMessage("En attente..."); $em = $this->get('doctrine_mongodb')->getManager(); diff --git a/src/Biopen/GeoDirectoryBundle/Services/ElementImportOneService.php b/src/Biopen/GeoDirectoryBundle/Services/ElementImportOneService.php index 0e194824e..1f0d5fa12 100755 --- a/src/Biopen/GeoDirectoryBundle/Services/ElementImportOneService.php +++ b/src/Biopen/GeoDirectoryBundle/Services/ElementImportOneService.php @@ -56,9 +56,11 @@ class ElementImportOneService // adds missings fields instead of checking if each field is set before accessing $missingFields = array_diff($this->coreFields, array_keys($row)); foreach ($missingFields as $missingField) { - $row[$missingField] = ""; + $row[$missingField] = ($missingField == 'categories') ? [] : ""; } + $element = null; + if ($row['id']) { if (in_array($row['id'], $import->getIdsToIgnore())) return; @@ -66,7 +68,7 @@ class ElementImportOneService $qb->field('source')->references($import); $qb->field('oldId')->equals("" . $row['id']); $element = $qb->getQuery()->getSingleResult(); - } else { + } else if (strlen($row['name']) > 0 && strlen($row['latitude']) > 0 && strlen($row['longitude']) > 0) { $qb = $this->em->createQueryBuilder('BiopenGeoDirectoryBundle:Element'); $qb->field('source')->references($import); $qb->field('name')->equals($row['name']); @@ -75,7 +77,7 @@ class ElementImportOneService $element = $qb->getQuery()->getSingleResult(); } - if ($element) // if element with this Id already exists + if ($element) // if the element already exists, we update it { $updatedAtField = $import->getFieldToCheckElementHaveBeenUpdated(); // if updated date hasn't change, nothing to do -- GitLab