From 97727d41ce98192f477f1b546152969d0ba2fc45 Mon Sep 17 00:00:00 2001 From: Nathan Gray Date: Wed, 7 Apr 2010 16:06:01 +0000 Subject: [PATCH] Fix filtering on a multi-select custom field. Any entry with the filter value will be included. --- etemplate/inc/class.so_sql_cf.inc.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/etemplate/inc/class.so_sql_cf.inc.php b/etemplate/inc/class.so_sql_cf.inc.php index 3c106f6a3d..57e738b2e4 100644 --- a/etemplate/inc/class.so_sql_cf.inc.php +++ b/etemplate/inc/class.so_sql_cf.inc.php @@ -480,8 +480,21 @@ class so_sql_cf extends so_sql } else // using egw_db::expression to allow to use array() with possible values or NULL { - $sql_filter = str_replace($this->extra_value,'extra_filter.'. - $this->extra_value,$this->db->expression($this->extra_table,array($this->extra_value => $val))); + if($this->customfields[$this->get_cf_name($name)]['type'] == 'select' && + $this->customfields[$this->get_cf_name($name)]['rows'] > 1) + { + // Multi-select - any entry with the filter value selected matches + $sql_filter = str_replace($this->extra_value,'extra_filter.'. + $this->extra_value,$this->db->expression($this->extra_table,array( + "CONCAT(',',{$this->extra_value},',') LIKE '%,$val,%'" + )) + ); + } + else + { + $sql_filter = str_replace($this->extra_value,'extra_filter.'. + $this->extra_value,$this->db->expression($this->extra_table,array($this->extra_value => $val))); + } } // need to use a LEFT JOIN for negative search or to allow NULL values $need_left_join = $val[0] === '!' || strpos($sql_filter,'IS NULL') !== false ? ' LEFT ' : '';