use strict;
use warnings;
-use C4::Auth qw(:DEFAULT get_session);
+use C4::Auth qw(:DEFAULT get_session ParseSearchHistoryCookie);
use CGI;
-use Storable qw(freeze thaw);
+use JSON qw/decode_json encode_json/;
use C4::Context;
use C4::Output;
use C4::Log;
my $cgi = new CGI;
# Getting the template and auth
-my ($template, $loggedinuser, $cookie)
-= get_template_and_user({template_name => "opac-search-history.tmpl",
+my ($template, $loggedinuser, $cookie)= get_template_and_user({template_name => "opac-search-history.tmpl",
query => $cgi,
type => "opac",
authnotrequired => 1,
debug => 1,
});
-$template->param(dateformat => C4::Context->preference("dateformat"));
-
# If the user is not logged in, we deal with the cookie
if (!$loggedinuser) {
# Deleting cookie's content
my $recentSearchesCookie = $cgi->cookie(
-name => 'KohaOpacRecentSearches',
- -value => freeze([]),
+ -value => encode_json([]),
-expires => ''
);
# Showing search history
} else {
- # Getting the cookie
- my $searchcookie = $cgi->cookie('KohaOpacRecentSearches');
- if ($searchcookie && thaw(uri_unescape($searchcookie))) {
- my @recentSearches = @{thaw(uri_unescape($searchcookie))};
+ my @recentSearches = ParseSearchHistoryCookie($cgi);
if (@recentSearches) {
# As the dates are stored as unix timestamps, let's do some formatting
# We create an iso date from the unix timestamp
my $isodate = strftime "%Y-%m-%d", localtime($asearch->{'time'});
- # So we can create a C4::Dates object, to get the date formatted according to the dateformat syspref
- my $date = C4::Dates->new($isodate, "iso");
- my $sysprefdate = $date->output("syspref");
-
# We also get the time of the day from the unix timestamp
my $time = strftime " %H:%M:%S", localtime($asearch->{'time'});
# And we got our human-readable date :
- $asearch->{'time'} = $sysprefdate . $time;
+ $asearch->{'time'} = $isodate . $time;
}
$template->param(recentSearches => \@recentSearches);
}
- }
}
} else {
# And if the user is logged in, we deal with the database
my $dateformat = $date->DHTMLcalendar() . " %H:%i:%S"; # Current syspref date format + standard time format
# Getting the data with date format work done by mysql
- my $query = "SELECT userid, sessionid, query_desc, query_cgi, total, DATE_FORMAT(time, \"$dateformat\") as time FROM search_history WHERE userid = ? AND sessionid = ?";
+ my $query = "SELECT userid, sessionid, query_desc, query_cgi, total, time FROM search_history WHERE userid = ? AND sessionid = ?";
my $sth = $dbh->prepare($query);
$sth->execute($loggedinuser, $cgi->cookie("CGISESSID"));
my $searches = $sth->fetchall_arrayref({});
# If at least one search from previous sessions has been performed
if ($sth->fetchrow_array > 0) {
- $query = "SELECT userid, sessionid, query_desc, query_cgi, total, DATE_FORMAT(time, \"$dateformat\") as time FROM search_history WHERE userid = ? AND sessionid != ?";
+ $query = "SELECT userid, sessionid, query_desc, query_cgi, total, time FROM search_history WHERE userid = ? AND sessionid != ?";
$sth = $dbh->prepare($query);
$sth->execute($loggedinuser, $cgi->cookie("CGISESSID"));
my $previoussearches = $sth->fetchall_arrayref({});