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>
#includes a check if borrowernumber is null (deleted patron)
$query=qq/DELETEFROMvirtualshelfcontents
WHEREshelfnumber=?ANDbiblionumber=?AND
(borrowernumberISNULLORborrowernumber<>?)/;
$sth=$dbh->prepare($query);
foreachmy$biblionumber(@$bibref){
$sth->execute($shelfnumber,$biblionumber,$user);
@ -591,6 +593,40 @@ sub ShelvesMax {
returnSHELVES_MASTHEAD_MAX;
}
subHandleDelBorrower{
#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=?";