}
}
if($del_oth) {
- $query = qq(DELETE FROM virtualshelfcontents
- WHERE shelfnumber=? AND biblionumber=? AND borrowernumber<>?);
+ #includes a check if borrowernumber is null (deleted patron)
+ $query = qq/DELETE FROM virtualshelfcontents
+ WHERE shelfnumber=? AND biblionumber=? AND
+ (borrowernumber IS NULL OR borrowernumber<>?)/;
$sth= $dbh->prepare($query);
foreach my $biblionumber (@$bibref) {
$sth->execute($shelfnumber, $biblionumber, $user);
return SHELVES_MASTHEAD_MAX;
}
+sub HandleDelBorrower {
+#when a member is deleted (DelMember in Members.pm), you should call me first
+#this routine deletes/moves lists and entries for the deleted member/borrower
+#you could just delete everything (and lose more than you want)
+#instead we now try to save all public/shared stuff and keep others happy
+ my ($borrower)= @_;
+ my $query;
+ my $dbh = C4::Context->dbh;
+
+ #Delete shares of this borrower (not lists !)
+ $query="DELETE FROM virtualshelfshares WHERE borrowernumber=?";
+ $dbh->do($query,undef,($borrower));
+
+ #Delete private lists without owner that now have no shares anymore
+ $query="DELETE vs.* FROM virtualshelves vs LEFT JOIN virtualshelfshares sh USING (shelfnumber) WHERE category=1 AND vs.owner IS NULL AND sh.shelfnumber IS NULL";
+ $dbh->do($query);
+
+ #Change owner for private lists which have shares
+ $query="UPDATE virtualshelves LEFT JOIN virtualshelfshares sh USING (shelfnumber) SET owner=NULL where owner=? AND category=1 AND sh.borrowernumber IS NOT NULL";
+ $dbh->do($query,undef,($borrower));
+
+ #Delete unshared private lists
+ $query="DELETE FROM virtualshelves WHERE owner=? AND category=1";
+ $dbh->do($query,undef,($borrower));
+
+ #Handle public lists owned by borrower
+ $query="UPDATE virtualshelves SET owner=NULL WHERE owner=? AND category=2";
+ $dbh->do($query,undef,($borrower));
+
+ #Handle entries added by borrower to lists of others
+ $query="UPDATE virtualshelfcontents SET borrowernumber=NULL WHERE borrowernumber=?";
+ $dbh->do($query,undef,($borrower));
+}
+
# internal subs
sub _shelf_count {
use C4::Dates qw/format_date format_date_in_iso/;
use C4::Members; # GetBorrowersWhoHavexxxBorrowed.
use C4::Circulation; # AnonymiseIssueHistory.
+use C4::VirtualShelves (); #no import
use Date::Calc qw/Today Add_Delta_YM/;
my $cgi = new CGI;
my $i;
for ( $i = 0 ; $i < $totalDel ; $i++ ) {
MoveMemberToDeleted( $membersToDelete->[$i]->{'borrowernumber'} );
+ C4::VirtualShelves::HandleDelBorrower($membersToDelete->[$i]->{'borrowernumber'});
DelMember( $membersToDelete->[$i]->{'borrowernumber'} );
}
}
else { # delete completly.
my $i;
for ( $i = 0 ; $i < $totalDel ; $i++ ) {
- DelMember($membersToDelete->[$i]->{'borrowernumber'});
+ C4::VirtualShelves::HandleDelBorrower($membersToDelete->[$i]->{'borrowernumber'});
+ DelMember($membersToDelete->[$i]->{'borrowernumber'});
}
}
$template->param(