[Koha-patches] [PATCH] 7310b: Improving list permissions: Deleting patron

Marcel de Rooy M.de.Rooy at rijksmuseum.nl
Thu Feb 16 12:30:52 CET 2012


Implements following points from the wiki page List permissions:
5) Delete or move list information when deleting a patron.
---
 C4/VirtualShelves.pm    |   40 ++++++++++++++++++++++++++++++++++++++--
 members/deletemem.pl    |    2 ++
 tools/cleanborrowers.pl |    5 ++++-
 3 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/C4/VirtualShelves.pm b/C4/VirtualShelves.pm index 266e5fb..b176d9d 100644
--- a/C4/VirtualShelves.pm
+++ b/C4/VirtualShelves.pm
@@ -565,8 +565,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); @@ -634,6 +636,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 {
diff --git a/members/deletemem.pl b/members/deletemem.pl index 924245a..a813cd6 100755
--- a/members/deletemem.pl
+++ b/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");
 }
diff --git a/tools/cleanborrowers.pl b/tools/cleanborrowers.pl index 4fde0f2..0b37c20 100755
--- a/tools/cleanborrowers.pl
+++ b/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]->{'borrow
+ ernumber'});
                 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(
--
1.6.0.6



More information about the Koha-patches mailing list