X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=admin%2Fpreferences.pl;h=2182591f29cb2293d41b7cf238572d2232b9b1c3;hb=209863e5e4c3a868f6ef052793f410826b2c082d;hp=d523c755b502eee526340ae5dc942d6e854d58a2;hpb=bbdaaec7a5b6e43708dbaa3e5c321af158a3a4d9;p=koha.git diff --git a/admin/preferences.pl b/admin/preferences.pl index d523c755b5..2182591f29 100755 --- a/admin/preferences.pl +++ b/admin/preferences.pl @@ -21,6 +21,7 @@ use strict; use warnings; use CGI; + use C4::Auth; use C4::Context; use C4::Koha; @@ -28,11 +29,13 @@ use C4::Languages qw(getTranslatedLanguages); use C4::ClassSource; use C4::Log; use C4::Output; +use C4::Templates; use C4::Budgets qw(GetCurrency); use File::Spec; use IO::File; use YAML::Syck qw(); $YAML::Syck::ImplicitTyping = 1; +$YAML::Syck::ImplicitUnicode = 1; # force utf-8 for preference encoding our $lang; # use Smart::Comments; @@ -41,7 +44,7 @@ our $lang; sub GetTab { my ( $input, $tab ) = @_; - my $tab_template = C4::Output::gettemplate( 'admin/preferences/' . $tab . '.pref', 'intranet', $input ); + my $tab_template = C4::Templates::gettemplate( 'admin/preferences/' . $tab . '.pref', 'intranet', $input ); my $active_currency = GetCurrency(); my $local_currency; @@ -174,7 +177,7 @@ sub TransformPrefsToHTML { sub _get_pref_files { my ( $input, $open_files ) = @_; - my ( $htdocs, $theme, $lang, undef ) = C4::Output::_get_template_file( 'admin/preferences/admin.pref', 'intranet', $input ); + my ( $htdocs, $theme, $lang, undef ) = C4::Templates::_get_template_file( 'admin/preferences/admin.pref', 'intranet', $input ); my %results; @@ -194,12 +197,6 @@ sub SearchPrefs { my %tab_files = _get_pref_files( $input ); our @terms = split( /\s+/, $searchfield ); - sub matches { - my ( $text ) = @_; - - return !grep( { $text !~ /$_/i } @terms ); - } - foreach my $tab_name ( keys %tab_files ) { my $data = GetTab( $input, $tab_name ); my $title = ( keys( %$data ) )[0]; @@ -209,7 +206,7 @@ sub SearchPrefs { my $matched_groups; while ( my ( $group_title, $contents ) = each %$tab ) { - if ( matches( $group_title ) ) { + if ( matches( $group_title, \@terms ) ) { $matched_groups->{$group_title} = $contents; next; } @@ -221,16 +218,17 @@ 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'} ) ) { + } elsif ( matches( $piece->{'pref'}, \@terms) ) { $matched = 1; - } elsif ( ref( $piece->{'choices'} ) eq 'HASH' && grep( { $_ && matches( $_ ) } values( %{ $piece->{'choices'} } ) ) ) { + } elsif ( ref( $piece->{'choices'} ) eq 'HASH' && grep( { $_ && matches( $_, \@terms ) } values( %{ $piece->{'choices'} } ) ) ) { $matched = 1; } - } elsif ( matches( $piece ) ) { + } elsif ( matches( $piece, \@terms ) ) { $matched = 1; } last if ( $matched ); @@ -252,6 +250,11 @@ sub SearchPrefs { return @tabs; } +sub matches { + my ( $text, $terms ) = @_; + if ( $text ) { return !grep( { $text !~ /$_/i } @$terms ); } +} + my $dbh = C4::Context->dbh; our $input = new CGI; @@ -260,7 +263,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => { parameters => 1 }, + flagsrequired => { parameters => 'parameters_remaining_permissions' }, debug => 1, } ); @@ -294,9 +297,13 @@ if ( $op eq 'save' ) { my @TABS; if ( $op eq 'search' ) { - my $searchfield = $input->param( 'searchfield' ); + my $searchfield = $input->param('searchfield'); + utf8::decode($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 );