From cfb7b8012033405e58d5cc8a648a77162e845726 Mon Sep 17 00:00:00 2001 From: SJ Date: Sun, 12 Feb 2012 16:16:54 +0100 Subject: [PATCH] webui search fixes --- util/db-mysql.sql | 4 +- webui/controller/search/helper.php | 92 +++++++++++++------ webui/model/search/search.php | 7 +- webui/system/misc.php | 6 +- .../theme/default/templates/search/expert.tpl | 6 -- 5 files changed, 70 insertions(+), 45 deletions(-) diff --git a/util/db-mysql.sql b/util/db-mysql.sql index 94083a22..cf0237f9 100644 --- a/util/db-mysql.sql +++ b/util/db-mysql.sql @@ -154,17 +154,15 @@ create index `user_settings_idx` on `user_settings`(`username`); drop table if exists `user`; create table if not exists `user` ( `uid` int unsigned not null primary key, - `gid` int unsigned not null, `username` char(64) not null unique, `realname` char(64) default null, `password` char(48) default null, `domain` char(64) default null, `dn` char(255) default '*', - `policy_group` int(4) default 0, `isadmin` tinyint default 0 ) Engine=InnoDB; -insert into `user` (`uid`, `gid`, `username`, `realname`, `password`, `policy_group`, `isadmin`, `domain`) values (0, 0, 'admin', 'built-in piler admin', '$1$PItc7d$zsUgON3JRrbdGS11t9JQW1', 0, 1, 'local'); +insert into `user` (`uid`, `username`, `realname`, `password`, `isadmin`, `domain`) values (0, 'admin', 'built-in piler admin', '$1$PItc7d$zsUgON3JRrbdGS11t9JQW1', 1, 'local'); drop table if exists `email`; create table if not exists `email` ( diff --git a/webui/controller/search/helper.php b/webui/controller/search/helper.php index 6e046ae0..a8d0cd57 100644 --- a/webui/controller/search/helper.php +++ b/webui/controller/search/helper.php @@ -49,14 +49,22 @@ class ControllerSearchHelper extends Controller { $this->data['n'] = -1; if($this->request->post['searchtype'] == 'advanced') { + $this->preprocess_post_advanced_request($this->request->post); $this->fixup_post_request(); + list ($this->data['n'], $this->data['messages']) = $this->model_search_search->search_messages($this->a, ADVANCED_SEARCH, $this->data['page']); - } else if($this->request->post['searchtype'] == 'expert'){ + } + + else if($this->request->post['searchtype'] == 'expert'){ + $this->preprocess_post_expert_request($this->request->post); $this->fixup_post_request(); + list ($this->data['n'], $this->data['messages']) = $this->model_search_search->search_messages($this->a, ADVANCED_SEARCH, $this->data['page']); - } else { + } + + else { $this->fixup_post_simple_request(); list ($this->data['n'], $this->data['messages']) = $this->model_search_search->search_messages($this->request->post, SIMPLE_SEARCH, $this->data['page']); } @@ -86,12 +94,16 @@ class ControllerSearchHelper extends Controller { private function fixup_post_request() { - while(list($k, $v) = each($this->a)) { - if($this->a[$k]) { $this->a[$k] = substr($this->a[$k], 1, strlen($this->a[$k])); } - } + $this->a['o_from'] = substr($this->a['o_from'], 1, strlen($this->a['o_from'])); + $this->a['f_from'] = substr($this->a['f_from'], 1, strlen($this->a['f_from'])); + $this->a['o_to'] = substr($this->a['o_to'], 1, strlen($this->a['o_to'])); + $this->a['f_to'] = substr($this->a['f_to'], 1, strlen($this->a['f_to'])); + $this->a['from'] = substr($this->a['from'], 1, strlen($this->a['from'])); + $this->a['to'] = substr($this->a['to'], 1, strlen($this->a['to'])); + $this->a['from_domain'] = substr($this->a['from_domain'], 1, strlen($this->a['from_domain'])); + $this->a['to_domain'] = substr($this->a['to_domain'], 1, strlen($this->a['to_domain'])); $this->a['ref'] = $this->request->post['ref']; - $this->a['sort'] = $this->request->post['sort']; $this->a['order'] = $this->request->post['order']; } @@ -100,14 +112,14 @@ class ControllerSearchHelper extends Controller { private function preprocess_post_expert_request($data = array()) { $token = ''; -//print_r($data); - $s = preg_replace("/:/", ": ", $data['search']); $s = preg_replace("/,/", " ", $s); $s = preg_replace("/\s{1,}/", " ", $s); $b = explode(" ", $s); while(list($k, $v) = each($b)) { + if($v == '') { continue; } + if($v == 'from:') { $token = 'from'; continue; } else if($v == 'to:') { $token = 'to'; continue; } else if($v == 'subject:') { $token = 'subject'; continue; } @@ -145,15 +157,42 @@ class ControllerSearchHelper extends Controller { } else if($token == 'subject') { $this->a['subject'] .= ' ' . $v; } else if($token == 'body') { $this->a['body'] .= ' ' . $v; } - else if($token == 'date1') { $this->a['date1'] = $v; } - else if($token == 'date2') { $this->a['date2'] = $v; } - else if($token == 'direction') { $this->a['direction'] = $v; } - else if($token == 'size') { $this->a['size'] .= ' ' . $v; } - else if($token == 'attachment_type') { $this->a['attachment_type'] .= ' ' . $v; } + else if($token == 'date1') { $this->a['date1'] = ' ' . $v; } + else if($token == 'date2') { $this->a['date2'] = ' ' . $v; } + else if($token == 'attachment_type') { $this->a['attachment_type'] .= '|' . $v; } else if($token == 'tag') { $this->a['tag'] .= ' ' . $v; } - else if($token == 'ref') { $this->a['ref'] = $v; } + else if($token == 'ref') { $this->a['ref'] = ' ' . $v; } + + else if($token == 'direction') { + if($v == 'inbound') { $this->a['direction'] = 0; } + else if($v == 'outbound') { $this->a['direction'] = 2; } + else if($v == 'internal') { $this->a['direction'] = 1; } + } + + else if($token == 'size') { + $o = substr($v, 0, 1); + if($o == '<' || $o == '>') { + $v = substr($v, 1, strlen($v)); + $o1 = substr($v, 0, 1); + if($o1 == '=') { + $v = substr($v, 1, strlen($v)); + $o .= $o1; + } + } + else { $o = ''; } + + $s = explode("k", $v); + if($s[0] != $v) { $v = $s[0] * 1000; } + + $s = explode("M", $v); + if($s[0] != $v) { $v = $s[0] * 1000000; } + + $this->a['size'] .= ' ' . $o . $v; + } + } + $this->a['attachment_type'] = substr($this->a['attachment_type'], 1, strlen($this->a['attachment_type'])); } @@ -173,7 +212,7 @@ class ControllerSearchHelper extends Controller { if(in_array($v, $_SESSION['emails'])) { $this->a['o_from'] .= "|$v"; } else { $this->a['f_from'] .= "|$v"; } } else { - $this->a['from'] .= "|$v"; + $this->a['from'] .= " $v"; } } @@ -185,28 +224,21 @@ class ControllerSearchHelper extends Controller { if(in_array($v, $_SESSION['emails'])) { $this->a['o_to'] .= "|$v"; } else { $this->a['f_to'] .= "|$v"; } } else { - $this->a['to'] .= "|$v"; + $this->a['to'] .= " $v"; } } - if($f == 'subject') { - $this->a['subject'] .= "|$v"; - } - - - if($f == 'body') { - $this->a['body'] .= "|$v"; - } - - if($f == 'tag') { - $this->a['tag'] .= "|$v"; - } - - + if($f == 'subject') { $this->a['subject'] .= ' ' . $v; } + if($f == 'body') { $this->a['body'] .= ' ' . $v; } } } + if(isset($data['attachment_type'])) { $this->a['attachment_type'] = $data['attachment_type']; } + if(isset($data['direction'])) { $this->a['direction'] = $data['direction']; } + if(isset($data['tag'])) { $this->a['tag'] = $data['tag']; } + if(isset($data['date1'])) { $this->a['date1'] = $data['date1']; } + if(isset($data['date2'])) { $this->a['date2'] = $data['date2']; } } diff --git a/webui/model/search/search.php b/webui/model/search/search.php index ec201949..3e422beb 100644 --- a/webui/model/search/search.php +++ b/webui/model/search/search.php @@ -162,7 +162,7 @@ class ModelSearchSearch extends Model { if($data['body']) { if($match) { $match .= " & "; } $match .= "(@body " . $data['body'] . ") "; } if($data['subject']) { if($match) { $match .= " & "; } $match .= "(@subject " . $data['subject'] . ") "; } - if($data['attachment_type']) { if($match) { $match .= " & "; } $match .= "(@attachment_types " . $data['attachment_type'] . ") "; } + if($data['attachment_type'] && $data['attachment_type'] != "any") { if($match) { $match .= " & "; } $match .= "(@attachment_types " . $data['attachment_type'] . ") "; } return $match; } @@ -249,7 +249,7 @@ class ModelSearchSearch extends Model { $ids = array(); $direction = $size = ''; $tag_id_list = ''; - + $a = ""; if($data['sort'] == 'from' || $data['sort'] == 'subj') { $sortorder = ''; } @@ -264,6 +264,7 @@ class ModelSearchSearch extends Model { if(preg_match("/^(\>|\<)\={0,}\d{1,}$/", $data['size'])) { $size = "size " . $data['size'] . " AND "; } } + if(isset($data['attachment_type']) && $data['attachment_type'] == 'any') { $a = "attachments > 0 AND "; } if($data['tag']) { $data['tag'] = $this->fixup_sphinx_operators($data['tag']); @@ -277,7 +278,7 @@ class ModelSearchSearch extends Model { $query = $this->sphx->query("SELECT id FROM " . SPHINX_MAIN_INDEX . " WHERE id IN (" . substr($tag_id_list, 1, strlen($tag_id_list)) . ") $sortorder LIMIT 0," . MAX_SEARCH_HITS); } else { - $query = $this->sphx->query("SELECT id FROM " . SPHINX_MAIN_INDEX . " WHERE $date $direction $size MATCH('$conditions') $sortorder LIMIT 0," . MAX_SEARCH_HITS); + $query = $this->sphx->query("SELECT id FROM " . SPHINX_MAIN_INDEX . " WHERE $a $date $direction $size MATCH('$conditions') $sortorder LIMIT 0," . MAX_SEARCH_HITS); } //print $query->query; print "

" . $query->exec_time . "

\n"; diff --git a/webui/system/misc.php b/webui/system/misc.php index 35c8ac6b..929c2d81 100644 --- a/webui/system/misc.php +++ b/webui/system/misc.php @@ -265,11 +265,11 @@ function format_qshape($desc = '', $filename = '') { } -function nice_size($size = 0) { +function nice_size($size = 0, $space = '') { if($size < 1000) return "1k"; - if($size < 100000) return round($size/1000) . "k"; + if($size < 100000) return round($size/1000) . $space . "k"; - return sprintf("%.1f", $size/1000000) . "M"; + return sprintf("%.1f", $size/1000000) . $space . "M"; } diff --git a/webui/view/theme/default/templates/search/expert.tpl b/webui/view/theme/default/templates/search/expert.tpl index 8bc2ee53..b07228d5 100644 --- a/webui/view/theme/default/templates/search/expert.tpl +++ b/webui/view/theme/default/templates/search/expert.tpl @@ -20,12 +20,6 @@ -
-
-
eg. from: enron.com, subject: lunch, body: invite, date1: 2001-01-01, date2: 2001-12-31
-
-
-