From f1612b78ae7d5ef13636cf4135bbe973fa8f21de Mon Sep 17 00:00:00 2001 From: Sebastian Castro <sebastian.castro@protonmail.com> Date: Sun, 15 Sep 2019 08:57:35 +0200 Subject: [PATCH] Element import fix matching existing element --- .../Document/Coordinates.php | 4 +-- .../Services/ElementImportMappingService.php | 1 + .../Services/ElementImportOneService.php | 31 ++++++++++++++----- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/Biopen/GeoDirectoryBundle/Document/Coordinates.php b/src/Biopen/GeoDirectoryBundle/Document/Coordinates.php index 0900a9bcd..8ddf3bbce 100755 --- a/src/Biopen/GeoDirectoryBundle/Document/Coordinates.php +++ b/src/Biopen/GeoDirectoryBundle/Document/Coordinates.php @@ -24,8 +24,8 @@ class Coordinates public function __construct($lat = null, $lng = null) { - $this->setLatitude($lat); - $this->setLongitude($lng); + $this->setLatitude((float) $lat); + $this->setLongitude((float) $lng); } /** diff --git a/src/Biopen/GeoDirectoryBundle/Services/ElementImportMappingService.php b/src/Biopen/GeoDirectoryBundle/Services/ElementImportMappingService.php index 311711520..3898ed55f 100644 --- a/src/Biopen/GeoDirectoryBundle/Services/ElementImportMappingService.php +++ b/src/Biopen/GeoDirectoryBundle/Services/ElementImportMappingService.php @@ -29,6 +29,7 @@ class ElementImportMappingService protected $coreFields = ['id', 'name', 'categories', 'streetAddress', 'addressLocality', 'postalCode', 'addressCountry', 'latitude', 'longitude', 'images', 'owner', 'source', 'openHours', 'email']; protected $mappedCoreFields = [ 'title' => 'name', 'nom' => 'name', + 'mail' => 'email', 'taxonomy' => 'categories', 'address' => 'streetAddress', 'city' => 'addressLocality', diff --git a/src/Biopen/GeoDirectoryBundle/Services/ElementImportOneService.php b/src/Biopen/GeoDirectoryBundle/Services/ElementImportOneService.php index 1f0d5fa12..c6d37ce8f 100755 --- a/src/Biopen/GeoDirectoryBundle/Services/ElementImportOneService.php +++ b/src/Biopen/GeoDirectoryBundle/Services/ElementImportOneService.php @@ -68,12 +68,26 @@ class ElementImportOneService $qb->field('source')->references($import); $qb->field('oldId')->equals("" . $row['id']); $element = $qb->getQuery()->getSingleResult(); - } else if (strlen($row['name']) > 0 && strlen($row['latitude']) > 0 && strlen($row['longitude']) > 0) { + } + else if (strlen($row['name']) > 0) + { $qb = $this->em->createQueryBuilder('BiopenGeoDirectoryBundle:Element'); $qb->field('source')->references($import); $qb->field('name')->equals($row['name']); - $qb->field('geo.latitude')->equals((float) number_format((float)$row['latitude'], 5)); - $qb->field('geo.longitude')->equals((float) number_format((float)$row['longitude'], 5)); + + if (strlen($row['latitude']) > 0 && strlen($row['longitude']) > 0) + { + $geo = new Coordinates($row['latitude'], $row['longitude']); + $qb->field('geo.latitude')->equals($geo->getLatitude()); + $qb->field('geo.longitude')->equals($geo->getLongitude()); + } + else + { + if (strlen($row['streetAddress']) > 0) $qb->field('address.streetAddress')->equals($row['streetAddress']); + if (strlen($row['addressLocality']) > 0) $qb->field('address.addressLocality')->equals($row['addressLocality']); + if (strlen($row['postalCode']) > 0) $qb->field('address.postalCode')->equals($row['postalCode']); + } + $element = $qb->getQuery()->getSingleResult(); } @@ -81,13 +95,16 @@ class ElementImportOneService { $updatedAtField = $import->getFieldToCheckElementHaveBeenUpdated(); // if updated date hasn't change, nothing to do - if ($updatedAtField && array_key_exists($updatedAtField, $row)) { - if ($row[$updatedAtField] && $row[$updatedAtField] == $element->getCustomProperty($updatedAtField)) { + if ($updatedAtField && array_key_exists($updatedAtField, $row)) + { + if ($row[$updatedAtField] && $row[$updatedAtField] == $element->getCustomProperty($updatedAtField)) + { $element->setPreventJsonUpdate(true); if ($element->getStatus() == ElementStatus::DynamicImportTemp) $element->setStatus(ElementStatus::DynamicImport); $this->em->persist($element); return "nothing_to_do"; - } else { + } + else { $realUpdate = true; } } @@ -125,7 +142,7 @@ class ElementImportOneService } if ($lat == 0 || $lng == 0) $element->setModerationState(ModerationState::GeolocError); - $element->setGeo(new Coordinates((float)$lat, (float)$lng)); + $element->setGeo(new Coordinates($lat, $lng)); $this->createCategories($element, $row, $import); $this->createImages($element, $row); -- GitLab