bug 2473: correct display of items.content
[koha_fer] / catalogue / search.pl
index 16dbbaa..f033f5e 100755 (executable)
@@ -144,7 +144,7 @@ use C4::Context;
 use C4::Output;
 use C4::Auth;
 use C4::Search;
-use C4::Languages; # getAllLanguages
+use C4::Languages qw(getAllLanguages);
 use C4::Koha;
 use POSIX qw(ceil floor);
 use C4::Branch; # GetBranches
@@ -208,7 +208,7 @@ if (C4::Context->preference("marcflavour") eq "UNIMARC" ) {
 my $branches = GetBranches();
 my @branch_loop;
 
-for my $branch_hash (sort keys %$branches) {
+for my $branch_hash (sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{branchname} } keys %$branches) {
     push @branch_loop, {value => "$branch_hash" , branchname => $branches->{$branch_hash}->{'branchname'}, };
 }
 
@@ -216,31 +216,46 @@ my $categories = GetBranchCategories(undef,'searchdomain');
 
 $template->param(branchloop => \@branch_loop, searchdomainloop => $categories);
 
-# load the itemtypes
+# load the Type stuff
+# load the Type stuff
 my $itemtypes = GetItemTypes;
+# the index parameter is different for item-level itemtypes
+my $itype_or_itemtype = (C4::Context->preference("item-level_itypes"))?'itype':'itemtype';
 my @itemtypesloop;
 my $selected=1;
 my $cnt;
-my $imgdir = getitemtypeimagesrc();
-foreach my $thisitemtype ( sort {$itemtypes->{$a}->{'description'} cmp $itemtypes->{$b}->{'description'} } keys %$itemtypes ) {
+my $imgdir = getitemtypeimagesrc('intranet');
+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++,
                 imageurl=> $itemtypes->{$thisitemtype}->{'imageurl'}?($imgdir."/".$itemtypes->{$thisitemtype}->{'imageurl'}):"",
+                ccl => $itype_or_itemtype,
                 code => $thisitemtype,
                 selected => $selected,
                 description => $itemtypes->{$thisitemtype}->{'description'},
                 count5 => $cnt % 4,
             );
-    $selected = 0 if ($selected) ;
-    push @itemtypesloop, \%row;
+        $selected = 0 if ($selected) ;
+        push @itemtypesloop, \%row;
+    }
+    $template->param(itemtypeloop => \@itemtypesloop);
+} else {
+    my $advsearchtypes = GetAuthorisedValues($advanced_search_types);
+    for my $thisitemtype (@$advsearchtypes) {
+        my %row =(
+                number=>$cnt++,
+                imageurl=> $imgdir."/".$thisitemtype->{'imageurl'},
+                ccl => $advanced_search_types,
+                code => $thisitemtype->{authorised_value},
+                selected => $selected,
+                description => $thisitemtype->{'lib'},
+                count5 => $cnt % 4,
+            );
+        push @itemtypesloop, \%row;
+    }
+    $template->param(itemtypeloop => \@itemtypesloop);
 }
-$template->param(itemtypeloop => \@itemtypesloop);
-
-# load the ccodes 
-# my ($ccodecount,@ccode_loop) = GetCcodes();
-# $template->param(ccodeloop=>\@ccode_loop,);
-
-# load the languages ( for switching from one template to another )
-$template->param(languages_loop => getTranslatedLanguages('intranet','prog'));
 
 # The following should only be loaded if we're bringing up the advanced search template
 if ( $template_type eq 'advsearch' ) {
@@ -342,6 +357,11 @@ my @operators;
 my @indexes;
 @indexes = split("\0",$params->{'idx'});
 
+# if a simple index (only one)  display the index used in the top search box
+if ($indexes[0] && !$indexes[1]) {
+    $template->param("ms_".$indexes[0] => 1);}
+
+
 # an operand can be a single term, a phrase, or a complete ccl query
 my @operands;
 @operands = split("\0",$params->{'q'}) if $params->{'q'};
@@ -399,6 +419,8 @@ my @results;
 
 ## parse the query_cgi string and put it into a form suitable for <input>s
 my @query_inputs;
+my $scan_index_to_use;
+
 for my $this_cgi ( split('&',$query_cgi) ) {
     next unless $this_cgi;
     $this_cgi =~ m/(.*=)(.*)/;
@@ -406,8 +428,12 @@ for my $this_cgi ( split('&',$query_cgi) ) {
     my $input_value = $2;
     $input_name =~ s/=$//;
     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;
+       }
 }
-$template->param ( QUERY_INPUTS => \@query_inputs );
+$template->param ( QUERY_INPUTS => \@query_inputs,
+                   scan_index_to_use => $scan_index_to_use );
 
 ## parse the limit_cgi string and put it into a form suitable for <input>s
 my @limit_inputs;
@@ -490,8 +516,20 @@ for (my $i=0;$i<@servers;$i++) {
     if ($server =~/biblioserver/) { # this is the local bibliographic server
         $hits = $results_hashref->{$server}->{"hits"};
         my $page = $cgi->param('page') || 0;
-        my @newresults = searchResults( $query_desc,$hits,$results_per_page,$offset,@{$results_hashref->{$server}->{"RECORDS"}});
+        my @newresults = searchResults( $query_desc,$hits,$results_per_page,$offset,$scan,@{$results_hashref->{$server}->{"RECORDS"}});
         $total = $total + $results_hashref->{$server}->{"hits"};
+        ## If there's just one result, redirect to the detail page
+        if ($total == 1) {         
+            my $biblionumber=@newresults[0]->{biblionumber};
+            if (C4::Context->preference('IntranetBiblioDefaultView') eq 'isbd') {
+                print $cgi->redirect("/cgi-bin/koha/catalogue/ISBDdetail.pl?biblionumber=$biblionumber");
+            } elsif  (C4::Context->preference('IntranetBiblioDefaultView') eq 'marc') {
+                print $cgi->redirect("/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=$biblionumber");
+            } else {
+                print $cgi->redirect("/cgi-bin/koha/catalogue/detail.pl?biblionumber=$biblionumber");
+            } 
+            exit;
+        }
         if ($hits) {
             $template->param(total => $hits);
             my $limit_cgi_not_availablity = $limit_cgi;