[REF] [Export] move build master copy array to ExportProcessor
authoreileen <emcnaughton@wikimedia.org>
Thu, 11 Jul 2019 22:06:04 +0000 (10:06 +1200)
committereileen <emcnaughton@wikimedia.org>
Thu, 11 Jul 2019 22:06:04 +0000 (10:06 +1200)
CRM/Export/BAO/Export.php
CRM/Export/BAO/ExportProcessor.php

index c7f8b4c10bc5f1935510c239cf1277248f3a7da6..29d4a5b0f9d0f3ca88d2c1fd9f316fe1e2fc6c5e 100644 (file)
@@ -604,7 +604,7 @@ FROM      $tableName r1
 INNER JOIN civicrm_address adr ON r1.master_id   = adr.id
 INNER JOIN $tableName      r2  ON adr.contact_id = r2.civicrm_primary_id
 ORDER BY  r1.id";
-    $linkedMerge = self::_buildMasterCopyArray($processor, $sql, $exportParams, TRUE);
+    $linkedMerge = $processor->buildMasterCopyArray($sql, $exportParams, TRUE);
 
     // find all the records that have the same street address BUT not in a household
     // require match on city and state as well
@@ -631,7 +631,7 @@ AND       ( r1.street_address != '' )
 AND       r2.id > r1.id
 ORDER BY  r1.id
 ";
-    $merge = self::_buildMasterCopyArray($processor, $sql, $exportParams);
+    $merge = $processor->buildMasterCopyArray($sql, $exportParams);
 
     // unset ids from $merge already present in $linkedMerge
     foreach ($linkedMerge as $masterID => $values) {
@@ -688,110 +688,6 @@ WHERE  id IN ( $deleteIDString )
     }
   }
 
