1 %# BEGIN BPS TAGGED BLOCK {{{
5 %# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
6 %# <jesse@bestpractical.com>
8 %# (Except where explicitly superseded by other copyright notices)
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
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.
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/copyleft/gpl.html.
30 %# CONTRIBUTION SUBMISSION POLICY:
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.)
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.
47 %# END BPS TAGGED BLOCK }}}
48 <& /Admin/Elements/Header, Title => $title &>
49 <& /Admin/Elements/UserTabs,
52 current_tab => $current_tab,
55 <& /Elements/ListActions, actions => \@results &>
57 <form action="<%$RT::WebPath%>/Admin/Users/Modify.html" method="post" enctype="multipart/form-data">
59 <input type="hidden" class="hidden" name="id" value="new" />
61 <input type="hidden" class="hidden" name="id" value="<%$UserObj->Id%>" />
63 <table width="100%" border="0">
66 <td valign="top" class="boxcontainer">
67 <&| /Widgets/TitleBox, title => loc('Identity') &>
70 <tr><td align="right">
73 <input name="Name" value="<%$UserObj->Name%>" /> <strong><&|/l&>(required)</&></strong>
75 <tr><td align="right">
78 <input name="EmailAddress" value="<%$UserObj->EmailAddress%>" />
80 <tr><td align="right">
83 <input name="RealName" value="<%$UserObj->RealName%>" />
85 <tr><td align="right">
88 <input name="NickName" value="<%$UserObj->NickName%>" />
90 <tr><td align="right">
91 <&|/l&>Unix login</&>:
93 <input name="Gecos" value="<%$UserObj->Gecos%>" />
95 <tr><td align="right">
98 <& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang &>
100 <tr><td align="right">
101 <&|/l&>Extra info</&>:
103 <textarea name="FreeformContactInfo" cols="20" rows="5"><%$UserObj->FreeformContactInfo%></textarea>
108 <&| /Widgets/TitleBox, title => loc('Access control') &>
109 <input type="hidden" class="hidden" name="SetEnabled" value="1" />
110 <input type="checkbox" class="checkbox" name="Enabled" value="1" <%$EnabledChecked%> />
111 <&|/l&>Let this user access RT</&><br />
114 <input type="hidden" class="hidden" name="SetPrivileged" value="1" />
115 <input type="checkbox" class="checkbox" name="Privileged" value="1" <%$PrivilegedChecked%> /> <&|/l&>Let this user be granted rights</&><br />
117 % unless ($RT::WebExternalAuth and !$RT::WebFallbackToInternalAuth) {
121 <&|/l&>New Password</&>:
124 <input type="password" name="Pass1" />
127 <tr><td align="right">
128 <&|/l&>Retype Password</&>:
131 <input type="password" name="Pass2" />
139 <td valign="top" class="boxcontainer">
140 <&| /Widgets/TitleBox, title => loc('Location') &>
142 <tr><td align="right">
143 <&|/l&>Organization</&>:
145 <input name="Organization" value="<%$UserObj->Organization%>" />
147 <tr><td align="right">
150 <input name="Address1" value="<%$UserObj->Address1%>" />
152 <tr><td align="right">
155 <input name="Address2" value="<%$UserObj->Address2%>" />
157 <tr><td align="right">
160 <input name="City" value="<%$UserObj->City%>" size="14" />
163 <tr><td align="right">
166 <input name="State" value="<%$UserObj->State%>" size="3" />
169 <tr><td align="right">
172 <input name="Zip" value="<%$UserObj->Zip%>" size="9" />
174 <tr><td align="right">
177 <input name="Country" value="<%$UserObj->Country%>" />
182 <&| /Widgets/TitleBox, title => loc('Phone numbers') &>
184 <tr><td align="right">
185 <&|/l&>Residence</&>:
187 <input name="HomePhone" value="<%$UserObj->HomePhone%>" size="13" /><br />
189 <tr><td align="right">
192 <input name="WorkPhone" value="<%$UserObj->WorkPhone%>" size="13" /><br />
194 <tr><td align="right">
197 <input name="MobilePhone" value="<%$UserObj->MobilePhone%>" size="13" /><br />
199 <tr><td align="right">
202 <input name="PagerPhone" value="<%$UserObj->PagerPhone%>" size="13" /><br />
207 <&| /Widgets/TitleBox, title => loc('Custom Fields') &>
209 % my $CFs = $UserObj->CustomFields;
210 % while (my $CF = $CFs->Next) {
211 <tr valign="top"><td align="right">
214 % if ($UserObj->id) {
215 <& /Elements/EditCustomField, %ARGS, Object => $UserObj, CustomField => $CF &>
217 <& /Elements/EditCustomField, %ARGS, NamePrefix => 'Object-RT::User-new-CustomField-', CustomField => $CF &>
227 <&| /Widgets/TitleBox, title => loc('Comments about this user') &>
228 <textarea class="comments" name="Comments" cols="80" rows="5" wrap="virtual"><%$UserObj->Comments%></textarea>
230 %if ($UserObj->Privileged) {
232 <&| /Widgets/TitleBox, title => loc('Signature') &>
233 <textarea class="signature" cols="80" rows="5" name="Signature" wrap="hard"><%$UserObj->Signature%></textarea>
241 <& /Elements/Submit, Label => loc('Save Changes') &>
247 my $UserObj = new RT::User($session{'CurrentUser'});
248 my ($title, $PrivilegedChecked, $EnabledChecked, $Disabled, $result, @results);
253 $current_tab = 'Admin/Users/Modify.html?Create=1';
254 $title = loc("Create a new user");
258 $current_tab = 'Admin/Users/Modify.html?id='.$id;
260 ( $val, $msg ) = $UserObj->Create(
262 EmailAddress => $ARGS{'EmailAddress'},
263 Name => $ARGS{'Name'},
264 Comments => $ARGS{'Comments'},
265 Signature => $ARGS{'Signature'},
266 EmailAddress => $ARGS{'EmailAddress'},
267 FreeformContactInfo => $ARGS{'FreeformContactInfo'},
268 Organization => $ARGS{'Organization'},
269 RealName => $ARGS{'RealName'},
270 NickName => $ARGS{'NickName'},
271 Lang => $ARGS{'Lang'},
272 EmailEncoding => $ARGS{'EmailEncoding'},
273 WebEncoding => $ARGS{'WebEncoding'},
274 ExternalContactInfoId => $ARGS{'ExternalContactInfoId'},
275 ContactInfoSystem => $ARGS{'ContactInfoSystem'},
276 Gecos => $ARGS{'Gecos'},
277 ExternalAuthId => $ARGS{'ExternalAuthId'},
278 AuthSystem => $ARGS{'AuthSystem'},
279 HomePhone => $ARGS{'HomePhone'},
280 WorkPhone => $ARGS{'WorkPhone'},
281 MobilePhone => $ARGS{'MobilePhone'},
282 PagerPhone => $ARGS{'PagerPhone'},
283 Address1 => $ARGS{'Address1'},
284 Address2 => $ARGS{'Address2'},
285 City => $ARGS{'City'},
286 State => $ARGS{'State'},
288 Country => $ARGS{'Country'},
289 Privileged => $ARGS{'Privileged'},
290 Disabled => ($ARGS{'Enabled'} ? 0 : 1)
295 foreach my $key ( keys %ARGS) {
296 # Convert custom fields on the "new" object to custom fields on the one we've just created
297 if ($key =~ /^Object-RT::User-new-CustomField-(.*)$/) {
298 $ARGS{'Object-RT::User-'.$val.'-CustomField-'.$1} = delete $ARGS{$key};
301 push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj );
303 push @results, loc('User could not be created: [_1]', $msg);
306 $UserObj->Load($id) || $UserObj->Load($Name) || Abort("Couldn't load user '$Name'");
307 $val = $UserObj->Id();
311 $title = loc("Modify the user [_1]", $UserObj->Name);
314 # If the create failed
316 $title = loc("Create a new user");
324 # If we have a user to modify, lets try.
325 if ($UserObj->Id && $id ne 'new') {
327 my @fields = qw(Name Comments Signature EmailAddress FreeformContactInfo
328 Organization RealName NickName Lang EmailEncoding WebEncoding
329 ExternalContactInfoId ContactInfoSystem Gecos ExternalAuthId
330 AuthSystem HomePhone WorkPhone MobilePhone PagerPhone Address1
331 Address2 City State Zip Country
334 my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields,
337 push (@results,@fieldresults);
338 push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj );
341 # {{{ Deal with special fields: Privileged, Enabled
342 if ( $SetPrivileged and $Privileged != $UserObj->Privileged ) {
343 my ($code, $msg) = $UserObj->SetPrivileged($Privileged);
344 push @results, loc('Privileged status: [_1]', loc_fuzzy($msg));
347 #we're asking about enabled on the web page but really care about disabled.
348 $Disabled = $Enabled ? 0 : 1;
350 if ( ($SetEnabled) and ( $Disabled != $UserObj->Disabled) ) {
351 my ($code, $msg) = $UserObj->SetDisabled($Disabled);
352 push @results, loc('Enabled status [_1]', loc_fuzzy($msg));
359 if ( $UserObj->Id ) {
360 my $password_not_set;
361 # Deal with Password field
362 if ( !$Pass1 and !$Pass2 ) {
363 $password_not_set = 1;
364 } elsif ( $Pass1 ne $Pass2 ) {
365 $password_not_set = 1;
366 push @results, loc("Passwords do not match.");
367 } elsif ( $Pass1 eq $Pass2 and !$UserObj->IsPassword($Pass1) ) {
368 my ($code, $msg) = $UserObj->SetPassword($Pass1);
369 push @results, loc_fuzzy($msg);
370 $password_not_set = 1 unless $code;
372 if ($id eq 'new' and $password_not_set) {
373 push @results, loc("A password was not set, so user won't be able to login.");
378 # {{{ Do some setup for the ui
379 unless ($UserObj->Disabled()) {
380 $EnabledChecked ="CHECKED";
383 if ($UserObj->Privileged()) {
384 $PrivilegedChecked = "CHECKED";
389 # set the id, so the the menu will have the right info, this needs to
390 # be done here to avoid creating and then modifying a user
401 $EmailAddress => undef
402 $FreeformContactInfo => undef
403 $Organization => undef
407 $SetPrivileged => undef
411 $EmailEncoding => undef
412 $WebEncoding => undef
413 $ExternalContactInfoId => undef
414 $ContactInfoSystem => undef
416 $ExternalAuthId => undef
420 $MobilePhone => undef