diff --git a/admin/preferences.pl b/admin/preferences.pl
index 2d0bac5711..00cf115dff 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 6932312ebc..9800f47171 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 2f0daabb5a..9db889a2f1 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 ) %]
Click to Edit
diff --git a/svc/config/systempreferences b/svc/config/systempreferences
index deeca51f54..6fceb97f7a 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 );