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";
10 sub initialize { return 1; }
13 __PACKAGE__->register_method(
14 method => 'get_users_from_usergroup',
15 api_name => 'open-ils.actor.usergroup.members.retrieve',
17 Returns a list of ids for users that are in the given usergroup
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});
31 __PACKAGE__->register_method(
32 method => 'get_leaders_from_usergroup',
33 api_name => 'open-ils.actor.usergroup.leaders.retrieve',
35 Returns a list of ids for users that are leaders of the given usergroup
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})
49 push( @res, $u->id ) if $u->master_account;
57 __PACKAGE__->register_method(
58 method => 'get_address_members',
59 api_name => 'open-ils.actor.address.members',
61 Returns a list of ids for users that link to the given address
63 @param addrid The address id
67 sub get_address_members {
68 my( $self, $conn, $auth, $addrid ) = @_;
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
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});
78 my @list = (@$ma, @$ba, $ad->usr);
79 my %dedup = map { $_ => 1 } @list;
80 return [ keys %dedup ];
85 __PACKAGE__->register_method(
86 method => 'reset_group',
87 api_name => 'open-ils.actor.usergroup.new',
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
97 my( $self, $conn, $auth, $userid, $leader ) = @_;
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
103 my $user = $e->retrieve_actor_user($userid) or return $e->die_event;
105 # ask for a new group id
106 my $groupid = $e->request('open-ils.storage.actor.user.group_id.new');
108 $user->usrgroup($groupid);
109 $user->master_account('t') if $leader;
111 $e->update_actor_user($user) or return $e->die_event;