From 22fc329d1a811b05d8657e7100ff955ee3afe357 Mon Sep 17 00:00:00 2001 From: Adrien Saurat Date: Tue, 3 Jan 2012 15:28:50 +0100 Subject: [PATCH] Bug 6374: default value for Size in result pages When no size info is available, an empty string is sent to the TT (if nothing is sent, the TT engine will display another information, irrelevant for Koha). --- catalogue/search.pl | 40 ++++--- cataloguing/addbooks.pl | 3 + opac/opac-search.pl | 262 ++++++++++++++++++++++++----------------------- 3 files changed, 158 insertions(+), 147 deletions(-) diff --git a/catalogue/search.pl b/catalogue/search.pl index 3013320..86ad2b7 100755 --- a/catalogue/search.pl +++ b/catalogue/search.pl @@ -440,18 +440,18 @@ if ($params->{'limit-yr'}) { # $ %z3950p will be a hash ref if the indexes are present (advacned search), otherwise undef my $z3950par; my $indexes2z3950 = { - kw=>'title', au=>'author', 'au,phr'=>'author', nb=>'isbn', ns=>'issn', - 'lcn,phr'=>'dewey', su=>'subject', 'su,phr'=>'subject', - ti=>'title', 'ti,phr'=>'title', se=>'title' + kw=>'title', au=>'author', 'au,phr'=>'author', nb=>'isbn', ns=>'issn', + 'lcn,phr'=>'dewey', su=>'subject', 'su,phr'=>'subject', + ti=>'title', 'ti,phr'=>'title', se=>'title' }; for (my $ii = 0; $ii < @operands; ++$ii) { - my $name = $indexes2z3950->{$indexes[$ii]}; - if (defined $name && defined $operands[$ii]) - { - $z3950par ||= {}; - $z3950par->{$name} = $operands[$ii] if !exists $z3950par->{$name}; - } + my $name = $indexes2z3950->{$indexes[$ii]}; + if (defined $name && defined $operands[$ii]) + { + $z3950par ||= {}; + $z3950par->{$name} = $operands[$ii] if !exists $z3950par->{$name}; + } } @@ -484,9 +484,9 @@ for my $this_cgi ( split('&',$query_cgi) ) { my $input_name = $1; my $input_value = $2; push @query_inputs, { input_name => $input_name, input_value => $input_value }; - if ($input_name eq 'idx') { - $scan_index_to_use = $input_value; # unless $scan_index_to_use; - } + if ($input_name eq 'idx') { + $scan_index_to_use = $input_value; # unless $scan_index_to_use; + } } $template->param ( QUERY_INPUTS => \@query_inputs, scan_index_to_use => $scan_index_to_use ); @@ -552,8 +552,8 @@ for (my $i=0;$i<@servers;$i++) { ## If there's just one result, redirect to the detail page if ($total == 1) { my $biblionumber = $newresults[0]->{biblionumber}; - my $defaultview = C4::Context->preference('IntranetBiblioDefaultView'); - my $views = { C4::Search::enabled_staff_search_views }; + my $defaultview = C4::Context->preference('IntranetBiblioDefaultView'); + my $views = { C4::Search::enabled_staff_search_views }; if ($defaultview eq 'isbd' && $views->{can_view_ISBD}) { print $cgi->redirect("/cgi-bin/koha/catalogue/ISBDdetail.pl?biblionumber=$biblionumber"); } elsif ($defaultview eq 'marc' && $views->{can_view_MARC}) { @@ -578,14 +578,18 @@ for (my $i=0;$i<@servers;$i++) { $template->param(limit_desc => $limit_desc); $template->param(offset => $offset); $template->param(DisplayMultiPlaceHold => $DisplayMultiPlaceHold); - $template->param (z3950_search_params => C4::Search::z3950_search_args($query_desc)); + $template->param (z3950_search_params => C4::Search::z3950_search_args($query_desc)); if ($query_desc || $limit_desc) { $template->param(searchdesc => 1); } $template->param(stopwords_removed => "@$stopwords_removed") if $stopwords_removed; $template->param(results_per_page => $results_per_page); + # must define a value for size if not present in DB + # in order to avoid problems generated by the default size value in TT + foreach my $line (@newresults) { + if ( not exists $line->{'size'} ) { $line->{'size'} = "" } + } $template->param(SEARCH_RESULTS => \@newresults); - ## FIXME: add a global function for this, it's better than the current global one ## Build the page numbers on the bottom of the page my @page_numbers; @@ -649,7 +653,7 @@ for (my $i=0;$i<@servers;$i++) { # no hits else { $template->param(searchdesc => 1,query_desc => $query_desc,limit_desc => $limit_desc); - $template->param (z3950_search_params => C4::Search::z3950_search_args($z3950par || $query_desc)); + $template->param (z3950_search_params => C4::Search::z3950_search_args($z3950par || $query_desc)); } } # end of the if local @@ -679,7 +683,7 @@ $template->param( total => $total, opacfacets => 1, facets_loop => $facets, - displayFacetCount=> C4::Context->preference('displayFacetCount')||0, + displayFacetCount=> C4::Context->preference('displayFacetCount')||0, scan => $scan, search_error => $error, ); diff --git a/cataloguing/addbooks.pl b/cataloguing/addbooks.pl index 5e89ef8..270b16d 100755 --- a/cataloguing/addbooks.pl +++ b/cataloguing/addbooks.pl @@ -87,6 +87,9 @@ if ($query) { # SimpleSearch() give the results per page we want, so 0 offet here my $total = @{$marcresults}; my @newresults = searchResults( 'intranet', $query, $total, $results_per_page, 0, 0, @{$marcresults} ); + foreach my $line (@newresults) { + if ( not exists $line->{'size'} ) { $line->{'size'} = "" } + } $template->param( total => $total_hits, query => $query, diff --git a/opac/opac-search.pl b/opac/opac-search.pl index aba23a8..4a2a493 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -48,10 +48,10 @@ use CGI qw('-no_undef_params'); my $cgi = new CGI; BEGIN { - if (C4::Context->preference('BakerTaylorEnabled')) { - require C4::External::BakerTaylor; - import C4::External::BakerTaylor qw(&image_url &link_url); - } + if (C4::Context->preference('BakerTaylorEnabled')) { + require C4::External::BakerTaylor; + import C4::External::BakerTaylor qw(&image_url &link_url); + } } my ($template,$borrowernumber,$cookie); @@ -64,13 +64,13 @@ my @params = $cgi->param("limit"); my $format = $cgi->param("format") || ''; my $build_grouped_results = C4::Context->preference('OPACGroupResults'); if ($format =~ /(rss|atom|opensearchdescription)/) { - $template_name = 'opac-opensearch.tmpl'; + $template_name = 'opac-opensearch.tmpl'; } elsif (@params && $build_grouped_results) { $template_name = 'opac-results-grouped.tmpl'; } elsif ((@params>=1) || ($cgi->param("q")) || ($cgi->param('multibranchlimit')) || ($cgi->param('limit-yr')) ) { - $template_name = 'opac-results.tmpl'; + $template_name = 'opac-results.tmpl'; } else { $template_name = 'opac-advsearch.tmpl'; @@ -89,7 +89,7 @@ if ($template_name eq 'opac-results.tmpl') { } if ($format eq 'rss2' or $format eq 'opensearchdescription' or $format eq 'atom') { - $template->param($format => 1); + $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 @@ -104,18 +104,18 @@ $template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHo $template->param( 'OPACNoResultsFound' => C4::Context->preference('OPACNoResultsFound') ); if (C4::Context->preference('BakerTaylorEnabled')) { - $template->param( - BakerTaylorEnabled => 1, - BakerTaylorImageURL => &image_url(), - BakerTaylorLinkURL => &link_url(), - BakerTaylorBookstoreURL => C4::Context->preference('BakerTaylorBookstoreURL'), - ); + $template->param( + BakerTaylorEnabled => 1, + BakerTaylorImageURL => &image_url(), + BakerTaylorLinkURL => &link_url(), + BakerTaylorBookstoreURL => C4::Context->preference('BakerTaylorBookstoreURL'), + ); } if (C4::Context->preference('TagsEnabled')) { - $template->param(TagsEnabled => 1); - foreach (qw(TagsShowOnList TagsInputOnList)) { - C4::Context->preference($_) and $template->param($_ => 1); - } + $template->param(TagsEnabled => 1); + foreach (qw(TagsShowOnList TagsInputOnList)) { + C4::Context->preference($_) and $template->param($_ => 1); + } } ## URI Re-Writing @@ -163,32 +163,32 @@ my $cnt; my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes"); if (!$advanced_search_types or $advanced_search_types eq 'itemtypes') { - foreach my $thisitemtype ( sort {$itemtypes->{$a}->{'description'} cmp $itemtypes->{$b}->{'description'} } keys %$itemtypes ) { - my %row =( number=>$cnt++, - ccl => "$itype_or_itemtype,phr", + foreach my $thisitemtype ( sort {$itemtypes->{$a}->{'description'} cmp $itemtypes->{$b}->{'description'} } keys %$itemtypes ) { + my %row =( number=>$cnt++, + ccl => "$itype_or_itemtype,phr", code => $thisitemtype, selected => $selected, description => $itemtypes->{$thisitemtype}->{'description'}, count5 => $cnt % 4, imageurl=> getitemtypeimagelocation( 'opac', $itemtypes->{$thisitemtype}->{'imageurl'} ), ); - $selected = 0; # set to zero after first pass through - push @itemtypesloop, \%row; - } + $selected = 0; # set to zero after first pass through + push @itemtypesloop, \%row; + } } else { my $advsearchtypes = GetAuthorisedValues($advanced_search_types, '', 'opac'); - for my $thisitemtype (@$advsearchtypes) { - my %row =( - number=>$cnt++, - ccl => $advanced_search_types, + for my $thisitemtype (@$advsearchtypes) { + my %row =( + number=>$cnt++, + ccl => $advanced_search_types, code => $thisitemtype->{authorised_value}, selected => $selected, description => $thisitemtype->{'lib'}, count5 => $cnt % 4, imageurl=> getitemtypeimagelocation( 'opac', $thisitemtype->{'imageurl'} ), ); - push @itemtypesloop, \%row; - } + push @itemtypesloop, \%row; + } } $template->param(itemtypeloop => \@itemtypesloop); @@ -244,20 +244,20 @@ if ( $template_type && $template_type eq 'advsearch' ) { } } - $template->param(uc(C4::Context->preference("marcflavour")) => 1, # we already did this for UNIMARC - advsearch => 1, - search_boxes_loop => \@search_boxes_array); - -# use the global setting by default - if ( C4::Context->preference("expandedSearchOption") == 1 ) { - $template->param( expanded_options => C4::Context->preference("expandedSearchOption") ); - } - # but let the user override it - if (defined $cgi->param('expanded_options')) { - if ( ($cgi->param('expanded_options') == 0) || ($cgi->param('expanded_options') == 1 ) ) { - $template->param( expanded_options => $cgi->param('expanded_options')); - } + $template->param(uc( C4::Context->preference("marcflavour")) => 1, # we already did this for UNIMARC + advsearch => 1, + search_boxes_loop => \@search_boxes_array); + + # use the global setting by default + if ( C4::Context->preference("expandedSearchOption") == 1 ) { + $template->param( expanded_options => C4::Context->preference("expandedSearchOption") ); + } + # but let the user override it + if (defined $cgi->param('expanded_options')) { + if ( ($cgi->param('expanded_options') == 0) || ($cgi->param('expanded_options') == 1 ) ) { + $template->param( expanded_options => $cgi->param('expanded_options')); } + } output_html_with_http_headers $cgi, $cookie, $template->output; exit; } @@ -284,8 +284,6 @@ for (keys %$params) { $j++; } } -# - # Params that can have more than one value # sort by is used to sort the query @@ -430,15 +428,15 @@ my $results_hashref; my @coins; if ($tag) { - $query_cgi = "tag=" .$tag . "&" . $query_cgi; - my $taglist = get_tags({term=>$tag, approved=>1}); - $results_hashref->{biblioserver}->{hits} = scalar (@$taglist); - my @biblist = (map {GetBiblioData($_->{biblionumber})} @$taglist); - my @marclist = (map {$_->{marc}} @biblist ); - $DEBUG and printf STDERR "taglist (%s biblionumber)\nmarclist (%s records)\n", scalar(@$taglist), scalar(@marclist); - $results_hashref->{biblioserver}->{RECORDS} = \@marclist; - # FIXME: tag search and standard search should work together, not exclusively - # FIXME: No facets for tags search. + $query_cgi = "tag=" .$tag . "&" . $query_cgi; + my $taglist = get_tags({term=>$tag, approved=>1}); + $results_hashref->{biblioserver}->{hits} = scalar (@$taglist); + my @biblist = (map {GetBiblioData($_->{biblionumber})} @$taglist); + my @marclist = (map {$_->{marc}} @biblist ); + $DEBUG and printf STDERR "taglist (%s biblionumber)\nmarclist (%s records)\n", scalar(@$taglist), scalar(@marclist); + $results_hashref->{biblioserver}->{RECORDS} = \@marclist; + # FIXME: tag search and standard search should work together, not exclusively + # FIXME: No facets for tags search. } elsif (C4::Context->preference('NoZebra')) { eval { @@ -494,76 +492,82 @@ for (my $i=0;$i<@servers;$i++) { @newresults = searchResults('opac', $query_desc, $hits, $results_per_page, $offset, $scan, @{$results_hashref->{$server}->{"RECORDS"}},, C4::Context->preference('hidelostitems')); } - my $tag_quantity; - if (C4::Context->preference('TagsEnabled') and - $tag_quantity = C4::Context->preference('TagsShowOnList')) { - foreach (@newresults) { - my $bibnum = $_->{biblionumber} or next; - $_->{itemsissued} = CountItemsIssued( $bibnum ); - $_ ->{'TagLoop'} = get_tags({biblionumber=>$bibnum, approved=>1, 'sort'=>'-weight', - limit=>$tag_quantity }); - } - } - if (C4::Context->preference('COinSinOPACResults')) { - foreach (@newresults) { - my $record = GetMarcBiblio($_->{'biblionumber'}); - $_->{coins} = GetCOinSBiblio($record); - } - } + + # must define a value for size if not present in DB + # in order to avoid problems generated by the default size value in TT + foreach my $line (@newresults) { + if ( not exists $line->{'size'} ) { $line->{'size'} = "" } + } + + my $tag_quantity; + if (C4::Context->preference('TagsEnabled') and + $tag_quantity = C4::Context->preference('TagsShowOnList')) { + foreach (@newresults) { + my $bibnum = $_->{biblionumber} or next; + $_->{itemsissued} = CountItemsIssued( $bibnum ); + $_ ->{'TagLoop'} = get_tags({biblionumber=>$bibnum, approved=>1, 'sort'=>'-weight', + limit=>$tag_quantity }); + } + } + if (C4::Context->preference('COinSinOPACResults')) { + foreach (@newresults) { + my $record = GetMarcBiblio($_->{'biblionumber'}); + $_->{coins} = GetCOinSBiblio($record); + } + } - if ($results_hashref->{$server}->{"hits"}){ - $total = $total + $results_hashref->{$server}->{"hits"}; - } - # Opac search history - my $newsearchcookie; - if (C4::Context->preference('EnableOpacSearchHistory')) { - my @recentSearches; - - # Getting the (maybe) already sent cookie - my $searchcookie = $cgi->cookie('KohaOpacRecentSearches'); - if ($searchcookie){ - $searchcookie = uri_unescape($searchcookie); - if (thaw($searchcookie)) { - @recentSearches = @{thaw($searchcookie)}; - } - } - - # Adding the new search if needed - if (!$borrowernumber || $borrowernumber eq '') { - # To a cookie (the user is not logged in) - - if (($params->{'offset'}||'') eq '') { - - push @recentSearches, { - "query_desc" => $query_desc || "unknown", - "query_cgi" => $query_cgi || "unknown", - "time" => time(), - "total" => $total - }; - $template->param(ShowOpacRecentSearchLink => 1); - } - - shift @recentSearches if (@recentSearches > 15); - # Pushing the cookie back - $newsearchcookie = $cgi->cookie( - -name => 'KohaOpacRecentSearches', - # We uri_escape the whole freezed structure so we're sure we won't have any encoding problems - -value => uri_escape(freeze(\@recentSearches)), - -expires => '' - ); - $cookie = [$cookie, $newsearchcookie]; - } - else { - # To the session (the user is logged in) - if (($params->{'offset'}||'') eq '') { - AddSearchHistory($borrowernumber, $cgi->cookie("CGISESSID"), $query_desc, $query_cgi, $total); - $template->param(ShowOpacRecentSearchLink => 1); - } - } - } - ## If there's just one result, redirect to the detail page + if ($results_hashref->{$server}->{"hits"}){ + $total = $total + $results_hashref->{$server}->{"hits"}; + } + + # Opac search history + my $newsearchcookie; + if (C4::Context->preference('EnableOpacSearchHistory')) { + my @recentSearches; + + # Getting the (maybe) already sent cookie + my $searchcookie = $cgi->cookie('KohaOpacRecentSearches'); + if ($searchcookie){ + $searchcookie = uri_unescape($searchcookie); + if (thaw($searchcookie)) { + @recentSearches = @{thaw($searchcookie)}; + } + } + + # Adding the new search if needed + if (!$borrowernumber || $borrowernumber eq '') { + # To a cookie (the user is not logged in) + if (($params->{'offset'}||'') eq '') { + push @recentSearches, { + "query_desc" => $query_desc || "unknown", + "query_cgi" => $query_cgi || "unknown", + "time" => time(), + "total" => $total + }; + $template->param(ShowOpacRecentSearchLink => 1); + } + + shift @recentSearches if (@recentSearches > 15); + # Pushing the cookie back + $newsearchcookie = $cgi->cookie( + -name => 'KohaOpacRecentSearches', + # We uri_escape the whole freezed structure so we're sure we won't have any encoding problems + -value => uri_escape(freeze(\@recentSearches)), + -expires => '' + ); + $cookie = [$cookie, $newsearchcookie]; + } + else { + # To the session (the user is logged in) + if (($params->{'offset'}||'') eq '') { + AddSearchHistory($borrowernumber, $cgi->cookie("CGISESSID"), $query_desc, $query_cgi, $total); + $template->param(ShowOpacRecentSearchLink => 1); + } + } + } + ## If there's just one result, redirect to the detail page if ($total == 1 && $format ne 'rss2' - && $format ne 'opensearchdescription' && $format ne 'atom') { + && $format ne 'opensearchdescription' && $format ne 'atom') { my $biblionumber=$newresults[0]->{biblionumber}; if (C4::Context->preference('BiblioDefaultView') eq 'isbd') { print $cgi->redirect("/cgi-bin/koha/opac-ISBDdetail.pl?biblionumber=$biblionumber"); @@ -668,7 +672,7 @@ for (my $i=0;$i<@servers;$i++) { $template->param( PAGE_NUMBERS => \@page_numbers, previous_page_offset => $previous_page_offset) unless $pages < 2; $template->param(next_page_offset => $next_page_offset) unless $pages eq $current_page_number; - } + } # no hits else { $template->param(searchdesc => 1,query_desc => $query_desc,limit_desc => $limit_desc); @@ -699,7 +703,7 @@ $template->param( total => $total, opacfacets => 1, facets_loop => $facets, - displayFacetCount=> C4::Context->preference('displayFacetCount')||0, + displayFacetCount=> C4::Context->preference('displayFacetCount')||0, scan => $scan, search_error => $error, ); @@ -715,18 +719,18 @@ my @addpubshelves; my $pubshelves = $session->param('pubshelves'); my $barshelves = $session->param('barshelves'); foreach my $shelf (@$pubshelves) { - next if ( ($shelf->{'owner'} != ($borrowernumber ? $borrowernumber : -1)) && ($shelf->{'category'} < 3) ); - push (@addpubshelves, $shelf); + next if ( ($shelf->{'owner'} != ($borrowernumber ? $borrowernumber : -1)) && ($shelf->{'category'} < 3) ); + push (@addpubshelves, $shelf); } if (@addpubshelves) { - $template->param( addpubshelves => scalar (@addpubshelves)); - $template->param( addpubshelvesloop => \@addpubshelves); + $template->param( addpubshelves => scalar (@addpubshelves)); + $template->param( addpubshelvesloop => \@addpubshelves); } if (defined $barshelves) { - $template->param( addbarshelves => scalar (@$barshelves)); - $template->param( addbarshelvesloop => $barshelves); + $template->param( addbarshelves => scalar (@$barshelves)); + $template->param( addbarshelvesloop => $barshelves); } my $content_type = ($format eq 'rss' or $format eq 'atom') ? $format : 'html'; -- 1.7.4.1