Bug 12238: Add option to supply list of record IDs to MARC export tool
authorStéphane Delaune <stephane.delaune@biblibre.com>
Fri, 16 May 2014 09:36:16 +0000 (11:36 +0200)
committerGalen Charlton <gmc@esilibrary.com>
Fri, 23 May 2014 15:46:34 +0000 (15:46 +0000)
The MARC export tool now includes the option to specify a file
containing record IDs to export.  When run on the command line,
this is specified using the --id_list_file switch.

Note that the list of IDs acts as a filter on other criteria
for selecting records to import.  For example, if you export
all bibs belong to a given library and also specify an ID file,
the bibs must both belong to the library and be in the ID file.

Signed-off-by: Bernardo Gonzalez Kriegel <bgkriegel@gmail.com>
Work as described. No errors

Tested writing txt file with biblionumbers, loading in tools and exporting

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>

koha-tmpl/intranet-tmpl/prog/en/modules/tools/export.tt
tools/export.pl

index b5072da..f4edddf 100644 (file)
@@ -38,7 +38,7 @@ $(document).ready(function() {
     <b>Note : The items are exported by this tool unless specified.</b>
 </p>
 
-<form method="post" action="/cgi-bin/koha/tools/export.pl">
+<form method="post" enctype="multipart/form-data" action="/cgi-bin/koha/tools/export.pl">
     <fieldset class="rows">
     <legend> Select records to export </legend>
         <ol><li>
@@ -97,6 +97,15 @@ $(document).ready(function() {
 </ul></li></ol>
     </fieldset>
     <fieldset class="rows">
+    <legend>
+        Use a file
+    </legend>
+        <ol>
+        <li>File containing a biblionumber's list with one biblionumber per line. This list works as a filter: it's compatible with other parameters.</li>
+        <li><label for="id_list_file">File : </label> <input type="file" id="id_list_file" name="id_list_file" /></li>
+        </ol>
+    </fieldset>
+    <fieldset class="rows">
     <legend> Options</legend>
 <ol>        <li>
         <label for="dont_export_item">Don't export items</label>
@@ -136,7 +145,7 @@ $(document).ready(function() {
 </div>
 
 <div id="auths">
-<form method="post" action="/cgi-bin/koha/tools/export.pl">
+<form method="post" enctype="multipart/form-data" action="/cgi-bin/koha/tools/export.pl">
     <fieldset class="rows">
     <legend> Select records to export </legend>
         <ol><li>
@@ -163,6 +172,15 @@ $(document).ready(function() {
         </ol>
     </fieldset>
     <fieldset class="rows">
+    <legend>
+        Use a file
+    </legend>
+        <ol>
+        <li>File containing an authid's list with one authid per line. This list works as a filter: it's compatible with other parameters.</li>
+        <li><label for="id_list_file">File : </label> <input type="file" id="id_list_file" name="id_list_file" /></li>
+        </ol>
+    </fieldset>
+    <fieldset class="rows">
     <legend>Options</legend>
         <ol>
         <li>
index 1a055b0..6a2b2db 100755 (executable)
@@ -38,6 +38,7 @@ my $dont_export_items;
 my $deleted_barcodes;
 my $timestamp;
 my $record_type;
+my $id_list_file;
 my $help;
 my $op       = $query->param("op")       || '';
 my $filename = $query->param("filename") || 'koha.mrc';
@@ -60,12 +61,13 @@ if ( $commandline ) {
         'clean'             => \$clean,
         'filename=s'        => \$filename,
         'record-type=s'     => \$record_type,
+        'id_list_file=s'    => \$id_list_file,
         'help|?'            => \$help
     );
 
     if ($help) {
         print <<_USAGE_;
-export.pl [--format=format] [--date=date] [--record-type=TYPE] [--dont_export_items] [--deleted_barcodes] [--clean] --filename=outputfile
+export.pl [--format=format] [--date=date] [--record-type=TYPE] [--dont_export_items] [--deleted_barcodes] [--clean] [--id_list_file=PATH] --filename=outputfile
 
 
  --format=FORMAT        FORMAT is either 'xml' or 'marc' (default)
@@ -82,6 +84,11 @@ export.pl [--format=format] [--date=date] [--record-type=TYPE] [--dont_export_it
                         specified). Used only if TYPE is 'bibs'
 
  --clean                removes NSE/NSB
+
+ --id_list_file=PATH    PATH is an absolute path to a file containing a list of
+                        IDs(biblionumber or authid) with only one ID per line.
+                        This IDs list works as a filter: it's compatible with
+                        other parameters
 _USAGE_
         exit;
     }
@@ -93,6 +100,7 @@ _USAGE_
     $deleted_barcodes  ||= 0;
     $clean             ||= 0;
     $record_type       ||= "bibs";
+    $id_list_file       ||= 0;
 
     # Redirect stdout
     open STDOUT, '>', $filename if $filename;
@@ -196,6 +204,19 @@ if ( $op eq "export" ) {
         my $starting_authid = $query->param('starting_authid');
         my $ending_authid   = $query->param('ending_authid');
         my $authtype        = $query->param('authtype');
+        my $filefh;
+        if ($commandline) {
+            open $filefh,"<", $id_list_file or die "cannot open $id_list_file: $!";
+        } else {
+            $filefh = $query->upload("id_list_file");
+        }
+        my %id_filter;
+        if ($filefh) {
+            while (my $number=<$filefh>){
+                $number=~s/[\r\n]*$//;
+                $id_filter{$number}=1 if $number=~/^\d+$/;
+            }
+        }
 
         if ( $record_type eq 'bibs' and not @biblionumbers ) {
             if ($timestamp) {
@@ -308,6 +329,7 @@ if ( $op eq "export" ) {
             push @recordids, map {
                 map { $$_[0] } $_
             } @{ $sth->fetchall_arrayref };
+            @recordids = grep { exists($id_filter{$_}) } @recordids if scalar(%id_filter);
         }
 
         my $xml_header_written = 0;