From: Michael M Slusarz Date: Mon, 20 Sep 2010 17:44:55 +0000 (-0600) Subject: Add Bulk Search query to search UI X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=6498dfc7478104d8c5bb32f40692d2a31b99d1d6;p=horde.git Add Bulk Search query to search UI --- diff --git a/imp/js/search.js b/imp/js/search.js index d5fada48a..1e13264e4 100644 --- a/imp/js/search.js +++ b/imp/js/search.js @@ -48,6 +48,10 @@ var ImpSearch = { var crit = c.criteria; switch (c.element) { + case 'IMP_Search_Element_Bulk': + this.insertFilter('bulk', crit); + break; + case 'IMP_Search_Element_Date': this.insertDate(this.data.constants.index(crit.t), new Date(crit.d)); break; @@ -148,6 +152,10 @@ var ImpSearch = { this.insertWithin(val); break; + case 'filter': + this.insertFilter(val); + break; + case 'flag': this.insertFlag(val); break; @@ -282,6 +290,15 @@ var ImpSearch = { tmp[1].activate(); }, + insertFilter: function(id, not) + { + var tmp = [ + new Element('EM').insert(this.getLabel(id)), + new Element('SPAN').insert(new Element('INPUT', { checked: Boolean(not), className: 'checkbox', type: 'checkbox' })).insert(this.text.not_match) + ]; + this.criteria[this.insertCriteria(tmp)] = { t: id }; + }, + insertFlag: function(id, not) { var tmp = [ @@ -342,6 +359,11 @@ var ImpSearch = { data.push(this.criteria[c]); break; + case 'filter': + this.criteria[c].n = Number(Boolean($F($(c).down('INPUT[type=checkbox]')))); + data.push(this.criteria[c]); + break; + case 'flag': this.criteria[c].n = Number(Boolean($F($(c).down('INPUT[type=checkbox]')))); data.push({ diff --git a/imp/lib/Search/Element.php b/imp/lib/Search/Element.php index ce8d040eb..2c4694bb0 100644 --- a/imp/lib/Search/Element.php +++ b/imp/lib/Search/Element.php @@ -65,12 +65,10 @@ abstract class IMP_Search_Element implements Serializable */ public function serialize() { - return empty($this->_data) - ? null - : json_encode(array( - self::VERSION, - $this->_data - )); + return json_encode(array( + self::VERSION, + $this->_data + )); } /** @@ -82,10 +80,6 @@ abstract class IMP_Search_Element implements Serializable */ public function unserialize($data) { - if (empty($data)) { - return; - } - $data = json_decode($data); if (!is_array($data) || !isset($data[0]) || diff --git a/imp/search.php b/imp/search.php index a4f099d6a..84e66bc5e 100644 --- a/imp/search.php +++ b/imp/search.php @@ -101,6 +101,13 @@ $criteria = array( ), ); +$filters = array( + 'bulk' => array( + 'label' => _("Bulk Messages"), + 'type' => 'filter' + ), +); + /* Define some constants. */ $constants = array( 'date' => array( @@ -209,6 +216,12 @@ if ($vars->criteria_form) { $c_list[] = new IMP_Search_Element_Or(); break; + case 'bulk': + $c_list[] = new IMP_Search_Element_Bulk( + $val->n + ); + break; + case 'flag': /* Flag search. */ $formdata = $imp_flags->parseFormId($val->v); @@ -301,6 +314,7 @@ if ($vars->edit_query && $imp_search->isSearchMbox($vars->edit_query)) { } } +/* Create the criteria list. */ $c_list = $types = array(); foreach ($criteria as $key => $val) { $c_list[] = array( @@ -311,7 +325,18 @@ foreach ($criteria as $key => $val) { } $t->set('clist', $c_list); -/* Create the flag_list. */ +/* Create the filter list. These are all-or-nothing searches. */ +$f_list = array(); +foreach ($filters as $key => $val) { + $f_list[] = array( + 'val' => $key, + 'label' => htmlspecialchars($val['label']) + ); + $types[$key] = 'filter'; +} +$t->set('filterlist', $f_list); + +/* Create the flag list. */ $flag_set = array(); foreach ($flist['set'] as $val) { $flag_set[] = array( diff --git a/imp/templates/imp/search/search.html b/imp/templates/imp/search/search.html index c41bb6646..7b2708c22 100644 --- a/imp/templates/imp/search/search.html +++ b/imp/templates/imp/search/search.html @@ -2,7 +2,13 @@

- Edit Virtual FolderSearch + + + Edit Virtual Folder + + Search + +