From 957199c00037f3f1b124615a8c0f1a9991fe3dd3 Mon Sep 17 00:00:00 2001 From: Nicolas Demonte Date: Tue, 14 Apr 2020 09:25:25 +0200 Subject: [PATCH] Store additional criterias in advanced search #32781 - text - date(s) - multiple selections - folder --- src/pfwbged/collection/pfwbcollection.js | 88 +++++++++++++++++++++++- 1 file changed, 86 insertions(+), 2 deletions(-) diff --git a/src/pfwbged/collection/pfwbcollection.js b/src/pfwbged/collection/pfwbcollection.js index 05b5b83..e4c73c4 100644 --- a/src/pfwbged/collection/pfwbcollection.js +++ b/src/pfwbged/collection/pfwbcollection.js @@ -264,8 +264,14 @@ function get_history_parameter(name, default_value) { $(window).find('.contentTreeAdd').unbind('click').click(function() { var contenttree_window = $(this).parents(".contenttreeWindow"); contenttree_window.find('.navTreeCurrentItem > a').each(function () { - $(initial_input).val($(this).data('intid')); - $(input).val($.trim($(this).text())); + var folder_intid = $(this).data('intid'); + var folder_label = $.trim($(this).text()); + $(initial_input).val(folder_intid); + $(input).val(folder_label); + var multi = get_history_parameter('multi', {}); + multi[index].value = folder_intid; + multi[index].label = folder_label; + store_history_parameter('multi', multi); }); $(this).contentTreeCancel(); $.querywidget.updateSearch(); @@ -467,6 +473,10 @@ function select_metatype(elem) $('option[data-index]').parents('select').change(function() { index = $(this).find('option[data-index]:selected').data('index'); if ($('.addIndex option[value="' + index + '"]:selected').length == 0) { + var multi = get_history_parameter('multi', {}); + multi[index] = {}; + store_history_parameter('multi', multi); + console.log("option[data-index] change (L493), storing fresh multi index: " + index); $('.addIndex option[value="' + index + '"]').prop('selected', true); $('.addIndex').trigger('change'); var criteria_div = $('#formfield-form-widgets-query div.criteria option[value="' + index + '"]:selected').parents('select').parent().detach(); @@ -601,6 +611,80 @@ function select_metatype(elem) $('fieldset.text-fieldset div.criteria-content').show(); $('fieldset.text-fieldset legend').addClass('expanded'); } + + var multi = get_history_parameter('multi', {}); + var index_name; + for (index_name in multi) { // hack to emulate (.length > 0) for an object + $('fieldset.more-fieldset div.criteria-content').show(); + $('fieldset.more-fieldset legend').addClass('expanded'); + break; + } + + // create criteria line + console.log("restore_ppfwbged_search, adding new criteria lines"); + for (index_name in multi) { + if ($('.addIndex option[value="' + index_name + '"]:selected').length == 0) { + console.log("restore_ppfwbged_search, adding new criteria line for " + index_name); + $('.addIndex option[value="' + index_name + '"]').prop('selected', true); + $('.addIndex').trigger('change'); + var criteria_div = $('#formfield-form-widgets-query div.criteria option[value="' + index_name + '"]:selected').parents('select').parent().detach(); + criteria_div.appendTo('.more-fieldset .criteria-content'); + criteria_div.find('select.queryindex').prop('disabled', true); + $($(this).find('option[data-index]').parents('select').find('option')[0]).prop('selected', true); + } + } + + // set operator, if needed + console.log("restore_ppfwbged_search, setting operators"); + for (index_name in multi) { + var index_params = multi[index_name]; + if (index_params.hasOwnProperty("operator")) { + var operator = $('option[value="' + index_name + '"]:selected').parents('select').parent().find(".queryoperator"); + if (operator.find("option:selected").val() != index_params.operator) { + console.log("restore_ppfwbged_search, setting operator " + index_params.operator); + operator.find("option[value='" + index_params.operator + "']").prop('selected', true); + operator.trigger("change"); + } + } + } + + // set values, if needed + console.log("restore_ppfwbged_search, setting values"); + for (index_name in multi) { + var index_params = multi[index_name]; + if (index_params.hasOwnProperty("value")) { + console.log("restore_ppfwbged_search, setting value for " + index_params.value.toString()); + var stored_value = index_params.value; + var criteria = $('option[value="' + index_name + '"]:selected').parents('select').parent(); + var querywidget = criteria.find(".querywidget"); + var operator_value = criteria.find(".queryoperator").val(); + var widget_type = $.querywidget.config.indexes[index_name].operators[operator_value].widget; + switch (widget_type) { + case 'DateRangeWidget': + $(querywidget.children('input')[0]).val(stored_value[0]); + $(querywidget.children('input')[1]).val(stored_value[1]); + break; + case 'MultipleSelectionWidget': + var selected_titles = []; + $.each(stored_value, function(i, element_value) { + var input = querywidget.find('input[value="' + element_value + '"]'); + input.prop('checked', true); + selected_titles.push(input.parent().children('span').html()); + }); + querywidget.find('.multipleSelectionWidgetTitle') + .attr('title', selected_titles.join(', ')) + .html(selected_titles.join(', ')); + break; + default: + querywidget.val(stored_value); + if (index_name === 'object_folders') { + querywidget.next("input").val(index_params.label); + } + break; + } + $.querywidget.updateSearch(); + } + } } } };