From 2ec8416574c5061eec5ae9468605e3155ad50eee Mon Sep 17 00:00:00 2001 From: Jaap Jansma <jaap.jansma@civicoop.org> Date: Mon, 25 Nov 2019 11:10:16 +0100 Subject: [PATCH] Fixed bug with aggregate field --- CRM/Dataprocessor/BAO/DataProcessor.php | 3 --- .../DateFieldOutputHandler.php | 7 +++++++ .../RawFieldOutputHandler.php | 7 +++++++ .../Source/AbstractCivicrmEntitySource.php | 19 +++++++------------ 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/CRM/Dataprocessor/BAO/DataProcessor.php b/CRM/Dataprocessor/BAO/DataProcessor.php index 31b4e6bb..af7bf19d 100644 --- a/CRM/Dataprocessor/BAO/DataProcessor.php +++ b/CRM/Dataprocessor/BAO/DataProcessor.php @@ -98,9 +98,6 @@ class CRM_Dataprocessor_BAO_DataProcessor extends CRM_Dataprocessor_DAO_DataProc try { $outputHandler->initialize($field['name'], $field['title'], $field['configuration']); $dataProcessorClass->addOutputFieldHandlers($outputHandler); - if ($outputHandler instanceof OutputHandlerAggregate && $outputHandler->isAggregateField()) { - $dataProcessorClass->getDataFlow()->addAggregateOutputHandler($outputHandler); - } } catch (\Exception $e) { CRM_Core_Session::setStatus($e->getMessage(), E::ts("Invalid field"), 'error'); } diff --git a/Civi/DataProcessor/FieldOutputHandler/DateFieldOutputHandler.php b/Civi/DataProcessor/FieldOutputHandler/DateFieldOutputHandler.php index 257027f5..c65a9083 100644 --- a/Civi/DataProcessor/FieldOutputHandler/DateFieldOutputHandler.php +++ b/Civi/DataProcessor/FieldOutputHandler/DateFieldOutputHandler.php @@ -41,6 +41,13 @@ class DateFieldOutputHandler extends AbstractSimpleFieldOutputHandler implements $this->function = $function; $this->inputFieldSpec->setMySqlFunction($availableFunctions[$function]['sql']); } + + if ($this->isAggregateField) { + $dataFlow = $this->dataSource->ensureField($this->getAggregateFieldSpec()); + if ($dataFlow) { + $dataFlow->addAggregateOutputHandler($this); + } + } } /** diff --git a/Civi/DataProcessor/FieldOutputHandler/RawFieldOutputHandler.php b/Civi/DataProcessor/FieldOutputHandler/RawFieldOutputHandler.php index c5e58656..b3f6e668 100644 --- a/Civi/DataProcessor/FieldOutputHandler/RawFieldOutputHandler.php +++ b/Civi/DataProcessor/FieldOutputHandler/RawFieldOutputHandler.php @@ -30,6 +30,13 @@ class RawFieldOutputHandler extends AbstractSimpleFieldOutputHandler implements public function initialize($alias, $title, $configuration) { parent::initialize($alias, $title, $configuration); $this->isAggregateField = isset($configuration['is_aggregate']) ? $configuration['is_aggregate'] : false; + + if ($this->isAggregateField) { + $dataFlow = $this->dataSource->ensureField($this->getAggregateFieldSpec()); + if ($dataFlow) { + $dataFlow->addAggregateOutputHandler($this); + } + } } /** diff --git a/Civi/DataProcessor/Source/AbstractCivicrmEntitySource.php b/Civi/DataProcessor/Source/AbstractCivicrmEntitySource.php index db9e1aca..63e4c62d 100644 --- a/Civi/DataProcessor/Source/AbstractCivicrmEntitySource.php +++ b/Civi/DataProcessor/Source/AbstractCivicrmEntitySource.php @@ -201,7 +201,7 @@ abstract class AbstractCivicrmEntitySource extends AbstractSource { } /** - * Ensure that filter field is accesible in the query + * Ensure that filter or aggregate field is accesible in the query * * @param FieldSpecification $field * @return \Civi\DataProcessor\DataFlow\AbstractDataFlow|null @@ -322,7 +322,6 @@ abstract class AbstractCivicrmEntitySource extends AbstractSource { * Ensures a field is in the data source * * @param \Civi\DataProcessor\DataSpecification\FieldSpecification $fieldSpecification - * @return SourceInterface * @throws \Exception */ public function ensureFieldInSource(FieldSpecification $fieldSpecification) { @@ -335,17 +334,13 @@ abstract class AbstractCivicrmEntitySource extends AbstractSource { ->getFieldSpecificationByName($fieldSpecification->name); } if ($originalFieldSpecification && $originalFieldSpecification instanceof CustomFieldSpecification) { - $customGroupDataFlow = $this->ensureCustomGroup($originalFieldSpecification->customGroupTableName, $originalFieldSpecification->customGroupName); - if (!$customGroupDataFlow->getDataSpecification() - ->doesFieldExist($fieldSpecification->alias)) { - $customGroupDataFlow->getDataSpecification() - ->addFieldSpecification($fieldSpecification->alias, $fieldSpecification); + $dataFlow = $this->ensureCustomGroup($originalFieldSpecification->customGroupTableName, $originalFieldSpecification->customGroupName); + if (!$dataFlow->getDataSpecification()->doesFieldExist($fieldSpecification->alias)) { + $dataFlow->getDataSpecification()->addFieldSpecification($fieldSpecification->alias, $fieldSpecification); } - } - elseif ($originalFieldSpecification) { - $entityDataFlow = $this->ensureEntity(); - $entityDataFlow->getDataSpecification() - ->addFieldSpecification($fieldSpecification->alias, $fieldSpecification); + } elseif ($originalFieldSpecification) { + $dataFlow = $this->ensureEntity(); + $dataFlow->getDataSpecification()->addFieldSpecification($fieldSpecification->alias, $fieldSpecification); } } catch (FieldExistsException $e) { // Do nothing. -- GitLab