Bug 10426: Remove unused sub GetCcodes from Koha.pm
[koha.git] / opac / opac-search.pl
index b527745..76f4fda 100755 (executable)
@@ -42,7 +42,7 @@ for ( $searchengine ) {
 }
 
 use C4::Output;
-use C4::Auth qw(:DEFAULT get_session);
+use C4::Auth qw(:DEFAULT get_session ParseSearchHistoryCookie);
 use C4::Languages qw(getAllLanguages);
 use C4::Search;
 use C4::Biblio;  # GetBiblioData
@@ -54,7 +54,7 @@ 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");
@@ -193,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)
@@ -246,10 +246,6 @@ foreach my $advanced_srch_type (@advanced_search_types) {
 }
 $template->param(advancedsearchesloop => \@advancedsearchesloop);
 
-# # load the itypes (Called item types in the template -- just authorized values for searching)
-# my ($itypecount,@itype_loop) = GetCcodes();
-# $template->param(itypeloop=>\@itype_loop,);
-
 # The following should only be loaded if we're bringing up the advanced search template
 if ( $template_type && $template_type eq 'advsearch' ) {
     # load the servers (used for searching -- to do federated searching, etc.)
@@ -560,52 +556,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'};
@@ -621,16 +615,7 @@ for (my $i=0;$i<@servers;$i++) {
         # Opac search history
         my $newsearchcookie;
         if (C4::Context->preference('EnableOpacSearchHistory')) {
-            my @recentSearches;
-
-            # Getting the (maybe) already sent cookie
-            my $searchcookie = $cgi->cookie('KohaOpacRecentSearches');
-            if ($searchcookie){
-                $searchcookie = uri_unescape($searchcookie);
-                if (thaw($searchcookie)) {
-                    @recentSearches = @{thaw($searchcookie)};
-                }
-            }
+            my @recentSearches = ParseSearchHistoryCookie($cgi);
 
             # Adding the new search if needed
             my $path_info = $cgi->url(-path_info=>1);
@@ -643,8 +628,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
                               };
@@ -655,8 +640,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 =>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];