From 6125704dfe7db9c598fe086e041bb86c31a39848 Mon Sep 17 00:00:00 2001 From: erickson Date: Mon, 17 Nov 2008 19:37:28 +0000 Subject: [PATCH] added API for merging users git-svn-id: svn://svn.open-ils.org/ILS/trunk@11249 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/perlmods/OpenILS/Application/Actor.pm | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Actor.pm b/Open-ILS/src/perlmods/OpenILS/Application/Actor.pm index 64a2dc2007..f73849b6e7 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Actor.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Actor.pm @@ -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; -- 2.11.0