[Koha-patches] [PATCH] [SIGNED-OFF]

Gaetan Boisson gaetan.boisson at biblibre.com
Tue Jan 3 15:44:26 CET 2012


From: Adrien Saurat <adrien.saurat at biblibre.com>

Works beautifully!

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).

Signed-off-by: Gaetan Boisson <gaetan.boisson at biblibre.com>
---
 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.5.4



More information about the Koha-patches mailing list