Skip to content

Commit 95e6b12

Browse files
authored
Merge pull request #1738 from IrAlfred/integrate-advanced-search-into-saved-searches
feat(other): integrate advanced search into saved searches module set
2 parents 6880528 + 54d1fda commit 95e6b12

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+1113
-113
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ website
1818
tests/phpunit/clover.xml
1919
tests/phpunit/coveralls-upload.json
2020
tests/phpunit/data/foo.txt
21+
tests/phpunit/.phpunit.cache/
2122
scripts/test.php
2223
/vendor/
2324
/.idea/

lib/session_php.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,9 @@ public function start($request) {
214214
session_id($request->cookie[$this->cname]);
215215
}
216216
list($secure, $path, $domain) = $this->set_session_params($request);
217-
session_set_cookie_params($this->lifetime, $path, $domain, $secure);
217+
if (ini_get('session.use_cookies')) {
218+
session_set_cookie_params($this->lifetime, $path, $domain, $secure);
219+
}
218220
Hm_Functions::session_start();
219221
$this->session_key = session_id();
220222
$this->start_session_data($request);

modules/advanced_search/js_modules/route_handlers.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,42 @@ function applyAdvancedSearchPageHandlers() {
1313
$('.adv_reset').on("click", function() { adv_reset_page(); });
1414
$('.combined_sort').on("change", function() { Hm_Message_List.sort($(this).val()); });
1515

16+
$(document).off('click', '.show_save_advanced_search');
17+
$(document).on('click', '.show_save_advanced_search', function(e) {
18+
e.preventDefault();
19+
$('.save_advanced_search_form').show();
20+
$('.show_save_advanced_search').hide();
21+
$('.advanced_search_name').focus();
22+
return false;
23+
});
24+
25+
$(document).off('click', '.cancel_save_advanced_search');
26+
$(document).on('click', '.cancel_save_advanced_search', function(e) {
27+
e.preventDefault();
28+
$('.save_advanced_search_form').hide();
29+
$('.show_save_advanced_search').show();
30+
$('.advanced_search_name').val('');
31+
return false;
32+
});
33+
34+
$(document).off('click', '.save_advanced_search_btn');
35+
$(document).on('click', '.save_advanced_search_btn', function(e) {
36+
e.preventDefault();
37+
return save_advanced_search();
38+
});
39+
40+
$(document).off('click', '.update_advanced_search_btn');
41+
$(document).on('click', '.update_advanced_search_btn', function(e) {
42+
e.preventDefault();
43+
return update_advanced_search();
44+
});
45+
46+
$(document).off('click', '.delete_advanced_search_btn');
47+
$(document).on('click', '.delete_advanced_search_btn', function(e) {
48+
e.preventDefault();
49+
return delete_advanced_search();
50+
});
51+
1652
apply_saved_search();
1753
var data = Hm_Utils.get_from_local_storage('formatted_advanced_search_data');
1854
if (data && data.length) {

modules/advanced_search/setup.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
'advanced_search',
3131
'ajax_adv_search'
3232
),
33+
'allowed_get' => array(
34+
'search_name' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
35+
),
3336
'allowed_post' => array(
3437
'adv_source' => FILTER_UNSAFE_RAW,
3538
'adv_start' => FILTER_UNSAFE_RAW,

modules/advanced_search/site.js

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,3 +609,186 @@ var adv_reset_page = function() {
609609
Hm_Utils.save_to_local_storage('adv_search_params', '');
610610
document.location.href = '?page=advanced_search';
611611
};
612+
613+
var save_advanced_search = function() {
614+
var search_name = $('.advanced_search_name').val().trim();
615+
if (!search_name) {
616+
alert('Please enter a search name');
617+
return false;
618+
}
619+
620+
var search_data = collect_advanced_search_data();
621+
if (!search_data) {
622+
alert('Please configure search parameters first');
623+
return false;
624+
}
625+
626+
$('.save_advanced_search_btn').prop('disabled', true);
627+
628+
Hm_Ajax.request(
629+
[
630+
{'name': 'hm_ajax_hook', 'value': 'ajax_save_advanced_search'},
631+
{'name': 'search_name', 'value': search_name},
632+
{'name': 'adv_search_data', 'value': JSON.stringify(search_data)}
633+
],
634+
function(res) {
635+
$('.save_advanced_search_btn').prop('disabled', false);
636+
if (res.advanced_search_result) {
637+
$('.current_advanced_search_name').val(search_name);
638+
$('.save_advanced_search_form').hide();
639+
$('.show_save_advanced_search').hide();
640+
update_advanced_search_controls(search_name);
641+
Hm_Folders.reload_folders(true, '.search_folders');
642+
}
643+
},
644+
[],
645+
false,
646+
function() {
647+
$('.save_advanced_search_btn').prop('disabled', false);
648+
}
649+
);
650+
return false;
651+
};
652+
653+
var update_advanced_search = function() {
654+
var search_name = $('.current_advanced_search_name').val();
655+
if (!search_name) {
656+
return false;
657+
}
658+
659+
var search_data = collect_advanced_search_data();
660+
if (!search_data) {
661+
alert('Please configure search parameters first');
662+
return false;
663+
}
664+
665+
Hm_Ajax.request(
666+
[
667+
{'name': 'hm_ajax_hook', 'value': 'ajax_update_advanced_search'},
668+
{'name': 'search_name', 'value': search_name},
669+
{'name': 'adv_search_data', 'value': JSON.stringify(search_data)}
670+
],
671+
function(res) {
672+
window.updating_advanced_search = false;
673+
$('.update_advanced_search_btn').prop('disabled', false);
674+
if (res.advanced_search_result) {
675+
Hm_Folders.reload_folders(true, '.search_folders');
676+
}
677+
},
678+
[],
679+
false,
680+
function() {
681+
$('.update_advanced_search_btn').prop('disabled', false);
682+
}
683+
);
684+
return false;
685+
};
686+
687+
var delete_advanced_search = function() {
688+
var search_name = $('.current_advanced_search_name').val();
689+
if (!search_name) {
690+
return false;
691+
}
692+
693+
if (!confirm('Are you sure you want to delete this saved search?')) {
694+
return false;
695+
}
696+
697+
$('.delete_advanced_search_btn').prop('disabled', true);
698+
699+
Hm_Ajax.request(
700+
[
701+
{'name': 'hm_ajax_hook', 'value': 'ajax_delete_advanced_search'},
702+
{'name': 'search_name', 'value': search_name}
703+
],
704+
function(res) {
705+
$('.delete_advanced_search_btn').prop('disabled', false);
706+
if (res.advanced_search_result) {
707+
$('.current_advanced_search_name').val('');
708+
update_advanced_search_controls('');
709+
Hm_Folders.reload_folders(true, '.search_folders');
710+
window.location.href = '?page=advanced_search';
711+
}
712+
},
713+
[],
714+
false,
715+
function() {
716+
$('.delete_advanced_search_btn').prop('disabled', false);
717+
}
718+
);
719+
return false;
720+
};
721+
722+
var load_advanced_search_from_data = function(search_data, execute_search) {
723+
if (!search_data) {
724+
return;
725+
}
726+
727+
Hm_Utils.save_to_local_storage('adv_search_params', JSON.stringify(search_data));
728+
729+
var tryPopulateForm = function(attempts) {
730+
attempts = attempts || 0;
731+
732+
if (!$('#adv_term').length || !$('.adv_source_list').length) {
733+
if (attempts < 10) {
734+
setTimeout(function() {
735+
tryPopulateForm(attempts + 1);
736+
}, 200);
737+
return;
738+
} else {
739+
Hm_Notices.show('Form elements not ready', 'danger');
740+
return;
741+
}
742+
}
743+
744+
Hm_Utils.save_to_local_storage('adv_search_params', JSON.stringify(search_data));
745+
746+
apply_saved_search();
747+
748+
if (execute_search) {
749+
search_summary(search_data);
750+
send_requests(build_adv_search_requests(
751+
search_data.terms,
752+
search_data.sources,
753+
search_data.targets,
754+
search_data.times,
755+
search_data.other
756+
));
757+
}
758+
};
759+
760+
tryPopulateForm();
761+
};
762+
763+
var collect_advanced_search_data = function() {
764+
var terms = get_adv_terms();
765+
var targets = get_adv_targets();
766+
var sources = get_adv_sources();
767+
var times = get_adv_times();
768+
var other = get_adv_other();
769+
770+
if (terms.length === 0 || targets.length === 0 || sources.length === 0) {
771+
return false;
772+
}
773+
774+
return {
775+
'terms': terms,
776+
'targets': targets,
777+
'sources': sources,
778+
'times': times,
779+
'other': other
780+
};
781+
};
782+
783+
var update_advanced_search_controls = function(search_name) {
784+
if (search_name) {
785+
$('.current_search_name strong').text(search_name);
786+
$('.current_advanced_search_name').val(search_name);
787+
$('.advanced_search_update_controls, .advanced_search_delete_controls').show();
788+
$('.advanced_search_save_controls').hide();
789+
} else {
790+
$('.current_advanced_search_name').val('');
791+
$('.advanced_search_update_controls, .advanced_search_delete_controls').hide();
792+
$('.advanced_search_save_controls').show();
793+
}
794+
};

0 commit comments

Comments
 (0)