From ec295633fdfdbabdffc115bd39502de477deba35 Mon Sep 17 00:00:00 2001 From: Jaap Jansma <jaap.jansma@civicoop.org> Date: Tue, 22 Aug 2023 15:36:36 +0200 Subject: [PATCH] Fix issue with Contact Data Sources in a join. --- CHANGELOG.md | 1 + .../Source/Contact/AbstractContactSource.php | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4651576b..95508a52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Version 1.79 (not yet released) +* Fix issue with Contact Data Sources in a join. * PHP 8 and Drupal 10 compatibility. See !119 and !120 # Version 1.76 diff --git a/Civi/DataProcessor/Source/Contact/AbstractContactSource.php b/Civi/DataProcessor/Source/Contact/AbstractContactSource.php index e9b512bf..bd4ca8ac 100644 --- a/Civi/DataProcessor/Source/Contact/AbstractContactSource.php +++ b/Civi/DataProcessor/Source/Contact/AbstractContactSource.php @@ -34,11 +34,12 @@ abstract class AbstractContactSource extends AbstractCivicrmEntitySource { * * @param array $contactTypes * @param string $op + * @param bool $isJoinClause * * @return void * @throws \Exception */ - protected function addContactTypeFilter(array $contactTypes, string $op = 'IN') { + protected function addContactTypeFilter(array $contactTypes, string $op = 'IN', bool $isJoinClause = false) { switch ($op) { case '=': $op = 'IN'; @@ -54,9 +55,9 @@ abstract class AbstractContactSource extends AbstractCivicrmEntitySource { $this->ensureEntity(); $tableAlias = $this->getEntityTableAlias(); if (count($contactTypes) == 1) { - $contactTypeFilter = new SimpleWhereClause($tableAlias, 'contact_type', '=', reset($contactTypes)); + $contactTypeFilter = new SimpleWhereClause($tableAlias, 'contact_type', '=', reset($contactTypes), 'String', $isJoinClause); } else { - $contactTypeFilter = new SimpleWhereClause($tableAlias, 'contact_type', 'IN', $contactTypes); + $contactTypeFilter = new SimpleWhereClause($tableAlias, 'contact_type', 'IN', $contactTypes, 'String', $isJoinClause); } $this->entityDataFlow->addWhereClause($contactTypeFilter); } @@ -77,7 +78,7 @@ abstract class AbstractContactSource extends AbstractCivicrmEntitySource { if (!is_array($contactTypes)) { $contactTypes = [$contactTypes]; } - $this->addContactTypeFilter($contactTypes, $op); + $this->addContactTypeFilter($contactTypes, $op, TRUE); } elseif ($filter_field_alias == 'contact_sub_type' && $op == 'IN') { $contactTypeClauses = []; foreach ($values as $value) { -- GitLab