父节点
f43115508c
当前提交
a12531fa60
共有 1 个文件被更改,包括 133 次插入 和 248 次删除
|
|
@ -130,257 +130,142 @@ class Search extends CI_Controller {
|
||||||
$this->db->update('queries', $data);
|
$this->db->update('queries', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function buildWhere(array $object, string $condition = null): void
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The $object is one of the following:
|
||||||
|
* - a group, with 'condition' and 'rules' keys
|
||||||
|
* - a condition, that is either 'AND' or 'OR' depending on the parent group setting
|
||||||
|
*/
|
||||||
|
$objectIsGroup = isset($object['condition']);
|
||||||
|
if ($objectIsGroup) {
|
||||||
|
if ($condition === null || $condition === 'AND') {
|
||||||
|
$this->db->group_start();
|
||||||
|
} else {
|
||||||
|
$this->db->or_group_start();
|
||||||
|
}
|
||||||
|
foreach ($object['rules'] as $rule) {
|
||||||
|
/*
|
||||||
|
* Now iterate over the children, that are either groups or conditions
|
||||||
|
*/
|
||||||
|
$this->buildWhere($rule, $object['condition']);
|
||||||
|
}
|
||||||
|
$this->db->group_end();
|
||||||
|
} else {
|
||||||
|
$object['field'] = $this->config->item('table_name') . '.' . $object['field'];
|
||||||
|
|
||||||
|
if ($object['operator'] == "equal") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'], $object['value']);
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'], $object['value']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object['operator'] == "not_equal") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'] . ' !=', $object['value']);
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'] . ' !=', $object['value']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object['operator'] == "begins_with") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'] . ' like ', $object['value'] . "%");
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'] . ' like ', $object['value'] . "%");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object['operator'] == "contains") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'] . ' like ', "%" . $object['value'] . "%");
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'] . ' like ', "%" . $object['value'] . "%");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object['operator'] == "ends_with") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'] . ' like ', "%" . $object['value']);
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'] . ' like ', "%" . $object['value']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object['operator'] == "is_empty") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'], "''");
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'], "''");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object['operator'] == "is_not_empty") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'] . ' !=', "''");
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'] . ' !=', "''");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object['operator'] == "is_null") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'] . ' is ', NULL);
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'] . ' is ', NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object['operator'] == "is_not_null") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'] . ' is not ', NULL);
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'] . ' is not ', NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($object['operator'] == "less") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'] . ' <', $object['value']);
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'] . ' <', $object['value']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object['operator'] == "less_or_equal") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'] . ' <=', $object['value']);
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'] . ' <=', $object['value']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object['operator'] == "greater") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'] . ' >', $object['value']);
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'] . ' >', $object['value']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object['operator'] == "greater_or_equal") {
|
||||||
|
if ($condition == "AND") {
|
||||||
|
$this->db->where($object['field'] . ' >=', $object['value']);
|
||||||
|
} else {
|
||||||
|
$this->db->or_where($object['field'] . ' >=', $object['value']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function fetchQueryResult($json, $returnquery) {
|
function fetchQueryResult($json, $returnquery) {
|
||||||
|
|
||||||
$search_items = json_decode($json, true);
|
$search_items = json_decode($json, true);
|
||||||
|
|
||||||
$search_type = "";
|
$this->buildWhere($search_items);
|
||||||
|
|
||||||
foreach($search_items as $key=>$value){
|
|
||||||
|
|
||||||
|
|
||||||
if($value == "AND") {
|
|
||||||
$search_type = "AND";
|
|
||||||
}
|
|
||||||
if ($value == "OR") {
|
|
||||||
$search_type = "OR";
|
|
||||||
}
|
|
||||||
|
|
||||||
if(is_array($value)) {
|
|
||||||
foreach($value as $values)
|
|
||||||
{
|
|
||||||
if(isset($values['rules'])) {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->group_start();
|
|
||||||
} else {
|
|
||||||
$this->db->or_group_start();
|
|
||||||
}
|
|
||||||
foreach($values['rules'] as $group_value)
|
|
||||||
{
|
|
||||||
$group_value['field'] = $this->config->item('table_name') . '.' . $group_value['field'];
|
|
||||||
|
|
||||||
if($group_value['operator'] == "equal") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'], $group_value['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'], $group_value['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($group_value['operator'] == "not_equal") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'].' !=', $group_value['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'].' !=', $group_value['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($group_value['operator'] == "begins_with") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'].' like ', $group_value['value']."%");
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'].' like ', $group_value['value']."%");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($group_value['operator'] == "contains") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'].' like ', "%".$group_value['value']."%");
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'].' like ', "%".$group_value['value']."%");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($group_value['operator'] == "ends_with") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'].' like ', "%".$group_value['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'].' like ', "%".$group_value['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($group_value['operator'] == "is_empty") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'], "''");
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'], "''");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($group_value['operator'] == "is_not_empty") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'].' !=', "''");
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'].' !=', "''");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($group_value['operator'] == "is_null") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'].' is ', NULL);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'].' is ', NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($group_value['operator'] == "is_not_null") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'].' is not ', NULL);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'].' is not ', NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if($group_value['operator'] == "less") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'].' <', $group_value['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'].' <', $group_value['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($group_value['operator'] == "less_or_equal") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'].' <=', $group_value['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'].' <=', $group_value['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($group_value['operator'] == "greater") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'].' >', $group_value['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'].' >', $group_value['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($group_value['operator'] == "greater_or_equal") {
|
|
||||||
if($values['condition'] == "AND") {
|
|
||||||
$this->db->where($group_value['field'].' >=', $group_value['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($group_value['field'].' >=', $group_value['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
$this->db->group_end();
|
|
||||||
} else {
|
|
||||||
//print_r($values['field']);
|
|
||||||
$values['field'] = $this->config->item('table_name') . '.' . $values['field'];
|
|
||||||
|
|
||||||
if(isset($values['operator'])) {
|
|
||||||
|
|
||||||
}
|
|
||||||
if($values['operator'] == "equal") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'], $values['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'], $values['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($values['operator'] == "not_equal") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'].' !=', $values['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'].' !=', $values['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($values['operator'] == "begins_with") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'].' like ', $values['value']."%");
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'].' like ', $values['value']."%");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($values['operator'] == "contains") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'].' like ', "%".$values['value']."%");
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'].' like ', "%".$values['value']."%");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($values['operator'] == "ends_with") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'].' like ', "%".$values['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'].' like ', "%".$values['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($values['operator'] == "is_empty") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'], "");
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'], "");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($values['operator'] == "is_not_empty") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'].' !=', "");
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'].' !=', "");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($values['operator'] == "is_null") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'].' is ', NULL);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'].' is ', NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($values['operator'] == "is_not_null") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'].' is not ', NULL);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'].' is not ', NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($values['operator'] == "less") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'].' <', $values['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'].' <', $values['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($values['operator'] == "less_or_equal") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'].' <=', $values['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'].' <=', $values['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($values['operator'] == "greater") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'].' >', $values['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'].' >', $values['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($values['operator'] == "greater_or_equal") {
|
|
||||||
if($search_type == "AND") {
|
|
||||||
$this->db->where($values['field'].' >=', $values['value']);
|
|
||||||
} else {
|
|
||||||
$this->db->or_where($values['field'].' >=', $values['value']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->db->order_by('COL_TIME_ON', 'DESC');
|
$this->db->order_by('COL_TIME_ON', 'DESC');
|
||||||
$this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
|
$this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
|
||||||
|
|
|
||||||
正在加载…
在新工单中引用