X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;ds=sidebyside;f=admin%2Fpreferences.pl;h=03d09349079afe9c795a2abe11c26b0261e7a163;hb=3fb069f8eca1674a10cb2e502ea76ae9d4a90e2d;hp=0dcec19fe64710385fe233bf5d344fad4fba283c;hpb=a1ec82845372cd888021220f056d465e9e65f4f2;p=koha.git diff --git a/admin/preferences.pl b/admin/preferences.pl index 0dcec19fe6..03d0934907 100755 --- a/admin/preferences.pl +++ b/admin/preferences.pl @@ -4,23 +4,22 @@ # # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . -use strict; -use warnings; +use Modern::Perl; -use CGI; +use CGI qw ( -utf8 ); use C4::Auth; use C4::Context; use C4::Koha; @@ -29,12 +28,13 @@ use C4::ClassSource; use C4::Log; use C4::Output; use C4::Templates; -use C4::Budgets qw(GetCurrency); +use Koha::Acquisition::Currencies; use File::Spec; use IO::File; use YAML::Syck qw(); +use List::MoreUtils qw(any); $YAML::Syck::ImplicitTyping = 1; -our $lang; +$YAML::Syck::ImplicitUnicode = 1; # use Smart::Comments; # @@ -44,10 +44,10 @@ sub GetTab { my $tab_template = C4::Templates::gettemplate( 'admin/preferences/' . $tab . '.pref', 'intranet', $input ); - my $active_currency = GetCurrency(); + my $active_currency = Koha::Acquisition::Currencies->get_active; my $local_currency; if ($active_currency) { - $local_currency = $active_currency->{currency}; + $local_currency = $active_currency->currency; } $tab_template->param( local_currency => $local_currency, # currency code is used, because we do not know how a given currency is formatted. @@ -80,7 +80,7 @@ sub _get_chunk { $interface = 'intranet'; $theme = C4::Context->preference('template'); } - $chunk->{'languages'} = getTranslatedLanguages( $interface, $theme, $lang, $current_languages ); + $chunk->{'languages'} = getTranslatedLanguages( $interface, $theme, undef, $current_languages ); $chunk->{'type'} = 'languages'; } elsif ( $options{ 'choices' } ) { if ( $options{'choices'} && ref( $options{ 'choices' } ) eq '' ) { @@ -104,6 +104,22 @@ sub _get_chunk { map { { text => $options{'choices'}->{$_}, value => $_, selected => ( $_ eq $value || ( $_ eq '' && ( $value eq '0' || !$value ) ) ) } } keys %{ $options{'choices'} } ]; + } elsif ( $options{'multiple'} ) { + my @values; + @values = split /,/, $value if defined($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) ? 1 : 0, + } + } + keys %{ $options{multiple} } + ]; } $chunk->{ 'type_' . $chunk->{'type'} } = 1; @@ -120,6 +136,13 @@ sub TransformPrefsToHTML { my $tab = $data->{ $title }; $tab = { '' => $tab } if ( ref( $tab ) eq 'ARRAY' ); + my @override_syspref_names; + if ( exists($ENV{OVERRIDE_SYSPREF_NAMES}) && + defined($ENV{OVERRIDE_SYSPREF_NAMES}) + ) { + @override_syspref_names = split /,/, $ENV{OVERRIDE_SYSPREF_NAMES}; + } + foreach my $group ( sort keys %$tab ) { if ( $group ) { push @lines, { is_group_title => 1, title => $group }; @@ -156,15 +179,24 @@ sub TransformPrefsToHTML { $name_entry->{'highlighted'} = 1; } } + $name_entry->{'overridden'} = 1 if ( any { $name eq $_ } @override_syspref_names ); push @names, $name_entry; } else { push @chunks, $piece; } } else { + if ( $piece ) { + my $version = Koha::version(); + my ( $major, $minor, $maintenance, $development ) = split( '\.', $version ); + if ( $minor % 2 ) { + $piece =~ s|__VERSION__|${major}_${minor}|g; + } else { + $piece =~ s|__VERSION__|master|g; + } + } push @chunks, { type_text => 1, contents => $piece }; } } - push @lines, { CHUNKS => \@chunks, NAMES => \@names, is_group_title => 0 }; } } @@ -196,7 +228,8 @@ sub SearchPrefs { our @terms = split( /\s+/, $searchfield ); foreach my $tab_name ( keys %tab_files ) { - my $data = GetTab( $input, $tab_name ); + # Force list context to remove 'uninitialized value in goto' warn coming from YAML::Syck; note that the other GetTab call is in list context too. The actual cause however is the null value for the pref OpacRenewalBranch in opac.pref + my ($data) = GetTab( $input, $tab_name ); my $title = ( keys( %$data ) )[0]; my $tab = $data->{ $title }; $tab = { '' => $tab } if ( ref( $tab ) eq 'ARRAY' ); @@ -216,12 +249,10 @@ sub SearchPrefs { foreach my $piece ( @$line ) { if ( ref( $piece ) eq 'HASH' ) { - if ( !$piece->{'pref'} ){ next; } - if ( $piece->{'pref'} =~ /^$searchfield$/i ) { - my ( undef, $LINES ) = TransformPrefsToHTML( $data, $searchfield ); - - return { search_jumped => 1, tab => $tab_name, tab_title => $title, LINES => $LINES }; - } elsif ( matches( $piece->{'pref'}, \@terms) ) { + if ( !$piece->{'pref'} ){ + next; + } + if ( matches( $piece->{'pref'}, \@terms) ) { $matched = 1; } elsif ( ref( $piece->{'choices'} ) eq 'HASH' && grep( { $_ && matches( $_, \@terms ) } values( %{ $piece->{'choices'} } ) ) ) { $matched = 1; @@ -241,7 +272,7 @@ sub SearchPrefs { if ( $matched_groups ) { my ( $title, $LINES ) = TransformPrefsToHTML( { $title => $matched_groups }, $searchfield ); - push @tabs, { tab => $tab, tab_title => $title, LINES => $LINES, }; + push @tabs, { tab => $tab, tab_title => $title, LINES => $LINES, tab_id => $tab_name }; } } @@ -250,23 +281,30 @@ sub SearchPrefs { sub matches { my ( $text, $terms ) = @_; - if ( $text ) { return !grep( { $text !~ /$_/i } @$terms ); } + if ( $text ) { + return !grep( + { + my $re = eval{qr|$_|i}; + $re = qr|\Q$_\E| if $@; + $text !~ m|$re|; + } @$terms + ) + } } my $dbh = C4::Context->dbh; our $input = new CGI; my ( $template, $borrowernumber, $cookie ) = get_template_and_user( - { template_name => "admin/preferences.tmpl", + { template_name => "admin/preferences.tt", query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => { parameters => 1 }, + flagsrequired => { parameters => 'parameters_remaining_permissions' }, debug => 1, } ); -$lang = $template->param( 'lang' ); my $op = $input->param( 'op' ) || ''; my $tab = $input->param( 'tab' ); $tab ||= 'acquisitions'; # Ideally this should be "local-use" but preferences.pl @@ -275,17 +313,14 @@ $tab ||= 'acquisitions'; # Ideally this should be "local-use" but preferences.pl my $highlighted; if ( $op eq 'save' ) { - unless ( C4::Context->config( 'demo' ) ) { - foreach my $param ( $input->param() ) { - my ( $pref ) = ( $param =~ /pref_(.*)/ ); + foreach my $param ( $input->param() ) { + my ( $pref ) = ( $param =~ /pref_(.*)/ ); - next if ( !defined( $pref ) ); + next if ( !defined( $pref ) ); - my $value = join( ',', $input->param( $param ) ); + my $value = join( ',', $input->param( $param ) ); - C4::Context->set_preference( $pref, $value ); - logaction( 'SYSTEMPREFERENCE', 'MODIFY', undef, $pref . " | " . $value ); - } + C4::Context->set_preference( $pref, $value ); } print $input->redirect( '/cgi-bin/koha/admin/preferences.pl?tab=' . $tab ); @@ -297,7 +332,10 @@ my @TABS; if ( $op eq 'search' ) { my $searchfield = $input->param( 'searchfield' ); - $searchfield =~ s/[^a-zA-Z0-9_ -]//g; + $searchfield =~ s/\p{IsC}//g; + $searchfield =~ s/\s+/ /; + $searchfield =~ s/^\s+//; + $searchfield =~ s/\s+$//; $template->param( searchfield => $searchfield ); @@ -322,7 +360,7 @@ if ( $op eq 'search' ) { if ( $tab ) { my ( $tab_title, $LINES ) = TransformPrefsToHTML( GetTab( $input, $tab ), $highlighted ); - push @TABS, { tab_title => $tab_title, LINES => $LINES }; + push @TABS, { tab_title => $tab_title, LINES => $LINES, tab_id => $tab }; $template->param( $tab => 1, tab => $tab,