added API for merging users
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 17 Nov 2008 19:37:28 +0000 (19:37 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 17 Nov 2008 19:37:28 +0000 (19:37 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@11249 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Actor.pm

index 64a2dc2..f73849b 100644 (file)
@@ -2988,5 +2988,51 @@ sub verify_user_password {
     return 0;
 }
 
+
+
+__PACKAGE__->register_method (
+       method          => 'merge_users',
+       api_name        => 'open-ils.actor.user.merge',
+       signature       => {
+        desc => q/
+            Given a source user and destination user, transfer all data from the source
+            to the dest. user and delete the source user.  All user related data is 
+            transferred, including circulations, holds, bookbags, etc.
+        /
+    }
+);
+
+sub merge_users {
+    my($self, $conn, $auth, $src_id, $dest_id, $options) = @_;
+    my $e = new_editor(xact => 1, authtoken => $auth);
+       return $e->die_event unless $e->checkauth;
+
+    my $src_user = $e->retrieve_actor_user($src_id) or return $e->die_event;
+    my $dest_user = $e->retrieve_actor_user($dest_id) or return $e->die_event;
+
+    return $e->die_event unless $e->allowed('MERGE_USERS', $src_user->home_ou);
+    if($src_user->home_ou ne $dest_user->home_ou) {
+        return $e->die_event unless $e->allowed('MERGE_USERS', $dest_user->home_ou);
+    }
+
+    my $query = {
+        select => {
+            au => [ {
+                transform => 'actor.usr_merge',
+                params => [$dest_id],
+                column => 'id',
+            } ]
+        },
+        from => 'au',
+        where => {id => $src_id},
+    };
+
+    return $e->die_event unless $e->json_query($query);
+    $e->commit;
+    return 1;
+}
+
+
+
 1;