diff options
Diffstat (limited to 'rt/share/html/Admin/Users')
-rw-r--r-- | rt/share/html/Admin/Users/DashboardsInMenu.html | 118 | ||||
-rw-r--r-- | rt/share/html/Admin/Users/History.html | 5 | ||||
-rw-r--r-- | rt/share/html/Admin/Users/Keys.html (renamed from rt/share/html/Admin/Users/GnuPG.html) | 59 | ||||
-rw-r--r-- | rt/share/html/Admin/Users/Memberships.html | 90 | ||||
-rwxr-xr-x | rt/share/html/Admin/Users/Modify.html | 287 | ||||
-rw-r--r-- | rt/share/html/Admin/Users/MyRT.html | 11 | ||||
-rwxr-xr-x | rt/share/html/Admin/Users/index.html | 25 |
7 files changed, 275 insertions, 320 deletions
diff --git a/rt/share/html/Admin/Users/DashboardsInMenu.html b/rt/share/html/Admin/Users/DashboardsInMenu.html new file mode 100644 index 000000000..bdbcc9816 --- /dev/null +++ b/rt/share/html/Admin/Users/DashboardsInMenu.html @@ -0,0 +1,118 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2015 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 => \@actions &> + +<form method="post" action="DashboardsInMenu.html"> +<input type="hidden" name="id" value="<% $id %>" /> +<input type="hidden" name="Reset" value="1" /> +<input type="submit" class="button" value="<%loc('Reset to default')%>"> +</form> + +<br /> + +% for my $pane (@panes) { +<&|/Widgets/TitleBox, title => loc('Dashboards in menu'), bodyclass => "" &> +<& /Widgets/SelectionBox:show, self => $pane &></&> +<br /> +% } + +<%init> +my @actions; +my $UserObj = RT::User->new($session{'CurrentUser'}); +$UserObj->Load($id) || Abort("Couldn't load user '" . ($id || '') . "'"); +my $title = loc("Dashboards in menu for the user [_1]", $UserObj->Name); + +if ($ARGS{Reset}) { + my ($ok, $msg) = $UserObj->SetPreferences('DashboardsInMenu', {}); + push @actions, $ok ? loc('Preferences saved for user [_1].', $UserObj->Name) : $msg; +} + +my ($default_dashboards) = +RT::System->new($session{'CurrentUser'})->Attributes->Named('DashboardsInMenu'); + +my $user = RT::CurrentUser->new( $session{CurrentUser} ); +$user->Load( $UserObj->id ); +my @dashboards = + map { [ $_->id, $_->Name ] } + $m->comp( "/Dashboards/Elements/ListOfDashboards", User => $user, IncludeSuperuserGroups => 0 ); + + +my $current_pref = + $UserObj->Preferences( 'DashboardsInMenu', + $default_dashboards ? $default_dashboards->Content : () ); +my $current_portlets = + $current_pref && $current_pref->{dashboards} + ? $current_pref->{dashboards} + : []; + +my @panes = $m->comp( + '/Admin/Elements/ConfigureDashboardsInMenu', + Action => "DashboardsInMenu.html?id=$id", + panes => ['dashboards_in_menu'], + items => \@dashboards, + current_portlets => $current_portlets, + OnSave => sub { + my ($conf) = @_; + my ( $ok, $msg ) = + $UserObj->SetPreferences( 'DashboardsInMenu', $conf ); + push @actions, + $ok ? loc('Preferences saved for dashboards in menu.') : $msg; + } +); + + +$m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_ ) + for @panes; + +</%init> +<%ARGS> +$id => undef +</%ARGS> diff --git a/rt/share/html/Admin/Users/History.html b/rt/share/html/Admin/Users/History.html index 752b20f83..cda3f736e 100644 --- a/rt/share/html/Admin/Users/History.html +++ b/rt/share/html/Admin/Users/History.html @@ -48,9 +48,10 @@ <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> -<& /Ticket/Elements/ShowHistory, - Ticket => $UserObj, +<& /Elements/ShowHistory, + Object => $UserObj, ShowDisplayModes => 0, + DisplayPath => 'History.html', &> <%INIT> diff --git a/rt/share/html/Admin/Users/GnuPG.html b/rt/share/html/Admin/Users/Keys.html index 3ca593a5d..699075904 100644 --- a/rt/share/html/Admin/Users/GnuPG.html +++ b/rt/share/html/Admin/Users/Keys.html @@ -45,7 +45,7 @@ %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} -<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/Header, Title => loc("[_1]'s encryption keys",$UserObj->Name) &> <& /Elements/Tabs &> <& /Elements/ListActions, actions => \@results &> @@ -56,11 +56,11 @@ <h2><% loc("User has empty email address") %></h2> % } - -<form action="<%RT->Config->Get('WebPath')%>/Admin/Users/GnuPG.html" method="post" enctype="multipart/form-data"> +<form action="<%RT->Config->Get('WebPath')%>/Admin/Users/Keys.html" method="post" enctype="multipart/form-data"> <input type="hidden" class="hidden" name="id" value="<% $UserObj->Id %>" /> -<&|/Widgets/TitleBox, title => 'GnuPG private key'&> +% if (RT::Crypt->UseForOutgoing eq 'GnuPG') { +<&|/Widgets/TitleBox, title => loc('GnuPG private key') &> <& /Widgets/Form/Select, Name => 'PrivateKey', Description => loc('Private Key'), @@ -69,17 +69,23 @@ DefaultLabel => loc('No private key'), &> </&> +% } + +% if (RT::Crypt->UseForOutgoing eq 'SMIME') { +<&|/Widgets/TitleBox, title => loc('SMIME Certificate') &> +<textarea name="SMIMECertificate"><% $UserObj->SMIMECertificate || '' %></textarea> +</&> +% } <& /Elements/Submit, Name => 'Update', Label => loc('Save Changes') &> </form> + <%ARGS> $id => undef $Update => undef </%ARGS> <%INIT> -return unless RT->Config->Get('GnuPG')->{'Enable'}; - -require RT::Crypt::GnuPG; +return unless RT->Config->Get('Crypt')->{'Enable'}; my @results; @@ -90,27 +96,36 @@ unless ( $UserObj->id ) { } $id = $ARGS{'id'} = $UserObj->id; +my @potential_keys; my $email = $UserObj->EmailAddress; -my %keys_meta = RT::Crypt::GnuPG::GetKeysForSigning( $email ); -my @potential_keys = map $_->{'Key'}, @{ $keys_meta{'info'} || [] }; -$ARGS{'PrivateKey'} = $m->comp('/Widgets/Form/Select:Process', - Name => 'PrivateKey', - Arguments => \%ARGS, - Default => 1, -); +if (RT::Crypt->UseForOutgoing eq 'GnuPG') { + my %keys_meta = RT::Crypt->GetKeysForSigning( Signer => $email, Protocol => 'GnuPG' ); + @potential_keys = map $_->{'Key'}, @{ $keys_meta{'info'} || [] }; + + $ARGS{'PrivateKey'} = $m->comp('/Widgets/Form/Select:Process', + Name => 'PrivateKey', + Arguments => \%ARGS, + Default => 1, + ); -if ( $Update ) { - if (not $ARGS{'PrivateKey'} or grep {$_ eq $ARGS{'PrivateKey'}} @potential_keys) { - if (($ARGS{'PrivateKey'}||'') ne ($UserObj->PrivateKey||'')) { - my ($status, $msg) = $UserObj->SetPrivateKey( $ARGS{'PrivateKey'} ); - push @results, $msg; + if ( $Update ) { + if (not $ARGS{'PrivateKey'} or grep {$_ eq $ARGS{'PrivateKey'}} @potential_keys) { + if (($ARGS{'PrivateKey'}||'') ne ($UserObj->PrivateKey||'')) { + my ($status, $msg) = $UserObj->SetPrivateKey( $ARGS{'PrivateKey'} ); + push @results, $msg; + } + } else { + push @results, loc("Invalid key [_1] for address '[_2]'", $ARGS{'PrivateKey'}, $email); } - } else { - push @results, loc("Invalid key [_1] for address '[_2]'", $ARGS{'PrivateKey'}, $email); } } -my $title = loc("[_1]'s GnuPG keys",$UserObj->Name); +if (RT::Crypt->UseForOutgoing eq 'SMIME') { + if ( $Update and ($ARGS{'SMIMECertificate'}||'') ne ($UserObj->SMIMECertificate||'') ) { + my ($status, $msg) = $UserObj->SetSMIMECertificate( $ARGS{'SMIMECertificate'} ); + push @results, $msg; + } +} </%INIT> diff --git a/rt/share/html/Admin/Users/Memberships.html b/rt/share/html/Admin/Users/Memberships.html index 74f10b813..1910ff5c2 100644 --- a/rt/share/html/Admin/Users/Memberships.html +++ b/rt/share/html/Admin/Users/Memberships.html @@ -45,92 +45,4 @@ %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} -<& /Admin/Elements/Header, Title => $title &> -<& /Elements/Tabs &> - -<& /Elements/ListActions, actions => \@results &> - -<form method="post" action=""> -<input type="hidden" id="<% $id %>" /> - -<h2><&|/l&>Groups the user is member of (check box to delete)</&></h2> - -<& /Elements/CollectionList, - OrderBy => 'Name', - Order => 'ASC', - %ARGS, - Rows => 20, - DisplayFormat => "__CheckBox.{Delete}__,$Format", - Format => $Format, - Collection => $is_member, - AllowSorting => 1, - PassArguments => [qw(Format Rows Page Order OrderBy id)], -&> - -<h2><&|/l&>Groups the user is not member of (check box to add)</&></h2> - -<& /Elements/CollectionList, - OrderBy => 'Name', - Order => 'ASC', - Rows => 20, - %ARGS, - DisplayFormat => "__CheckBox.{Add}__,'__HasMemberRecursively.{$id}__/TITLE:Recursive',$Format", - Format => $Format, - Collection => $is_not_member, - AllowSorting => 1, - PassArguments => [qw(Format Rows Page Order OrderBy id)], -&> - -<& /Elements/Submit, Label => loc('Update'), Name => 'Update' &> - -</form> - -<%INIT> -my $UserObj = RT::User->new($session{'CurrentUser'}); -$UserObj->Load( $id ) || Abort("Couldn't load user '$id'"); - -my $title = loc("Memberships of the user [_1]", $UserObj->Name); - -my @results; -if ( $Update ) { - foreach my $gid( @Add ) { - my $group = RT::Group->new( $session{'CurrentUser'} ); - $group->LoadUserDefinedGroup( $gid ); - unless ( $group->id ) { - push @results, loc( "Couldn't load group #[_1]", $gid ); - next; - } - my ($status, $msg) = $group->AddMember( $id ); - push @results, $msg; - } - foreach my $gid( @Delete ) { - my $group = RT::Group->new( $session{'CurrentUser'} ); - $group->LoadUserDefinedGroup( $gid ); - unless ( $group->id ) { - push @results, loc( "Couldn't load group #[_1]", $gid ); - next; - } - my ($status, $msg) = $group->DeleteMember( $id ); - push @results, $msg; - } -} - -my $is_member = RT::Groups->new( $session{'CurrentUser'} ); -$is_member->LimitToUserDefinedGroups; -$is_member->WithMember( PrincipalId => $UserObj->Id ); - -my $is_not_member = RT::Groups->new( $session{'CurrentUser'} ); -$is_not_member->LimitToUserDefinedGroups; -$is_not_member->WithoutMember( PrincipalId => $UserObj->Id ); - -$Format ||= RT->Config->Get('AdminSearchResultFormat')->{'Groups'}; -</%INIT> -<%ARGS> -$id => undef - -$Update => 0, -@Add => (), -@Delete => (), - -$Format => undef -</%ARGS> +<& /Admin/Elements/MembershipsPage, %ARGS &> diff --git a/rt/share/html/Admin/Users/Modify.html b/rt/share/html/Admin/Users/Modify.html index 62d828c18..fc944dc3e 100755 --- a/rt/share/html/Admin/Users/Modify.html +++ b/rt/share/html/Admin/Users/Modify.html @@ -50,7 +50,7 @@ <& /Elements/ListActions, actions => \@results &> -<form action="<%RT->Config->Get('WebPath')%>/Admin/Users/Modify.html" method="post" enctype="multipart/form-data"> +<form action="<%RT->Config->Get('WebPath')%>/Admin/Users/Modify.html" method="post" enctype="multipart/form-data" name="<% $Create ? 'UserCreate': 'UserModify' %>"> %if ($Create) { <input type="hidden" class="hidden" name="id" value="new" /> % } else { @@ -60,46 +60,48 @@ <tr> <td valign="top" class="boxcontainer"> -<&| /Widgets/TitleBox, title => loc('Identity') &> +<&| /Widgets/TitleBox, title => loc('Identity'), class => 'user-info-identity' &> <table> <tr><td align="right"> <&|/l&>Username</&>: </td><td> -<input name="Name" value="<%$UserObj->Name||$Name||''%>" /> <strong><&|/l&>(required)</&></strong> +<input name="Name" value="<%$UserObj->Name//$ARGS{Name}//''%>" /> <strong><&|/l&>(required)</&></strong> </td></tr> <tr><td align="right"> <&|/l&>Email</&>: </td><td> -<input name="EmailAddress" value="<%$UserObj->EmailAddress||$EmailAddress||''%>" /> +<input name="EmailAddress" value="<%$UserObj->EmailAddress//$ARGS{EmailAddress}//''%>" /> </td></tr> <tr><td align="right"> -<&|/l&>Real Name</&>: +<&|/l&>Real Name</&>: </td><td> -<input name="RealName" value="<%$UserObj->RealName||$RealName||''%>" /> +<input name="RealName" value="<%$UserObj->RealName//$ARGS{RealName}//''%>" /> </td></tr> <tr><td align="right"> -<&|/l&>Nickname</&>: +<&|/l&>Nickname</&>: </td><td> -<input name="NickName" value="<%$UserObj->NickName||$NickName||''%>" /> +<input name="NickName" value="<%$UserObj->NickName//$ARGS{NickName}//''%>" /> </td></tr> <tr><td align="right"> -<&|/l&>Unix login</&>: +<&|/l&>Unix login</&>: </td><td> -<input name="Gecos" value="<%$UserObj->Gecos||$Gecos||''%>" /> +<input name="Gecos" value="<%$UserObj->Gecos//$ARGS{Gecos}//''%>" /> </td></tr> <tr><td align="right"> -<&|/l&>Language</&>: +<&|/l&>Language</&>: </td><td> -<& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang||$Lang &> +<& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang//$ARGS{Lang} &> </td></tr> <tr><td align="right"> -<&|/l&>Extra info</&>: +<&|/l&>Extra info</&>: </td><td> -<textarea name="FreeformContactInfo" cols="20" rows="5"><%$UserObj->FreeformContactInfo||$FreeformContactInfo||''%></textarea> +<textarea name="FreeformContactInfo" cols="20" rows="5"><%$UserObj->FreeformContactInfo//$ARGS{FreeformContactInfo}//''%></textarea> </td></tr> +<& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Identity', InTable => 1 &> </table> </&> + <br /> <&| /Widgets/TitleBox, title => loc('Customers') &> @@ -107,119 +109,117 @@ </&> <br /> -<&| /Widgets/TitleBox, title => loc('Access control') &> +<&| /Widgets/TitleBox, title => loc('Access control'), class => 'user-info-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="checkbox" class="checkbox" id="Enabled" name="Enabled" value="1" <% ($UserObj->Id && $UserObj->Disabled) ? '' : 'checked="checked"' |n%> /> +<label for="Enabled"><&|/l&>Let this user access RT</&></label><br /> +% my $PrivilegedChecked = ((!$Create && $UserObj->Privileged()) or (!$UserObj->Id and $ARGS{Privileged})) ? 'checked="checked"' : ''; <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 /> +<input type="checkbox" class="checkbox" id="Privileged" name="Privileged" value="1" <%$PrivilegedChecked|n%> /> +<label for="Privileged"><&|/l&>Let this user be granted rights</&> (<&|/l&>Privileged</&>)</label><br /> <& /Elements/EditPassword, User => $UserObj, Name => [qw(CurrentPass Pass1 Pass2)], &> + +<& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Access control' &> + </&> % $m->callback( %ARGS, CallbackName => 'LeftColumnBottom', UserObj => $UserObj ); </td> <td valign="top" class="boxcontainer"> -<&| /Widgets/TitleBox, title => loc('Location') &> +<&| /Widgets/TitleBox, title => loc('Location'), class => 'user-info-location' &> <table> <tr><td align="right"> -<&|/l&>Organization</&>: +<&|/l&>Organization</&>: </td><td> -<input name="Organization" value="<%$UserObj->Organization||$Organization||''%>" /> +<input name="Organization" value="<%$UserObj->Organization//$ARGS{Organization}//''%>" /> </td></tr> <tr><td align="right"> -<&|/l&>Address1</&>: +<&|/l&>Address1</&>: </td><td> -<input name="Address1" value="<%$UserObj->Address1||$Address1||''%>" /> +<input name="Address1" value="<%$UserObj->Address1//$ARGS{Address1}//''%>" /> </td></tr> <tr><td align="right"> -<&|/l&>Address2</&>: +<&|/l&>Address2</&>: </td><td> -<input name="Address2" value="<%$UserObj->Address2||$Address2||''%>" /> +<input name="Address2" value="<%$UserObj->Address2//$ARGS{Address2}//''%>" /> </td></tr> <tr><td align="right"> -<&|/l&>City</&>: +<&|/l&>City</&>: </td><td> -<input name="City" value="<%$UserObj->City||$City||''%>" size="14" /> +<input name="City" value="<%$UserObj->City//$ARGS{City}//''%>" size="14" /> </td></tr> <tr><td align="right"> -<&|/l&>State</&>: +<&|/l&>State</&>: </td><td> -<input name="State" value="<%$UserObj->State||$State||''%>" size="3" /> +<input name="State" value="<%$UserObj->State//$ARGS{State}//''%>" size="3" /> </td></tr> <tr><td align="right"> -<&|/l&>Zip</&>: +<&|/l&>Zip</&>: </td><td> -<input name="Zip" value="<%$UserObj->Zip||$Zip||''%>" size="9" /> +<input name="Zip" value="<%$UserObj->Zip//$ARGS{Zip}//''%>" size="9" /> </td></tr> <tr><td align="right"> -<&|/l&>Country</&>: +<&|/l&>Country</&>: </td><td> -<input name="Country" value="<%$UserObj->Country||$Country||''%>" /> +<input name="Country" value="<%$UserObj->Country//$ARGS{Country}//''%>" /> </td></tr> + +<& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Location', InTable => 1 &> + </table> </&> <br /> -<&| /Widgets/TitleBox, title => loc('Phone numbers') &> +<&| /Widgets/TitleBox, title => loc('Phone numbers'), class => 'user-info-phones' &> <table> <tr><td align="right"> -<&|/l&>Residence</&>: +<&|/l&>Residence</&>: </td><td> -<input name="HomePhone" value="<%$UserObj->HomePhone||$HomePhone||''%>" size="13" /><br /> +<input name="HomePhone" value="<%$UserObj->HomePhone//$ARGS{HomePhone}//''%>" size="13" /><br /> </td></tr> <tr><td align="right"> -<&|/l&>Work</&>: +<&|/l&>Work</&>: </td><td> -<input name="WorkPhone" value="<%$UserObj->WorkPhone||$WorkPhone||''%>" size="13" /><br /> +<input name="WorkPhone" value="<%$UserObj->WorkPhone//$ARGS{WorkPhone}//''%>" size="13" /><br /> </td></tr> <tr><td align="right"> -<&|/l&>Mobile</&>: +<&|/l&>Mobile</&>: </td><td> -<input name="MobilePhone" value="<%$UserObj->MobilePhone||$MobilePhone||''%>" size="13" /><br /> +<input name="MobilePhone" value="<%$UserObj->MobilePhone//$ARGS{MobilePhone}//''%>" size="13" /><br /> </td></tr> <tr><td align="right"> -<&|/l&>Pager</&>: +<&|/l&>Pager</&>: </td><td> -<input name="PagerPhone" value="<%$UserObj->PagerPhone||$PagerPhone||''%>" size="13" /><br /> +<input name="PagerPhone" value="<%$UserObj->PagerPhone//$ARGS{PagerPhone}//''%>" size="13" /><br /> </td> </tr> + +<& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Phones', InTable => 1 &> + </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> -</&> + +<& /Elements/EditCustomFieldCustomGroupings, Object => $UserObj &> + % $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> +<&| /Widgets/TitleBox, title => loc('Comments about this user'), class => 'user-info-comments' &> +<textarea class="comments" name="Comments" cols="80" rows="5" wrap="virtual"><%$UserObj->Comments//$ARGS{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> +<&| /Widgets/TitleBox, title => loc('Signature'), class => 'user-info-signature' &> +<textarea class="signature" cols="80" rows="5" name="Signature" wrap="hard"><%$UserObj->Signature//$ARGS{Signature}//''%></textarea> </&> % } @@ -237,114 +237,69 @@ <%INIT> my $UserObj = RT::User->new($session{'CurrentUser'}); -my ($title, $PrivilegedChecked, $EnabledChecked, $Disabled, $result, @results); ++my ($title, @results); my ($val, $msg); +$ARGS{Privileged} = $ARGS{Privileged} ? 1 : 0; +delete $ARGS{Privileged} unless $ARGS{SetPrivileged}; + +$ARGS{Disabled} = $ARGS{Enabled} ? 0 : 1; +delete $ARGS{Disabled} unless $ARGS{SetEnabled}; + +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 + ); + 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(); - } +} elsif ( defined $id && $id eq 'new') { + ( $val, $msg ) = $UserObj->Create( + (map {($_ => $ARGS{$_})} @fields), + Privileged => $ARGS{'Privileged'}, + Disabled => $ARGS{'Disabled'}, + ); if ($val) { - $title = loc("Modify the user [_1]", $UserObj->Name); - } - - # If the create failed - else { - $title = loc("Create a new user"); - $Create = 1; + push @results, $msg; + push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj ); + $title = loc("Modify the user [_1]", $UserObj->Name); + } else { + push @results, loc('User could not be created: [_1]', $msg); + $title = loc("Create a new user"); + $Create = 1; } -} - - -$m->callback( %ARGS, CallbackName => 'BeforeUpdate', User => $UserObj, ARGSRef => \%ARGS, Results => \@results ); +} else { + $UserObj->Load($id) || $UserObj->Load($ARGS{Name}) + || Abort("Couldn't load user '" . ( $ARGS{Name} || '') . "'"); + $title = loc("Modify the user [_1]", $UserObj->Name); -# 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 - ); + $m->callback( %ARGS, CallbackName => 'BeforeUpdate', User => $UserObj, ARGSRef => \%ARGS, Results => \@results ); my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields, - Object => $UserObj, - ARGSRef => \%ARGS ); + Object => $UserObj, + ARGSRef => \%ARGS ); push (@results,@fieldresults); push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj ); #deal with freeside customer links push @results, ProcessObjectCustomers( 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)); + if ( defined $ARGS{Privileged} and $ARGS{Privileged} != ($UserObj->Privileged || 0) ) { + my ($code, $msg) = $UserObj->SetPrivileged($ARGS{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); + if ( defined $ARGS{Disabled} and $ARGS{Disabled} != $UserObj->Disabled ) { + my ($code, $msg) = $UserObj->SetDisabled($ARGS{Disabled}); push @results, $msg; } - - } - -my %password_cond = $UserObj->CurrentUserRequireToSetPassword; if ( $UserObj->Id ) { # Deal with Password field my ($status, $msg) = $UserObj->SafeSetPassword( @@ -359,16 +314,6 @@ if ( $UserObj->Id ) { } } - -# 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, @@ -380,36 +325,6 @@ MaybeRedirectForResults( <%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 diff --git a/rt/share/html/Admin/Users/MyRT.html b/rt/share/html/Admin/Users/MyRT.html index c9a193aec..37d4b3b46 100644 --- a/rt/share/html/Admin/Users/MyRT.html +++ b/rt/share/html/Admin/Users/MyRT.html @@ -48,8 +48,6 @@ <& /Admin/Elements/Header, Title => $title &> <& /Elements/Tabs &> -<& /Widgets/SelectionBox:header, nojs => 1 &> - <& /Elements/ListActions, actions => \@actions &> <form method="post" action="MyRT.html"> @@ -62,7 +60,7 @@ % for my $pane (@panes) { <&|/Widgets/TitleBox, title => loc('RT at a glance').': '.loc($pane->{Name}), bodyclass => "" &> -<& /Widgets/SelectionBox:show, self => $pane, nojs => 1 &></&> +<& /Widgets/SelectionBox:show, self => $pane &></&> <br /> % } @@ -100,7 +98,8 @@ for my $object (@objs) { else { my $oid = ref($object).'-'.$object->Id.'-SavedSearch-'.$search->Id; my $type = ($SearchType eq 'Ticket') - ? 'Saved Search' : $SearchType; # loc + ? 'Saved Search' # loc + : $SearchType; push @items, ["saved-$oid", loc($type).": $loc_desc"]; } } @@ -108,7 +107,7 @@ for my $object (@objs) { my @panes = $m->comp( '/Admin/Elements/ConfigureMyRT', - panes => ['body', 'summary'], + panes => ['body', 'sidebar'], Action => "MyRT.html?id=$id", items => \@items, current_portlets => $portlets, @@ -119,7 +118,7 @@ my @panes = $m->comp( } ); -$m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_, nojs => 1 ) +$m->comp( '/Widgets/SelectionBox:process', %ARGS, self => $_ ) for @panes; </%init> diff --git a/rt/share/html/Admin/Users/index.html b/rt/share/html/Admin/Users/index.html index ec3368b3b..94d0fa578 100755 --- a/rt/share/html/Admin/Users/index.html +++ b/rt/share/html/Admin/Users/index.html @@ -58,19 +58,13 @@ <input type="hidden" name="UserField" value="Name" /> <input type="hidden" name="UserOp" value="LIKE" /> <&|/l&>Go to user</&> -<input type="text" name="UserString" value="" id="autocomplete-UserString" /> +<input type="text" name="UserString" value="" data-autocomplete="Users" data-autocomplete-return="Name" id="autocomplete-UserString" /> <script type="text/javascript"> jQuery(function(){ - jQuery("#autocomplete-UserString").autocomplete({ - source: <% RT->Config->Get('WebPath') |n,j%>+"/Helpers/Autocomplete/Users?return=Name", - // Auto-submit once a user is chosen - select: function( event, ui ) { - jQuery(event.target).val(ui.item.value); - var form = jQuery(event.target).closest('form'); - form.find('input[name=UserOp]').val('='); - form.submit(); - } - }).addClass("autocompletes-user"); + // Jump directly to the page if a user is chosen + jQuery("#autocomplete-UserString").on("autocompleteselect", function( event, ui ) { + document.location = RT.Config.WebPath + "/Admin/Users/Modify.html?id=" + ui.item.id; + }); }); </script> </form> @@ -81,8 +75,8 @@ jQuery(function(){ <input type="hidden" name="<% $field %>" value="<% $ARGS{ $field } %>" /> % } <&|/l&>Find all users whose</&> <& /Elements/SelectUsers, %ARGS, Fields => \@fields &><br /> -<input type="checkbox" class="checkbox" name="FindDisabledUsers" value="1" <% $FindDisabledUsers? 'checked="checked"': '' %> /> -<&|/l&>Include disabled users in search.</&> +<input type="checkbox" class="checkbox" id="FindDisabledUsers" name="FindDisabledUsers" value="1" <% $FindDisabledUsers? 'checked="checked"': '' %> /> +<label for="FindDisabledUsers"><&|/l&>Include disabled users in search.</&></label> <br /> <div align="right"><input type="submit" class="button" value="<&|/l&>Go!</&>" /></div> </form> @@ -95,7 +89,7 @@ jQuery(function(){ <& /Elements/CollectionList, OrderBy => 'Name', Order => 'ASC', - Rows => 100, + Rows => $Rows, %ARGS, Format => $Format, Collection => $users, @@ -135,13 +129,14 @@ else { } $Format ||= RT->Config->Get('AdminSearchResultFormat')->{'Users'}; +my $Rows = RT->Config->Get('AdminSearchResultRows')->{'Users'} || 50; # Build up the list of fields to display for searching my $i = 0; my %sorted = map { $_ => $i++ } qw( Name EmailAddress RealName Organization NickName WorkPhone HomePhone MobilePhone PagerPhone Address1 Address2 City State Zip Country - Timezone Lang Gecos Comments + Timezone Lang Gecos SMIMECertificate Comments ); my @attrs = sort { $sorted{$a} <=> $sorted{$b} } |