diff --git a/CRM/Export/BAO/Export.php b/CRM/Export/BAO/Export.php index f2f1793ce7fc..ba60f71a793b 100644 --- a/CRM/Export/BAO/Export.php +++ b/CRM/Export/BAO/Export.php @@ -41,24 +41,6 @@ class CRM_Export_BAO_Export { // CRM-7675 const EXPORT_ROW_COUNT = 100000; - /** - * Key representing the head of household in the relationship array. - * - * e.g. 8_a_b. - * - * @var string - */ - protected static $headOfHouseholdRelationshipKey; - - /** - * Key representing the head of household in the relationship array. - * - * e.g. 8_a_b. - * - * @var string - */ - protected static $memberOfHouseholdRelationshipKey; - /** * Key representing the head of household in the relationship array. * @@ -244,7 +226,7 @@ public static function exportComponents( $queryOperator = 'AND' ) { - $processor = new CRM_Export_BAO_ExportProcessor($exportMode, $fields, $queryOperator); + $processor = new CRM_Export_BAO_ExportProcessor($exportMode, $fields, $queryOperator, $mergeSameHousehold); $returnProperties = array(); $selectedPaymentFields = FALSE; // @todo - this variable is overwritten later - it should be wholly definable in the processor fn. @@ -255,9 +237,6 @@ public static function exportComponents( // without manually testing the export of IM provider still works. $imProviders = CRM_Core_PseudoConstant::get('CRM_Core_DAO_IM', 'provider_id'); self::$relationshipTypes = $processor->getRelationshipTypes(); - //also merge Head of Household - self::$memberOfHouseholdRelationshipKey = CRM_Utils_Array::key('Household Member of', self::$relationshipTypes); - self::$headOfHouseholdRelationshipKey = CRM_Utils_Array::key('Head of Household for', self::$relationshipTypes); $queryMode = $processor->getQueryMode(); @@ -384,15 +363,13 @@ public static function exportComponents( foreach ($returnProperties as $key => $value) { if (!$processor->isRelationshipTypeKey($key)) { - $returnProperties[self::$memberOfHouseholdRelationshipKey][$key] = $value; - $returnProperties[self::$headOfHouseholdRelationshipKey][$key] = $value; + foreach ($processor->getHouseholdRelationshipTypes() as $householdRelationshipType) { + if (!in_array($key, ['location_type', 'im_provider'])) { + $returnProperties[$householdRelationshipType][$key] = $value; + } + } } } - - unset($returnProperties[self::$memberOfHouseholdRelationshipKey]['location_type']); - unset($returnProperties[self::$memberOfHouseholdRelationshipKey]['im_provider']); - unset($returnProperties[self::$headOfHouseholdRelationshipKey]['location_type']); - unset($returnProperties[self::$headOfHouseholdRelationshipKey]['im_provider']); } list($relationQuery, $allRelContactArray) = self::buildRelatedContactArray($selectAll, $ids, $exportMode, $componentTable, $returnProperties, $queryMode); @@ -628,8 +605,9 @@ public static function exportComponents( // merge the records if they have corresponding households if ($mergeSameHousehold) { - self::mergeSameHousehold($exportTempTable, $headerRows, $sqlColumns, self::$memberOfHouseholdRelationshipKey); - self::mergeSameHousehold($exportTempTable, $headerRows, $sqlColumns, self::$headOfHouseholdRelationshipKey); + foreach ($processor->getHouseholdRelationshipTypes() as $householdRelationshipType) { + self::mergeSameHousehold($exportTempTable, $headerRows, $sqlColumns, $householdRelationshipType); + } } // call export hook diff --git a/CRM/Export/BAO/ExportProcessor.php b/CRM/Export/BAO/ExportProcessor.php index 49f24e636c2f..2e4b071b2dd9 100644 --- a/CRM/Export/BAO/ExportProcessor.php +++ b/CRM/Export/BAO/ExportProcessor.php @@ -72,6 +72,13 @@ class CRM_Export_BAO_ExportProcessor { */ protected $requestedFields; + /** + * Is the contact being merged into a single household. + * + * @var bool + */ + protected $isMergeSameHousehold; + /** * Key representing the head of household in the relationship array. * @@ -94,8 +101,9 @@ class CRM_Export_BAO_ExportProcessor { * @param int $exportMode * @param array|NULL $requestedFields * @param string $queryOperator + * @param bool $isMergeSameHousehold */ - public function __construct($exportMode, $requestedFields, $queryOperator) { + public function __construct($exportMode, $requestedFields, $queryOperator, $isMergeSameHousehold) { $this->setExportMode($exportMode); $this->setQueryMode(); $this->setQueryOperator($queryOperator); @@ -138,6 +146,34 @@ public function setRelationshipTypes() { ); } + /** + * @return bool + */ + public function isMergeSameHousehold() { + return $this->isMergeSameHousehold; + } + + /** + * @param bool $isMergeSameHousehold + */ + public function setIsMergeSameHousehold($isMergeSameHousehold) { + $this->isMergeSameHousehold = $isMergeSameHousehold; + } + + /** + * Return relationship types for household merge. + * + * @return mixed + */ + public function getHouseholdRelationshipTypes() { + if (!$this->isMergeSameHousehold()) { + return []; + } + return [ + CRM_Utils_Array::key('Household Member of', $this->getRelationshipTypes()), + CRM_Utils_Array::key('Head of Household for', $this->getRelationshipTypes()), + ]; + } /** * @param $fieldName @@ -147,6 +183,15 @@ public function isRelationshipTypeKey($fieldName) { return array_key_exists($fieldName, $this->relationshipTypes); } + + /** + * @param $fieldName + * @return bool + */ + public function isHouseholdMergeRelationshipTypeKey($fieldName) { + return array_key_exists($fieldName, $this->getHouseholdRelationshipTypes()); + } + /** * @return string */