Merge pull request #10012 from agh1/crm-20297
[civicrm-core.git] / CRM / Utils / Address.php
index b4ba87c538f29af808d99567211a112d565289f4..551c48bfaace639a197ac30f36202763d740d69c 100644 (file)
@@ -3,7 +3,7 @@
  +--------------------------------------------------------------------+
  | CiviCRM version 4.7                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2016                                |
+ | Copyright CiviCRM LLC (c) 2004-2017                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
@@ -29,7 +29,7 @@
  * Address Utilities
  *
  * @package CRM
- * @copyright CiviCRM LLC (c) 2004-2016
+ * @copyright CiviCRM LLC (c) 2004-2017
  */
 class CRM_Utils_Address {
 
@@ -85,6 +85,7 @@ class CRM_Utils_Address {
     $emptyFields = array(
       'supplemental_address_1',
       'supplemental_address_2',
+      'supplemental_address_3',
       'state_province_name',
       'county',
     );
@@ -142,6 +143,7 @@ class CRM_Utils_Address {
         'contact.street_address' => CRM_Utils_Array::value('street_address', $fields),
         'contact.supplemental_address_1' => CRM_Utils_Array::value('supplemental_address_1', $fields),
         'contact.supplemental_address_2' => CRM_Utils_Array::value('supplemental_address_2', $fields),
+        'contact.supplemental_address_3' => CRM_Utils_Array::value('supplemental_address_3', $fields),
         'contact.city' => CRM_Utils_Array::value('city', $fields),
         'contact.state_province_name' => CRM_Utils_Array::value('state_province_name', $fields),
         'contact.county' => CRM_Utils_Array::value('county', $fields),
@@ -186,6 +188,7 @@ class CRM_Utils_Address {
         'contact.street_address' => "<span class=\"street-address\">" . $fields['street_address'] . "</span>",
         'contact.supplemental_address_1' => "<span class=\"extended-address\">" . $fields['supplemental_address_1'] . "</span>",
         'contact.supplemental_address_2' => $fields['supplemental_address_2'],
+        'contact.supplemental_address_3' => $fields['supplemental_address_3'],
         'contact.city' => "<span class=\"locality\">" . $fields['city'] . "</span>",
         'contact.state_province_name' => "<span class=\"region\">" . $fields['state_province_name'] . "</span>",
         'contact.county' => "<span class=\"region\">" . $fields['county'],
@@ -304,6 +307,7 @@ class CRM_Utils_Address {
       'street_address',
       'supplemental_address_1',
       'supplemental_address_2',
+      'supplemental_address_3',
       'city',
       'county',
       'state_province',
@@ -347,7 +351,29 @@ class CRM_Utils_Address {
 
     $addressFields = array();
     foreach ($addressParts as $name => $field) {
-      $addressFields[$name] = CRM_Utils_Array::value($field, $params);
+      $value = CRM_Utils_Array::value($field, $params);
+      $alternateName = 'billing_' . $name . '_id-' . $billingLocationTypeID;
+      $alternate2 = 'billing_' . $name . '-' . $billingLocationTypeID;
+      if (isset($params[$alternate2]) && !isset($params[$alternateName])) {
+        $alternateName = $alternate2;
+      }
+      //Include values which prepend 'billing_' to country and state_province.
+      if (CRM_Utils_Array::value($alternateName, $params)) {
+        if (empty($value) || !is_numeric($value)) {
+          $value = $params[$alternateName];
+        }
+      }
+      if (is_numeric($value) && ($name == 'state_province' || $name == 'country')) {
+        if ($name == 'state_province') {
+          $addressFields[$name] = CRM_Core_PseudoConstant::stateProvinceAbbreviation($value);
+        }
+        if ($name == 'country') {
+          $addressFields[$name] = CRM_Core_PseudoConstant::countryIsoCode($value);
+        }
+      }
+      else {
+        $addressFields[$name] = $value;
+      }
     }
     return CRM_Utils_Address::format($addressFields);
   }