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