Merge branch 'master' of git.uio.no:usit-rt
[usit-rt.git] / share / html / REST / 1.0 / Forms / group / default
CommitLineData
84fb5b46
MKG
1%# BEGIN BPS TAGGED BLOCK {{{
2%#
3%# COPYRIGHT:
4%#
5%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
6%# <sales@bestpractical.com>
7%#
8%# (Except where explicitly superseded by other copyright notices)
9%#
10%#
11%# LICENSE:
12%#
13%# This work is made available to you under the terms of Version 2 of
14%# the GNU General Public License. A copy of that license should have
15%# been provided with this software, but in any event can be snarfed
16%# from www.gnu.org.
17%#
18%# This work is distributed in the hope that it will be useful, but
19%# WITHOUT ANY WARRANTY; without even the implied warranty of
20%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21%# General Public License for more details.
22%#
23%# You should have received a copy of the GNU General Public License
24%# along with this program; if not, write to the Free Software
25%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26%# 02110-1301 or visit their web page on the internet at
27%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
28%#
29%#
30%# CONTRIBUTION SUBMISSION POLICY:
31%#
32%# (The following paragraph is not intended to limit the rights granted
33%# to you to modify and distribute this software under the terms of
34%# the GNU General Public License and is only of importance to you if
35%# you choose to contribute your changes and enhancements to the
36%# community by submitting them to Best Practical Solutions, LLC.)
37%#
38%# By intentionally submitting any modifications, corrections or
39%# derivatives to this work, or any other work intended for use with
40%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
41%# you are the copyright holder for those contributions and you grant
42%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
43%# royalty-free, perpetual, license to use, copy, create derivative
44%# works based on those contributions, and sublicense and distribute
45%# those contributions and any derivatives thereof.
46%#
47%# END BPS TAGGED BLOCK }}}
48%# REST/1.0/Forms/group/default
49%#
50<%ARGS>
51$id
52$format => 's'
53$fields => undef # these are the fields passed to the rt "-f" flag.
54$changes => {}
55</%ARGS>
56<%perl>
57my @comments;
58my ($c, $o, $k, $e) = ("", [], {}, 0);
59my %data = %$changes;
60my $group = RT::Group->new($session{CurrentUser});
61my @fields = qw(Name Description);
62my %fields = map { lc $_ => $_ } @fields;
63
64if ($id ne 'new') {
65 $group->Load($id);
66 if (!$group->Id) {
67 return [ "# Group $id does not exist.", [], {}, 1 ];
68 }
69}
70else {
71 if (%data == 0) {
72 return [
73 "# Required: Name",
74 [ qw(id Name Description) ],
75 {
76 id => "group/new",
77 Name => "",
78 Description => ""
79 },
80 0
81 ];
82 }
83 else {
84 my %v;
85 my %create = %fields;
86 $create{name} = "Name";
87 $create{description} = "Description";
88 # Do any fields need to be excluded here?
89
90 foreach my $k (keys %data) {
91 if (exists $create{lc $k}) {
92 $v{$create{lc $k}} = delete $data{$k};
93 }
94 }
95
96 $group->CreateUserDefinedGroup(%v);
97 unless ($group->Id) {
98 return [ "# Could not create group.", [], {}, 1 ];
99 }
100
101 $id = $group->Id;
102 delete $data{id};
103 push(@comments, "# Group $id created.");
104 goto DONE if %data == 0;
105 }
106}
107
108if (%data == 0) {
109 my @data;
110
111 push @data, [ id => "group/".$group->Id ];
112 push @data, [ Name => $group->Name ];
113 push @data, [ Description => $group->Description ];
114
115
116 # Members
117 my $gms = [];
118 my $GroupMembers = $group->MembersObj();
119 while ( my $mo = $GroupMembers->Next() ) {
120 if ( $mo->MemberObj->IsGroup ) {
121 my $us = $mo->MemberObj->Object->UserMembersObj();
122 my @users;
123 while ( my $u = $us->Next() ) {
124 push @users, $u->RealName . ' <' . $u->EmailAddress . '>';
125 }
126 push @$gms,
127 'GROUP ['
128 . $mo->MemberObj->Object->Name . ']' . ' ('
129 . join( ';', @users ) . ')';
130 } elsif ( $mo->MemberObj->IsUser ) {
131 push @$gms,
132 $mo->MemberObj->Object->RealName . ' <'
133 . $mo->MemberObj->Object->EmailAddress . '>';
134 }
135 }
136 push @data, [ Members => $gms ];
137
138 # Custom fields
139 my $CustomFields = $group->CustomFields;
140 while ( my $CustomField = $CustomFields->Next() ) {
141 next
142 unless ( !%$fields
143 || exists $fields->{ lc "CF-" . $CustomField->Name } );
144 next unless $CustomField->CurrentUserHasRight('SeeCustomField');
145 my $CFvalues = $group->CustomFieldValues( $CustomField->Id );
146 my @CFvalues;
147 while ( my $CFvalue = $CFvalues->Next() ) {
148 push @CFvalues, $CFvalue->Content;
149 }
150 push @data, [ "CF-" . $CustomField->Name => \@CFvalues ];
151 }
152
153 my %k = map {@$_} @data;
154 $o = [ map {$_->[0]} @data ];
155 $k = \%k;
156}
157else {
158 my ($get, $set, $key, $val, $n, $s);
159
160 foreach $key (keys %data) {
161 $val = $data{$key};
162 $key = lc $key;
163 $n = 1;
164
165 if ($key eq 'name' || $key eq 'description' || exists $fields{$key})
166 {
167 if (exists $fields{$key}) {
168 $key = $fields{$key};
169 }
170 else {
171 $key = "Description" if $key eq 'description';
172 $key = "Name" if $key eq 'name';
173 }
174 $set = "Set$key";
175
176 next if $val eq $group->$key;
177 ($n, $s) = $group->$set($val);
178 }
179 elsif ($key ne 'id') {
180 $n = 0;
181 $s = "Unknown field.";
182 }
183
184 SET:
185 if ($n == 0) {
186 $e = 1;
187 push @comments, "# $key: $s";
188 unless (@$o) {
189 my %o = keys %$changes;
190 delete @o{"id", @fields};
191 @$o = ("id", @fields, keys %o);
192 $k = $changes;
193 }
194 }
195 }
196
197 push(@comments, "# Group $id updated.") unless $n == 0;
198}
199
200DONE:
201$c ||= join("\n", @comments) if @comments;
202return [ $c, $o, $k, $e ];
203</%perl>