my $batch;
my $cutoff;
my $wait = 1;
+my $output;
+my $link_skipped;
my $ret = GetOptions(
'action:s' => \$action,
'batch:s' => \$batch,
'cutoff:s' => \$cutoff,
'wait:i' => \$wait,
+ 'output:s' => \$output,
+ 'link-skipped' => \$link_skipped,
);
abort('must specify --action') unless defined $action;
abort(q{--action must be "stage_bibs", "filter_bibs", "load_bibs", "stage_auths",
"match_auths", "load_new_auths", "overlay_auths_stage1",
-"overlay_auths_stage2", "overlay_auths_stage3", "link_auth_auth"}) unless
+"overlay_auths_stage2", "overlay_auths_stage3", "link_auth_auth",
+"link_auth_bib", "export_skipped_bibs", or "export_skipped_auths"}) unless
$action eq 'filter_bibs' or
$action eq 'stage_bibs' or
$action eq 'load_bibs' or
$action eq 'overlay_auths_stage2' or
$action eq 'overlay_auths_stage3' or
$action eq 'link_auth_auth' or
- $action eq 'link_auth_bib'
+ $action eq 'link_auth_bib' or
+ $action eq 'export_skipped_bibs' or
+ $action eq 'export_skipped_auths'
;
my $dbh = connect_db($db, $dbuser, $dbpw, $dbhost);
handle_link_auth_auth($dbh, $schema, $batch);
}
if ($action eq 'link_auth_bib') {
- handle_link_auth_bib($dbh, $schema, $batch);
+ handle_link_auth_bib($dbh, $schema, $batch, $link_skipped);
+}
+
+if ($action eq 'export_skipped_bibs') {
+ abort('must specify output file') unless defined $output;
+ handle_export_skipped_bibs($dbh, $schema, $batch, $output);
+}
+if ($action eq 'export_skipped_auths') {
+ abort('must specify output file') unless defined $output;
+ handle_export_skipped_auths($dbh, $schema, $batch, $output);
}
sub abort {
or added in this batch.
--action link_auth_bib - run authority_control_fields.pl for
the bibs that were overlaid in this
- batch.
+ batch. Add --link-skipped to specify
+ that bibs that were matched but
+ skipped due to having be edited after
+ the cutoff should be linked (rather
+ than linking the imported bibs)
+ --action export_skipped_bibs - export to ISO2709 file whose name is
+ specified by --output those bibs
+ that had been edited after the cutoff.
+ --action export_skipped_auths - export to ISO2709 file whose name is
+ specified by --output those authorities
+ that could not be definitively
+ handled as updates or adds.
Several switches are used regardless of the specified action:
my $dbh = shift;
my $schema = shift;
my $batch = shift;
+ my $link_skipped = shift;
+
+ my $query;
+ if ($link_skipped) {
+ $query = qq{
+ SELECT bib_id AS id
+ FROM $schema.$batch
+ WHERE NOT imported
+ AND skip_reason ~ '^edit'
+ ORDER BY 1
+ };
+ } else {
+ $query = qq{
+ SELECT bib_id AS id
+ FROM $schema.$batch
+ WHERE imported
+ ORDER BY 1
+ };
+ }
- my $sth = $dbh->prepare(qq{
- SELECT bib_id AS id
- FROM $schema.$batch
- WHERE imported
- ORDER BY 1
- });
+ my $sth = $dbh->prepare($query);
$sth->execute();
my @ids = map { $_->{id} } @{ $sth->fetchall_arrayref({}) };
my $i = 0;
}
}
+
+sub handle_export_skipped_bibs {
+ my $dbh = shift;
+ my $schema = shift;
+ my $batch = shift;
+ my $output = shift;
+
+ my $outfh;
+ open($outfh, '>', $output) or die("Could not open input file $output: $!\n");
+ binmode $outfh, ':utf8';
+
+ my $sth = $dbh->prepare(qq{
+ SELECT marc
+ FROM $schema.$batch
+ WHERE skip_reason ~ '^edit'
+ ORDER BY id
+ });
+ $sth->execute();
+
+ while (my $row = $sth->fetchrow_hashref()) {
+ my $marc = MARC::Record->new_from_xml($row->{marc});
+ print $outfh $marc->as_usmarc();
+ }
+ $outfh->close();
+}
+
+sub handle_export_skipped_auths {
+ my $dbh = shift;
+ my $schema = shift;
+ my $batch = shift;
+ my $output = shift;
+
+ my $outfh;
+ open($outfh, '>', $output) or die("Could not open input file $output: $!\n");
+ binmode $outfh, ':utf8';
+
+ my $sth = $dbh->prepare(qq{
+ SELECT marc
+ FROM $schema.auths_$batch
+ WHERE NOT imported
+ ORDER BY id
+ });
+ $sth->execute();
+
+ while (my $row = $sth->fetchrow_hashref()) {
+ my $marc = MARC::Record->new_from_xml($row->{marc});
+ print $outfh $marc->as_usmarc();
+ }
+ $outfh->close();
+}