From 64d5405cf4aff54745e426f648b8fb31f370b338 Mon Sep 17 00:00:00 2001 From: Jaap Jansma <jaap.jansma@civicoop.org> Date: Tue, 29 Oct 2019 09:27:53 +0100 Subject: [PATCH] first refactor step for issue #16 --- .../Form/DataProcessorContactSummaryTab.php | 2 +- CRM/Dataprocessor/Utils/DataSourceFields.php | 8 ++-- .../DataFlow/MultipleDataFlows/SimpleJoin.php | 24 +++++++----- .../DataSpecification/DataSpecification.php | 38 +++++++++++++++---- .../AbstractSimpleFieldOutputHandler.php | 7 +++- .../AbstractFieldFilterHandler.php | 22 ++++++----- .../FilterHandler/CaseRoleFilter.php | 2 +- .../FilterHandler/ContactInGroupFilter.php | 2 +- .../FilterHandler/ContactTypeFilter.php | 2 +- .../FilterHandler/ContactWithTagFilter.php | 2 +- .../FilterHandler/MultipleFieldFilter.php | 6 ++- .../PermissionToViewContactFilter.php | 2 +- .../FilterHandler/SimpleSqlFilter.php | 8 ++-- .../Source/AbstractCivicrmEntitySource.php | 18 ++++++--- Civi/DataProcessor/Source/AbstractSource.php | 8 ++-- .../Source/Event/EventSource.php | 15 +++++--- Civi/DataProcessor/Source/SourceInterface.php | 4 +- 17 files changed, 109 insertions(+), 61 deletions(-) diff --git a/CRM/Contact/Form/DataProcessorContactSummaryTab.php b/CRM/Contact/Form/DataProcessorContactSummaryTab.php index a36b2f4a..5bb41bc8 100644 --- a/CRM/Contact/Form/DataProcessorContactSummaryTab.php +++ b/CRM/Contact/Form/DataProcessorContactSummaryTab.php @@ -138,7 +138,7 @@ class CRM_Contact_Form_DataProcessorContactSummaryTab extends CRM_DataprocessorS } $fieldSpecification->alias = 'contact_summary_tab_contact_id'; - $dataFlow = $dataSource->ensureField($fieldSpecification->name); + $dataFlow = $dataSource->ensureField($fieldSpecification); if ($dataFlow && $dataFlow instanceof SqlDataFlow) { $whereClause = new SimpleWhereClause($dataFlow->getName(), $fieldSpecification->name, '=', $cid, $fieldSpecification->type); $dataFlow->addWhereClause($whereClause); diff --git a/CRM/Dataprocessor/Utils/DataSourceFields.php b/CRM/Dataprocessor/Utils/DataSourceFields.php index fc42a888..65f02068 100644 --- a/CRM/Dataprocessor/Utils/DataSourceFields.php +++ b/CRM/Dataprocessor/Utils/DataSourceFields.php @@ -46,7 +46,7 @@ class CRM_Dataprocessor_Utils_DataSourceFields { $isFieldValid = call_user_func($callback, $field); } if ($isFieldValid) { - $fieldSelect[$namePrefix . $fieldName] = $titlePrefix . $field->title; + $fieldSelect[$namePrefix . $field->alias] = $titlePrefix . $field->title; } } return $fieldSelect; @@ -84,16 +84,16 @@ class CRM_Dataprocessor_Utils_DataSourceFields { */ public static function getAvailableFilterFieldsInDataSource(SourceInterface $dataSource, $titlePrefix='', $namePrefix='', $filterFieldsCallback=null) { $fieldSelect = array(); - foreach($dataSource->getAvailableFilterFields()->getFields() as $fieldName => $field) { + foreach($dataSource->getAvailableFilterFields()->getFields() as $field) { $isFieldValid = true; if ($filterFieldsCallback) { $isFieldValid = call_user_func($filterFieldsCallback, $field); } if ($isFieldValid) { - $fieldSelect[$namePrefix . $fieldName] = $titlePrefix . $field->title; + $fieldSelect[$namePrefix . $field->alias] = $titlePrefix . $field->title; } } return $fieldSelect; } -} \ No newline at end of file +} diff --git a/Civi/DataProcessor/DataFlow/MultipleDataFlows/SimpleJoin.php b/Civi/DataProcessor/DataFlow/MultipleDataFlows/SimpleJoin.php index 108472b6..1064f61e 100644 --- a/Civi/DataProcessor/DataFlow/MultipleDataFlows/SimpleJoin.php +++ b/Civi/DataProcessor/DataFlow/MultipleDataFlows/SimpleJoin.php @@ -261,12 +261,15 @@ class SimpleJoin implements JoinInterface, SqlJoinInterface { $this->left_table = $this->left_prefix; $this->left_source = $this->dataProcessor->getDataSourceByName($this->left_prefix); if ($this->left_source) { - $leftTable = $this->left_source->ensureField($this->left_field); - if ($leftTable && $leftTable instanceof SqlTableDataFlow) { - $this->left_table = $leftTable->getTableAlias(); + $this->leftFieldSpec = $this->left_source->getAvailableFields()->getFieldSpecificationByAlias($this->left_field); + if (!$this->leftFieldSpec) { + $this->leftFieldSpec = $this->left_source->getAvailableFields()->getFieldSpecificationByName($this->left_field); } - $this->leftFieldSpec = $this->left_source->getAvailableFields()->getFieldSpecificationByName($this->left_field); if ($this->leftFieldSpec) { + $leftTable = $this->left_source->ensureField($this->leftFieldSpec); + if ($leftTable && $leftTable instanceof SqlTableDataFlow) { + $this->left_table = $leftTable->getTableAlias(); + } $this->left_field_alias = $this->leftFieldSpec->alias; } } @@ -275,12 +278,15 @@ class SimpleJoin implements JoinInterface, SqlJoinInterface { $this->right_table = $this->right_prefix; $this->right_source = $this->dataProcessor->getDataSourceByName($this->right_prefix); if ($this->right_source) { - $rightTable = $this->right_source->ensureField($this->right_field); - if ($rightTable && $rightTable instanceof SqlTableDataFlow) { - $this->right_table = $rightTable->getTableAlias(); + $this->rightFieldSpec = $this->right_source->getAvailableFields()->getFieldSpecificationByAlias($this->right_field); + if (!$this->rightFieldSpec) { + $this->rightFieldSpec = $this->right_source->getAvailableFields()->getFieldSpecificationByName($this->right_field); } - $this->rightFieldSpec = $this->right_source->getAvailableFields()->getFieldSpecificationByName($this->right_field); if ($this->rightFieldSpec) { + $rightTable = $this->right_source->ensureField($this->rightFieldSpec); + if ($rightTable && $rightTable instanceof SqlTableDataFlow) { + $this->right_table = $rightTable->getTableAlias(); + } $this->right_field_alias = $this->rightFieldSpec->alias; } } @@ -402,4 +408,4 @@ class SimpleJoin implements JoinInterface, SqlJoinInterface { } -} \ No newline at end of file +} diff --git a/Civi/DataProcessor/DataSpecification/DataSpecification.php b/Civi/DataProcessor/DataSpecification/DataSpecification.php index 88a7b95f..5ec0c846 100644 --- a/Civi/DataProcessor/DataSpecification/DataSpecification.php +++ b/Civi/DataProcessor/DataSpecification/DataSpecification.php @@ -29,10 +29,15 @@ class DataSpecification { * @throws \Civi\DataProcessor\DataSpecification\FieldExistsException */ public function addFieldSpecification($name, FieldSpecification $field) { - if (isset($this->fields[$name])) { + if (in_array($field, $this->fields)) { throw new FieldExistsException($name); } - $this->fields[$name] = $field; + $this->fields[] = $field; + + /*if (isset($this->fields[$name])) { + throw new FieldExistsException($name); + } + $this->fields[$name] = $field;*/ return $this; } @@ -48,8 +53,10 @@ class DataSpecification { * @return \Civi\DataProcessor\DataSpecification\FieldSpecification */ public function getFieldSpecificationByName($name) { - if (isset($this->fields[$name])) { - return $this->fields[$name]; + foreach($this->fields as $field) { + if ($field->name == $name) { + return $field; + } } return null; } @@ -74,8 +81,25 @@ class DataSpecification { * @return bool */ public function doesFieldExist($name) { - if (isset($this->fields[$name])) { - return true; + foreach($this->fields as $field) { + if ($field->name == $name) { + return true; + } + } + return false; + } + + /** + * Returns whether a field exists + * + * @param $alias + * @return bool + */ + public function doesAliasExists($alias) { + foreach($this->fields as $field) { + if ($field->alias == $alias) { + return true; + } } return false; } @@ -97,4 +121,4 @@ class DataSpecification { return $this; } -} \ No newline at end of file +} diff --git a/Civi/DataProcessor/FieldOutputHandler/AbstractSimpleFieldOutputHandler.php b/Civi/DataProcessor/FieldOutputHandler/AbstractSimpleFieldOutputHandler.php index c1cd5fda..9c7aac3d 100644 --- a/Civi/DataProcessor/FieldOutputHandler/AbstractSimpleFieldOutputHandler.php +++ b/Civi/DataProcessor/FieldOutputHandler/AbstractSimpleFieldOutputHandler.php @@ -66,7 +66,10 @@ class AbstractSimpleFieldOutputHandler extends AbstractFieldOutputHandler implem if (!$this->dataSource) { throw new DataSourceNotFoundException(E::ts("Field %1 requires data source '%2' which could not be found. Did you rename or deleted the data source?", array(1=>$title, 2=>$configuration['datasource']))); } - $this->inputFieldSpec = clone $this->dataSource->getAvailableFields()->getFieldSpecificationByName($configuration['field']); + $this->inputFieldSpec = $this->dataSource->getAvailableFields()->getFieldSpecificationByAlias($configuration['field']); + if (!$this->inputFieldSpec) { + $this->inputFieldSpec = $this->dataSource->getAvailableFields()->getFieldSpecificationByName($configuration['field']); + } if (!$this->inputFieldSpec) { throw new FieldNotFoundException(E::ts("Field %1 requires a field with the name '%2' in the data source '%3'. Did you change the data source type?", array( 1 => $title, @@ -74,7 +77,7 @@ class AbstractSimpleFieldOutputHandler extends AbstractFieldOutputHandler implem 3 => $configuration['datasource'] ))); } - $this->inputFieldSpec->alias = $alias; + $this->inputFieldSpec = clone $this->inputFieldSpec; $this->dataSource->ensureFieldInSource($this->inputFieldSpec); $this->outputFieldSpec = clone $this->inputFieldSpec; diff --git a/Civi/DataProcessor/FilterHandler/AbstractFieldFilterHandler.php b/Civi/DataProcessor/FilterHandler/AbstractFieldFilterHandler.php index 6b150c9b..c266246b 100644 --- a/Civi/DataProcessor/FilterHandler/AbstractFieldFilterHandler.php +++ b/Civi/DataProcessor/FilterHandler/AbstractFieldFilterHandler.php @@ -18,6 +18,11 @@ abstract class AbstractFieldFilterHandler extends AbstractFilterHandler { */ protected $fieldSpecification; + /** + * @var \Civi\DataProcessor\DataSpecification\FieldSpecification + */ + protected $inputFieldSpecification; + /** * @var \Civi\DataProcessor\Source\SourceInterface */ @@ -40,21 +45,18 @@ abstract class AbstractFieldFilterHandler extends AbstractFilterHandler { if (!$this->dataSource) { throw new DataSourceNotFoundException(E::ts("Filter %1 requires data source '%2' which could not be found. Did you rename or deleted the data source?", array(1=>$this->title, 2=>$datasource_name))); } - if (!$this->dataSource->getAvailableFilterFields()->getFieldSpecificationByName($field_name)) { - throw new FieldNotFoundException(E::ts("Filter %1 requires a field with the name '%2' in the data source '%3'. Did you change the data source type?", array( - 1 => $this->title, - 2 => $field_name, - 3 => $datasource_name - ))); + $this->inputFieldSpecification = $this->dataSource->getAvailableFilterFields()->getFieldSpecificationByAlias($field_name); + if (!$this->inputFieldSpecification) { + $this->inputFieldSpecification = $this->dataSource->getAvailableFilterFields()->getFieldSpecificationByName($field_name); } - $this->fieldSpecification = clone $this->dataSource->getAvailableFilterFields()->getFieldSpecificationByName($field_name); - if (!$this->fieldSpecification) { + if (!$this->inputFieldSpecification) { throw new FieldNotFoundException(E::ts("Filter %1 requires a field with the name '%2' in the data source '%3'. Did you change the data source type?", array( 1 => $this->title, 2 => $field_name, 3 => $datasource_name ))); } + $this->fieldSpecification = clone $this->inputFieldSpecification; $this->fieldSpecification->alias = $this->alias; $this->fieldSpecification->title = $this->title; } @@ -77,7 +79,7 @@ abstract class AbstractFieldFilterHandler extends AbstractFilterHandler { if (!$this->isInitialized()) { return; } - $dataFlow = $this->dataSource->ensureField($this->fieldSpecification->name); + $dataFlow = $this->dataSource->ensureField($this->fieldSpecification); if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->whereClause) { $dataFlow->removeWhereClause($this->whereClause); unset($this->whereClause); @@ -92,7 +94,7 @@ abstract class AbstractFieldFilterHandler extends AbstractFilterHandler { */ public function setFilter($filter) { $this->resetFilter(); - $dataFlow = $this->dataSource->ensureField($this->fieldSpecification->name); + $dataFlow = $this->dataSource->ensureField($this->fieldSpecification); if ($dataFlow && $dataFlow instanceof SqlDataFlow) { $value = $filter['value']; if (!is_array($value)) { diff --git a/Civi/DataProcessor/FilterHandler/CaseRoleFilter.php b/Civi/DataProcessor/FilterHandler/CaseRoleFilter.php index eedfab61..914f1553 100644 --- a/Civi/DataProcessor/FilterHandler/CaseRoleFilter.php +++ b/Civi/DataProcessor/FilterHandler/CaseRoleFilter.php @@ -58,7 +58,7 @@ class CaseRoleFilter extends AbstractFieldFilterHandler { public function setFilter($filter) { $this->resetFilter(); - $dataFlow = $this->dataSource->ensureField($this->fieldSpecification->name); + $dataFlow = $this->dataSource->ensureField($this->fieldSpecification); $cids = $filter['value']; if (!is_array($cids)) { $cids = array($cids); diff --git a/Civi/DataProcessor/FilterHandler/ContactInGroupFilter.php b/Civi/DataProcessor/FilterHandler/ContactInGroupFilter.php index 31c85b2a..f082532a 100644 --- a/Civi/DataProcessor/FilterHandler/ContactInGroupFilter.php +++ b/Civi/DataProcessor/FilterHandler/ContactInGroupFilter.php @@ -49,7 +49,7 @@ class ContactInGroupFilter extends AbstractFieldFilterHandler { */ public function setFilter($filter) { $this->resetFilter(); - $dataFlow = $this->dataSource->ensureField($this->fieldSpecification->name); + $dataFlow = $this->dataSource->ensureField($this->fieldSpecification); $group_ids = $filter['value']; if (!is_array($group_ids)) { $group_ids = array($group_ids); diff --git a/Civi/DataProcessor/FilterHandler/ContactTypeFilter.php b/Civi/DataProcessor/FilterHandler/ContactTypeFilter.php index af4f9906..1dd4a8b2 100644 --- a/Civi/DataProcessor/FilterHandler/ContactTypeFilter.php +++ b/Civi/DataProcessor/FilterHandler/ContactTypeFilter.php @@ -33,7 +33,7 @@ class ContactTypeFilter extends AbstractFieldFilterHandler { */ public function setFilter($filter) { $this->resetFilter(); - $dataFlow = $this->dataSource->ensureField($this->fieldSpecification->name); + $dataFlow = $this->dataSource->ensureField($this->fieldSpecification); $contactTypeIds = $filter['value']; if (!is_array($contactTypeIds)) { $contactTypeIds = explode(",", $contactTypeIds); diff --git a/Civi/DataProcessor/FilterHandler/ContactWithTagFilter.php b/Civi/DataProcessor/FilterHandler/ContactWithTagFilter.php index 6148422c..765d0cd8 100644 --- a/Civi/DataProcessor/FilterHandler/ContactWithTagFilter.php +++ b/Civi/DataProcessor/FilterHandler/ContactWithTagFilter.php @@ -33,7 +33,7 @@ class ContactWithTagFilter extends AbstractFieldFilterHandler { */ public function setFilter($filter) { $this->resetFilter(); - $dataFlow = $this->dataSource->ensureField($this->fieldSpecification->name); + $dataFlow = $this->dataSource->ensureField($this->fieldSpecification); $tag_ids = $filter['value']; if (!is_array($tag_ids)) { $tag_ids = array($tag_ids); diff --git a/Civi/DataProcessor/FilterHandler/MultipleFieldFilter.php b/Civi/DataProcessor/FilterHandler/MultipleFieldFilter.php index 98c17cd4..876457ef 100644 --- a/Civi/DataProcessor/FilterHandler/MultipleFieldFilter.php +++ b/Civi/DataProcessor/FilterHandler/MultipleFieldFilter.php @@ -179,7 +179,11 @@ class MultipleFieldFilter extends AbstractFilterHandler { foreach($this->configuration['fields'] as $fieldAndDataSource) { list($datasource_name, $field_name) = explode("::", $fieldAndDataSource); $dataSource = $this->data_processor->getDataSourceByName($datasource_name); - $dataFlow = $dataSource->ensureField($field_name); + $fieldSpec = $dataSource->getAvailableFields()->getFieldSpecificationByAlias($field_name); + if (!$fieldSpec) { + $fieldSpec = $dataSource->getAvailableFields()->getFieldSpecificationByName($field_name); + } + $dataFlow = $dataSource->ensureField($fieldSpec); if ($dataFlow && $dataFlow instanceof SqlDataFlow) { $clauses[] = new SqlDataFlow\SimpleWhereClause($dataFlow->getName(), $field_name, $filterParams['op'], $filterParams['value'], $this->fieldSpecification->type); } diff --git a/Civi/DataProcessor/FilterHandler/PermissionToViewContactFilter.php b/Civi/DataProcessor/FilterHandler/PermissionToViewContactFilter.php index 581e9e47..144332c2 100644 --- a/Civi/DataProcessor/FilterHandler/PermissionToViewContactFilter.php +++ b/Civi/DataProcessor/FilterHandler/PermissionToViewContactFilter.php @@ -42,7 +42,7 @@ class PermissionToViewContactFilter extends AbstractFieldFilterHandler { */ public function setFilter($filter) { $this->resetFilter(); - $dataFlow = $this->dataSource->ensureField($this->fieldSpecification->name); + $dataFlow = $this->dataSource->ensureField($this->fieldSpecification); $where = $this->getAclWhereClause(); $contactTableAlias = 'civicrm_contact_'.$this->fieldSpecification->alias; $where = str_replace(["`contact_a`.", "contact_a."], "`{$contactTableAlias}`.", $where); diff --git a/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php b/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php index e2539e51..7fd84c14 100644 --- a/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php +++ b/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php @@ -34,12 +34,12 @@ class SimpleSqlFilter extends AbstractFieldFilterHandler { */ public function setFilter($filter) { $this->resetFilter(); - $dataFlow = $this->dataSource->ensureField($this->fieldSpecification->name); + $dataFlow = $this->dataSource->ensureField($this->inputFieldSpecification); if ($dataFlow && $dataFlow instanceof SqlDataFlow) { if ($this->isMultiValueField()) { - $this->whereClause = new SqlDataFlow\MultiValueFieldWhereClause($dataFlow->getName(), $this->fieldSpecification->name, $filter['op'], $filter['value'], $this->fieldSpecification->type); + $this->whereClause = new SqlDataFlow\MultiValueFieldWhereClause($dataFlow->getName(), $this->inputFieldSpecification->name, $filter['op'], $filter['value'], $this->inputFieldSpecification->type); } else { - $this->whereClause = new SqlDataFlow\SimpleWhereClause($dataFlow->getName(), $this->fieldSpecification->name, $filter['op'], $filter['value'], $this->fieldSpecification->type); + $this->whereClause = new SqlDataFlow\SimpleWhereClause($dataFlow->getName(), $this->inputFieldSpecification->name, $filter['op'], $filter['value'], $this->inputFieldSpecification->type); } $dataFlow->addWhereClause($this->whereClause); } @@ -115,4 +115,4 @@ class SimpleSqlFilter extends AbstractFieldFilterHandler { } -} \ No newline at end of file +} diff --git a/Civi/DataProcessor/Source/AbstractCivicrmEntitySource.php b/Civi/DataProcessor/Source/AbstractCivicrmEntitySource.php index 8f327361..1d600573 100644 --- a/Civi/DataProcessor/Source/AbstractCivicrmEntitySource.php +++ b/Civi/DataProcessor/Source/AbstractCivicrmEntitySource.php @@ -198,13 +198,19 @@ abstract class AbstractCivicrmEntitySource extends AbstractSource { /** * Ensure that filter field is accesible in the query * - * @param String $fieldName + * @param FieldSpecification $field * @return \Civi\DataProcessor\DataFlow\AbstractDataFlow|null * @throws \Exception */ - public function ensureField($fieldName) { - if ($this->getAvailableFilterFields()->doesFieldExist($fieldName)) { - $spec = $this->getAvailableFilterFields()->getFieldSpecificationByName($fieldName); + public function ensureField(FieldSpecification $field) { + if ($this->getAvailableFilterFields()->doesAliasExists($field->alias)) { + $spec = $this->getAvailableFilterFields()->getFieldSpecificationByAlias($field->alias); + if ($spec instanceof CustomFieldSpecification) { + return $this->ensureCustomGroup($spec->customGroupTableName, $spec->customGroupName); + } + return $this->ensureEntity(); + } elseif ($this->getAvailableFilterFields()->doesFieldExist($field->name)) { + $spec = $this->getAvailableFilterFields()->getFieldSpecificationByName($field->name); if ($spec instanceof CustomFieldSpecification) { return $this->ensureCustomGroup($spec->customGroupTableName, $spec->customGroupName); } @@ -316,8 +322,8 @@ abstract class AbstractCivicrmEntitySource extends AbstractSource { */ public function ensureFieldInSource(FieldSpecification $fieldSpecification) { try { - if ($this->getAvailableFields()->doesFieldExist($fieldSpecification->name)) { - $originalFieldSpecification = $this->getAvailableFields()->getFieldSpecificationByName($fieldSpecification->name); + if ($this->getAvailableFields()->doesAliasExists($fieldSpecification->alias)) { + $originalFieldSpecification = $this->getAvailableFields()->getFieldSpecificationByAlias($fieldSpecification->alias); if ($originalFieldSpecification instanceof CustomFieldSpecification) { $customGroupDataFlow = $this->ensureCustomGroup($originalFieldSpecification->customGroupTableName, $originalFieldSpecification->customGroupName); if (!$customGroupDataFlow->getDataSpecification() diff --git a/Civi/DataProcessor/Source/AbstractSource.php b/Civi/DataProcessor/Source/AbstractSource.php index 4bdb71b0..0182c2dd 100644 --- a/Civi/DataProcessor/Source/AbstractSource.php +++ b/Civi/DataProcessor/Source/AbstractSource.php @@ -127,15 +127,15 @@ abstract class AbstractSource implements SourceInterface { /** * Ensure that filter field is accesible in the query * - * @param String $fieldName + * @param FieldSpecification $field * @return \Civi\DataProcessor\DataFlow\AbstractDataFlow|null * @throws \Exception */ - public function ensureField($fieldName) { - $field = $this->getAvailableFields()->getFieldSpecificationByName($fieldName); + public function ensureField(FieldSpecification $field) { + $field = $this->getAvailableFields()->getFieldSpecificationByAlias($field->alias); if ($field) { $this->dataFlow->getDataSpecification() - ->addFieldSpecification($fieldName, $field); + ->addFieldSpecification($field->name, $field); } return $this->dataFlow; } diff --git a/Civi/DataProcessor/Source/Event/EventSource.php b/Civi/DataProcessor/Source/Event/EventSource.php index 523f9745..31048dfd 100644 --- a/Civi/DataProcessor/Source/Event/EventSource.php +++ b/Civi/DataProcessor/Source/Event/EventSource.php @@ -82,19 +82,22 @@ class EventSource extends AbstractCivicrmEntitySource { /** * Ensure that filter field is accesible in the query * - * @param String $fieldName + * @param FieldSpecification $field * @return \Civi\DataProcessor\DataFlow\AbstractDataFlow|null * @throws \Exception */ - public function ensureField($fieldName) { - if ($this->getAvailableFilterFields()->doesFieldExist($fieldName)) { - $spec = $this->getAvailableFilterFields()->getFieldSpecificationByName($fieldName); + public function ensureField(FieldSpecification $field) { + if ($this->getAvailableFilterFields()->doesAliasExists($field->alias) || $this->getAvailableFilterFields()->doesFieldExist($field->name)) { + $spec = $this->getAvailableFilterFields()->getFieldSpecificationByAlias($field->alias); + if (!$spec) { + $spec = $this->getAvailableFilterFields()->getFieldSpecificationByName($field->name); + } if (stripos($spec->alias, $this->getSourceName().'_locblock_') === 0) { $this->ensureEntity(); return $this->locBlockDataFlow; } } - return parent::ensureField($fieldName); + return parent::ensureField($field); } /** @@ -113,4 +116,4 @@ class EventSource extends AbstractCivicrmEntitySource { } } -} \ No newline at end of file +} diff --git a/Civi/DataProcessor/Source/SourceInterface.php b/Civi/DataProcessor/Source/SourceInterface.php index e8a8e663..66846a0f 100644 --- a/Civi/DataProcessor/Source/SourceInterface.php +++ b/Civi/DataProcessor/Source/SourceInterface.php @@ -71,11 +71,11 @@ interface SourceInterface { /** * Ensure that filter field is accesible in the query * - * @param String $fieldName + * @param FieldSpecification $field * @return \Civi\DataProcessor\DataFlow\AbstractDataFlow|null * @throws \Exception */ - public function ensureField($fieldName); + public function ensureField(FieldSpecification $field); /** * Ensures a field is in the data source -- GitLab