Koha/misc/cronjobs/merge_authorities.pl
Martin Renvoize d2e189ca1c Bug 22600: Set 'commandline' interface appropriately
This patch change Koha::Cron to be a more generic Koha::Script class and
update all commanline driven scripts to use it.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
2019-04-10 19:43:11 +00:00

90 lines
2 KiB
Perl
Executable file

#!/usr/bin/perl
use Modern::Perl;
use Getopt::Long;
use Pod::Usage;
use Time::HiRes qw(gettimeofday);
use Koha::Script -cron;
use C4::AuthoritiesMarc;
use Koha::Authority::MergeRequests;
use constant RESET_HOURS => 24;
use constant REMOVE_DAYS => 30;
my ( $params );
GetOptions(
'h' => \$params->{help},
'v' => \$params->{verbose},
'b' => \$params->{batch},
);
$|=1; # flushes output
if ( $params->{batch} ) {
handle_batch($params);
} else {
pod2usage(1);
}
sub handle_batch {
my $params = shift;
my $verbose = $params->{verbose};
my $starttime = gettimeofday;
print "Started merging\n" if $verbose;
Koha::Authority::MergeRequests->cron_cleanup({ reset_hours => RESET_HOURS, remove_days => REMOVE_DAYS });
my $rs = Koha::Authority::MergeRequests->search(
{ done => 0 },
{ order_by => { -asc => 'id' }}, # IMPORTANT
);
# For best results, postponed merges should be applied in right order.
# Similarly, we do not only select the last one for a specific id.
while( my $req = $rs->next ) {
$req->done(2)->store;
print "Merging auth " . $req->authid . " to " . ( $req->authid_new // 'NULL' ) . ".\n" if $verbose;
my $newmarc = $req->authid_new
? GetAuthority( $req->authid_new )
: undef;
# Following merge call handles both modifications and deletes
merge({
mergefrom => $req->authid,
MARCfrom => scalar $req->oldmarc,
mergeto => $req->authid_new,
MARCto => $newmarc,
override_limit => 1,
});
$req->done(1)->store;
}
my $timeneeded = gettimeofday - $starttime;
print "Done in $timeneeded seconds\n" if $verbose;
}
=head1 NAME
merge_authorities.pl
=head1 DESCRIPTION
Cron script to handle authority merge requests
=head1 SYNOPSIS
merge_authorities.pl -h
merge_authorities.pl -b -v
=head1 OPTIONS
-b : batch mode (You need to pass this parameter from crontab file)
-h : print usage statement
-v : verbose mode
=head1 AUTHOR
Koha Development Team
=cut