Owen Leonard
ba470954fd
The OPAC still uses the old tablesorter plugin which isn't being actively maintained. We use DataTables in the staff client and should in the OPAC too. The plugin was added a while ago but never implemented on any pages. This patch upgrades the plugin to the latest version and places it in opac-tmpl/lib for cross-theme access. The patch implements DataTables on all pages which previously used the tablesorter plugin. The old tablesorter plugin is removed. The customized DataTable configuration script, datatables.js, has been trimmed-down from the staff client version in order to limit it to only that functionality required in the OPAC. Sorting based on date is done based on the data's enclosing <span> title attribute as it is in the staff client: <span title=" [% iso date %]">[% date | $KohaDates %]</span> Slight modifications to Serials.pm and opac-search-history.pl have been made to accommodate this change. To test, view each page in the OPAC which uses JS-based table sorting: - The bibliographic detail page - The cart - The search history page - The suggestions page - The tags page (logged in as a user who has entered tags) - The "most popular" page (opac-topissues.pl) - The logged in user summary page (opac-user.pl) - The subscription "full history" page (opac-serial-issues.pl?selectview=full) - The self-checkout main page (with existing checkouts) Table sorting should work correctly on all pages in both the prog and ccsr themes. Sorting should work for dates whatever your dateformat system preference setting. Tables listing titles should exclude articles ("a," "an," and "the" in English) when sorting. Also test the serial collection page in the staff client, which is affected by the change to Serials.pm. Confirm that dates are displayed and sorted correctly. Signed-off-by: Srdjan <srdjan@catalyst.net.nz> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Passes koha-qa.pl, works as advertised! Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de> Works really nicely on all pages. Signed-off-by: Galen Charlton <gmc@esilibrary.com>
146 lines
4.7 KiB
Perl
Executable file
146 lines
4.7 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
# Copyright 2009 BibLibre SARL
|
|
#
|
|
# This file is part of Koha.
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it under the
|
|
# terms of the GNU General Public License as published by the Free Software
|
|
# Foundation; either version 2 of the License, or (at your option) any later
|
|
# version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with Koha; if not, write to the Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use C4::Auth qw(:DEFAULT get_session ParseSearchHistoryCookie);
|
|
use CGI;
|
|
use JSON qw/decode_json encode_json/;
|
|
use C4::Context;
|
|
use C4::Output;
|
|
use C4::Log;
|
|
use C4::Items;
|
|
use C4::Debug;
|
|
use C4::Dates;
|
|
use URI::Escape;
|
|
use POSIX qw(strftime);
|
|
|
|
|
|
my $cgi = new CGI;
|
|
|
|
# Getting the template and auth
|
|
my ($template, $loggedinuser, $cookie)
|
|
= get_template_and_user({template_name => "opac-search-history.tmpl",
|
|
query => $cgi,
|
|
type => "opac",
|
|
authnotrequired => 1,
|
|
flagsrequired => {borrowers => 1},
|
|
debug => 1,
|
|
});
|
|
|
|
# If the user is not logged in, we deal with the cookie
|
|
if (!$loggedinuser) {
|
|
|
|
# Deleting search history
|
|
if ($cgi->param('action') && $cgi->param('action') eq 'delete') {
|
|
# Deleting cookie's content
|
|
my $recentSearchesCookie = $cgi->cookie(
|
|
-name => 'KohaOpacRecentSearches',
|
|
-value => encode_json([]),
|
|
-expires => ''
|
|
);
|
|
|
|
# Redirecting to this same url with the cookie in the headers so it's deleted immediately
|
|
my $uri = $cgi->url();
|
|
print $cgi->redirect(-uri => $uri,
|
|
-cookie => $recentSearchesCookie);
|
|
|
|
# Showing search history
|
|
} else {
|
|
|
|
my @recentSearches = ParseSearchHistoryCookie($cgi);
|
|
if (@recentSearches) {
|
|
|
|
# As the dates are stored as unix timestamps, let's do some formatting
|
|
foreach my $asearch (@recentSearches) {
|
|
|
|
# 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;
|
|
}
|
|
|
|
$template->param(recentSearches => \@recentSearches);
|
|
}
|
|
}
|
|
} else {
|
|
# And if the user is logged in, we deal with the database
|
|
|
|
my $dbh = C4::Context->dbh;
|
|
|
|
# Deleting search history
|
|
if ($cgi->param('action') && $cgi->param('action') eq 'delete') {
|
|
my $query = "DELETE FROM search_history WHERE userid = ?";
|
|
my $sth = $dbh->prepare($query);
|
|
$sth->execute($loggedinuser);
|
|
|
|
# Redirecting to this same url so the user won't see the search history link in the header
|
|
my $uri = $cgi->url();
|
|
print $cgi->redirect($uri);
|
|
|
|
|
|
# Showing search history
|
|
} else {
|
|
|
|
my $date = C4::Dates->new();
|
|
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, time FROM search_history WHERE userid = ? AND sessionid = ?";
|
|
my $sth = $dbh->prepare($query);
|
|
$sth->execute($loggedinuser, $cgi->cookie("CGISESSID"));
|
|
my $searches = $sth->fetchall_arrayref({});
|
|
$template->param(recentSearches => $searches);
|
|
|
|
# Getting searches from previous sessions
|
|
$query = "SELECT COUNT(*) FROM search_history WHERE userid = ? AND sessionid != ?";
|
|
$sth = $dbh->prepare($query);
|
|
$sth->execute($loggedinuser, $cgi->cookie("CGISESSID"));
|
|
|
|
# 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, time FROM search_history WHERE userid = ? AND sessionid != ?";
|
|
$sth = $dbh->prepare($query);
|
|
$sth->execute($loggedinuser, $cgi->cookie("CGISESSID"));
|
|
my $previoussearches = $sth->fetchall_arrayref({});
|
|
$template->param(previousSearches => $previoussearches);
|
|
|
|
}
|
|
|
|
$sth->finish;
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$template->param(searchhistoryview => 1);
|
|
|
|
output_html_with_http_headers $cgi, $cookie, $template->output;
|
|
|
|
|