]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Actor/UserGroups.pm
moved calls to cstore. moved events to die_events for in-transaction errors
[working/Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Application / Actor / UserGroups.pm
1 package OpenILS::Application::Actor::UserGroups;
2 use base 'OpenSRF::Application';
3 use strict; use warnings;
4 use OpenILS::Application::AppUtils;
5 use OpenILS::Utils::CStoreEditor q/:funcs/;
6 use OpenSRF::Utils::Logger q/$logger/;
7 use OpenSRF::EX qw(:try);
8 my $U = "OpenILS::Application::AppUtils";
9
10 sub initialize { return 1; }
11
12
13 __PACKAGE__->register_method(
14         method => 'get_users_from_usergroup',
15         api_name        => 'open-ils.actor.usergroup.members.retrieve',
16         signature       => q/
17                 Returns a list of ids for users that are in the given usergroup
18         /
19 );
20
21 sub get_users_from_usergroup {
22         my( $self, $conn, $auth, $usergroup ) = @_;
23         my $e = new_editor(authtoken=>$auth);
24         return $e->event unless $e->checkauth;
25         return $e->event unless $e->allowed('VIEW_USER'); # XXX reley on editor perm
26         return $e->search_actor_user({usrgroup => $usergroup}, {idlist => 1});
27 }
28
29
30
31 __PACKAGE__->register_method(
32         method => 'get_leaders_from_usergroup',
33         api_name        => 'open-ils.actor.usergroup.leaders.retrieve',
34         signature       => q/
35                 Returns a list of ids for users that are leaders of the given usergroup
36         /
37 );
38
39 sub get_leaders_from_usergroup {
40         my( $self, $conn, $auth, $usergroup ) = @_;
41         my $e = new_editor(authtoken=>$auth);
42         return $e->event unless $e->checkauth;
43         return $e->event unless $e->allowed('VIEW_USER'); # XXX reley on editor perm
44         my $users = $e->search_actor_user({usrgroup => $usergroup})
45                 or return $e->event;
46
47         my @res;
48         for my $u (@$users) {
49                 push( @res, $u->id ) if $u->master_account;
50         }
51
52         return \@res;
53 }
54
55
56
57 __PACKAGE__->register_method(
58         method => 'get_address_members',
59         api_name        => 'open-ils.actor.address.members',
60         signature       => q/
61                 Returns a list of ids for users that link to the given address
62                 @param auth
63                 @param addrid The address id
64         /
65 );
66
67 sub get_address_members {
68         my( $self, $conn, $auth, $addrid ) = @_;
69
70         my $e = new_editor(authtoken=>$auth);
71         return $e->event unless $e->checkauth;
72         return $e->event unless $e->allowed('VIEW_USER'); # XXX reley on editor perm
73
74         my $ad = $e->retrieve_actor_user_address($addrid) or return $e->event;
75         my $ma = $e->search_actor_user({mailing_address => $addrid}, {idlist => 1});
76         my $ba = $e->search_actor_user({billing_address => $addrid}, {idlist => 1});
77
78         my @list = (@$ma, @$ba, $ad->usr);
79         my %dedup = map { $_ => 1 } @list;
80         return [ keys %dedup ];
81 }
82
83
84
85 __PACKAGE__->register_method(
86         method  => 'reset_group',
87         api_name        => 'open-ils.actor.usergroup.new',
88         signature       => q/
89                 Gives the requested user a new empty usergroup.  
90                 @param auth The auth token
91                 @param userid The id of the user who needs the new usergroup
92                 @param leader If true, this user will be marked as the group leader
93         /
94 );
95
96 sub reset_group {
97         my( $self, $conn, $auth, $userid, $leader ) = @_;
98
99         my $e = new_editor(authtoken=>$auth, xact=>1);
100         return $e->die_event unless $e->checkauth;
101         return $e->die_event unless $e->allowed('UPDATE_USER'); # XXX reley on editor perm
102
103         my $user = $e->retrieve_actor_user($userid) or return $e->die_event;
104
105         # ask for a new group id
106         my $groupid = $e->request('open-ils.storage.actor.user.group_id.new');
107
108         $user->usrgroup($groupid);
109         $user->master_account('t') if $leader;
110
111         $e->update_actor_user($user) or return $e->die_event;
112         $e->commit;
113         return $groupid;
114 }
115
116
117
118
119 1;