]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Actor/Stage.pm
Added ability to retrieve/edit a staged user and subsequently save as a "real" user.
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Application / Actor / Stage.pm
1 package OpenILS::Application::Actor::Stage;
2 use strict; use warnings;
3 use base 'OpenILS::Application';
4 use OpenILS::Application::AppUtils;
5 use OpenILS::Utils::CStoreEditor q/:funcs/;
6 use OpenSRF::Utils::Logger q/$logger/;
7 use OpenILS::Utils::Fieldmapper;
8 my $U = "OpenILS::Application::AppUtils";
9
10
11 __PACKAGE__->register_method (
12         method          => 'create_user_stage',
13         api_name    => 'open-ils.actor.user.stage.create',
14 );
15
16 sub create_user_stage {
17     my($self, $conn, $user, $mail_addr, $bill_addr) = @_; # more?
18
19     return 0 unless $U->ou_ancestor_setting_value('opac.allow_pending_user');
20     return OpenILS::Event->new('BAD_PARAMS') unless $user;
21
22     my $e = new_editor(xact => 1);
23
24     my $uname = $U->create_uuid_string;
25     $user->usrname($uname);
26
27     $e->create_staging_user_stage($user) or return $e->die_event;
28
29     if($mail_addr) {
30         $mail_addr->usrname($uname);
31         $e->create_staging_mailing_address_stage($mail_addr) or return $e->die_event;
32     }
33
34     if($bill_addr) {
35         $bill_addr->usrname($uname);
36         $e->create_staging_billing_address_stage($bill_addr) or return $e->die_event;
37     }
38
39     $e->commit;
40     $conn->respond_complete($uname);
41
42     $U->create_trigger_event('stgu.create', $user, $user->home_ou);
43     return undef;
44 }
45
46 __PACKAGE__->register_method (
47         method          => 'user_stage_by_org',
48         api_name    => 'open-ils.actor.user.stage.retrieve.by_org',
49     stream      => 1
50 );
51
52 sub user_stage_by_org {
53     my($self, $conn, $auth, $org_id, $limit, $offset) = @_;
54
55     my $e = new_editor(authtoken => $auth);
56     return $e->event unless $e->checkauth;
57     $org_id ||= $e->requestor->ws_ou;
58     return $e->event unless $e->allowed('VIEW_USER', $org_id);
59
60     $limit ||= 100;
61     $offset ||= 0;
62
63     my $stage_ids = $e->search_staging_user_stage(
64         [
65             {   home_ou => $org_id, complete => 'f'}, 
66             {   limit => $limit, 
67                 offset => $offset, 
68                 order_by => {stgu => 'row_id'}
69             }
70         ],
71         {idlist => 1}
72     );
73
74     $conn->respond(flesh_user_stage($e, $_)) for @$stage_ids;
75     return undef;
76 }
77
78 sub flesh_user_stage {
79     my($e, $row_id) = @_;
80     my $user = $e->retrieve_staging_user_stage($row_id) or return undef;
81     return {
82         user => $user,
83         billing_addresses => $e->search_staging_billing_address_stage({usrname => $user->usrname}),
84         mailing_addresses => $e->search_staging_mailing_address_stage({usrname => $user->usrname}),
85         cards => $e->search_staging_card_stage({usrname => $user->usrname}),
86         statcats => $e->search_staging_statcat_stage({usrname => $user->usrname})
87     };
88 }
89
90
91 __PACKAGE__->register_method (
92         method          => 'user_stage_by_uname',
93         api_name    => 'open-ils.actor.user.stage.retrieve.by_username',
94 );
95
96 sub user_stage_by_uname {
97     my($self, $conn, $auth, $username) = @_;
98
99     my $e = new_editor(authtoken => $auth);
100     return $e->event unless $e->checkauth;
101
102     my $user = $e->search_staging_user_stage({
103         usrname => $username, 
104         complete => 'f'
105     })->[0] or return $e->event;
106
107     return $e->event unless $e->allowed('VIEW_USER', $user->home_ou);
108     return flesh_user_stage($e, $user->row_id);
109 }
110
111
112
113
114 __PACKAGE__->register_method (
115         method          => 'delete_user_stage', 
116         api_name    => 'open-ils.actor.user.stage.delete',
117 );
118
119 sub delete_user_stage {
120     my($self, $conn, $auth, $row_id) = @_;
121
122     my $e = new_editor(authtoken => $auth, xact => 1);
123     return $e->die_event unless $e->checkauth;
124     my $data = flesh_user_stage($e, $row_id) or return $e->die_event;
125
126     return $e->die_event unless $e->allowed('UPDATE_USER', $data->{user}->home_ou);
127
128     $e->delete_staging_user_stage($data->{user}) or return $e->die_event;
129
130     for my $addr (@{$data->{mailing_addresses}}) {
131         $e->delete_staging_mailing_address_stage($addr) or return $e->die_event;
132     }
133
134     for my $addr (@{$data->{billing_addresses}}) {
135         $e->delete_staging_billing_address_stage($addr) or return $e->die_event;
136     }
137
138     for my $card (@{$data->{cards}}) {
139         $e->delete_staging_card_stage($card) or return $e->die_event;
140     }
141
142     for my $statcat (@{$data->{statcats}}) {
143         $e->delete_staging_statcat_stage($statcat) or return $e->die_event;
144     }
145
146     $e->commit;
147     return 1;
148 }
149
150
151
152 1;
153
154
155