From 2e27b0353272f5c2f98db8bd0a013512ea9f019b Mon Sep 17 00:00:00 2001 From: Jaap Jansma <jaap.jansma@civicoop.org> Date: Tue, 12 Mar 2024 14:09:47 +0100 Subject: [PATCH] Fixed issue with in memory data flows. Such as the duplicate contacts. --- CHANGELOG.md | 4 +++- CRM/Contact/DataProcessorContactSummaryTab.php | 2 +- .../DataFlow/CombinedDataFlow/CombinedDataFlow.php | 12 +++++++++--- info.xml | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d10bc72..7691a97c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,6 @@ -# Version 1.99 (not yet released) +# Version 1.99 + +* Fixed issue with in memory data flows. Such as the duplicate contacts. # Version 1.98 diff --git a/CRM/Contact/DataProcessorContactSummaryTab.php b/CRM/Contact/DataProcessorContactSummaryTab.php index 7f25cbaf..52454424 100644 --- a/CRM/Contact/DataProcessorContactSummaryTab.php +++ b/CRM/Contact/DataProcessorContactSummaryTab.php @@ -353,7 +353,7 @@ class CRM_Contact_DataProcessorContactSummaryTab implements UIFormOutputInterfac $fieldSpecification = clone $fieldSpecification; $fieldSpecification->alias = 'contact_summary_tab_contact_id'; $dataFlow = $dataSource->ensureField($fieldSpecification); - if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $dataProcessorClass->isAllSql()) { $tableAlias = self::getTableAlias($dataFlow); $whereClause = new SimpleWhereClause($tableAlias, $fieldSpecification->name, '=', $contact_id, $fieldSpecification->type); $dataFlow->addWhereClause($whereClause); diff --git a/Civi/DataProcessor/DataFlow/CombinedDataFlow/CombinedDataFlow.php b/Civi/DataProcessor/DataFlow/CombinedDataFlow/CombinedDataFlow.php index dd944f05..079d27a0 100644 --- a/Civi/DataProcessor/DataFlow/CombinedDataFlow/CombinedDataFlow.php +++ b/Civi/DataProcessor/DataFlow/CombinedDataFlow/CombinedDataFlow.php @@ -158,9 +158,13 @@ class CombinedDataFlow extends AbstractDataFlow implements MultipleSourceDataFlo protected function getAllRecordsFromDataFlowAsArray(AbstractDataFlow $dataFlow, int $batchSize=0): array { $records = array(); $i = 0; - while(($record = $dataFlow->retrieveNextRecord()) && ($i < $batchSize || $batchSize == 0)) { - $records[] = $record; - $i++; + try { + while (($record = $dataFlow->retrieveNextRecord()) && ($i < $batchSize || $batchSize == 0)) { + $records[] = $record; + $i++; + } + } catch (EndOfFlowException $e) { + // Do nothing } return $records; } @@ -208,6 +212,8 @@ class CombinedDataFlow extends AbstractDataFlow implements MultipleSourceDataFlo foreach ($record as $field => $value) { $out[$fieldNameprefix . $field] = $value; } + } else { + $out = $record; } $this->currentRecordIndex++; return $out; diff --git a/info.xml b/info.xml index 5d72da8b..d2b2ed23 100644 --- a/info.xml +++ b/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2024-03-12</releaseDate> - <version>1.99-dev</version> + <version>1.99</version> <develStage>stable</develStage> <compatibility> <ver>5.37</ver> -- GitLab