Browse Source

Bug 7310: Improving list permissions: Deleting patron

Implements following points from the wiki page List permissions:
5) Delete or move list information when deleting a patron.

Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
Signed-off-by: Ian Walls <koha.sekjal@gmail.com>
3.8.x
Marcel de Rooy 12 years ago
committed by Paul Poulain
parent
commit
2dc8a260c5
  1. 40
      C4/VirtualShelves.pm
  2. 2
      members/deletemem.pl
  3. 5
      tools/cleanborrowers.pl

40
C4/VirtualShelves.pm

@ -522,8 +522,10 @@ sub DelFromShelf {
}
}
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);
@ -591,6 +593,40 @@ sub ShelvesMax {
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 {

2
members/deletemem.pl

@ -30,6 +30,7 @@ use C4::Output;
use C4::Auth;
use C4::Members;
use C4::Branch; # GetBranches
use C4::VirtualShelves (); #no import
my $input = new CGI;
@ -117,6 +118,7 @@ output_html_with_http_headers $input, $cookie, $template->output;
} else {
MoveMemberToDeleted($member);
C4::VirtualShelves::HandleDelBorrower($member);
DelMember($member);
print $input->redirect("/cgi-bin/koha/members/members-home.pl");
}

5
tools/cleanborrowers.pl

@ -40,6 +40,7 @@ use C4::Output;
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;
@ -117,13 +118,15 @@ if ( $params->{'step3'} ) {
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(

Loading…
Cancel
Save