From 0da77c48a4016648ecfbaaffb44205b4809549f8 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 ce887f6..28a8d06 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 c30f330..49b6473 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt @@ -17,7 +17,7 @@ [% END %] [% END %] - + [% INCLUDE 'bodytag.inc' bodyid='results' bodyclass='scrollto' %] @@ -42,7 +42,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 %] @@ -86,7 +86,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 1d7615b..3b5c7b2 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -101,8 +101,11 @@ my @params = $cgi->multi_param("limit"); my @searchCategories = $cgi->multi_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) { @@ -138,11 +141,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); @@ -735,8 +735,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"); @@ -971,7 +970,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')) { -- 2.1.4