From dfb3a62d42c3a408cabffc2b07f61b89d044fb69 Mon Sep 17 00:00:00 2001 From: Fridolin Somers Date: Fri, 11 Apr 2014 10:54:57 +0200 Subject: [PATCH] Bug 12071: improve generation of Z39.50 search links MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This patch fixes two problems with the generation of links to execute a Z39.50 search from the staff client catalog and cataloguing search results page. First, if using URI::Escape 3.30 or earlier, performing a simple search with a double quote (e.g., "histoire algerie"), the Javascript is broken in results page because of : function GetZ3950Terms(){ var strQuery="&frameworkcode="; strQuery += "&" + "title" + "=" + ""histoire%20algerie""; Second, the encoding of non-ASCII characters in the search term was broken. This patch moves URI escaping from Perl to template with uri TT filter. Test plan : - To reproduce the issue with double quotes, the server must be running URI::Escape 3.30 or earlier; the current version of URI::Escape properly escapes double quote. - In staff interface, perform a search with double quotes that will return no result, ie "aaa xxx" => Without patch, javascript is broken => With patch, javascript is not broken - Click on Z3950 button on results page => Without patch, the Title input is empty => With patch, the Title input contains the search terms Additional test: Do a search with something like äöü and then click Z3950 button on results page. Without patch, encoding is broken in Z3950 form With patch, encoding is correct. Signed-off-by: Marc Véron Signed-off-by: Katrin Fischer Fixed a few tabs. Passes tests and QA script. I can't reproduce the Javascript problem, but I can reproduce the Z39.50 encoding problem and can detect no regression. Signed-off-by: Galen Charlton (cherry picked from commit 064d5478d31b05442e19b7d57f0af94d3422731e) Signed-off-by: Fridolin Somers --- C4/Search.pm | 8 ++++---- koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc | 2 +- .../intranet-tmpl/prog/en/modules/catalogue/results.tt | 2 +- .../intranet-tmpl/prog/en/modules/cataloguing/addbooks.tt | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/C4/Search.pm b/C4/Search.pm index dc91a2d9d1..884556f06e 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -2229,7 +2229,7 @@ $arrayref = z3950_search_args($matchpoints) This function returns an array reference that contains the search parameters to be passed to the Z39.50 search script (z3950_search.pl). The array elements -are hash refs whose keys are name, value and encvalue, and whose values are the +are hash refs whose keys are name and value, and whose values are the name of a search parameter, the value of that search parameter and the URL encoded value of that parameter. @@ -2240,7 +2240,7 @@ data is in a hash reference in $matchpoints, as returned by Biblio::GetBiblioDat If $matchpoints is a scalar, it is assumed to be an unnamed query descriptor, e.g. a general purpose search argument. In this case, the returned array contains only -entry: the key is 'title' and the value and encvalue are derived from $matchpoints. +entry: the key is 'title' and the value is derived from $matchpoints. If a search parameter value is undefined or empty, it is not included in the returned array. @@ -2280,8 +2280,8 @@ sub z3950_search_args { my $array = []; for my $field (qw/ lccn isbn issn title author dewey subject /) { - my $encvalue = URI::Escape::uri_escape_utf8($bibrec->{$field}); - push @$array, { name=>$field, value=>$bibrec->{$field}, encvalue=>$encvalue } if defined $bibrec->{$field}; + push @$array, { name => $field, value => $bibrec->{$field} } + if defined $bibrec->{$field}; } return $array; } diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc index 2d5100be4c..1f4e8736e6 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc @@ -18,7 +18,7 @@ function GetZ3950Terms(){ var strQuery="&frameworkcode="; [% FOREACH z3950_search_param IN z3950_search_params %] - strQuery += "&" + "[% z3950_search_param.name |html %]" + "=" + "[% z3950_search_param.encvalue |html %]"; + strQuery += "&" + "[% z3950_search_param.name |uri %]" + "=" + "[% z3950_search_param.value |uri %]"; [% END %] return strQuery; } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt index 1b20b07aee..dad7cfc55b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt @@ -205,7 +205,7 @@ function PopupZ3950() { function GetZ3950Terms(){ var strQuery="&frameworkcode="; [% FOREACH z3950_search_param IN z3950_search_params %] - strQuery += "&" + "[% z3950_search_param.name %]" + "=" + "[% z3950_search_param.encvalue %]"; + strQuery += "&" + "[% z3950_search_param.name |uri %]" + "=" + "[% z3950_search_param.value |uri %]"; [% END %] return strQuery; } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbooks.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbooks.tt index 56b8fb3ca6..257556b24c 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbooks.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbooks.tt @@ -28,7 +28,7 @@ function GetZ3950Terms(fw){ var strQuery="&frameworkcode=" + fw; [% FOREACH z3950_search_param IN z3950_search_params %] - strQuery += "&" + "[% z3950_search_param.name %]" + "=" + "[% z3950_search_param.encvalue %]"; + strQuery += "&" + "[% z3950_search_param.name |uri %]" + "=" + "[% z3950_search_param.encvalue |uri %]"; [% END %] return strQuery; } -- 2.39.5