Cleaner handling of additional return properties
authoreileen <emcnaughton@wikimedia.org>
Wed, 10 Jul 2019 01:18:11 +0000 (13:18 +1200)
committereileen <emcnaughton@wikimedia.org>
Wed, 10 Jul 2019 03:45:34 +0000 (15:45 +1200)
CRM/Export/BAO/Export.php
CRM/Export/BAO/ExportProcessor.php

index f3431116119d3e16dc8f2e06dc1c0b30b776f1c5..7042e446b204442c1e8b45705e714d5dd39a58ad 100644 (file)
@@ -180,6 +180,9 @@ class CRM_Export_BAO_Export {
     );
 
     $processor = new CRM_Export_BAO_ExportProcessor($exportMode, $fields, $queryOperator, $mergeSameHousehold, $isPostalOnly);
+    if ($moreReturnProperties) {
+      $processor->setAdditionalRequestedReturnProperties($moreReturnProperties);
+    }
     $returnProperties = $processor->getReturnProperties();
     $paymentTableId = $processor->getPaymentTableID();
 
@@ -215,15 +218,6 @@ INSERT INTO {$componentTable} SELECT distinct gc.contact_id FROM civicrm_group_c
       CRM_Core_DAO::executeQuery($query);
     }
 
-    if ($moreReturnProperties) {
-      // fix for CRM-7066
-      if (!empty($moreReturnProperties['group'])) {
-        unset($moreReturnProperties['group']);
-        $moreReturnProperties['groups'] = 1;
-      }
-      $returnProperties = array_merge($returnProperties, $moreReturnProperties);
-    }
-
     if ($processor->getRequestedFields() &&
       $processor->isPostalableOnly()
     ) {
index b2707dea11f76f5d2b58eb979e509f6c276512ce..909782e7611967290f501548c25558ef069c8664 100644 (file)
@@ -118,6 +118,39 @@ class CRM_Export_BAO_ExportProcessor {
    */
   protected $householdsToSkip = [];
 
+  /**
+   * Additional fields to return.
+   *
+   * This doesn't make much sense when we have a fields set but search build add it's own onto
+   * the 'Primary fields' (all) option.
+   *
+   * @var array
+   */
+  protected $additionalRequestedReturnProperties = [];
+
+  /**
+   * Get additional return properties.
+   *
+   * @return array
+   */
+  public function getAdditionalRequestedReturnProperties() {
+    return $this->additionalRequestedReturnProperties;
+  }
+
+  /**
+   * Set additional return properties.
+   *
+   * @param array $value
+   */
+  public function setAdditionalRequestedReturnProperties($value) {
+    // fix for CRM-7066
+    if (!empty($value['group'])) {
+      unset($value['group']);
+      $value['groups'] = 1;
+    }
+    $this->additionalRequestedReturnProperties = $value;
+  }
+
   /**
    * Get return properties by relationship.
    * @return array
@@ -220,7 +253,7 @@ class CRM_Export_BAO_ExportProcessor {
    * @return array
    */
   public function getReturnProperties() {
-    return $this->returnProperties;
+    return array_merge($this->returnProperties, $this->getAdditionalRequestedReturnProperties());
   }
 
   /**