From 574b976126a36820a35be8b99aacb6dca443da42 Mon Sep 17 00:00:00 2001 From: Jaap Jansma <jaap.jansma@civicoop.org> Date: Fri, 15 Mar 2019 14:10:05 +0100 Subject: [PATCH] show results after opening the search screen --- CRM/DataprocessorSearch/Form/Search.php | 269 +++++++++--------- CRM/DataprocessorSearch/Search.php | 1 + .../Source/Contact/RelationshipSource.php | 4 +- 3 files changed, 143 insertions(+), 131 deletions(-) diff --git a/CRM/DataprocessorSearch/Form/Search.php b/CRM/DataprocessorSearch/Form/Search.php index 26e811d0..cbdbe375 100644 --- a/CRM/DataprocessorSearch/Form/Search.php +++ b/CRM/DataprocessorSearch/Form/Search.php @@ -31,6 +31,8 @@ class CRM_DataprocessorSearch_Form_Search extends CRM_Core_Form_Search { */ protected $sort; + protected $formHasRequiredFilters = FALSE; + public function preProcess() { parent::preProcess(); @@ -55,7 +57,7 @@ class CRM_DataprocessorSearch_Form_Search extends CRM_Core_Form_Search { else { $this->_formValues = $this->get('formValues'); } - if (!empty($this->_formValues)) { + if (!$this->formHasRequiredFilters || !empty($this->_formValues)) { $limit = CRM_Utils_Request::retrieve('crmRowCount', 'Positive', $this, FALSE, CRM_Utils_Pager::ROWCOUNT); $pageId = CRM_Utils_Request::retrieve('crmPID', 'Positive', $this, FALSE, 1); @@ -214,93 +216,96 @@ class CRM_DataprocessorSearch_Form_Search extends CRM_Core_Form_Search { } protected function setFilters() { - foreach($this->dataProcessor->getFilterHandlers() as $filter) { - $isFilterSet = false; - $filterSpec = $filter->getFieldSpecification(); - $filterName = $filterSpec->alias; - if ($filterSpec->type == 'Date') { - $isFilterSet = $this->setDateFilter($filter); - } elseif (isset($this->_formValues[$filterName.'_op'])) { - switch ($this->_formValues[$filterName . '_op']) { - case 'IN': - if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { - $filterParams = [ - 'op' => 'IN', - 'value' => $this->_formValues[$filterName . '_value'], - ]; - $filter->setFilter($filterParams); - $isFilterSet = TRUE; - } - break; - case 'NOT IN': - if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { - $filterParams = [ - 'op' => 'NOT IN', - 'value' => $this->_formValues[$filterName . '_value'], - ]; - $filter->setFilter($filterParams); - $isFilterSet = TRUE; - } - break; - case '=': - case '!=': - case '>': - case '<': - case '>=': - case '<=': - if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { - $filterParams = [ - 'op' => $this->_formValues[$filterName . '_op'], - 'value' => $this->_formValues[$filterName . '_value'], - ]; - $filter->setFilter($filterParams); - $isFilterSet = TRUE; - } - break; - case 'has': - if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { - $filterParams = [ - 'op' => 'LIKE', - 'value' => '%'.$this->_formValues[$filterName . '_value'].'%', - ]; - $filter->setFilter($filterParams); - $isFilterSet = TRUE; - } - break; - case 'nhas': - if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { - $filterParams = [ - 'op' => 'NOT LIKE', - 'value' => '%'.$this->_formValues[$filterName . '_value'].'%', - ]; - $filter->setFilter($filterParams); - $isFilterSet = TRUE; - } - break; - case 'sw': - if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { - $filterParams = [ - 'op' => 'LIKE', - 'value' => $this->_formValues[$filterName . '_value'].'%', - ]; - $filter->setFilter($filterParams); - $isFilterSet = TRUE; - } - break; - case 'ew': - if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { - $filterParams = [ - 'op' => 'LIKE', - 'value' => '%'.$this->_formValues[$filterName . '_value'], - ]; - $filter->setFilter($filterParams); - $isFilterSet = TRUE; - } - break; + if ($this->dataProcessor->getFilterHandlers()) { + foreach ($this->dataProcessor->getFilterHandlers() as $filter) { + $isFilterSet = FALSE; + $filterSpec = $filter->getFieldSpecification(); + $filterName = $filterSpec->alias; + if ($filterSpec->type == 'Date') { + $isFilterSet = $this->setDateFilter($filter); + } + elseif (isset($this->_formValues[$filterName . '_op'])) { + switch ($this->_formValues[$filterName . '_op']) { + case 'IN': + if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { + $filterParams = [ + 'op' => 'IN', + 'value' => $this->_formValues[$filterName . '_value'], + ]; + $filter->setFilter($filterParams); + $isFilterSet = TRUE; + } + break; + case 'NOT IN': + if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { + $filterParams = [ + 'op' => 'NOT IN', + 'value' => $this->_formValues[$filterName . '_value'], + ]; + $filter->setFilter($filterParams); + $isFilterSet = TRUE; + } + break; + case '=': + case '!=': + case '>': + case '<': + case '>=': + case '<=': + if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { + $filterParams = [ + 'op' => $this->_formValues[$filterName . '_op'], + 'value' => $this->_formValues[$filterName . '_value'], + ]; + $filter->setFilter($filterParams); + $isFilterSet = TRUE; + } + break; + case 'has': + if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { + $filterParams = [ + 'op' => 'LIKE', + 'value' => '%' . $this->_formValues[$filterName . '_value'] . '%', + ]; + $filter->setFilter($filterParams); + $isFilterSet = TRUE; + } + break; + case 'nhas': + if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { + $filterParams = [ + 'op' => 'NOT LIKE', + 'value' => '%' . $this->_formValues[$filterName . '_value'] . '%', + ]; + $filter->setFilter($filterParams); + $isFilterSet = TRUE; + } + break; + case 'sw': + if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { + $filterParams = [ + 'op' => 'LIKE', + 'value' => $this->_formValues[$filterName . '_value'] . '%', + ]; + $filter->setFilter($filterParams); + $isFilterSet = TRUE; + } + break; + case 'ew': + if (isset($this->_formValues[$filterName . '_value']) && $this->_formValues[$filterName . '_value']) { + $filterParams = [ + 'op' => 'LIKE', + 'value' => '%' . $this->_formValues[$filterName . '_value'], + ]; + $filter->setFilter($filterParams); + $isFilterSet = TRUE; + } + break; + } + } + if ($filter->isRequired() && !$isFilterSet) { + throw new \Exception('Field ' . $filterSpec->title . ' is required'); } - } - if ($filter->isRequired() && !$isFilterSet) { - throw new \Exception('Field '.$filterSpec->title.' is required'); } } } @@ -337,51 +342,57 @@ class CRM_DataprocessorSearch_Form_Search extends CRM_Core_Form_Search { $count = 1; $filterElements = array(); $types = \CRM_Utils_Type::getValidTypes(); - foreach($this->dataProcessor->getFilterHandlers() as $filterHandler) { - $fieldSpec = $filterHandler->getFieldSpecification(); - $type = \CRM_Utils_Type::T_STRING; - if (isset($types[$fieldSpec->type])) { - $type = $types[$fieldSpec->type]; - } - if (!$fieldSpec) { - continue; - } - $filter['title'] = $fieldSpec->title; - $filter['type'] = $fieldSpec->type; - $operations = $this->getOperatorOptions($fieldSpec); - if ($fieldSpec->getOptions()) { - $element = $this->addElement('select', "{$fieldSpec->alias}_op",E::ts('Operator:'), $operations); - $this->addElement('select', "{$fieldSpec->alias}_value", NULL, $fieldSpec->getOptions(), array( - 'style' => 'min-width:250px', - 'class' => 'crm-select2 huge', - 'multiple' => TRUE, - 'placeholder' => E::ts('- select -'), - )); - } else { - switch ($type) { - case \CRM_Utils_Type::T_DATE: - CRM_Core_Form_Date::buildDateRange($this, $fieldSpec->alias, $count, '_from', '_to', E::ts('From:'), $filterHandler->isRequired(), $operations); - $count ++; - break; - case CRM_Report_Form::OP_INT: - case CRM_Report_Form::OP_FLOAT: - // and a min value input box - $this->add('text', "{$fieldSpec->alias}_min", E::ts('Min')); - // and a max value input box - $this->add('text', "{$fieldSpec->alias}_max", E::ts('Max')); - default: - // default type is string - $this->addElement('select', "{$fieldSpec->alias}_op", E::ts('Operator:'), $operations, - array('onchange' => "return showHideMaxMinVal( '$fieldSpec->alias', this.value );") - ); - // we need text box for value input - $this->add('text', "{$fieldSpec->alias}_value", NULL, array('class' => 'huge')); - break; + if ($this->dataProcessor->getFilterHandlers()) { + foreach ($this->dataProcessor->getFilterHandlers() as $filterHandler) { + $fieldSpec = $filterHandler->getFieldSpecification(); + $type = \CRM_Utils_Type::T_STRING; + if (isset($types[$fieldSpec->type])) { + $type = $types[$fieldSpec->type]; + } + if (!$fieldSpec) { + continue; + } + $filter['title'] = $fieldSpec->title; + $filter['type'] = $fieldSpec->type; + $operations = $this->getOperatorOptions($fieldSpec); + if ($fieldSpec->getOptions()) { + $element = $this->addElement('select', "{$fieldSpec->alias}_op", E::ts('Operator:'), $operations); + $this->addElement('select', "{$fieldSpec->alias}_value", NULL, $fieldSpec->getOptions(), [ + 'style' => 'min-width:250px', + 'class' => 'crm-select2 huge', + 'multiple' => TRUE, + 'placeholder' => E::ts('- select -'), + ]); + } + else { + switch ($type) { + case \CRM_Utils_Type::T_DATE: + CRM_Core_Form_Date::buildDateRange($this, $fieldSpec->alias, $count, '_from', '_to', E::ts('From:'), $filterHandler->isRequired(), $operations); + $count++; + break; + case CRM_Report_Form::OP_INT: + case CRM_Report_Form::OP_FLOAT: + // and a min value input box + $this->add('text', "{$fieldSpec->alias}_min", E::ts('Min')); + // and a max value input box + $this->add('text', "{$fieldSpec->alias}_max", E::ts('Max')); + default: + // default type is string + $this->addElement('select', "{$fieldSpec->alias}_op", E::ts('Operator:'), $operations, + ['onchange' => "return showHideMaxMinVal( '$fieldSpec->alias', this.value );"] + ); + // we need text box for value input + $this->add('text', "{$fieldSpec->alias}_value", NULL, ['class' => 'huge']); + break; + } + } + if ($filterHandler->isRequired()) { + $this->formHasRequiredFilters = TRUE; } + $filterElements[$fieldSpec->alias] = $filter; } - $filterElements[$fieldSpec->alias] = $filter; + $this->assign('filters', $filterElements); } - $this->assign('filters', $filterElements); } protected function getOperatorOptions(\Civi\DataProcessor\DataSpecification\FieldSpecification $fieldSpec) { diff --git a/CRM/DataprocessorSearch/Search.php b/CRM/DataprocessorSearch/Search.php index cb96a5f7..aa24b1c0 100644 --- a/CRM/DataprocessorSearch/Search.php +++ b/CRM/DataprocessorSearch/Search.php @@ -78,6 +78,7 @@ class CRM_DataprocessorSearch_Search implements OutputInterface { if ($rebuildMenu) { // Rebuild the CiviCRM Menu (which holds all the pages) + CRM_Core_Menu::store(TRUE); CRM_Utils_System::flushCache(); } } diff --git a/Civi/DataProcessor/Source/Contact/RelationshipSource.php b/Civi/DataProcessor/Source/Contact/RelationshipSource.php index 3535a943..4e79cf58 100644 --- a/Civi/DataProcessor/Source/Contact/RelationshipSource.php +++ b/Civi/DataProcessor/Source/Contact/RelationshipSource.php @@ -73,7 +73,7 @@ class RelationshipSource extends AbstractCivicrmEntitySource { $customGroupDataFlow = $this->ensureCustomGroup($spec->customGroupTableName, $spec->customGroupName); $customGroupTableAlias = $customGroupDataFlow->getTableAlias(); $customGroupDataFlow->addWhereClause( - new SimpleWhereClause($customGroupTableAlias, $spec->customFieldColumnName, $op, $values) + new SimpleWhereClause($customGroupTableAlias, $spec->customFieldColumnName, $op, $values, $spec->type, TRUE) ); } else { if ($filter_field_alias == 'relationship_type_id') { @@ -95,7 +95,7 @@ class RelationshipSource extends AbstractCivicrmEntitySource { } } $entityDataFlow = $this->ensureEntity(); - $entityDataFlow->addWhereClause(new SimpleWhereClause($this->getSourceName(), $spec->name,$op, $values)); + $entityDataFlow->addWhereClause(new SimpleWhereClause($this->getSourceName(), $spec->name,$op, $values, $spec->type, TRUE)); } } } -- GitLab