X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=opac%2Fopac-search.pl;h=ced8ae48cda79d81ae6d93dac9292fe54991d0d4;hb=488a3d6fed57b4e0d773157ee4a6ab7e4775e7a4;hp=677b7c21b55f763e9dcc6a14039d663139c066e2;hpb=ae06a83cf07e8cafa2dfc704c6231095cc5adf1e;p=koha.git diff --git a/opac/opac-search.pl b/opac/opac-search.pl index 677b7c21b5..ced8ae48cd 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -54,21 +54,24 @@ use C4::Ratings; use POSIX qw(ceil floor strftime); use URI::Escape; -use Storable qw(thaw freeze); +use JSON qw/decode_json encode_json/; use Business::ISBN; my $DisplayMultiPlaceHold = C4::Context->preference("DisplayMultiPlaceHold"); # create a new CGI object # FIXME: no_undef_params needs to be tested -use CGI qw( -no_undef_params -utf8 ); +use CGI qw('-no_undef_params'); my $cgi = new CGI; my $branch_group_limit = $cgi->param("branch_group_limit"); if ( $branch_group_limit ) { - if ( $branch_group_limit =~ /^multibranchlimit/ ) { + if ( $branch_group_limit =~ /^multibranchlimit-/ ) { + # For search groups we are going to convert this branch_group_limit CGI + # parameter into a multibranchlimit CGI parameter for the purposes of + # actually performing the query $cgi->param( -name => 'multibranchlimit', - -values => [ ( split( 'multibranchlimit-', $branch_group_limit ) )[1] ] + -values => substr($branch_group_limit, 17) ); } else { $cgi->append( @@ -190,7 +193,7 @@ if (C4::Context->preference('TagsEnabled')) { my $branches = GetBranches(); # used later in *getRecords, probably should be internalized by those functions after caching in C4::Branch is established $template->param( - searchdomainloop => GetBranchCategories(undef,'searchdomain'), + searchdomainloop => GetBranchCategories('searchdomain'), ); # load the language limits (for search) @@ -403,7 +406,8 @@ my @limits = $cgi->param('limit'); @limits = map { uri_unescape($_) } @limits; if($params->{'multibranchlimit'}) { - push @limits, '('.join( " or ", map { "branch: $_ " } @{ GetBranchesInCategory( $params->{'multibranchlimit'} ) } ).')'; + my $multibranch = '('.join( " or ", map { "branch: $_ " } @{ GetBranchesInCategory( $params->{'multibranchlimit'} ) } ).')'; + push @limits, $multibranch if ($multibranch ne '()'); } my $available; @@ -556,52 +560,50 @@ for (my $i=0;$i<@servers;$i++) { $results_hashref->{$server}->{"RECORDS"}); } - # must define a value for size if not present in DB - # in order to avoid problems generated by the default size value in TT - foreach my $line (@newresults) { - if ( not exists $line->{'size'} ) { $line->{'size'} = "" } + foreach my $res (@newresults) { + + # must define a value for size if not present in DB + # in order to avoid problems generated by the default size value in TT + if ( not exists $res->{'size'} ) { $res->{'size'} = "" } # while we're checking each line, see if item is in the cart - if ( grep {$_ eq $line->{'biblionumber'}} @cart_list) { - $line->{'incart'} = 1; + if ( grep {$_ eq $res->{'biblionumber'}} @cart_list) { + $res->{'incart'} = 1; } - } - - my $tag_quantity; - if (C4::Context->preference('TagsEnabled') and - $tag_quantity = C4::Context->preference('TagsShowOnList')) { - foreach (@newresults) { - my $bibnum = $_->{biblionumber} or next; - $_->{itemsissued} = CountItemsIssued( $bibnum ); - $_ ->{'TagLoop'} = get_tags({biblionumber=>$bibnum, approved=>1, 'sort'=>'-weight', - limit=>$tag_quantity }); + if (C4::Context->preference('COinSinOPACResults')) { + my $record = GetMarcBiblio($res->{'biblionumber'}); + $res->{coins} = GetCOinSBiblio($record); } - } - - if (C4::Context->preference('COinSinOPACResults')) { - foreach (@newresults) { - my $record = GetMarcBiblio($_->{'biblionumber'}); - $_->{coins} = GetCOinSBiblio($record); - if ( C4::Context->preference( "Babeltheque" ) and $_->{normalized_isbn} ) { - my $isbn = Business::ISBN->new( $_->{normalized_isbn} ); - next if not $isbn; + if ( C4::Context->preference( "Babeltheque" ) and $res->{normalized_isbn} ) { + if( my $isbn = Business::ISBN->new( $res->{normalized_isbn} ) ) { $isbn = $isbn->as_isbn13->as_string; $isbn =~ s/-//g; my $social_datas = C4::SocialData::get_data( $isbn ); - next if not $social_datas; - for my $key ( keys %$social_datas ) { - $_->{$key} = $$social_datas{$key}; - if ( $key eq 'score_avg' ){ - $_->{score_int} = sprintf("%.0f", $$social_datas{score_avg} ); + if ( $social_datas ) { + for my $key ( keys %$social_datas ) { + $res->{$key} = $$social_datas{$key}; + if ( $key eq 'score_avg' ){ + $res->{score_int} = sprintf("%.0f", $$social_datas{score_avg} ); + } } } } } - } + if (C4::Context->preference('TagsEnabled') and + C4::Context->preference('TagsShowOnList')) { + if ( my $bibnum = $res->{biblionumber} ) { + $res->{itemsissued} = CountItemsIssued( $bibnum ); + $res->{'TagLoop'} = get_tags({ + biblionumber => $bibnum, + approved => 1, + sort => '-weight', + limit => C4::Context->preference('TagsShowOnList') + }); + } + } - if ( C4::Context->preference('OpacStarRatings') eq 'all' ) { - foreach my $res (@newresults) { + if ( C4::Context->preference('OpacStarRatings') eq 'all' ) { my $rating = GetRating( $res->{'biblionumber'}, $borrowernumber ); $res->{'rating_value'} = $rating->{'rating_value'}; $res->{'rating_total'} = $rating->{'rating_total'}; @@ -623,8 +625,8 @@ for (my $i=0;$i<@servers;$i++) { my $searchcookie = $cgi->cookie('KohaOpacRecentSearches'); if ($searchcookie){ $searchcookie = uri_unescape($searchcookie); - if (thaw($searchcookie)) { - @recentSearches = @{thaw($searchcookie)}; + if (decode_json($searchcookie)) { + @recentSearches = @{decode_json($searchcookie)}; } } @@ -639,8 +641,8 @@ for (my $i=0;$i<@servers;$i++) { # To a cookie (the user is not logged in) if (!$offset) { push @recentSearches, { - "query_desc" => $query_desc_history || "unknown", - "query_cgi" => $query_cgi_history || "unknown", + "query_desc" => Encode::decode_utf8($query_desc_history) || "unknown", + "query_cgi" => Encode::decode_utf8($query_cgi_history) || "unknown", "time" => time(), "total" => $total }; @@ -651,8 +653,8 @@ for (my $i=0;$i<@servers;$i++) { # Pushing the cookie back $newsearchcookie = $cgi->cookie( -name => 'KohaOpacRecentSearches', - # We uri_escape the whole freezed structure so we're sure we won't have any encoding problems - -value => uri_escape_utf8(freeze(\@recentSearches)), + # We uri_escape the whole serialized structure so we're sure we won't have any encoding problems + -value => uri_escape( encode_json(\@recentSearches) ), -expires => '' ); $cookie = [$cookie, $newsearchcookie];