core#2379 - avoid validation error on saving geocodes
authoragbud8@zabuntu <jon@megaphonetech.com>
Thu, 11 Feb 2021 16:52:39 +0000 (11:52 -0500)
committeragbud8@zabuntu <jon@megaphonetech.com>
Mon, 15 Feb 2021 15:54:18 +0000 (10:54 -0500)
CRM/Core/BAO/Address.php
tests/phpunit/CRM/Core/BAO/AddressTest.php

index fdbf08fe6b383c75be73211fabcc80e88567faab..283709aba6bd7ecfe0b862f103d11b4e638cbcc4 100644 (file)
@@ -1304,12 +1304,21 @@ SELECT is_primary,
   public static function addGeocoderData(&$params) {
     try {
       $provider = CRM_Utils_GeocodeProvider::getConfiguredProvider();
+      $providerExists = TRUE;
     }
     catch (CRM_Core_Exception $e) {
-      return FALSE;
+      $providerExists = FALSE;
+    }
+    if ($providerExists) {
+      $provider::format($params);
+    }
+    // core#2379 - Limit geocode length to 14 characters to avoid validation error on save in UI.
+    foreach (['geo_code_1', 'geo_code_2'] as $geocode) {
+      if ($params[$geocode] ?? FALSE) {
+        $params[$geocode] = (float) substr($params[$geocode], 0, 14);
+      }
     }
-    $provider::format($params);
-    return TRUE;
+    return $providerExists;
   }
 
   /**
index 4236dcff92ceae46dbf2e76cec187c8bbf251def..5dbf73569a161e7e5e162ed152c61f3c6efe48f9 100644 (file)
@@ -693,4 +693,38 @@ class CRM_Core_BAO_AddressTest extends CiviUnitTestCase {
     $this->assertEquals(1228, $availableCountries[2]);
   }
 
+  /**
+   * Test core#2379 fix - geocodes shouldn't be > 14 characters.
+   */
+  public function testLongGeocodes() {
+    $contactId = $this->individualCreate();
+
+    $fixParams = [
+      'street_address' => 'E 906N Pine Pl W',
+      'supplemental_address_1' => 'Editorial Dept',
+      'supplemental_address_2' => '',
+      'supplemental_address_3' => '',
+      'city' => 'El Paso',
+      'postal_code' => '88575',
+      'postal_code_suffix' => '',
+      'state_province_id' => '1001',
+      'country_id' => '1228',
+      'geo_code_1' => '41.701308979563',
+      'geo_code_2' => '-73.91941868639',
+      'location_type_id' => '1',
+      'is_primary' => '1',
+      'is_billing' => '0',
+      'contact_id' => $contactId,
+    ];
+
+    $addAddress = CRM_Core_BAO_Address::add($fixParams, TRUE);
+
+    $addParams = $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
+      'Database check for created contact address.'
+    );
+
+    $this->assertEquals('41.70130897956', $addAddress->geo_code_1, 'In line' . __LINE__);
+    $this->assertEquals('-73.9194186863', $addAddress->geo_code_2, 'In line' . __LINE__);
+  }
+
 }