%# BEGIN BPS TAGGED BLOCK {{{
%#
%# COPYRIGHT:
%#
%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
%#                                          <sales@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
%#
%#
%# LICENSE:
%#
%# This work is made available to you under the terms of Version 2 of
%# the GNU General Public License. A copy of that license should have
%# been provided with this software, but in any event can be snarfed
%# from www.gnu.org.
%#
%# This work is distributed in the hope that it will be useful, but
%# WITHOUT ANY WARRANTY; without even the implied warranty of
%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
%# General Public License for more details.
%#
%# You should have received a copy of the GNU General Public License
%# along with this program; if not, write to the Free Software
%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
%# 02110-1301 or visit their web page on the internet at
%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
%#
%#
%# CONTRIBUTION SUBMISSION POLICY:
%#
%# (The following paragraph is not intended to limit the rights granted
%# to you to modify and distribute this software under the terms of
%# the GNU General Public License and is only of importance to you if
%# you choose to contribute your changes and enhancements to the
%# community by submitting them to Best Practical Solutions, LLC.)
%#
%# By intentionally submitting any modifications, corrections or
%# derivatives to this work, or any other work intended for use with
%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
%# you are the copyright holder for those contributions and you grant
%# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
%# royalty-free, perpetual, license to use, copy, create derivative
%# works based on those contributions, and sublicense and distribute
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
<& /Admin/Elements/Header, Title => $title  &>
<& /Elements/Tabs &>

<& /Elements/ListActions, actions => \@results &>

<form action="<%RT->Config->Get('WebPath')%>/Admin/Users/Modify.html" method="post" enctype="multipart/form-data">
%if ($Create) {
<input type="hidden" class="hidden" name="id" value="new" />
% } else {
<input type="hidden" class="hidden" name="id" value="<%$UserObj->Id%>" />
% }
<table width="100%" border="0">
<tr>

<td valign="top" class="boxcontainer">
<&| /Widgets/TitleBox, title => loc('Identity') &>

<table>
<tr><td align="right">
<&|/l&>Username</&>:
</td><td>
<input name="Name" value="<%$UserObj->Name||$Name||''%>" /> <strong><&|/l&>(required)</&></strong>
</td></tr>
<tr><td align="right">
<&|/l&>Email</&>:
</td><td>
<input name="EmailAddress" value="<%$UserObj->EmailAddress||$EmailAddress||''%>" />
</td></tr>
<tr><td align="right">
<&|/l&>Real Name</&>: 
</td><td>
<input name="RealName" value="<%$UserObj->RealName||$RealName||''%>" />
</td></tr>
<tr><td align="right">
<&|/l&>Nickname</&>: 
</td><td>
<input name="NickName" value="<%$UserObj->NickName||$NickName||''%>" />
</td></tr>
<tr><td align="right">
<&|/l&>Unix login</&>: 
</td><td>
<input name="Gecos" value="<%$UserObj->Gecos||$Gecos||''%>" />
</td></tr>
<tr><td align="right">
<&|/l&>Language</&>: 
</td><td>
<& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang||$Lang &>
</td></tr>
<tr><td align="right">
<&|/l&>Extra info</&>: 
</td><td>
<textarea name="FreeformContactInfo" cols="20" rows="5"><%$UserObj->FreeformContactInfo||$FreeformContactInfo||''%></textarea>
</td></tr>
</table>
</&>
<br />
<&| /Widgets/TitleBox, title => loc('Access control') &>
<input type="hidden" class="hidden" name="SetEnabled" value="1" />
<input type="checkbox" class="checkbox" name="Enabled" value="1" <%$EnabledChecked%> />
<&|/l&>Let this user access RT</&><br />


<input type="hidden" class="hidden" name="SetPrivileged" value="1" />
<input type="checkbox" class="checkbox" name="Privileged" value="1" <%$PrivilegedChecked||''%> /> <&|/l&>Let this user be granted rights</&> (<&|/l&>Privileged</&>)<br />

<& /Elements/EditPassword,
    User => $UserObj,
    Name => [qw(CurrentPass Pass1 Pass2)],
&>
</&>
% $m->callback( %ARGS, CallbackName => 'LeftColumnBottom', UserObj => $UserObj );
</td>

<td valign="top" class="boxcontainer">
<&| /Widgets/TitleBox, title => loc('Location') &>
<table>
<tr><td align="right">
<&|/l&>Organization</&>: 
</td><td>
<input name="Organization" value="<%$UserObj->Organization||$Organization||''%>" />
</td></tr>
<tr><td align="right">
<&|/l&>Address1</&>: 
</td><td>
<input name="Address1" value="<%$UserObj->Address1||$Address1||''%>" />
</td></tr>
<tr><td align="right">
<&|/l&>Address2</&>: 
</td><td>
<input name="Address2" value="<%$UserObj->Address2||$Address2||''%>" />
</td></tr>
<tr><td align="right">
<&|/l&>City</&>: 
</td><td>
<input name="City" value="<%$UserObj->City||$City||''%>" size="14" />

