[Patches] [PATCH] Bug 6374: default value for Size in results

koha-patchbot at kohaaloha.com koha-patchbot at kohaaloha.com
Tue Jan 3 05:35:03 NZDT 2012


From: Adrien Saurat <adrien.saurat at biblibre.com>
Date: Mon, 2 Jan 2012 16:58:57 +0100
Subject: [PATCH] Bug 6374: default value for Size in results

In order to avoid the TT to display random numbers when
the size information is not provided, a default empty string
is sent if nothing else is available.

Signed-off-by: Gaetan Boisson <gaetan.boisson at biblibre.com>
---
 catalogue/search.pl |   40 +++++----
 opac/opac-search.pl |  262 ++++++++++++++++++++++++++-------------------------
 2 files changed, 155 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/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.5.4


More information about the Patches mailing list