Bug 32351: Fix CourseItems.t
[koha-ffzg.git] / misc / z3950_responder.pl
index e1056c5..3c782c4 100755 (executable)
@@ -4,26 +4,26 @@
 #
 # 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 3 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 Modern::Perl;
 
-use Carp;
-use Getopt::Long;
-use Pod::Usage;
+use File::Basename qw( fileparse );
+use Getopt::Long qw( GetOptions :config no_ignore_case );
+use Pod::Usage qw( pod2usage );
 
-use C4::Context;
+use Koha::Config;
 use Koha::Z3950Responder;
 
 =head1 SYNOPSIS
@@ -31,11 +31,14 @@ use Koha::Z3950Responder;
    z3950_responder.pl [-h|--help] [--man] [-a <pdufile>] [-v <loglevel>] [-l <logfile>] [-u <user>]
                       [-c <config>] [-t <minutes>] [-k <kilobytes>] [-d <daemon>] [-p <pidfile>]
                       [-C certfile] [-zKiDST1] [-m <time-format>] [-w <directory>] [--debug]
-                      [--add-item-status=SUBFIELD] [--prefetch=NUM_RECORDS]
+                      [--add-item-status=SUBFIELD] [--prefetch=NUM_RECORDS] [--config-dir=<directory>]
                       [<listener-addr>... ]
 
 =head1 OPTIONS
 
+See https://software.indexdata.com/yaz/doc/server.invocation.html for more information about YAZ options
+not described below.
+
 =over 8
 
 =item B<--help>
@@ -48,7 +51,7 @@ Displays manual page and exits.
 
 =item B<--debug>
 
-Turns on debug logging to the screen, and turns on single-process mode.
+Turns on debug logging to the screen and the single-process mode.
 
 =item B<--add-item-status=SUBFIELD>
 
@@ -61,7 +64,12 @@ status string.
 
 =item B<--prefetch=NUM_RECORDS>
 
-Number of records to prefetch from Zebra. Defaults to 20.
+Number of records to prefetch. Defaults to 20.
+
+=item B<--config-dir=directory>
+
+Directory where to find configuration files required for proper operation. Defaults to z3950 under
+the Koha config directory.
 
 =back
 
@@ -98,6 +106,8 @@ my $debug = 0;
 my $help;
 my $man;
 my $prefetch = 20;
+my $config_dir = '';
+
 my @yaz_options;
 
 sub add_yaz_option {
@@ -106,6 +116,12 @@ sub add_yaz_option {
     push @yaz_options, "-$opt_name", "$opt_value";
 }
 
+sub pass_yaz_option {
+    my ( $opt_name ) = @_;
+
+    push @yaz_options, "-$opt_name";
+}
+
 GetOptions(
     '-h|help' => \$help,
     '--man' => \$man,
@@ -113,6 +129,7 @@ GetOptions(
     '--add-item-status=s' => \$add_item_status_subfield,
     '--add-status-multi-subfield' => \$add_status_multi_subfield,
     '--prefetch=i' => \$prefetch,
+    '--config-dir=s' => \$config_dir,
     # Pass through YAZ options.
     'a=s' => \&add_yaz_option,
     'v=s' => \&add_yaz_option,
@@ -126,27 +143,34 @@ GetOptions(
     'C=s' => \&add_yaz_option,
     'm=s' => \&add_yaz_option,
     'w=s' => \&add_yaz_option,
-    'z' => \&add_yaz_option,
-    'K' => \&add_yaz_option,
-    'i' => \&add_yaz_option,
-    'D' => \&add_yaz_option,
-    'S' => \&add_yaz_option,
-    'T' => \&add_yaz_option,
-    '1' => \&add_yaz_option
+    'z' => \&pass_yaz_option,
+    'K' => \&pass_yaz_option,
+    'i' => \&pass_yaz_option,
+    'D' => \&pass_yaz_option,
+    'S' => \&pass_yaz_option,
+    'T' => \&pass_yaz_option,
+    '1' => \&pass_yaz_option
 ) || pod2usage(2);
 
 pod2usage(1) if $help;
 pod2usage( -verbose => 2 ) if $man;
 
-# Create and start the server.
+# If config_dir is not defined, default to z3950 under the Koha config directory
+if (!$config_dir) {
+    (undef, $config_dir) = fileparse(Koha::Config->guess_koha_conf);
+    $config_dir .= 'z3950/';
+} else {
+    $config_dir .= '/' if ($config_dir !~ /\/$/);
+}
 
-die "This tool only works with Zebra" if C4::Context->preference('SearchEngine') ne 'Zebra';
+# Create and start the server.
 
 my $z = Koha::Z3950Responder->new( {
     add_item_status_subfield => $add_item_status_subfield,
     add_status_multi_subfield => $add_status_multi_subfield,
     debug => $debug,
     num_to_prefetch => $prefetch,
+    config_dir => $config_dir,
     yaz_options => [ @yaz_options, @ARGV ],
 } );