From: Galen Charlton Date: Thu, 25 Jul 2013 16:50:30 +0000 (+0000) Subject: use JSON rather than Storable for the OPAC search history cookie X-Git-Tag: v3.14.00-alpha1~452 X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=commitdiff_plain;h=488a3d6fed57b4e0d773157ee4a6ab7e4775e7a4;p=koha_fer use JSON rather than Storable for the OPAC search history cookie To test: Exercise the OPAC search history functionality, after turning on the EnableOpacSearchHistory syspref: - Clear the KohaOpacRecentSearches cookie - As an anonymous user, conduct a variety of searches, including ones that include non-ASCII characters - Check the search history and verified that all searches are listed - Log into the OPAC - Verify that current and past searches are listed in search history. Signed-off-by: Galen Charlton Signed-off-by: Tomas Cohen Arazi Signed-off-by: Bernardo Gonzalez Kriegel Signed-off-by: Galen Charlton --- diff --git a/C4/Auth.pm b/C4/Auth.pm index d6e088aca6..9d80ab6d8c 100644 --- a/C4/Auth.pm +++ b/C4/Auth.pm @@ -20,7 +20,7 @@ package C4::Auth; use strict; use warnings; use Digest::MD5 qw(md5_base64); -use Storable qw(thaw freeze); +use JSON qw/encode_json decode_json/; use URI::Escape; use CGI::Session; @@ -254,7 +254,7 @@ sub get_template_and_user { my $searchcookie = $in->{'query'}->cookie('KohaOpacRecentSearches'); if ($searchcookie){ $searchcookie = uri_unescape($searchcookie); - my @recentSearches = @{thaw($searchcookie) || []}; + my @recentSearches = @{decode_json($searchcookie) || []}; if (@recentSearches) { my $sth = $dbh->prepare($SEARCH_HISTORY_INSERT_SQL); $sth->execute( $borrowernumber, @@ -268,7 +268,7 @@ sub get_template_and_user { # And then, delete the cookie's content my $newsearchcookie = $in->{'query'}->cookie( -name => 'KohaOpacRecentSearches', - -value => freeze([]), + -value => encode_json([]), -HttpOnly => 1, -expires => '' ); @@ -293,7 +293,7 @@ sub get_template_and_user { my $searchcookie = $in->{'query'}->cookie('KohaOpacRecentSearches'); if ($searchcookie){ $searchcookie = uri_unescape($searchcookie); - my @recentSearches = @{thaw($searchcookie) || []}; + my @recentSearches = @{decode_json($searchcookie) || []}; # We show the link in opac if (@recentSearches) { $template->param(ShowOpacRecentSearchLink => 1); diff --git a/opac/opac-search-history.pl b/opac/opac-search-history.pl index 1b76c55894..5536139b60 100755 --- a/opac/opac-search-history.pl +++ b/opac/opac-search-history.pl @@ -22,7 +22,7 @@ use warnings; use C4::Auth qw(:DEFAULT get_session); use CGI; -use Storable qw(freeze thaw); +use JSON qw/decode_json encode_json/; use C4::Context; use C4::Output; use C4::Log; @@ -53,7 +53,7 @@ if (!$loggedinuser) { # Deleting cookie's content my $recentSearchesCookie = $cgi->cookie( -name => 'KohaOpacRecentSearches', - -value => freeze([]), + -value => encode_json([]), -expires => '' ); @@ -67,8 +67,8 @@ if (!$loggedinuser) { # Getting the cookie my $searchcookie = $cgi->cookie('KohaOpacRecentSearches'); - if ($searchcookie && thaw(uri_unescape($searchcookie))) { - my @recentSearches = @{thaw(uri_unescape($searchcookie))}; + if ($searchcookie && decode_json(uri_unescape($searchcookie))) { + my @recentSearches = @{decode_json(uri_unescape($searchcookie))}; if (@recentSearches) { # As the dates are stored as unix timestamps, let's do some formatting diff --git a/opac/opac-search.pl b/opac/opac-search.pl index 6349e3cc8c..ced8ae48cd 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -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"); @@ -625,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)}; } } @@ -641,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 }; @@ -653,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( 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];