Bug 33159: Simplify ES handling and fix zebra handling
[koha-ffzg.git] / serials / subscription-bib-search.pl
index 09530ca..2853404 100755 (executable)
@@ -46,19 +46,21 @@ to multipage gestion.
 
 =cut
 
-use strict;
-use warnings;
+use Modern::Perl;
 
 use CGI qw ( -utf8 );
-use C4::Koha;
-use C4::Auth;
+use C4::Koha qw( GetAuthorisedValues );
+use C4::Auth qw( get_template_and_user );
 use C4::Context;
-use C4::Output;
-use C4::Search;
-use C4::Biblio;
-use C4::Debug;
+use C4::Output qw( output_html_with_http_headers );
+use C4::Search qw( new_record_from_zebra );
+use C4::Biblio qw( TransformMarcToKoha );
 
-my $input = new CGI;
+use Koha::ItemTypes;
+use Koha::SearchEngine;
+use Koha::SearchEngine::Search;
+
+my $input = CGI->new;
 my $op = $input->param('op') || q{};
 my $dbh = C4::Context->dbh;
 
@@ -80,24 +82,22 @@ if ( $op eq "do_search" && $query ) {
             template_name   => "serials/result.tt",
             query           => $input,
             type            => "intranet",
-            authnotrequired => 0,
             flagsrequired   => { catalogue => 1, serials => '*' },
-            debug           => 1,
         }
     );
 
     # add the limits if applicable
     my $itemtypelimit = $input->param('itemtypelimit');
     my $ccodelimit    = $input->param('ccodelimit');
-    my $op = C4::Context->preference('UseQueryParser') ? '&&' : 'and';
+    my $op = 'AND';
     $query .= " $op $itype_or_itemtype:$itemtypelimit" if $itemtypelimit;
     $query .= " $op ccode:$ccodelimit" if $ccodelimit;
-    $debug && warn $query;
     $resultsperpage = $input->param('resultsperpage');
     $resultsperpage = 20 if ( !defined $resultsperpage );
 
+    my $searcher = Koha::SearchEngine::Search->new({index => $Koha::SearchEngine::BIBLIOS_INDEX});
     my ( $error, $marcrecords, $total_hits ) =
-      SimpleSearch( $query, $startfrom * $resultsperpage, $resultsperpage );
+      $searcher->simple_search_compat( $query, $startfrom * $resultsperpage, $resultsperpage );
     my $total = 0;
     if ( defined $marcrecords ) {
         $total = scalar @{$marcrecords};
@@ -114,16 +114,19 @@ if ( $op eq "do_search" && $query ) {
     for ( my $i = 0 ; $i < $total ; $i++ ) {
         my %resultsloop;
         my $marcrecord = C4::Search::new_record_from_zebra( 'biblioserver', $marcrecords->[$i] );
-        my $biblio = TransformMarcToKoha( $marcrecord, '' );
+        my $biblio = TransformMarcToKoha({ record => $marcrecord });
 
         #build the hash for the template.
         $resultsloop{highlight}       = ( $i % 2 ) ? (1) : (0);
         $resultsloop{title}           = $biblio->{'title'};
         $resultsloop{subtitle}        = $biblio->{'subtitle'};
+        $resultsloop{medium}          = $biblio->{'medium'};
+        $resultsloop{part_number}     = $biblio->{'part_number'};
+        $resultsloop{part_name}       = $biblio->{'part_name'};
         $resultsloop{biblionumber}    = $biblio->{'biblionumber'};
         $resultsloop{author}          = $biblio->{'author'};
         $resultsloop{publishercode}   = $biblio->{'publishercode'};
-        $resultsloop{publicationyear} = $biblio->{'publicationyear'};
+        $resultsloop{publicationyear} = $biblio->{'publicationyear'} ? $biblio->{'publicationyear'} : $biblio->{'copyrightdate'};
         $resultsloop{issn}            = $biblio->{'issn'};
 
         push @results, \%resultsloop;
@@ -185,15 +188,15 @@ else {
             template_name   => "serials/subscription-bib-search.tt",
             query           => $input,
             type            => "intranet",
-            authnotrequired => 0,
             flagsrequired   => { catalogue => 1, serials => '*' },
-            debug           => 1,
         }
     );
 
     # load the itemtypes
-    my $itemtypes = GetItemTypes();
+    my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } };
     my @itemtypesloop;
+    # FIXME This is uselessly complex, the iterator should be send to the template
+    # FIXME The translated_description should be used
     foreach my $thisitemtype (
         sort {
             $itemtypes->{$a}->{'description'}