90 lines
2.1 KiB
Perl
Executable file
90 lines
2.1 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
use Modern::Perl;
|
|
use Getopt::Long qw( GetOptions );
|
|
use Pod::Usage qw( pod2usage );
|
|
use Time::HiRes qw( gettimeofday );
|
|
|
|
use Koha::Script -cron;
|
|
use C4::AuthoritiesMarc qw( GetAuthority merge );
|
|
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
|