-  /**
-   * @param \CRM_Export_BAO_ExportProcessor $processor
-   * @param $sql
-   * @param array $exportParams
-   * @param bool $sharedAddress
-   *
-   * @return array
-   */
-  public static function _buildMasterCopyArray($processor, $sql, $exportParams, $sharedAddress = FALSE) {
-    static $contactGreetingTokens = [];
-
-    $addresseeOptions = CRM_Core_OptionGroup::values('addressee');
-    $postalOptions = CRM_Core_OptionGroup::values('postal_greeting');
-
-    $merge = $parents = [];
-    $dao = CRM_Core_DAO::executeQuery($sql);
-
-    while ($dao->fetch()) {
-      $masterID = $dao->master_id;
-      $copyID = $dao->copy_id;
-      $masterPostalGreeting = $dao->master_postal_greeting;
-      $masterAddressee = $dao->master_addressee;
-      $copyAddressee = $dao->copy_addressee;
-
-      if (!$sharedAddress) {
-        if (!isset($contactGreetingTokens[$dao->master_contact_id])) {
-          $contactGreetingTokens[$dao->master_contact_id] = $processor->replaceMergeTokens($dao->master_contact_id, $exportParams);
-        }
-        $masterPostalGreeting = CRM_Utils_Array::value('postal_greeting',
-          $contactGreetingTokens[$dao->master_contact_id], $dao->master_postal_greeting
-        );
-        $masterAddressee = CRM_Utils_Array::value('addressee',
-          $contactGreetingTokens[$dao->master_contact_id], $dao->master_addressee
-        );
-
-        if (!isset($contactGreetingTokens[$dao->copy_contact_id])) {
-          $contactGreetingTokens[$dao->copy_contact_id] = $processor->replaceMergeTokens($dao->copy_contact_id, $exportParams);
-        }
-        $copyPostalGreeting = CRM_Utils_Array::value('postal_greeting',
-          $contactGreetingTokens[$dao->copy_contact_id], $dao->copy_postal_greeting
-        );
-        $copyAddressee = CRM_Utils_Array::value('addressee',
-          $contactGreetingTokens[$dao->copy_contact_id], $dao->copy_addressee
-        );
-      }
-
-      if (!isset($merge[$masterID])) {
-        // check if this is an intermediate child
-        // this happens if there are 3 or more matches a,b, c
-        // the above query will return a, b / a, c / b, c
-        // we might be doing a bit more work, but for now its ok, unless someone
-        // knows how to fix the query above
-        if (isset($parents[$masterID])) {
-          $masterID = $parents[$masterID];
-        }
-        else {
-          $merge[$masterID] = [
-            'addressee' => $masterAddressee,
-            'copy' => [],
-            'postalGreeting' => $masterPostalGreeting,
-          ];
-          $merge[$masterID]['emailGreeting'] = &$merge[$masterID]['postalGreeting'];
-        }
-      }
-      $parents[$copyID] = $masterID;
-
-      if (!$sharedAddress && !array_key_exists($copyID, $merge[$masterID]['copy'])) {
-
-        if (!empty($exportParams['postal_greeting_other']) &&
-          count($merge[$masterID]['copy']) >= 1
-        ) {
-          // use static greetings specified if no of contacts > 2
-          $merge[$masterID]['postalGreeting'] = $exportParams['postal_greeting_other'];
-        }
-        elseif ($copyPostalGreeting) {
-          $processor->trimNonTokensFromAddressString($copyPostalGreeting,
-            $postalOptions[$dao->copy_postal_greeting_id],
-            $exportParams
-          );
-          $merge[$masterID]['postalGreeting'] = "{$merge[$masterID]['postalGreeting']}, {$copyPostalGreeting}";
-          // if there happens to be a duplicate, remove it
-          $merge[$masterID]['postalGreeting'] = str_replace(" {$copyPostalGreeting},", "", $merge[$masterID]['postalGreeting']);
-        }
-
-        if (!empty($exportParams['addressee_other']) &&
-          count($merge[$masterID]['copy']) >= 1
-        ) {
-          // use static greetings specified if no of contacts > 2
-          $merge[$masterID]['addressee'] = $exportParams['addressee_other'];
-        }
-        elseif ($copyAddressee) {
-          $processor->trimNonTokensFromAddressString($copyAddressee,
-            $addresseeOptions[$dao->copy_addressee_id],
-            $exportParams, 'addressee'
-          );
-          $merge[$masterID]['addressee'] = "{$merge[$masterID]['addressee']}, " . trim($copyAddressee);
-        }
-      }
-      $merge[$masterID]['copy'][$copyID] = $copyAddressee;
-    }
-
-    return $merge;
-  }
-
   /**
    * @param $headerRows
    * @param $sqlColumns
index 4dbd468e7f5204a462438c55779ab9a882e738d4..4b4eda03f16aa2b344d2a751c676609fea81fea8 100644 (file)
@@ -1646,6 +1646,111 @@ class CRM_Export_BAO_ExportProcessor {
     return $greetings;
   }
 
+  /**
+   * Build array for merging same addresses.
+   *
+   * @param $sql
+   * @param array $exportParams
+   * @param bool $sharedAddress
+   *
+   * @return array
+   */
+  public function buildMasterCopyArray($sql, $exportParams, $sharedAddress = FALSE) {
+    static $contactGreetingTokens = [];
+
+    $addresseeOptions = CRM_Core_OptionGroup::values('addressee');
+    $postalOptions = CRM_Core_OptionGroup::values('postal_greeting');
+
+    $merge = $parents = [];
+    $dao = CRM_Core_DAO::executeQuery($sql);
+
+    while ($dao->fetch()) {
+      $masterID = $dao->master_id;
+      $copyID = $dao->copy_id;
+      $masterPostalGreeting = $dao->master_postal_greeting;
+      $masterAddressee = $dao->master_addressee;
+      $copyAddressee = $dao->copy_addressee;
+
+      if (!$sharedAddress) {
+        if (!isset($contactGreetingTokens[$dao->master_contact_id])) {
+          $contactGreetingTokens[$dao->master_contact_id] = $this->replaceMergeTokens($dao->master_contact_id, $exportParams);
+        }
+        $masterPostalGreeting = CRM_Utils_Array::value('postal_greeting',
+          $contactGreetingTokens[$dao->master_contact_id], $dao->master_postal_greeting
+        );
+        $masterAddressee = CRM_Utils_Array::value('addressee',
+          $contactGreetingTokens[$dao->master_contact_id], $dao->master_addressee
+        );
+
+        if (!isset($contactGreetingTokens[$dao->copy_contact_id])) {
+          $contactGreetingTokens[$dao->copy_contact_id] = $this->replaceMergeTokens($dao->copy_contact_id, $exportParams);
+        }
+        $copyPostalGreeting = CRM_Utils_Array::value('postal_greeting',
+          $contactGreetingTokens[$dao->copy_contact_id], $dao->copy_postal_greeting
+        );
+        $copyAddressee = CRM_Utils_Array::value('addressee',
+          $contactGreetingTokens[$dao->copy_contact_id], $dao->copy_addressee
+        );
+      }
+
+      if (!isset($merge[$masterID])) {
+        // check if this is an intermediate child
+        // this happens if there are 3 or more matches a,b, c
+        // the above query will return a, b / a, c / b, c
+        // we might be doing a bit more work, but for now its ok, unless someone
+        // knows how to fix the query above
+        if (isset($parents[$masterID])) {
+          $masterID = $parents[$masterID];
+        }
+        else {
+          $merge[$masterID] = [
+            'addressee' => $masterAddressee,
+            'copy' => [],
+            'postalGreeting' => $masterPostalGreeting,
+          ];
+          $merge[$masterID]['emailGreeting'] = &$merge[$masterID]['postalGreeting'];
+        }
+      }
+      $parents[$copyID] = $masterID;
+
+      if (!$sharedAddress && !array_key_exists($copyID, $merge[$masterID]['copy'])) {
+
+        if (!empty($exportParams['postal_greeting_other']) &&
+          count($merge[$masterID]['copy']) >= 1
+        ) {
+          // use static greetings specified if no of contacts > 2
+          $merge[$masterID]['postalGreeting'] = $exportParams['postal_greeting_other'];
+        }
+        elseif ($copyPostalGreeting) {
+          $this->trimNonTokensFromAddressString($copyPostalGreeting,
+            $postalOptions[$dao->copy_postal_greeting_id],
+            $exportParams
+          );
+          $merge[$masterID]['postalGreeting'] = "{$merge[$masterID]['postalGreeting']}, {$copyPostalGreeting}";
+          // if there happens to be a duplicate, remove it
+          $merge[$masterID]['postalGreeting'] = str_replace(" {$copyPostalGreeting},", "", $merge[$masterID]['postalGreeting']);
+        }
+
+        if (!empty($exportParams['addressee_other']) &&
+          count($merge[$masterID]['copy']) >= 1
+        ) {
+          // use static greetings specified if no of contacts > 2
+          $merge[$masterID]['addressee'] = $exportParams['addressee_other'];
+        }
+        elseif ($copyAddressee) {
+          $this->trimNonTokensFromAddressString($copyAddressee,
+            $addresseeOptions[$dao->copy_addressee_id],
+            $exportParams, 'addressee'
+          );
+          $merge[$masterID]['addressee'] = "{$merge[$masterID]['addressee']}, " . trim($copyAddressee);
+        }
+      }
+      $merge[$masterID]['copy'][$copyID] = $copyAddressee;
+    }
+
+    return $merge;
+  }
+
   /**
    * The function unsets static part of the string, if token is the dynamic part.
    *