</td></tr>
<tr><td align="right">
<&|/l&>State</&>: 
</td><td>
<input name="State" value="<%$UserObj->State||$State||''%>" size="3" />

</td></tr>
<tr><td align="right">
<&|/l&>Zip</&>: 
</td><td>
<input name="Zip" value="<%$UserObj->Zip||$Zip||''%>" size="9" />
</td></tr>
<tr><td align="right">
<&|/l&>Country</&>: 
</td><td>
<input name="Country" value="<%$UserObj->Country||$Country||''%>" />
</td></tr>
</table>
</&>
<br />
<&| /Widgets/TitleBox, title => loc('Phone numbers') &>
<table>
<tr><td align="right">
<&|/l&>Residence</&>: 
</td><td>
<input name="HomePhone" value="<%$UserObj->HomePhone||$HomePhone||''%>" size="13" /><br />
</td></tr>
<tr><td align="right">
<&|/l&>Work</&>: 
</td><td>
<input name="WorkPhone" value="<%$UserObj->WorkPhone||$WorkPhone||''%>" size="13" /><br />
</td></tr>
<tr><td align="right">
<&|/l&>Mobile</&>: 
</td><td>
<input name="MobilePhone" value="<%$UserObj->MobilePhone||$MobilePhone||''%>" size="13" /><br />
</td></tr>
<tr><td align="right">
<&|/l&>Pager</&>: 
</td><td>
<input name="PagerPhone" value="<%$UserObj->PagerPhone||$PagerPhone||''%>" size="13" /><br />
</td>
</tr>
</table>
</&>
<br />
<&| /Widgets/TitleBox, title => loc('Custom Fields') &>
<table>
% my $CFs = $UserObj->CustomFields;
% while (my $CF = $CFs->Next) {
<tr valign="top"><td align="right">
<% loc($CF->Name) %>:
</td><td>
% if ($UserObj->id) {
<& /Elements/EditCustomField, %ARGS, Object => $UserObj, CustomField => $CF &>
% } else {
<& /Elements/EditCustomField, %ARGS, NamePrefix => 'Object-RT::User--CustomField-', CustomField => $CF &>
% }
</td></tr>
% }
</table>
</&>
% $m->callback( %ARGS, CallbackName => 'RightColumnBottom', UserObj => $UserObj );
</td></tr>
<tr>
<td colspan="2">
<&| /Widgets/TitleBox, title => loc('Comments about this user') &>
<textarea class="comments" name="Comments" cols="80" rows="5" wrap="virtual"><%$UserObj->Comments||$Comments||''%></textarea>
</&>
%if (!$Create && $UserObj->Privileged) {
<br />
<&| /Widgets/TitleBox, title => loc('Signature') &>
<textarea class="signature" cols="80" rows="5" name="Signature" wrap="hard"><%$UserObj->Signature||$Signature||''%></textarea>
</&>
% }

</td>
</tr>
</table>

% if ( $Create ) {
<& /Elements/Submit, Label => loc('Create') &>
% } else {
<& /Elements/Submit, Label => loc('Save Changes') &>
% }
</form>

<%INIT>

my $UserObj = RT::User->new($session{'CurrentUser'});
my ($title, $PrivilegedChecked, $EnabledChecked, $Disabled, $result, @results);

my ($val, $msg);

