From 7033d864a6ea4b9c992c2a6c75e8ace5e438b16e Mon Sep 17 00:00:00 2001 From: qixinzhi Date: Fri, 7 Apr 2023 17:33:01 +0800 Subject: [PATCH] * Add chart filter format. --- module/chart/control.php | 47 +---------------------------------- module/chart/model.php | 53 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 46 deletions(-) diff --git a/module/chart/control.php b/module/chart/control.php index 794559365a..71e3d63bf9 100644 --- a/module/chart/control.php +++ b/module/chart/control.php @@ -176,52 +176,7 @@ class chart extends control $chart = $this->chart->getByID($chartID); - $filterFormat = array(); - foreach($filters as $filter) - { - $field = $filter['field']; - if(!isset($filter['default'])) continue; - - $default = $filter['default']; - switch($filter['type']) - { - case 'select': - if(empty($default)) break; - $default = array_filter($default, function($val){return !empty($val);}); - $value = "('" . implode("', '", $default) . "')"; - $filterFormat[$field] = array('operator' => 'IN', 'value' => $value); - break; - case 'input': - $filterFormat[$field] = array('operator' => 'like', 'value' => "'%$default%'"); - break; - case 'date': - case 'datetime': - $begin = $default['begin']; - $end = $default['end']; - - if(empty($begin) or empty($end)) break; - - $value = "'$begin' and '$end'"; - $filterFormat[$field] = array('operator' => 'BETWEEN', 'value' => $value); - break; - case 'condition': - $operator = $filter['operator']; - $value = $filter['value']; - - if(in_array($operator, array('IN', 'NOT IN'))) - { - $valueArr = explode(',', $value); - foreach($valueArr as $key => $val) $valueArr[$key] = '"' . $val . '"'; - $value = '(' . implode(',', $valueArr) . ')'; - } - elseif(in_array($operator, array('IS NOT NULL', 'IS NULL'))) - { - $value = ''; - } - $filterFormat[$field] = array('operator' => $operator, 'value' => $value); - break; - } - } + $filterFormat = $this->chart->getFilterFormat($filters); $sql = str_replace(';', '', "$post->sql"); $fields = $post->fieldSettings; diff --git a/module/chart/model.php b/module/chart/model.php index 4be9cfcc82..94ea8e5984 100644 --- a/module/chart/model.php +++ b/module/chart/model.php @@ -623,5 +623,58 @@ class chartModel extends model return $options; } + + public function getFilterFormat($filters) + { + $filterFormat = array(); + foreach($filters as $filter) + { + $field = $filter['field']; + if(!isset($filter['default'])) continue; + + $default = $filter['default']; + switch($filter['type']) + { + case 'select': + if(empty($default)) break; + if(!is_array($default)) $default = array($default); + $default = array_filter($default, function($val){return !empty($val);}); + $value = "('" . implode("', '", $default) . "')"; + $filterFormat[$field] = array('operator' => 'IN', 'value' => $value); + break; + case 'input': + $filterFormat[$field] = array('operator' => 'like', 'value' => "'%$default%'"); + break; + case 'date': + case 'datetime': + $begin = $default['begin']; + $end = $default['end']; + + if(empty($begin) or empty($end)) break; + + $value = "'$begin' and '$end'"; + $filterFormat[$field] = array('operator' => 'BETWEEN', 'value' => $value); + break; + case 'condition': + $operator = $filter['operator']; + $value = $filter['value']; + + if(in_array($operator, array('IN', 'NOT IN'))) + { + $valueArr = explode(',', $value); + foreach($valueArr as $key => $val) $valueArr[$key] = '"' . $val . '"'; + $value = '(' . implode(',', $valueArr) . ')'; + } + elseif(in_array($operator, array('IS NOT NULL', 'IS NULL'))) + { + $value = ''; + } + $filterFormat[$field] = array('operator' => $operator, 'value' => $value); + break; + } + } + + return $filterFormat; + } }