From 3617061d5afeaf6ee506929466dead4d086599d1 Mon Sep 17 00:00:00 2001 From: Owen Leonard Date: Mon, 21 Mar 2016 13:36:17 -0400 Subject: [PATCH] Bug 16111 [Revised] RSS feed for OPAC search results has wrong content type This patch fixing handling of OPAC search results feeds by correcting parameters passed to the script and making format checks consistent in the script. This patch also removes altogether references to a separate "atom" formatted feed, because the template for that feed displays no content (and never has). To test, apply the patch and perform a search in the OPAC. - Click the RSS link and confirm that the browser displays a feed with no errors. In Chrome the feed should display a "document tree" view. - Using the browser's developer console, verify that the content-type of the document is defined as "text/xml." - Validate the resulting feed at https://validator.w3.org/feed/ and confirm that it is valid. Revision adds suggestion from QA to accept the old 'rss2' parameter and treat it like an 'rss' parameter. Also changed: Corrected another place where 'rss2' was used in the template. Signed-off-by: Magnus Enger Before the patch: - RSS is served with content-type text/html - The link from the RSS icon ona search page looks like opac-search.pl?idx=kw&q=perl&count=50&sort_by=acqdate_dsc&format=rss2 After applying the patch: - RSS is served as text/xml - The RSS link leads to opac-search.pl?idx=kw&q=perl&count=50&sort_by=acqdate_dsc&format=rss But the old link with format=rss2 still works --- .../bootstrap/en/modules/opac-opensearch.tt | 49 ++-------------------- .../opac-tmpl/bootstrap/en/modules/opac-results.tt | 6 +-- opac/opac-search.pl | 15 ++++--- 3 files changed, 13 insertions(+), 57 deletions(-) diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-opensearch.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-opensearch.tt index 09f1a72..4253755 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-opensearch.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-opensearch.tt @@ -7,20 +7,19 @@ koha opac [% LibraryName |html %] [% KohaAdminEmailAddress |html %] + template="[% OPACBaseURL %]/cgi-bin/koha/opac-search.pl?q={searchTerms}&pw={startPage?}&format=rss"/> [% ELSE %] -[% IF ( rss2 ) %] <![CDATA[[% LibraryName |html %] Search [% IF ( query_desc ) %]for '[% query_desc |html %]'[% END %][% IF ( limit_desc ) %] with limit(s): '[% limit_desc |html %]'[% END %]]]> - [% OPACBaseURL %]/cgi-bin/koha/opac-search.pl?[% query_cgi |html %][% limit_cgi |html %]&format=rss2 - + [% OPACBaseURL %]/cgi-bin/koha/opac-search.pl?[% query_cgi |html %][% limit_cgi |html %]&format=rss + [% total %] [% offset %] @@ -62,47 +61,5 @@ [% END %] -[% END %] - -[% IF ( atom ) %] - - [% OPACBaseURL %]/cgi-bin/koha/opac-search.pl?[% query_cgi |html %][% limit_cgi |html %]&format=atom - [% LibraryName |html %] Search [% IF ( query_desc ) %]for '[% query_desc |html %]'[% END %][% IF ( limit_desc ) %] with limit(s): '[% limit_desc |html %]'[% END %] - - [% timestamp %] - - [% LibraryName |html %] - - - [% total %] - [% page %] - [% IF ( results_per_page ) %] - [% results_per_page %] - [% ELSE %] - 20 - [% END %] - - - - - - - - - - [% FOREACH SEARCH_RESULT IN SEARCH_RESULTS %] - - [% SEARCH_RESULT.title |html %] - - - [% SEARCH_RESULT.timestamp %] - - - [% OPACBaseURL %]/cgi-bin/koha/opac-detail.pl?biblionumber=[% SEARCH_RESULT.biblionumber %] - - [% END %] - -[% END %] [% END %] diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt index 061ceed..e847c26 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt @@ -16,7 +16,7 @@ [% END %] [% END %] - + [% INCLUDE 'bodytag.inc' bodyid='results' bodyclass='scrollto' %] @@ -41,7 +41,7 @@ No results found!

[% IF ( searchdesc ) %] - No results found for that in [% LibraryName %] catalog. Subscribe to this search + No results found for that in [% LibraryName %] catalog. Subscribe to this search [% ELSE %] You did not specify any search criteria. [% END %] @@ -85,7 +85,7 @@ [% END %] ). [% END %] - Subscribe to this search + Subscribe to this search [% END # / IF total %]

[% END # / IF searchdesc %] diff --git a/opac/opac-search.pl b/opac/opac-search.pl index 72d054f..d1a9993 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -89,8 +89,11 @@ my @params = $cgi->param("limit"); my @searchCategories = $cgi->param('searchcat'); my $format = $cgi->param("format") || ''; +# Accept "rss" or the older "rss2" parameter +$format = 'rss' if $format =~ /rss/; + my $build_grouped_results = C4::Context->preference('OPACGroupResults'); -if ($format =~ /(rss|atom|opensearchdescription)/) { +if ($format =~ /(rss|opensearchdescription)/) { $template_name = 'opac-opensearch.tt'; } elsif (@params && $build_grouped_results) { @@ -126,11 +129,8 @@ if($cgi->cookie("bib_list")){ @cart_list = split(/\//, $cart_list); } -if ($format eq 'rss2' or $format eq 'opensearchdescription' or $format eq 'atom') { +if ($format eq 'rss' or $format eq 'opensearchdescription' ) { $template->param($format => 1); - $template->param(timestamp => strftime("%Y-%m-%dT%H:%M:%S-00:00", gmtime)) if ($format eq 'atom'); - # FIXME - the timestamp is a hack - the biblio update timestamp should be used for each - # entry, but not sure if that's worth an extra database query for each bib } if (C4::Context->preference("marcflavour") eq "UNIMARC" ) { $template->param('UNIMARC' => 1); @@ -736,8 +736,7 @@ for (my $i=0;$i<@servers;$i++) { } ## If there's just one result, redirect to the detail page - if ($total == 1 && $format ne 'rss2' - && $format ne 'opensearchdescription' && $format ne 'atom') { + if ($total == 1 && $format ne 'rss' && $format ne 'opensearchdescription' ) { my $biblionumber=$newresults[0]->{biblionumber}; if (C4::Context->preference('BiblioDefaultView') eq 'isbd') { print $cgi->redirect("/cgi-bin/koha/opac-ISBDdetail.pl?biblionumber=$biblionumber"); @@ -970,7 +969,7 @@ $template->param( add_to_some_public_shelves => $some_public_shelves, ); -my $content_type = ($format eq 'rss' or $format eq 'atom') ? $format : 'html'; +my $content_type = ( $format eq 'rss' ) ? $format : 'html'; # If GoogleIndicTransliteration system preference is On Set parameter to load Google's javascript in OPAC search screens if (C4::Context->preference('GoogleIndicTransliteration')) { -- 1.9.1