Skip to content
Snippets Groups Projects
Commit e3b35485 authored by mattwire's avatar mattwire
Browse files

Allow to pass default filter values by URL (for Int/CommaSeparatedInteger filters)

parent 20331e23
No related branches found
No related tags found
1 merge request!46Allow to specify defaults for filters via URL params
......@@ -162,7 +162,7 @@ abstract class CRM_Dataprocessor_Form_Output_AbstractUIOutputForm extends CRM_Co
if ($filter->isExposed()) {
$filterValues = $filter->processSubmittedValues($submittedValues);
if (empty($filterValues)) {
$filterValues = $filter->getDefaultFilterValues();
$filterValues = self::getDefaultFilterValues($filter);
}
$filter->applyFilterFromSubmittedFilterParams($filterValues);
}
......@@ -170,6 +170,30 @@ abstract class CRM_Dataprocessor_Form_Output_AbstractUIOutputForm extends CRM_Co
}
}
/**
* Get the default filter values for a filter. If there is no default value we allow the value to be set by a URL parameter of the same name as the filter.
*
* @param \Civi\DataProcessor\FilterHandler\AbstractFilterHandler $filterHandler
*
* @return array
* @throws \CRM_Core_Exception
*/
public static function getDefaultFilterValues(\Civi\DataProcessor\FilterHandler\AbstractFilterHandler $filterHandler) {
$filterValues = $filterHandler->getDefaultFilterValues();
if (empty($filterValues)) {
$type = ($filterHandler->getFieldSpecification()->type === 'Int') ? 'CommaSeparatedIntegers' : $filterHandler->getFieldSpecification()->type;
$valueFromURL = \CRM_Utils_Request::retrieveValue($filterHandler->getFieldSpecification()->alias, $type, NULL, FALSE, 'GET');
if ($valueFromURL) {
$filterValues = [
'op' => 'IN',
'value' => $valueFromURL,
];
}
}
return $filterValues;
}
/**
* Build the criteria form
*/
......@@ -181,7 +205,7 @@ abstract class CRM_Dataprocessor_Form_Output_AbstractUIOutputForm extends CRM_Co
if (!$fieldSpec || !$filterHandler->isExposed()) {
continue;
}
$filterElements[$fieldSpec->alias]['filter'] = $filterHandler->addToFilterForm($this, $filterHandler->getDefaultFilterValues(), $this->getCriteriaElementSize());
$filterElements[$fieldSpec->alias]['filter'] = $filterHandler->addToFilterForm($this, self::getDefaultFilterValues($filterHandler), $this->getCriteriaElementSize());
$filterElements[$fieldSpec->alias]['template'] = $filterHandler->getTemplateFileName();
}
$this->assign('filters', $filterElements);
......
......@@ -395,6 +395,10 @@ abstract class AbstractFilterHandler {
}
if (isset($submittedValues[$alias.'_value'])) {
$return['value'] = $submittedValues[$alias . '_value'];
if (empty($return['value'])) {
// Don't save an empty default criteria to the database or we can't override (eg. via URL)
$return = [];
}
}
if (isset($submittedValues[$alias.'_relative'])) {
$return['relative'] = $submittedValues[$alias . '_relative'];
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment