[REF] cleanup setting of additional postal fields
authoreileen <emcnaughton@wikimedia.org>
Wed, 10 Jul 2019 02:20:21 +0000 (14:20 +1200)
committereileen <emcnaughton@wikimedia.org>
Wed, 10 Jul 2019 23:57:39 +0000 (11:57 +1200)
Further cleanup

CRM/Export/BAO/Export.php
CRM/Export/BAO/ExportProcessor.php

index ad62043964c99167bb85aff486526989ec876dc8..1e46e6092eb6357bedd36df8c39a353cee8757e8 100644 (file)
@@ -209,14 +209,7 @@ INSERT INTO {$componentTable} SELECT distinct gc.contact_id FROM civicrm_group_c
     if ($processor->getRequestedFields() &&
       $processor->isPostalableOnly()
     ) {
-      $postalColumns = ['is_deceased', 'do_not_mail', 'street_address', 'supplemental_address_1'];
-      $exportParams['postal_mailing_export']['temp_columns'] = [];
-      foreach ($postalColumns as $column) {
-        if (!array_key_exists($column, $returnProperties)) {
-          $returnProperties[$column] = 1;
-          $exportParams['postal_mailing_export']['temp_columns'][$column] = 1;
-        }
-      }
+      $exportParams['postal_mailing_export']['temp_columns'] = $processor->getAdditionalFieldsForPostalExport();
     }
 
     // rectify params to what proximity search expects if there is a value for prox_distance
index a58784792175994fec1526ee27232576c14e73c4..a7dd3b5550fa614746390203e158531d3a191bfc 100644 (file)
@@ -135,6 +135,37 @@ class CRM_Export_BAO_ExportProcessor {
     $this->isMergeSameAddress = $isMergeSameAddress;
   }
 
+  /**
+   * Additional fields required to export postal fields.
+   *
+   * @var array
+   */
+  protected $additionalFieldsForPostalExport = [];
+
+  /**
+   * Get additional fields required to do a postal export.
+   *
+   * @return array
+   */
+  public function getAdditionalFieldsForPostalExport() {
+    return $this->additionalFieldsForPostalExport;
+  }
+
+  /**
+   * Set additional fields required for a postal export.
+   */
+  public function setAdditionalFieldsForPostalExport() {
+    if ($this->getRequestedFields() && $this->isPostalableOnly()) {
+      $fields = ['is_deceased', 'do_not_mail', 'street_address', 'supplemental_address_1'];
+      foreach ($fields as $index => $field) {
+        if (!empty($this->getReturnProperties()[$field])) {
+          unset($field[$index]);
+        }
+      }
+      $this->additionalFieldsForPostalExport = array_fill_keys($fields, 1);
+    }
+  }
+
   /**
    * Only export contacts that can receive postal mail.
    *
@@ -278,6 +309,7 @@ class CRM_Export_BAO_ExportProcessor {
     $this->setIsMergeSameAddress($isMergeSameAddress);
     $this->setReturnProperties($this->determineReturnProperties());
     $this->setAdditionalFieldsForSameAddressMerge();
+    $this->setAdditionalFieldsForPostalExport();
   }
 
   /**
@@ -312,7 +344,7 @@ class CRM_Export_BAO_ExportProcessor {
    * @return array
    */
   public function getReturnProperties() {
-    return array_merge($this->returnProperties, $this->getAdditionalRequestedReturnProperties(), $this->getAdditionalFieldsForSameAddressMerge());
+    return array_merge($this->returnProperties, $this->getAdditionalRequestedReturnProperties(), $this->getAdditionalFieldsForSameAddressMerge(), $this->getAdditionalFieldsForPostalExport());
   }
 
   /**