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