From caf75d1154c0c4a2cb6e170cc92749c3659fb81e Mon Sep 17 00:00:00 2001 From: Andreas Romeyke <andreas.romeyke@slub-dresden.de> Date: Mon, 16 Sep 2024 13:46:21 +0200 Subject: [PATCH] - add purged AIP handling --- perl/exit_strategy.pl | 46 +++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/perl/exit_strategy.pl b/perl/exit_strategy.pl index 5dc3185..5f691b9 100644 --- a/perl/exit_strategy.pl +++ b/perl/exit_strategy.pl @@ -324,15 +324,18 @@ SQL_PURGED_PLAN $dcvalue =~ tr/'/"/; eval {$plans->{dc}->execute($ieid, $ieversion, $dckey, $dcvalue)} or die "sql problem detected with $ieid ($ieversion, $dckey, $dcvalue), ", $dbh->errstr; } - if ($refhash->{'purged'}) { - my @purged = @{$refhash->{'purged'}}; - foreach my $purge (@purged) { + foreach my $delstate (qw(purged deleted)) { + if ($refhash->{$delstate}) { + my $delete = $refhash->{$delstate}; # TODO: call plan plans->{deleted} - my $state = $purge->{'state'}; - my $reason = $purge->{'reason'}; - my $date = $purge->{'date'}; - my $authorized_by = $purge->{'authorized_by'}; - eval {$plans->{deleted}->execute($ieid, $ieversion, $state, $reason, $date, $authorized_by)} or die "sql problem detected with $ieid ($ieversion, $state, $reason, $date, $authorized_by), ", $dbh->errstr; + my $state = $delete->{'state'}; + my $reason = $delete->{'reason'}; + my $note = $delete->{'note'}; + my $date = $delete->{'date'}; + my $authorized_by = $delete->{'authorized_by'}; + eval { + $plans->{$delstate}->execute($ieid, $ieversion, $state, $reason, $note, $date, $authorized_by) + } or die "sql problem detected with $delstate $ieid ($ieversion, $state, $reason, $note, $date, $authorized_by), ", $dbh->errstr; } } return 1; @@ -632,14 +635,27 @@ sub parse_iexml($filename, $recovery_flag) { # get dc-records $ret->{"dcrecords"} = get_dcrecords_ref($xp, $dmdsec); ############################################ - my $is_deleted = has_purged_entries($xp, $amdsec); + my $is_deleted = has_purged_entries($xp, $amdsec_ie); if ($is_deleted) { - my @purged_states = @{get_purged_states($xp, $amdsec)}; - foreach my $idx (0 .. $#purged_states) { - $ret->{'purged'}->[$idx]->{state} = $purged_states[$idx]; - $ret->{'purged'}->[$idx]->{reason} = get_purged_reasons($xp, $amdsec)->[$idx]; - $ret->{'purged'}->[$idx]->{date} = get_purged_dates($xp, $amdsec)->[$idx]; - $ret->{'purged'}->[$idx]->{authorized_by} = get_purged_authorized_by($xp, $amdsec)->[$idx]; + my @purged_states = @{get_purged_states($xp, $amdsec_ie)}; + my $idx_purged; + my $idx_deleted; + for (my $i = 0; $i <= $#purged_states; $i++) { + if ($purged_states[$i] eq 'purged') {$idx_purged = $i; last;} + elsif ($purged_states[$i] eq 'deleted') {$idx_deleted = $i;} + } + if (defined $idx_purged) { + $ret->{purged}->{state} = "purged"; + $ret->{purged}->{reason} = get_purged_reasons($xp, $amdsec_ie)->[$idx_purged]; + $ret->{purged}->{note} = get_purged_notes($xp, $amdsec_ie)->[$idx_purged]; + $ret->{purged}->{date} = get_purged_dates($xp, $amdsec_ie)->[$idx_purged]; + $ret->{purged}->{authorized_by} = get_purged_authorized_by($xp, $amdsec_ie)->[$idx_purged]; + } else { + $ret->{deleted}->{state} = "deleted"; + $ret->{deleted}->{reason} = get_purged_reasons($xp, $amdsec_ie)->[$idx_deleted]; + $ret->{deleted}->{note} = get_purged_notes($xp, $amdsec_ie)->[$idx_deleted]; + $ret->{deleted}->{date} = get_purged_dates($xp, $amdsec_ie)->[$idx_deleted]; + $ret->{deleted}->{authorized_by} = get_purged_authorized_by($xp, $amdsec_ie)->[$idx_deleted]; } } ############################################ -- GitLab