added the needed code to enable the functionality of sorting and selecting by customfields

This commit is contained in:
Klaus Leithoff 2007-12-13 11:18:44 +00:00
parent ab60a02467
commit 29820868fe

View File

@ -673,18 +673,24 @@ class soinfolog // DB-Layer
$link_extra = ($action == 'sp' ? 'OR' : 'AND')." main.info_id IN (".implode(',',$links).')'; $link_extra = ($action == 'sp' ? 'OR' : 'AND')." main.info_id IN (".implode(',',$links).')';
} }
} }
if (!empty($query['order']) && eregi('^[a-z_0-9, ]+$',$query['order']) && (empty($query['sort']) || eregi('^(DESC|ASC)$',$query['sort']))) $sortbycf='';
if (!empty($query['order']) && (eregi('^[a-z_0-9, ]+$',$query['order']) || stripos($query['order'],'#')!==FALSE ) && (empty($query['sort']) || eregi('^(DESC|ASC)$',$query['sort'])))
{ {
$order = array(); $order = array();
foreach(explode(',',$query['order']) as $val) foreach(explode(',',$query['order']) as $val)
{ {
$val = trim($val); $val = trim($val);
$val = (substr($val,0,5) != 'info_' ? 'info_' : '').$val; if (substr($val,0,1)=='#') {
if ($val == 'info_des' && $this->db->capabilities['order_on_text'] !== true) $sortbycf=substr($val,1);
{ $val="cfsortcrit";
if (!$this->db->capabilities['order_on_text']) continue; } else {
$val = (substr($val,0,5) != 'info_' ? 'info_' : '').$val;
if ($val == 'info_des' && $this->db->capabilities['order_on_text'] !== true)
{
if (!$this->db->capabilities['order_on_text']) continue;
$val = sprintf($this->db->capabilities['order_on_text'],$val); $val = sprintf($this->db->capabilities['order_on_text'],$val);
}
} }
$order[] = $val; $order[] = $val;
} }
@ -697,12 +703,12 @@ class soinfolog // DB-Layer
$acl_filter = $filtermethod = $this->aclFilter($query['filter']); $acl_filter = $filtermethod = $this->aclFilter($query['filter']);
$filtermethod .= $this->statusFilter($query['filter']); $filtermethod .= $this->statusFilter($query['filter']);
$filtermethod .= $this->dateFilter($query['filter']); $filtermethod .= $this->dateFilter($query['filter']);
$cfcolfilter=0;
if (is_array($query['col_filter'])) if (is_array($query['col_filter']))
{ {
foreach($query['col_filter'] as $col => $data) foreach($query['col_filter'] as $col => $data)
{ {
if (substr($col,0,5) != 'info_') $col = 'info_'.$col; if (substr($col,0,5) != 'info_' && substr($col,0,1)!='#') $col = 'info_'.$col;
if (!empty($data) && eregi('^[a-z_0-9]+$',$col)) if (!empty($data) && eregi('^[a-z_0-9]+$',$col))
{ {
if ($col == 'info_responsible') if ($col == 'info_responsible')
@ -719,6 +725,10 @@ class soinfolog // DB-Layer
$filtermethod .= ' AND '.$this->db->expression($this->info_table,array($col => $data)); $filtermethod .= ' AND '.$this->db->expression($this->info_table,array($col => $data));
} }
} }
if (substr($col,0,1)=='#' && $query['custom_fields'] && $data) {
$filtermethod.=" and main.info_id in (select distinct info_id from $this->extra_table"." where (info_extra_name='".substr($col,1)."' and info_extra_value='".$data."')) ";
$cfcolfilter++;
}
} }
} }
//echo "<p>filtermethod='$filtermethod'</p>"; //echo "<p>filtermethod='$filtermethod'</p>";
@ -748,7 +758,7 @@ class soinfolog // DB-Layer
} }
if ($query['search'] || $query['custom_fields'] ) if ($query['search'] || $query['custom_fields'] )
{ {
$join = "LEFT JOIN $this->extra_table ON main.info_id=$this->extra_table.info_id"; $join = ($cfcolfilter>0 ? '':"LEFT")." JOIN $this->extra_table ON main.info_id=$this->extra_table.info_id ";
// mssql and others cant use DISTICT if text columns (info_des) are involved // mssql and others cant use DISTICT if text columns (info_des) are involved
$distinct = $this->db->capabilities['distinct_on_text'] ? 'DISTINCT' : ''; $distinct = $this->db->capabilities['distinct_on_text'] ? 'DISTINCT' : '';
} }
@ -776,7 +786,9 @@ class soinfolog // DB-Layer
$count_subs = ",(SELECT count(*) FROM $this->info_table sub WHERE sub.info_id_parent=main.info_id AND $acl_filter) AS info_anz_subs"; $count_subs = ",(SELECT count(*) FROM $this->info_table sub WHERE sub.info_id_parent=main.info_id AND $acl_filter) AS info_anz_subs";
} }
$info_customfield = ""; $info_customfield = "";
//$info_customfield = ", $this->extra_table.info_extra_value "; if ($sortbycf!='') {
$info_customfield = ", (select distinct info_extra_value from $this->extra_table sub2 where sub2.info_id=main.info_id and info_extra_name='".$sortbycf."') AS cfsortcrit ";
}
//echo "SELECT $distinct main.* $count_subs $info_customfield $sql_query $ordermethod"."<br>"; //echo "SELECT $distinct main.* $count_subs $info_customfield $sql_query $ordermethod"."<br>";
$this->db->query($sql="SELECT $distinct main.* $count_subs $info_customfield $sql_query $ordermethod",__LINE__,__FILE__, $this->db->query($sql="SELECT $distinct main.* $count_subs $info_customfield $sql_query $ordermethod",__LINE__,__FILE__,
(int) $query['start'],isset($query['start']) ? (int) $query['num_rows'] : -1); (int) $query['start'],isset($query['start']) ? (int) $query['num_rows'] : -1);
@ -797,6 +809,8 @@ class soinfolog // DB-Layer
(stripos($query['selectcols'],'#')===FALSE && stripos($query['selectcols'],'customfields')!==FALSE) )) (stripos($query['selectcols'],'#')===FALSE && stripos($query['selectcols'],'customfields')!==FALSE) ))
{ {
$ids[$row['info_id']]['#'.$row['info_extra_name']] = $row['info_extra_value']; $ids[$row['info_id']]['#'.$row['info_extra_name']] = $row['info_extra_value'];
} else {
unset($ids[$row['info_id']]['#'.$row['info_extra_name']]);
} }
} }
} }