if ( $privacy == 2) {
# The default of 0 does not work due to foreign key constraints
# The anonymisation will fail quietly if AnonymousPatron is not a valid entry
+ # FIXME the above is unacceptable - bug 9942 relates
my $anonymouspatron = (C4::Context->preference('AnonymousPatron')) ? C4::Context->preference('AnonymousPatron') : 0;
my $sth_ano = $dbh->prepare("UPDATE old_issues SET borrowernumber=?
WHERE borrowernumber = ?
=head2 AnonymiseIssueHistory
- $rows = AnonymiseIssueHistory($date,$borrowernumber)
+ ($rows,$err_history_not_deleted) = AnonymiseIssueHistory($date,$borrowernumber)
This function write NULL instead of C<$borrowernumber> given on input arg into the table issues.
if C<$borrowernumber> is not set, it will delete the issue history for all borrower older than C<$date>.
If c<$borrowernumber> is set, it will delete issue history for only that borrower, regardless of their opac privacy
setting (force delete).
-return the number of affected rows.
+return the number of affected rows and a value that evaluates to true if an error occurred deleting the history.
=cut
}
my $sth = $dbh->prepare($query);
$sth->execute(@bind_params);
+ my $anonymisation_err = $dbh->err;
my $rows_affected = $sth->rows; ### doublecheck row count return function
- return $rows_affected;
+ return ($rows_affected, $anonymisation_err);
}
=head2 SendCirculationAlert
[% IF ( deleted ) %]
<div class="dialog message">Your reading history has been deleted.</div>
+ [% ELSIF ( err_history_not_deleted ) %]
+ <div class="dialog error">The deletion of your reading history failed, because there is a problem with the configuration of this feature. Please help to fix the system by informing your library of this error.</div>
[% END %]
[% IF ( privacy_updated ) %]
- <div class="dialog message">Your privacy rules have been updated</div>
+ <div class="dialog message">Your privacy rules have been updated.</div>
[% END %]
<h2>Privacy rule</h2>
use strict;
use warnings;
+use Carp;
BEGIN {
my $formatdate = sprintf "%4d-%02d-%02d",$newyear,$newmonth,$newday;
$verbose and print "Checkouts before $formatdate will be anonymised.\n";
-my $rows = AnonymiseIssueHistory($formatdate);
+my ($rows, $err_history_not_deleted) = AnonymiseIssueHistory($formatdate);
+carp "Anonymisation of reading history failed." if ($err_history_not_deleted);
$verbose and print "$rows checkouts anonymised.\n";
exit(0);
if ($op eq "delete_record") {
# delete all reading records for items returned
# uses a hardcoded date ridiculously far in the future
- AnonymiseIssueHistory('2999-12-12',$borrowernumber);
+ my ($rows,$err_history_not_deleted) = AnonymiseIssueHistory('2999-12-12',$borrowernumber);
# confirm the user the deletion has been done
- $template->param('deleted' => 1);
+ if ( !$err_history_not_deleted ) {
+ $template->param( 'deleted' => 1 );
+ }
+ else {
+ $template->param( 'err_history_not_deleted' => 1 );
+ }
}
# get borrower privacy ....
my ( $borr ) = GetMemberDetails( $borrowernumber );
# Anonymising all members
if ($do_anonym) {
- $totalAno = AnonymiseIssueHistory($filterdate2);
+ #FIXME: anonymisation errors are not handled
+ ($totalAno,my $anonymisation_error) = AnonymiseIssueHistory($filterdate2);
$template->param(
filterdate1 => $filterdate2,
do_anonym => '1',