1 %# BEGIN BPS TAGGED BLOCK {{{
5 %# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
6 %# <sales@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/licenses/old-licenses/gpl-2.0.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->Config->Get('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>
109 <&| /Widgets/TitleBox, title => loc('Customers') &>
110 <& /Elements/EditCustomers, Object => $UserObj, CustomerString=> $CustomerString, ServiceString => $ServiceString &>
114 <&| /Widgets/TitleBox, title => loc('Access control') &>
115 <input type="hidden" class="hidden" name="SetEnabled" value="1" />
116 <input type="checkbox" class="checkbox" name="Enabled" value="1" <%$EnabledChecked%> />
117 <&|/l&>Let this user access RT</&><br />
120 <input type="hidden" class="hidden" name="SetPrivileged" value="1" />
121 <input type="checkbox" class="checkbox" name="Privileged" value="1" <%$PrivilegedChecked||''%> /> <&|/l&>Let this user be granted rights</&> (<&|/l&>Privileged</&>)<br />
123 <& /Elements/EditPassword,
125 Name => [qw(CurrentPass Pass1 Pass2)],
128 % $m->callback( %ARGS, CallbackName => 'LeftColumnBottom', UserObj => $UserObj );
131 <td valign="top" class="boxcontainer">
132 <&| /Widgets/TitleBox, title => loc('Location') &>
134 <tr><td align="right">
135 <&|/l&>Organization</&>:
137 <input name="Organization" value="<%$UserObj->Organization||''%>" />
139 <tr><td align="right">
142 <input name="Address1" value="<%$UserObj->Address1||''%>" />
144 <tr><td align="right">
147 <input name="Address2" value="<%$UserObj->Address2||''%>" />
149 <tr><td align="right">
152 <input name="City" value="<%$UserObj->City||''%>" size="14" />
155 <tr><td align="right">
158 <input name="State" value="<%$UserObj->State||''%>" size="3" />
161 <tr><td align="right">
164 <input name="Zip" value="<%$UserObj->Zip||''%>" size="9" />
166 <tr><td align="right">
169 <input name="Country" value="<%$UserObj->Country||''%>" />
174 <&| /Widgets/TitleBox, title => loc('Phone numbers') &>
176 <tr><td align="right">
177 <&|/l&>Residence</&>:
179 <input name="HomePhone" value="<%$UserObj->HomePhone||''%>" size="13" /><br />
181 <tr><td align="right">
184 <input name="WorkPhone" value="<%$UserObj->WorkPhone||''%>" size="13" /><br />
186 <tr><td align="right">
189 <input name="MobilePhone" value="<%$UserObj->MobilePhone||''%>" size="13" /><br />
191 <tr><td align="right">
194 <input name="PagerPhone" value="<%$UserObj->PagerPhone||''%>" size="13" /><br />
200 <&| /Widgets/TitleBox, title => loc('Custom Fields') &>
202 % my $CFs = $UserObj->CustomFields;
203 % while (my $CF = $CFs->Next) {
204 <tr valign="top"><td align="right">
205 <% loc($CF->Name) %>:
207 % if ($UserObj->id) {
208 <& /Elements/EditCustomField, %ARGS, Object => $UserObj, CustomField => $CF &>
210 <& /Elements/EditCustomField, %ARGS, NamePrefix => 'Object-RT::User-new-CustomField-', CustomField => $CF &>
216 % $m->callback( %ARGS, CallbackName => 'RightColumnBottom', UserObj => $UserObj );
220 <&| /Widgets/TitleBox, title => loc('Comments about this user') &>
221 <textarea class="comments" name="Comments" cols="80" rows="5" wrap="virtual"><%$UserObj->Comments||''%></textarea>
223 %if (!$Create && $UserObj->Privileged) {
225 <&| /Widgets/TitleBox, title => loc('Signature') &>
226 <textarea class="signature" cols="80" rows="5" name="Signature" wrap="hard"><%$UserObj->Signature||''%></textarea>
235 <& /Elements/Submit, Label => loc('Create') &>
237 <& /Elements/Submit, Label => loc('Save Changes') &>
244 my $UserObj = new RT::User($session{'CurrentUser'});
245 my ($title, $PrivilegedChecked, $EnabledChecked, $Disabled, $result, @results);
250 $current_tab = 'Admin/Users/Modify.html?Create=1';
251 $title = loc("Create a new user");
255 $current_tab = 'Admin/Users/Modify.html?id='.$id if $id;
257 if ( defined $id && $id eq 'new') {
258 ( $val, $msg ) = $UserObj->Create(
260 EmailAddress => $ARGS{'EmailAddress'},
261 Name => $ARGS{'Name'},
262 Comments => $ARGS{'Comments'},
263 Signature => $ARGS{'Signature'},
264 EmailAddress => $ARGS{'EmailAddress'},
265 FreeformContactInfo => $ARGS{'FreeformContactInfo'},
266 Organization => $ARGS{'Organization'},
267 RealName => $ARGS{'RealName'},
268 NickName => $ARGS{'NickName'},
269 Lang => $ARGS{'Lang'},
270 EmailEncoding => $ARGS{'EmailEncoding'},
271 WebEncoding => $ARGS{'WebEncoding'},
272 ExternalContactInfoId => $ARGS{'ExternalContactInfoId'},
273 ContactInfoSystem => $ARGS{'ContactInfoSystem'},
274 Gecos => $ARGS{'Gecos'},
275 ExternalAuthId => $ARGS{'ExternalAuthId'},
276 AuthSystem => $ARGS{'AuthSystem'},
277 HomePhone => $ARGS{'HomePhone'},
278 WorkPhone => $ARGS{'WorkPhone'},
279 MobilePhone => $ARGS{'MobilePhone'},
280 PagerPhone => $ARGS{'PagerPhone'},
281 Address1 => $ARGS{'Address1'},
282 Address2 => $ARGS{'Address2'},
283 City => $ARGS{'City'},
284 State => $ARGS{'State'},
286 Country => $ARGS{'Country'},
287 Privileged => $ARGS{'Privileged'},
288 Disabled => ($ARGS{'Enabled'} ? 0 : 1)
293 foreach my $key ( keys %ARGS) {
294 # Convert custom fields on the "new" object to custom fields on the one we've just created
295 if ($key =~ /^Object-RT::User-new-CustomField-(.*)$/) {
296 $ARGS{'Object-RT::User-'.$val.'-CustomField-'.$1} = delete $ARGS{$key};
299 push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj );
301 push @results, loc('User could not be created: [_1]', $msg);
304 $UserObj->Load($id) || $UserObj->Load($Name)
305 || Abort("Couldn't load user '" . ( $Name || '') . "'");
306 $val = $UserObj->Id();
310 $title = loc("Modify the user [_1]", $UserObj->Name);
313 # If the create failed
315 $title = loc("Create a new user");
323 # If we have a user to modify, lets try.
324 if ($UserObj->Id && $id ne 'new') {
326 my @fields = qw(Name Comments Signature EmailAddress FreeformContactInfo
327 Organization RealName NickName Lang EmailEncoding WebEncoding
328 ExternalContactInfoId ContactInfoSystem Gecos ExternalAuthId
329 AuthSystem HomePhone WorkPhone MobilePhone PagerPhone Address1
330 Address2 City State Zip Country
333 my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields,
336 push (@results,@fieldresults);
337 push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj );
339 #deal with freeside customer links
340 push @results, ProcessObjectCustomers( ARGSRef => \%ARGS, Object => $UserObj );
342 # {{{ Deal with special fields: Privileged, Enabled
343 if ( $SetPrivileged and $Privileged != $UserObj->Privileged ) {
344 my ($code, $msg) = $UserObj->SetPrivileged($Privileged);
345 push @results, loc('Privileged status: [_1]', loc_fuzzy($msg));
348 #we're asking about enabled on the web page but really care about disabled.
349 $Disabled = $Enabled ? 0 : 1;
351 if ( ($SetEnabled) and ( $Disabled != $UserObj->Disabled) ) {
352 my ($code, $msg) = $UserObj->SetDisabled($Disabled);
361 my %password_cond = $UserObj->CurrentUserRequireToSetPassword;
362 if ( $UserObj->Id ) {
363 # Deal with Password field
364 my ($status, $msg) = $UserObj->SafeSetPassword(
365 Current => $CurrentPass,
367 Confirmation => $Pass2,
371 if ( $id eq 'new' && !$status ) {
372 push @results, loc("A password was not set, so user won't be able to login.");
377 # Do some setup for the ui
378 unless ( $UserObj->id && $UserObj->Disabled ) {
379 $EnabledChecked = 'checked="checked"';
382 if (!$Create && $UserObj->Privileged()) {
383 $PrivilegedChecked = 'checked="checked"';
386 # set the id, so the the menu will have the right info, this needs to
387 # be done here to avoid creating and then modifying a user
398 $EmailAddress => undef
399 $FreeformContactInfo => undef
400 $Organization => undef
404 $SetPrivileged => undef
408 $EmailEncoding => undef
409 $WebEncoding => undef
410 $ExternalContactInfoId => undef
411 $ContactInfoSystem => undef
413 $ExternalAuthId => undef
417 $MobilePhone => undef
425 $CurrentPass => undef
429 $OnlySearchForCustomers => undef
430 $OnlySearchForServices => undef
431 $CustomerString => undef
432 $ServiceString => undef