From 8820d83fe4d87bc433923832598b07248457d3f0 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 19 Feb 2013 14:48:04 +0100 Subject: [PATCH] Bug 9043: Syspref improvement: add new type "multiple" This patch adds a new type "multiple" for syspref. This new type allows to select several values for one syspref. Signed-off-by: Koha Team Lyon 3 Signed-off-by: Jacek Ablewicz --- admin/preferences.pl | 18 ++++++++++++++++-- .../intranet-tmpl/prog/en/js/pages/preferences.js | 13 ++++++++++++- .../intranet-tmpl/prog/en/modules/admin/preferences.tt | 12 ++++++++++++ svc/config/systempreferences | 2 +- 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/admin/preferences.pl b/admin/preferences.pl index 2d0bac5..00cf115 100755 --- a/admin/preferences.pl +++ b/admin/preferences.pl @@ -17,8 +17,7 @@ # with Koha; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -use strict; -use warnings; +use Modern::Perl; use CGI; use Encode; @@ -106,6 +105,21 @@ sub _get_chunk { map { { text => $options{'choices'}->{$_}, value => $_, selected => ( $_ eq $value || ( $_ eq '' && ( $value eq '0' || !$value ) ) ) } } keys %{ $options{'choices'} } ]; + } elsif ( $options{'multiple'} ) { + my @values = split /\|/, $value; + $chunk->{type} = 'multiple'; + $chunk->{CHOICES} = [ + sort { $a->{'text'} cmp $b->{'text'} } + map { + my $option_value = $_; + { + text => $options{multiple}->{$option_value}, + value => $option_value, + selected => grep /^$option_value$/, @values, + } + } + keys %{ $options{multiple} } + ]; } $chunk->{ 'type_' . $chunk->{'type'} } = 1; diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/pages/preferences.js b/koha-tmpl/intranet-tmpl/prog/en/js/pages/preferences.js index 6932312..9800f47 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/pages/preferences.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/pages/preferences.js @@ -3,7 +3,18 @@ KOHA.Preferences = { Save: function ( form ) { modified_prefs = $( form ).find( '.modified' ); + // $.serialize removes empty value, we need to keep them. + // If a multiple select has all its entries unselected + var unserialized = new Array(); + $(modified_prefs).each(function(){ + if ( $(this).attr('multiple') && $(this).val() == null ) { + unserialized.push($(this)); + } + }); data = modified_prefs.serialize(); + $(unserialized).each(function(){ + data += '&' + $(this).attr('name') + '='; + }); if ( !data ) { humanMsg.displayAlert( MSG_NOTHING_TO_SAVE ); return; @@ -46,7 +57,7 @@ $( document ).ready( function () { $( this.form ).find( '.save-all' ).removeAttr( 'disabled' ); $( this ).addClass( 'modified' ); var name_cell = $( this ).parents( '.name-row' ).find( '.name-cell' ); - if ( !name_cell.find( '.modified-warning' ).length ) + if ( !name_cell.find( '.modified-warning' ).length ) name_cell.append( '('+MSG_MODIFIED+')' ); KOHA.Preferences.Modified = true; } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences.tt index 6b77990..7bc9014 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences.tt @@ -116,6 +116,18 @@ [% END %] + [% ELSIF ( CHUNK.type_multiple ) %] + [% ELSIF ( CHUNK.type_textarea ) %] diff --git a/svc/config/systempreferences b/svc/config/systempreferences index deeca51..6fceb97 100755 --- a/svc/config/systempreferences +++ b/svc/config/systempreferences @@ -95,7 +95,7 @@ sub set_preferences { next if ( !defined( $pref ) ); - my $value = join( ',', $query->param( $param ) ); + my $value = join( '|', $query->param( $param ) ); C4::Context->set_preference( $pref, $value ); logaction( 'SYSTEMPREFERENCE', 'MODIFY', undef, $pref . " | " . $value ); -- 2.0.0.rc2