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";
11 __PACKAGE__->register_method (
12 method => 'create_user_stage',
13 api_name => 'open-ils.actor.user.stage.create',
16 Creates a new pending user account including addresses, statcats, and
18 Users are added to staging tables pending staff review.
21 {desc => 'user', type => 'object', class => 'stgu'},
22 {desc => 'Mailing address. Optional', type => 'object', class => 'stgma'},
23 {desc => 'Billing address. Optional', type => 'object', class => 'stgba'},
24 {desc => 'Statcats. Optional. This is an array of "stgsc" objects', type => 'array'},
25 {desc => 'Settings. Optional. This is an array of "stgs" objects', type => 'array'},
28 desc => 'username on success, Event on error',
35 sub create_user_stage {
36 my($self, $conn, $user, $mail_addr, $bill_addr, $statcats, $settings) = @_; # more?
38 return OpenILS::Event->new('BAD_PARAMS') unless $user;
39 return 0 unless $U->ou_ancestor_setting_value($user->home_ou, 'opac.allow_pending_user');
41 my $e = new_editor(xact => 1);
43 my $uname = $user->usrname || $U->create_uuid_string;
44 $user->usrname($uname);
46 # see if this username is already taken
47 return OpenILS::Event->new('USERNAME_EXISTS') if
48 $e->search_staging_user_stage({usrname => $uname})->[0];
50 $e->create_staging_user_stage($user) or return $e->die_event;
53 $mail_addr->usrname($uname);
54 $e->create_staging_mailing_address_stage($mail_addr) or return $e->die_event;
58 $bill_addr->usrname($uname);
59 $e->create_staging_billing_address_stage($bill_addr) or return $e->die_event;
63 foreach (@$statcats) {
65 $e->create_staging_statcat_stage($_) or return $e->die_event;
70 foreach (@$settings) {
72 $e->create_staging_setting_stage($_) or return $e->die_event;
77 $conn->respond_complete($uname);
79 $U->create_events_for_hook('stgu.create', $user, $user->home_ou);
83 __PACKAGE__->register_method (
84 method => 'user_stage_by_org',
85 api_name => 'open-ils.actor.user.stage.retrieve.by_org',
89 sub user_stage_by_org {
90 my($self, $conn, $auth, $org_id, $limit, $offset) = @_;
92 my $e = new_editor(authtoken => $auth);
93 return $e->event unless $e->checkauth;
94 $org_id ||= $e->requestor->ws_ou;
95 return $e->event unless $e->allowed('VIEW_USER', $org_id);
100 my $stage_ids = $e->search_staging_user_stage(
102 { home_ou => $org_id, complete => 'f'},
105 order_by => {stgu => 'row_id'}
111 $conn->respond(flesh_user_stage($e, $_)) for @$stage_ids;
115 sub flesh_user_stage {
116 my($e, $row_id) = @_;
117 my $user = $e->retrieve_staging_user_stage($row_id) or return undef;
120 billing_addresses => $e->search_staging_billing_address_stage({usrname => $user->usrname}),
121 mailing_addresses => $e->search_staging_mailing_address_stage({usrname => $user->usrname}),
122 cards => $e->search_staging_card_stage({usrname => $user->usrname}),
123 statcats => $e->search_staging_statcat_stage({usrname => $user->usrname}),
124 settings => $e->search_staging_setting_stage({usrname => $user->usrname}),
129 __PACKAGE__->register_method (
130 method => 'user_stage_by_uname',
131 api_name => 'open-ils.actor.user.stage.retrieve.by_username',
134 sub user_stage_by_uname {
135 my($self, $conn, $auth, $username) = @_;
137 my $e = new_editor(authtoken => $auth);
138 return $e->event unless $e->checkauth;
140 my $user = $e->search_staging_user_stage({
141 usrname => $username,
143 })->[0] or return $e->event;
145 return $e->event unless $e->allowed('VIEW_USER', $user->home_ou);
146 return flesh_user_stage($e, $user->row_id);
152 __PACKAGE__->register_method (
153 method => 'delete_user_stage',
154 api_name => 'open-ils.actor.user.stage.delete',
157 sub delete_user_stage {
158 my($self, $conn, $auth, $row_id) = @_;
160 my $e = new_editor(authtoken => $auth, xact => 1);
161 return $e->die_event unless $e->checkauth;
162 my $data = flesh_user_stage($e, $row_id) or return $e->die_event;
164 return $e->die_event unless $e->allowed('UPDATE_USER', $data->{user}->home_ou);
166 $e->delete_staging_user_stage($data->{user}) or return $e->die_event;
168 for my $addr (@{$data->{mailing_addresses}}) {
169 $e->delete_staging_mailing_address_stage($addr) or return $e->die_event;
172 for my $addr (@{$data->{billing_addresses}}) {
173 $e->delete_staging_billing_address_stage($addr) or return $e->die_event;
176 for my $card (@{$data->{cards}}) {
177 $e->delete_staging_card_stage($card) or return $e->die_event;
180 for my $statcat (@{$data->{statcats}}) {
181 $e->delete_staging_statcat_stage($statcat) or return $e->die_event;
184 for my $setting (@{$data->{settings}}) {
185 $e->delete_staging_setting_stage($setting) or return $e->die_event;