Skip to content

Commit 72cdc8f

Browse files
committed
use selected special folders to trigger the request, and fix some UI discrepancies (saving and loading sources from local storage, etc)
1 parent 7cf5fa9 commit 72cdc8f

File tree

4 files changed

+29
-42
lines changed

4 files changed

+29
-42
lines changed

modules/advanced_search/js_modules/route_handlers.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,27 @@ function applyAdvancedSearchPageHandlers() {
8989
</div>
9090
${specialFolders.map(folder => `
9191
<div class="form-check form-switch">
92-
<input class="form-check-input special_folder_checkbox" type="checkbox" id="${folder}" data-folder-id="${folder}">
92+
<input class="form-check-input special_folder_checkbox" type="checkbox" data-folder-id="${folder}">
9393
<label class="form-check-label" for="${folder}">${folder}</label>
9494
</div>
9595
`).join('')}
9696
</div>
9797
`);
98+
99+
const account = $(this).closest('li').find('.adv_folder_link');
100+
const accountLabel = account.text();
101+
const accountId = account.data('target');
102+
103+
modal.addFooterBtn('Pick', 'btn-primary', function() {
104+
const selectedFolders = [];
105+
$('.special_folder_checkbox:checked').each(function() {
106+
selectedFolders.push($(this).data('folder-id'));
107+
});
108+
selectedFolders.forEach(folder => {
109+
add_source_to_list(accountId + folder, accountLabel +' &gt; '+folder, false);
110+
});
111+
modal.hide();
112+
});
98113

99114
modal.open();
100115

modules/advanced_search/modules.php

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,9 @@ public function process() {
9191
}
9292

9393
$searchInAllFolders = $this->request->post['all_folders'] ?? false;
94-
$searchInSpecialFolders = $this->request->post['all_special_folders'] ?? false;
9594
$includeSubfolders = $this->request->post['include_subfolders'] ?? false;
9695
if ($searchInAllFolders) {
9796
$msg_list = $this->all_folders_search($mailbox, $flags, $params, $limit);
98-
} elseif ($searchInSpecialFolders) {
99-
$msg_list = $this->special_folders_search($mailbox, $flags, $params, $limit);
10097
} else if ($includeSubfolders) {
10198
$msg_list = $this->all_folders_search($mailbox, $flags, $params, $limit, $this->folder);
10299
} else if (! $mailbox->select_folder($this->folder)) {
@@ -124,20 +121,6 @@ private function all_folders_search($mailbox, $flags, $params, $limit, $parent =
124121
return $msg_list;
125122
}
126123

127-
private function special_folders_search($mailbox, $flags, $params, $limit) {
128-
$specials = $this->user_config->get('special_imap_folders', array());
129-
$folders = $specials[$this->imap_id] ?? [];
130-
131-
$msg_list = array();
132-
foreach ($folders as $folder) {
133-
$this->folder = $folder;
134-
$mailbox->select_folder($this->folder);
135-
$msgs = $this->imap_search($flags, $mailbox, $params, $limit);
136-
$msg_list = array_merge($msg_list, $msgs);
137-
}
138-
return $msg_list;
139-
}
140-
141124
private function imap_search($flags, $mailbox, $params, $limit) {
142125
$msg_list = array();
143126
$exclude_deleted = true;
@@ -176,7 +159,13 @@ private function validate_source($val) {
176159
}
177160
$source_parts = explode('_', $val);
178161
$this->imap_id = $source_parts[1];
179-
$this->folder = hex2bin($source_parts[2]);
162+
163+
$folder = $source_parts[2];
164+
if (ctype_xdigit($folder)) {
165+
$this->folder = hex2bin($folder);
166+
} else {
167+
$this->folder = $folder;
168+
}
180169
return true;
181170
}
182171

modules/advanced_search/setup.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
'adv_terms' => array('filter' => FILTER_UNSAFE_RAW, 'flags' => FILTER_REQUIRE_ARRAY),
4444
'adv_targets' => array('filter' => FILTER_UNSAFE_RAW, 'flags' => FILTER_REQUIRE_ARRAY),
4545
'all_folders' => FILTER_VALIDATE_BOOLEAN,
46-
'all_special_folders' => FILTER_VALIDATE_BOOLEAN,
4746
'include_subfolders' => FILTER_VALIDATE_BOOLEAN,
4847
)
4948
);

modules/advanced_search/site.js

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -87,18 +87,13 @@ var expand_adv_folder = function(res) {
8787
}
8888
};
8989

90-
$(document).on("change", "input[name='all_folders'],input[name='all_special_folders']", function() {
90+
$(document).on("change", "input[name='all_folders']", function() {
9191
const folderLi = $(this).closest('li');
92-
const divergentCheckboxName = this.name === 'all_folders' ? 'all_special_folders' : 'all_folders';
93-
const divergentCheckbox = $(this).closest('div').find(`input[name='${divergentCheckboxName}']`)
9492

9593
if ($(this).is(':checked')) {
9694
folderLi.find('a').attr('disabled', 'disabled');
97-
divergentCheckbox.prop('checked', false);
98-
divergentCheckbox.attr('disabled', 'disabled');
9995
} else {
10096
folderLi.find('a').removeAttr('disabled');
101-
divergentCheckbox.removeAttr('disabled');
10297
}
10398
});
10499

@@ -247,13 +242,7 @@ var get_adv_sources = function() {
247242
const searchInAllFolders = $('.adv_folder_list li input[name="all_folders"]:checked');
248243
searchInAllFolders.each(function() {
249244
const li = $(this).closest('li');
250-
sources.push({'source': li.attr('class'), 'label': li.find('a').text(), allFolders: true});
251-
});
252-
253-
const searchInSpecialFolders = $('.adv_folder_list li input[name="all_special_folders"]:checked');
254-
searchInSpecialFolders.each(function() {
255-
const li = $(this).closest('li');
256-
sources.push({'source': li.attr('class'), 'label': li.find('a').text(), specialFolders: true});
245+
sources.push({'source': li.attr('class'), 'label': li.find('a').first().text(), allFolders: true});
257246
});
258247

259248
const selected_sources = $('div', $('.adv_source_list'));
@@ -262,9 +251,8 @@ var get_adv_sources = function() {
262251
}
263252
selected_sources.each(function() {
264253
const source = this.className;
265-
const mailboxSource = source.split('_').slice(0, 2).join('_');
266-
if (!sources.find(s => s.source.indexOf(mailboxSource) > -1)) {
267-
sources.push({'source': source, 'label': $('a', $(this)).text(), subFolders: $(this).data('subfolders')});
254+
if (!sources.find(s => s.source === source)) {
255+
sources.push({'source': source, 'label': $(this).text(), subFolders: $(this).data('subfolders')});
268256
}
269257
});
270258
return sources;
@@ -440,8 +428,6 @@ var send_requests = function(requests) {
440428

441429
if (request['all_folders']) {
442430
params.push({name: 'all_folders', value: true});
443-
} else if (request['all_special_folders']) {
444-
params.push({name: 'all_special_folders', value: true});
445431
} else if (request['sub_folders']) {
446432
params.push({name: 'include_subfolders', value: true});
447433
}
@@ -504,10 +490,8 @@ var build_adv_search_requests = function(terms, sources, targets, times, other)
504490
time = times[ti];
505491
const config = {'source': source.source, 'time': time, 'other': other,
506492
'targets': target_vals, 'terms': term_vals};
507-
if (source.allFolders) {
493+
if (source.allFolders || source.source.split('_').filter(part => part.trim() !== '').length === 2) {
508494
config['all_folders'] = true;
509-
} else if (source.specialFolders) {
510-
config['all_special_folders'] = true;
511495
} else if (source.subFolders) {
512496
config['sub_folders'] = true;
513497
}
@@ -564,7 +548,7 @@ var apply_saved_search = function() {
564548
}
565549
}
566550
for (var i=0, len=details['sources'].length; i < len; i++) {
567-
add_source_to_list(details['sources'][i]['source'], details['sources'][i]['label']);
551+
add_source_to_list(details['sources'][i]['source'], details['sources'][i]['label'], details['sources'][i]['subFolders'] || false);
568552
}
569553
for (var i=0, len=details['targets'].length; i < len; i++) {
570554
if (i == 0) {

0 commit comments

Comments
 (0)