From 80d803116771269f8118916c77d02b9b142a8c1b Mon Sep 17 00:00:00 2001 From: mistic100 Date: Fri, 15 Nov 2013 15:41:11 +0000 Subject: bug 2883: filter order_by for duplicated values git-svn-id: http://piwigo.org/svn/trunk@25489 68402e56-0260-453c-a942-63ccdbb3a9ee --- admin/configuration.php | 10 +++++- admin/themes/default/template/configuration.tpl | 45 +++++++++++-------------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/admin/configuration.php b/admin/configuration.php index 4aad5f49d..4b5329139 100644 --- a/admin/configuration.php +++ b/admin/configuration.php @@ -152,9 +152,17 @@ if (isset($_POST['submit'])) { if ( !empty($_POST['order_by']) ) { + $used = array(); foreach ($_POST['order_by'] as $i => $val) { - if (empty($val)) unset($_POST['order_by'][$i]); + if (empty($val) or isset($used[$val])) + { + unset($_POST['order_by'][$i]); + } + else + { + $used[$val] = true; + } } if ( !count($_POST['order_by']) ) { diff --git a/admin/themes/default/template/configuration.tpl b/admin/themes/default/template/configuration.tpl index bb5531e60..5af1c18c5 100644 --- a/admin/themes/default/template/configuration.tpl +++ b/admin/themes/default/template/configuration.tpl @@ -68,41 +68,34 @@ {if !isset($ORDER_BY_IS_CUSTOM)} {footer_script require='jquery'} (function(){ -// counters for displaying of addFilter link -var fields = {$main.order_by|@count}, - max_fields = Math.ceil({$main.order_by_options|@count}/2); +var max_fields = Math.ceil({$main.order_by_options|@count}/2); -function updateAddFilterLink() { - if (fields >= max_fields) { - jQuery('.addFilter').css('display', 'none'); - } else { - jQuery('.addFilter').css('display', ''); - } -} +function updateFilters() { + var $selects = jQuery('#order_filters select'); -function updateRemoveFilterTrigger() { - jQuery(".removeFilter").click(function() { - jQuery(this).parent('span.filter').remove(); - fields--; - updateAddFilterLink(); + jQuery('#order_filters .addFilter').toggle($selects.length <= max_fields); + jQuery('#order_filters .removeFilter').css('display', '').filter(':first').css('display', 'none'); + + $selects.find('option').removeAttr('disabled'); + $selects.each(function() { + $selects.not(this).find('option[value="'+ jQuery(this).val() +'"]').attr('disabled', 'disabled'); }); - - jQuery(".removeFilter").css('display', ''); - jQuery(".filter:first .removeFilter").css('display', 'none'); } +jQuery('#order_filters').on('click', '.removeFilter', function() { + jQuery(this).parent('span.filter').remove(); + updateFilters(); +}); -jQuery('.addFilter').click(function() { - jQuery(this).prev('span.filter').clone().insertBefore($(this)); - jQuery(this).prev('span.filter').children('select[name="order_by[]"]').val(''); +jQuery('#order_filters').on('change', 'select', updateFilters); - fields++; - updateRemoveFilterTrigger(); - updateAddFilterLink(); +jQuery('#order_filters .addFilter').click(function() { + jQuery(this).prev('span.filter').clone().insertBefore(jQuery(this)); + jQuery(this).prev('span.filter').children('select').val(''); + updateFilters(); }); -updateRemoveFilterTrigger(); -updateAddFilterLink(); +updateFilters(); }()); {/footer_script} {/if} -- cgit v1.2.3