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