From d7ab42deed985aa12ba20bc0d809c41bcbc583db Mon Sep 17 00:00:00 2001 From: Jaap Jansma <jaap.jansma@civicoop.org> Date: Wed, 29 May 2019 15:19:01 +0200 Subject: [PATCH] fixed issue with radio custom field and filter --- .../CustomFieldSpecification.php | 35 +++++++++++++++---- .../DataProcessor/DataSpecification/Utils.php | 2 +- .../FilterHandler/SimpleSqlFilter.php | 2 +- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/Civi/DataProcessor/DataSpecification/CustomFieldSpecification.php b/Civi/DataProcessor/DataSpecification/CustomFieldSpecification.php index e2fac595..6efdc0c9 100644 --- a/Civi/DataProcessor/DataSpecification/CustomFieldSpecification.php +++ b/Civi/DataProcessor/DataSpecification/CustomFieldSpecification.php @@ -22,18 +22,39 @@ class CustomFieldSpecification extends FieldSpecification { public $customFieldId; - public function __construct($custom_group_name, $custom_group_table_name, $custom_group_title, $id, $column_name, $name, $type, $title, $alias) { - $this->customFieldColumnName = $column_name; + public $customField; + + public function __construct($custom_group_name, $custom_group_table_name, $custom_group_title, $field, $alias) { + $this->customField = $field; + $this->customFieldColumnName = $field['column_name']; $this->customGroupName = $custom_group_name; $this->customGroupTableName = $custom_group_table_name; $this->customGroupTitle = $custom_group_title; - $this->customFieldId = $id; - $this->customFieldName = $name; - $this->customFieldTitle = $title; + $this->customFieldId = $field['id']; + $this->customFieldName = $field['name']; + $this->customFieldTitle = $field['label']; + + $options = \CRM_Core_PseudoConstant::get('CRM_Core_BAO_CustomField', 'custom_' . $this->customFieldId, array(), 'search'); + parent::__construct($field['column_name'], $field['data_type'], $custom_group_title. ': '.$this->customFieldTitle, $options, $alias); - $options = \CRM_Core_PseudoConstant::get('CRM_Core_BAO_CustomField', 'custom_' . $id, array(), 'search'); - parent::__construct($column_name, $type, $custom_group_title. ': '.$title, $options, $alias); + } + /** + * Returns whether this field is a multiple select field. + * + * @return bool + */ + public function isMultiple() { + if (!$this->getOptions()) { + return false; + } + if ($this->type == 'Boolean') { + return false; + } + if ($this->customField['html_type'] == 'Radio') { + return false; + } + return true; } } \ No newline at end of file diff --git a/Civi/DataProcessor/DataSpecification/Utils.php b/Civi/DataProcessor/DataSpecification/Utils.php index 747f2478..343b200d 100644 --- a/Civi/DataProcessor/DataSpecification/Utils.php +++ b/Civi/DataProcessor/DataSpecification/Utils.php @@ -97,7 +97,7 @@ class Utils { $alias = $aliasPrefix . $customGroup['name'] . '_' . $field['name']; $customFieldSpec = new CustomFieldSpecification( $customGroup['name'], $customGroup['table_name'], $customGroup['title'], - $field['id'], $field['column_name'], $field['name'], $field['data_type'], $field['label'], + $field, $alias ); $dataSpecification->addFieldSpecification($customFieldSpec->name, $customFieldSpec); diff --git a/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php b/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php index 7d676dcd..7acad43d 100644 --- a/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php +++ b/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php @@ -84,7 +84,7 @@ class SimpleSqlFilter extends AbstractFilterHandler { */ protected function isMultiValueField() { if ($this->fieldSpecification instanceof CustomFieldSpecification) { - if ($this->fieldSpecification->type != 'Boolean' && $this->fieldSpecification->getOptions() != null) { + if ($this->fieldSpecification->isMultiple()) { return TRUE; } } -- GitLab