if ($Create) {
    $title = loc("Create a new user");
} 
else {

    if ( defined $id && $id eq 'new') {
	( $val, $msg ) = $UserObj->Create(
	    Name                  => $Name,
	    EmailAddress          => $ARGS{'EmailAddress'},
	    Name                  => $ARGS{'Name'},
	    Comments              => $ARGS{'Comments'},
	    Signature             => $ARGS{'Signature'},
	    EmailAddress          => $ARGS{'EmailAddress'},
	    FreeformContactInfo   => $ARGS{'FreeformContactInfo'},
	    Organization          => $ARGS{'Organization'},
	    RealName              => $ARGS{'RealName'},
	    NickName              => $ARGS{'NickName'},
	    Lang                  => $ARGS{'Lang'},
	    EmailEncoding         => $ARGS{'EmailEncoding'},
	    WebEncoding           => $ARGS{'WebEncoding'},
	    ExternalContactInfoId => $ARGS{'ExternalContactInfoId'},
	    ContactInfoSystem     => $ARGS{'ContactInfoSystem'},
	    Gecos                 => $ARGS{'Gecos'},
	    ExternalAuthId        => $ARGS{'ExternalAuthId'},
	    AuthSystem            => $ARGS{'AuthSystem'},
	    HomePhone             => $ARGS{'HomePhone'},
	    WorkPhone             => $ARGS{'WorkPhone'},
	    MobilePhone           => $ARGS{'MobilePhone'},
	    PagerPhone            => $ARGS{'PagerPhone'},
	    Address1              => $ARGS{'Address1'},
	    Address2              => $ARGS{'Address2'},
	    City                  => $ARGS{'City'},
	    State                 => $ARGS{'State'},
	    Zip                   => $ARGS{'Zip'},
	    Country               => $ARGS{'Country'},
	    Privileged           => $ARGS{'Privileged'},
	    Disabled            => ($ARGS{'Enabled'} ? 0 : 1)
	);

	if ($val) {
		push @results, $msg;
        push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj );
	} else {
		push @results, loc('User could not be created: [_1]', $msg);
	}
    } else {
	    $UserObj->Load($id) || $UserObj->Load($Name) 
            || Abort("Couldn't load user '" . ( $Name || '') . "'");
        $val = $UserObj->Id();
    }

    if ($val) {
	$title = loc("Modify the user [_1]", $UserObj->Name);
    }

    # If the create failed
    else {
	$title = loc("Create a new user");
	$Create = 1;
    }
}


$m->callback( %ARGS, CallbackName => 'BeforeUpdate', User => $UserObj, ARGSRef => \%ARGS, Results => \@results );


# If we have a user to modify, lets try. 
if ($UserObj->Id && $id ne 'new') {

    my @fields = qw(Name Comments Signature EmailAddress FreeformContactInfo 
		    Organization RealName NickName Lang EmailEncoding WebEncoding 
		    ExternalContactInfoId ContactInfoSystem Gecos ExternalAuthId 
		    AuthSystem HomePhone WorkPhone MobilePhone PagerPhone Address1
		    Address2 City State Zip Country 
		   );

    my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields,
					    Object => $UserObj,
					    ARGSRef => \%ARGS );
    push (@results,@fieldresults);
    push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj );


    # {{{ Deal with special fields: Privileged, Enabled
    if  ( $SetPrivileged and $Privileged != $UserObj->Privileged ) {
         my ($code, $msg) = $UserObj->SetPrivileged($Privileged);
         push @results, loc('Privileged status: [_1]', loc_fuzzy($msg));
    }

    #we're asking about enabled on the web page but really care about disabled.
    $Disabled = $Enabled ? 0 : 1;

    if  ( ($SetEnabled) and ( $Disabled != $UserObj->Disabled) ) { 
        my  ($code, $msg) = $UserObj->SetDisabled($Disabled);
        push @results, $msg;
    }


}


my %password_cond = $UserObj->CurrentUserRequireToSetPassword;
if ( $UserObj->Id ) {
    # Deal with Password field
    my ($status, $msg) = $UserObj->SafeSetPassword(
        Current      => $CurrentPass,
        New          => $Pass1,
        Confirmation => $Pass2,
    );
    push @results, $msg;

    if ( $id eq 'new' && !$status ) {
        push @results, loc("A password was not set, so user won't be able to login.");
    }
}


# Do some setup for the ui
unless ( $UserObj->id && $UserObj->Disabled ) {
    $EnabledChecked = 'checked="checked"';
}

if ((!$Create && $UserObj->Privileged()) or (!$UserObj->Id and $Privileged)) {  
    $PrivilegedChecked = 'checked="checked"';
}

# This code does automatic redirection if any updates happen.
MaybeRedirectForResults(
    Actions   => \@results,
    Arguments => { id => $UserObj->Id },
) if $UserObj->Id;

</%INIT>


<%ARGS>
$id => undef
$Name  => undef
$Comments  => undef
$Signature  => undef
$EmailAddress  => undef
$FreeformContactInfo => undef
$Organization  => undef
$RealName  => undef
$NickName  => undef
$Privileged => undef
$SetPrivileged => undef
$Enabled => undef
$SetEnabled => undef
$Lang  => undef
$EmailEncoding  => undef
$WebEncoding => undef
$ExternalContactInfoId  => undef
$ContactInfoSystem  => undef
$Gecos => undef
$ExternalAuthId  => undef
$AuthSystem  => undef
$HomePhone => undef
$WorkPhone  => undef
$MobilePhone  => undef
$PagerPhone  => undef
$Address1 => undef
$Address2  => undef
$City  => undef
$State  => undef
$Zip  => undef
$Country => undef
$CurrentPass => undef
$Pass1 => undef
$Pass2 => undef
$Create=> undef
</%ARGS>
