diff --git a/CHANGELOG.md b/CHANGELOG.md index b58178bf5f96ce626d24438f1215e50924b05942..7b4a4146a2e7dd86c55b765701838c3655dd5f70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Version 1.97 (not yet released) +* Fixed issue when a non-sql data source is used in the data processor and adding filters. * Added a datasource for Country: Now you can sort on the country name. # Version 1.96 diff --git a/CRM/Contact/DataProcessorContactSummaryTab.php b/CRM/Contact/DataProcessorContactSummaryTab.php index 8f9121574a6b6747adecbc4b9d4ce2bc0abf64c5..7f25cbaf24f160aa8b15b29a71d0543bf1c994a5 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) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = self::getTableAlias($dataFlow); $whereClause = new SimpleWhereClause($tableAlias, $fieldSpecification->name, '=', $contact_id, $fieldSpecification->type); $dataFlow->addWhereClause($whereClause); diff --git a/Civi/DataProcessor/FilterCollection/FilterCollection.php b/Civi/DataProcessor/FilterCollection/FilterCollection.php index 8fb0a5c5d3e1bae9ac1700ca61d6a172694f6e6f..34db2023b2fda13409a3e07d4f0d5790f26e934b 100644 --- a/Civi/DataProcessor/FilterCollection/FilterCollection.php +++ b/Civi/DataProcessor/FilterCollection/FilterCollection.php @@ -215,4 +215,17 @@ class FilterCollection { $this->data_processor->getDataFlow()->removeWhereClause($this->whereClause); } } + + /** + * Returns whether we should use the addWhere and removeWhere or addFilter or removeFilter functions. + * + * @return bool + * @throws \Civi\DataProcessor\DataFlow\InvalidFlowException + */ + public function useWhere(): bool { + if ($this->data_processor->getDataFlow() instanceof SqlDataFlow) { + return true; + } + return false; + } } diff --git a/Civi/DataProcessor/FilterHandler/AgeFilterHandler.php b/Civi/DataProcessor/FilterHandler/AgeFilterHandler.php index 8f28e3f7085128bce6febadeb0bb80e12642f89a..ed53979b7e62d5fbcfeec7f91ba7661f2407f2c4 100644 --- a/Civi/DataProcessor/FilterHandler/AgeFilterHandler.php +++ b/Civi/DataProcessor/FilterHandler/AgeFilterHandler.php @@ -45,7 +45,7 @@ class AgeFilterHandler extends AbstractFieldFilterHandler { $this->resetFilter(); $dataFlow = $this->dataSource->ensureField($this->inputFieldSpecification); $tableAlias = $this->getTableAlias($dataFlow); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $value = null; if (isset($filter['value']) && is_array($filter['value'])) { $value = array(); diff --git a/Civi/DataProcessor/FilterHandler/CaseRoleFilter.php b/Civi/DataProcessor/FilterHandler/CaseRoleFilter.php index 61778b3137969149fe9fec1dc57e3ddb64363395..f2ec16db8c4371bfd87306f315d1dc4c4917d423 100644 --- a/Civi/DataProcessor/FilterHandler/CaseRoleFilter.php +++ b/Civi/DataProcessor/FilterHandler/CaseRoleFilter.php @@ -82,7 +82,7 @@ class CaseRoleFilter extends AbstractFieldFilterHandler { $inOperator = 'IN'; } - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $this->whereClause = new SqlDataFlow\InTableWhereClause( 'case_id', diff --git a/Civi/DataProcessor/FilterHandler/ContactHasActiveRecurringContributions.php b/Civi/DataProcessor/FilterHandler/ContactHasActiveRecurringContributions.php index 9c2c668e3e47addee39804fb5a6c5f629579c813..e1395a6519af52f9b7b9ba8dd3d30912448369d5 100644 --- a/Civi/DataProcessor/FilterHandler/ContactHasActiveRecurringContributions.php +++ b/Civi/DataProcessor/FilterHandler/ContactHasActiveRecurringContributions.php @@ -119,7 +119,7 @@ class ContactHasActiveRecurringContributions extends AbstractFieldFilterHandler public function setFilter($filter) { $this->resetFilter(); $dataFlow = $this->dataSource->ensureField($this->inputFieldSpecification); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $fieldName = $this->inputFieldSpecification->getName(); $fieldAlias = $this->inputFieldSpecification->alias; diff --git a/Civi/DataProcessor/FilterHandler/ContactHasContributionWithStatus.php b/Civi/DataProcessor/FilterHandler/ContactHasContributionWithStatus.php index 91a4083d5feb5773e5169d93cb68124e19b63a1a..aee6fba057027362179ca8bd0eea73f86628060e 100644 --- a/Civi/DataProcessor/FilterHandler/ContactHasContributionWithStatus.php +++ b/Civi/DataProcessor/FilterHandler/ContactHasContributionWithStatus.php @@ -183,7 +183,7 @@ class ContactHasContributionWithStatus extends AbstractFieldFilterHandler { public function setFilter($filter) { $this->resetFilter(); $dataFlow = $this->dataSource->ensureField($this->inputFieldSpecification); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $fieldName = $this->inputFieldSpecification->getName(); $fieldAlias = $this->inputFieldSpecification->alias; diff --git a/Civi/DataProcessor/FilterHandler/ContactHasEventRegistrationOfType.php b/Civi/DataProcessor/FilterHandler/ContactHasEventRegistrationOfType.php index 0c48fd655e38cbf36a29da04ba719eaafa7b1967..fea76c330f134d3032e26f2b505eb430c926cd6d 100644 --- a/Civi/DataProcessor/FilterHandler/ContactHasEventRegistrationOfType.php +++ b/Civi/DataProcessor/FilterHandler/ContactHasEventRegistrationOfType.php @@ -183,7 +183,7 @@ class ContactHasEventRegistrationOfType extends AbstractFieldFilterHandler { public function setFilter($filter) { $this->resetFilter(); $dataFlow = $this->dataSource->ensureField($this->inputFieldSpecification); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $fieldName = $this->inputFieldSpecification->getName(); $fieldAlias = $this->inputFieldSpecification->alias; diff --git a/Civi/DataProcessor/FilterHandler/ContactInGroupFilter.php b/Civi/DataProcessor/FilterHandler/ContactInGroupFilter.php index 52dfa9044c37a8e2a0d694c42eeb0c9789c539a1..aeb7b1a70347822e3412010ff6bb34b0fcbc4471 100644 --- a/Civi/DataProcessor/FilterHandler/ContactInGroupFilter.php +++ b/Civi/DataProcessor/FilterHandler/ContactInGroupFilter.php @@ -71,7 +71,7 @@ class ContactInGroupFilter extends AbstractFieldFilterHandler { - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { // Look in the group contact table $groupTableAlias = 'civicrm_group_contact_'.$this->inputFieldSpecification->alias; $groupFilters = array( diff --git a/Civi/DataProcessor/FilterHandler/ContactTypeFilter.php b/Civi/DataProcessor/FilterHandler/ContactTypeFilter.php index fb00d2587997128abd0e804f608b52716af2a55a..9c9c9663516bb3a0d12a1062708433c29d8da796 100644 --- a/Civi/DataProcessor/FilterHandler/ContactTypeFilter.php +++ b/Civi/DataProcessor/FilterHandler/ContactTypeFilter.php @@ -53,7 +53,7 @@ class ContactTypeFilter extends AbstractFieldFilterHandler { } if (count($contactTypeClauses)) { $contactTypeClause = new SqlDataFlow\OrClause($contactTypeClauses); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $this->whereClause = new SqlDataFlow\InTableWhereClause( 'id', diff --git a/Civi/DataProcessor/FilterHandler/ContactWithTagFilter.php b/Civi/DataProcessor/FilterHandler/ContactWithTagFilter.php index 4b89d6651b5cb2880433a6b21db9f313adee361e..1a78ae191676b4d798490a33d7cca940ca19d565 100644 --- a/Civi/DataProcessor/FilterHandler/ContactWithTagFilter.php +++ b/Civi/DataProcessor/FilterHandler/ContactWithTagFilter.php @@ -45,7 +45,7 @@ class ContactWithTagFilter extends AbstractFieldFilterHandler { new SqlDataFlow\SimpleWhereClause($tagTableAlias, 'tag_id', 'IN', $tag_ids), ); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $this->whereClause = new SqlDataFlow\InTableWhereClause( 'entity_id', diff --git a/Civi/DataProcessor/FilterHandler/DateFilter.php b/Civi/DataProcessor/FilterHandler/DateFilter.php index 8b8c5c779ef56ddd681a3e99474ac25140c4c37c..2676f69de4a7829f8272103d0fd15b4fa052dc91 100644 --- a/Civi/DataProcessor/FilterHandler/DateFilter.php +++ b/Civi/DataProcessor/FilterHandler/DateFilter.php @@ -38,7 +38,7 @@ class DateFilter extends AbstractFieldFilterHandler { $this->resetFilter(); $dataFlow = $this->dataSource->ensureField($this->inputFieldSpecification); $tableAlias = $this->getTableAlias($dataFlow); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $value = null; if (isset($filter['value']) && is_array($filter['value'])) { $value = array(); diff --git a/Civi/DataProcessor/FilterHandler/DateMonthFilter.php b/Civi/DataProcessor/FilterHandler/DateMonthFilter.php index d7115d33d7f73b702422ac5641fa7b54b7b2aa42..138962565f946b32bbdb7724991476327c57ae33 100644 --- a/Civi/DataProcessor/FilterHandler/DateMonthFilter.php +++ b/Civi/DataProcessor/FilterHandler/DateMonthFilter.php @@ -52,7 +52,7 @@ class DateMonthFilter extends AbstractFieldFilterHandler { public function setFilter($filter) { $this->resetFilter(); $dataFlow = $this->dataSource->ensureField($this->inputFieldSpecification); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $value = $filter['value']; if (!is_array($value)) { diff --git a/Civi/DataProcessor/FilterHandler/DateWeekDayFilter.php b/Civi/DataProcessor/FilterHandler/DateWeekDayFilter.php index 45bf8c1f43ed867653b1c8f4652f129c638568c3..e48e292d6454881ca607d66e44715c5eff1f919a 100644 --- a/Civi/DataProcessor/FilterHandler/DateWeekDayFilter.php +++ b/Civi/DataProcessor/FilterHandler/DateWeekDayFilter.php @@ -47,7 +47,7 @@ class DateWeekDayFilter extends AbstractFieldFilterHandler { public function setFilter($filter) { $this->resetFilter(); $dataFlow = $this->dataSource->ensureField($this->inputFieldSpecification); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $value = $filter['value']; if (!is_array($value)) { diff --git a/Civi/DataProcessor/FilterHandler/LastEventDateFilter.php b/Civi/DataProcessor/FilterHandler/LastEventDateFilter.php index ddba52eacceaa77d4f7a826587e53d5a308be0ee..85f8411f146f034c1440fe2874eeef8544087d9d 100644 --- a/Civi/DataProcessor/FilterHandler/LastEventDateFilter.php +++ b/Civi/DataProcessor/FilterHandler/LastEventDateFilter.php @@ -240,7 +240,7 @@ class LastEventDateFilter extends AbstractFieldFilterHandler { $dataFlow = $this->dataSource->ensureField($this->inputFieldSpecification); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $fieldName = $this->inputFieldSpecification->getName(); $fieldAlias = $this->inputFieldSpecification->alias; diff --git a/Civi/DataProcessor/FilterHandler/MultipleFieldFilter.php b/Civi/DataProcessor/FilterHandler/MultipleFieldFilter.php index 586e6667e1b8acf13d64f399e7ec0aec71d995f0..5e4d5b081e8308b0307dc8e19061c8772d9b6f73 100644 --- a/Civi/DataProcessor/FilterHandler/MultipleFieldFilter.php +++ b/Civi/DataProcessor/FilterHandler/MultipleFieldFilter.php @@ -181,7 +181,7 @@ class MultipleFieldFilter extends AbstractFilterHandler { $fieldSpec = $dataSource->getAvailableFields()->getFieldSpecificationByName($field_name); } $dataFlow = $dataSource->ensureField($fieldSpec); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $clauses[] = new SqlDataFlow\SimpleWhereClause($tableAlias, $fieldSpec->getName(), $filterParams['op'], $filterParams['value'], $this->fieldSpecification->type); } @@ -198,7 +198,7 @@ class MultipleFieldFilter extends AbstractFilterHandler { break; } $dataFlow = $this->data_processor->getDataFlow(); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $this->filterCollection->addWhere($this->whereClause); } } diff --git a/Civi/DataProcessor/FilterHandler/PermissionToViewContactFilter.php b/Civi/DataProcessor/FilterHandler/PermissionToViewContactFilter.php index 73dccd5b993b687416bd1959ebc194e4e3679c7e..dfea354d2238b2503f1aa7027407818bc6083f28 100644 --- a/Civi/DataProcessor/FilterHandler/PermissionToViewContactFilter.php +++ b/Civi/DataProcessor/FilterHandler/PermissionToViewContactFilter.php @@ -44,7 +44,7 @@ class PermissionToViewContactFilter extends AbstractFieldFilterHandler { $where = str_replace(["`contact_a`.", "contact_a."], "`{$contactTableAlias}`.", $where); if ($where) { $contactFilters[] = new SqlDataFlow\PureSqlStatementClause($where); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $this->whereClause = new SqlDataFlow\InTableWhereClause( 'id', diff --git a/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php b/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php index 45d8950612bee26efa86113a8a367258f34bdfcb..35e4870e42da6795ccdf1db620f54edf8f4c6db4 100644 --- a/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php +++ b/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php @@ -25,7 +25,7 @@ class SimpleSqlFilter extends AbstractFieldFilterHandler { public function setFilter($filter) { $this->resetFilter(); $dataFlow = $this->dataSource->ensureField($this->inputFieldSpecification); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $fieldName = $this->inputFieldSpecification->getName(); if ($this->isMultiValueField()) { diff --git a/Civi/DataProcessor/FilterHandler/WorldRegionFilter.php b/Civi/DataProcessor/FilterHandler/WorldRegionFilter.php index b6d19cbee164428dc31207af9c69c934ae5594c9..bd74f0702c955bc555d0d9eee97b33e39e725f76 100644 --- a/Civi/DataProcessor/FilterHandler/WorldRegionFilter.php +++ b/Civi/DataProcessor/FilterHandler/WorldRegionFilter.php @@ -45,7 +45,7 @@ class WorldRegionFilter extends AbstractFieldFilterHandler { $countryFilters = array( new SqlDataFlow\SimpleWhereClause($countryTableAlias, 'region_id', 'IN', $region_ids), ); - if ($dataFlow && $dataFlow instanceof SqlDataFlow) { + if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) { $tableAlias = $this->getTableAlias($dataFlow); $this->whereClause = new SqlDataFlow\InTableWhereClause( 'id', diff --git a/Civi/DataProcessor/ProcessorType/AbstractProcessorType.php b/Civi/DataProcessor/ProcessorType/AbstractProcessorType.php index c251b2e55cd851677dd8cf261e239ff06ee5e8ad..9b259592ef3923b654af68270129e9db2ba664a9 100644 --- a/Civi/DataProcessor/ProcessorType/AbstractProcessorType.php +++ b/Civi/DataProcessor/ProcessorType/AbstractProcessorType.php @@ -67,6 +67,10 @@ abstract class AbstractProcessorType { } } + public function isAllSql(): bool { + return $this->allSqlDataFlows; + } + /** * @return \Civi\DataProcessor\Source\SourceInterface[] */