Bug 19916: Add keyword and standard ID fields to acq external search
[koha.git] / acqui / z3950_search.pl
index 0ae843f..4e53186 100755 (executable)
@@ -6,21 +6,20 @@
 #
 # This file is part of Koha.
 #
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
 #
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
 
-use warnings;
-use strict;
+use Modern::Perl;
 use CGI qw/-utf8/;
 
 use C4::Auth;
@@ -28,12 +27,13 @@ use C4::Output;
 use C4::Context;
 use C4::Breeding;
 use C4::Koha;
-use C4::Bookseller qw/ GetBookSellerFromId /;
+
+use Koha::Acquisition::Booksellers;
+use Koha::BiblioFrameworks;
 
 my $input           = new CGI;
-my $dbh             = C4::Context->dbh;
 my $biblionumber    = $input->param('biblionumber')||0;
-my $frameworkcode   = $input->param('frameworkcode')||'';
+my $frameworkcode   = $input->param('frameworkcode') || q{};
 my $title           = $input->param('title');
 my $author          = $input->param('author');
 my $isbn            = $input->param('isbn');
@@ -41,6 +41,8 @@ my $issn            = $input->param('issn');
 my $lccn            = $input->param('lccn');
 my $lccall          = $input->param('lccall');
 my $subject         = $input->param('subject');
+my $srchany         = $input->param('srchany');
+my $stdid           = $input->param('stdid');
 my $dewey           = $input->param('dewey');
 my $controlnumber   = $input->param('controlnumber');
 my $op              = $input->param('op')||'';
@@ -50,36 +52,24 @@ my $page            = $input->param('current_page') || 1;
 $page               = $input->param('goto_page') if $input->param('changepage_goto');
 
 # get framework list
-my $frameworks = getframeworks;
-my @frameworkcodeloop;
-foreach my $thisframeworkcode ( keys %$frameworks ) {
-    my %row = (
-        value         => $thisframeworkcode,
-        frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'},
-    );
-    if ( $row{'value'} eq $frameworkcode){
-        $row{'active'} = 'true';
-    }
-    push @frameworkcodeloop, \%row;
-}
+my $frameworks = Koha::BiblioFrameworks->search({}, { order_by => ['frameworktext'] });
 
-my $vendor = GetBookSellerFromId($booksellerid);
+my $vendor = Koha::Acquisition::Booksellers->find( $booksellerid );
 
 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     {
-        template_name   => "acqui/z3950_search.tmpl",
+        template_name   => "acqui/z3950_search.tt",
         query           => $input,
         type            => "intranet",
-        authnotrequired => 1,
         flagsrequired   => { acquisition => 'order_manage' },
     }
 );
 $template->param(
         frameworkcode => $frameworkcode,
-        frameworkcodeloop => \@frameworkcodeloop,
+        frameworks   => $frameworks,
         booksellerid => $booksellerid,
         basketno     => $basketno,
-        name         => $vendor->{'name'},
+        name         => $vendor->name,
         isbn         => $isbn,
         issn         => $issn,
         lccn         => $lccn,
@@ -90,21 +80,30 @@ $template->param(
         biblionumber => $biblionumber,
         dewey        => $dewey,
         subject      => $subject,
+        srchany      => $srchany,
+        stdid        => $stdid,
 );
 
 if ( $op ne "do_search" ) {
-    my $sth = $dbh->prepare("select id,host,name,checked from z3950servers  order by host");
-    $sth->execute();
-    my $serverloop = $sth->fetchall_arrayref( {} );
+    my $schema = Koha::Database->new()->schema();
+    my $rs = $schema->resultset('Z3950server')->search(
+        {
+            recordtype => 'biblio',
+            servertype => ['zed', 'sru'],
+        },
+        {   result_class => 'DBIx::Class::ResultClass::HashRefInflator',
+            order_by     => ['rank', 'servername'],
+        },
+    );
     $template->param(
-        serverloop   => $serverloop,
+        serverloop   => [ $rs->all ],
         opsearch     => "search",
     );
     output_html_with_http_headers $input, $cookie, $template->output;
     exit;
 }
 
-my @id = $input->param('id');
+my @id = $input->multi_param('id');
 if (@id==0) {
     $template->param( emptyserverlist => 1 );
     output_html_with_http_headers $input, $cookie, $template->output;
@@ -112,7 +111,6 @@ if (@id==0) {
 }
 
 my $pars= {
-        random => $input->param('random') || rand(1000000000),
         biblionumber => $biblionumber,
         page => $page,
         id => \@id,
@@ -124,8 +122,8 @@ my $pars= {
         subject => $subject,
         lccall => $lccall,
         controlnumber => $controlnumber,
-        stdid => 0,
-        srchany => 0,
+        stdid => $stdid,
+        srchany => $srchany,
 };
 Z3950Search($pars, $template);
 output_html_with_http_headers $input, $cookie, $template->output;