[Rt-commit] rt branch, 4.4/selfservice-show-more-user-info, created. rt-4.4.2-236-g303bc6d9e

Maureen Mirville maureen at bestpractical.com
Fri Jun 8 12:43:32 EDT 2018


The branch, 4.4/selfservice-show-more-user-info has been created
        at  303bc6d9e5b3b495470c7980725bf2cd84b9e9d1 (commit)

- Log -----------------------------------------------------------------
commit 5b4fbb2925a41d70f69c87c30413e47e81eb78c3
Author: Maureen E. Mirville <maureen at bestpractical.com>
Date:   Wed May 9 10:46:03 2018 -0400

    Allow self service users varied access to their stored RT user information
    
    The self service user preferences page now has configurable displays
    using the config option, $SelfServiceUserPrefs. The default display
    remains the same (user can update locale and password). The full
    access viewing option allows the user to view all of their stored RT
    information (read only). The full access editing option allows users
    to make updates to their information.

diff --git a/etc/RT_Config.pm.in b/etc/RT_Config.pm.in
index 6fe7bc7a2..9236d6dfb 100644
--- a/etc/RT_Config.pm.in
+++ b/etc/RT_Config.pm.in
@@ -1798,6 +1798,36 @@ access ticked displays.
 
 Set($SelfServiceRegex, qr!^(?:/+SelfService/)!x );
 
+=item C<$SelfServiceUserPrefs>
+
+This option controls how the SelfService user preferences page is
+displayed. It accepts a string from one of the three possible modes
+below.
+
+=over
+
+=item C<brief> (the default)
+
+When set to C<brief>, self service users will be able to update
+their Timezone and Language preference and update their password.
+This is the default behavior of RT.
+
+=item C<full-view>
+
+When set to C<full-view>, users will have full access to all their
+user information stored in RT on a read-only page.
+
+=item C<full-edit>
+
+When set to C<full-edit>, users will be able to fully view and update
+all of their stored RT user information.
+
+=back
+
+=cut
+
+Set($SelfServiceUserPrefs, 'brief' );
+
 =back
 
 =head2 Articles
diff --git a/share/html/Prefs/AboutMe.html b/share/html/Prefs/AboutMe.html
index 7eaf36755..25b345d51 100644
--- a/share/html/Prefs/AboutMe.html
+++ b/share/html/Prefs/AboutMe.html
@@ -50,152 +50,7 @@
 
 <& /Elements/ListActions, actions => \@results &>
 
-<form action="<%RT->Config->Get('WebPath')%>/Prefs/AboutMe.html" method="post">
-<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'), id => "user-prefs-identity" &>
-
-<input type="hidden" class="hidden" name="Name" value="<%$UserObj->Name%>" />
-<table cellspacing="0" cellpadding="0">
-  <tr>
-    <td class="label"><&|/l&>Email</&>: </td>
-    <td class="value"><input name="EmailAddress" value="<%$UserObj->EmailAddress%>" /></td>
-  </tr>
-  <tr>
-    <td class="label"><&|/l&>Real Name</&>:</td>
-    <td class="value"><input name="RealName" value="<%$UserObj->RealName%>" /></td>  </tr>
-  <tr>
-    <td class="label"><&|/l&>Nickname</&>:</td>
-    <td class="value"><input name="NickName" value="<%$UserObj->NickName || ''%>" /></td>
-  </tr>
-  <tr>
-    <td class="label"><&|/l&>Language</&>:</td>
-    <td class="value"><& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang &></td>
-  </tr>
-  <tr>
-    <td class="label"><&|/l&>Timezone</&>:</td>
-    <td class="value"><& /Elements/SelectTimezone, Name => 'Timezone', Default => $UserObj->Timezone &></td>
-  </tr>
-<& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Identity', InTable => 1 &>
-</table>
-</&>
-<&| /Widgets/TitleBox, title => loc('Phone numbers'), id => "user-prefs-phone" &>
-<table cellspacing="0" cellpadding="0">
-  <tr>
-    <td class="label"><&|/l&>Residence</&>:</td>
-    <td class="value"><input name="HomePhone" value="<%$UserObj->HomePhone || ''%>" size="13" /></td>
-  </tr>
-  <tr>
-    <td class="label"><&|/l&>Work</&>:</td>
-    <td class="value"><input name="WorkPhone" value="<%$UserObj->WorkPhone || ''%>" size="13" /></td>
-  </tr>
-  <tr>
-    <td class="label"><&|/l&>Mobile</&>:</td>
-    <td class="value"><input name="MobilePhone" value="<%$UserObj->MobilePhone || ''%>" size="13" /></td>
-  </tr>
-  <tr>
-    <td class="label"><&|/l&>Pager</&>:</td>
-    <td class="value"><input name="PagerPhone" value="<%$UserObj->PagerPhone || ''%>" size="13" /></td>
-  </tr>
-<& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Phones', InTable => 1 &>
-</table>
-</&>
-
-%if ($UserObj->Privileged) {
-<&| /Widgets/TitleBox, title => loc('Signature'), id => "user-prefs-signature" &>
-<textarea cols="80" rows="5" name="Signature" class="signature" wrap="hard">
-<%$UserObj->Signature || ''%></textarea>
-</&>
-% }
-
-% $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormLeftColumn' );
-</td>
-<td valign="top" class="boxcontainer">
-
-<&| /Widgets/TitleBox, title => loc('Access control'), id => "user-prefs-password" &>
-% if ( $UserObj->__Value('Password') ne '*NO-PASSWORD*' ) {
-<& /Elements/EditPassword,
-    User => $UserObj,
-    Name => [qw(CurrentPass Pass1 Pass2)],
-&>
-% }
-
-<& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Access control' &>
-
-</&>
-
-<&| /Widgets/TitleBox, title => loc('Location'), id => "user-prefs-location" &>
-<table cellspacing="0" cellpadding="0">
-  <tr>
-    <td class="label"><&|/l&>Organization</&>:</td>
-    <td class="value"><input name="Organization" value="<%$UserObj->Organization || ''%>" /></td>
-  </tr>
-  <tr>
-    <td class="label"><&|/l&>Address1</&>:</td>
-    <td class="value"><input name="Address1" value="<%$UserObj->Address1 || ''%>" /></td>
-  </tr>
-  <tr>
-    <td class="label"><&|/l&>Address2</&>:</td>
-    <td class="value"><input name="Address2" value="<%$UserObj->Address2 || ''%>" /></td>
-  </tr>
-  <tr>
-    <td class="label"><&|/l&>City</&>:</td>
-    <td><input name="City" value="<%$UserObj->City || ''%>" size="14" /></td>
-  </tr>
-  <tr>
-    <td class="label"><&|/l&>State</&>:</td>
-    <td class="value"><input name="State" value="<%$UserObj->State || ''%>" size="3" /></td>
-  </tr>
-  <tr>
-    <td class="label"><&|/l&>Zip</&>:</td>
-    <td class="value"><input name="Zip" value="<%$UserObj->Zip || ''%>" size="9" /></td>
-  </tr>
-  <tr>
-    <td class="label"><&|/l&>Country</&>:</td>
-    <td class="value"><input name="Country" value="<%$UserObj->Country || ''%>" /></td>
-  </tr>
-<& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Location', InTable => 1 &>
-</table>
-</&>
-
-
-
-<& /Elements/EditCustomFieldCustomGroupings, Object => $UserObj &>
-
-
-
-<& /Elements/Submit, Label => loc('Save Preferences') &>
-
-<&| /Widgets/TitleBox, title => loc('Secret authentication token'), id => "user-prefs-feeds" &>
-
-<&|/l&>All iCal feeds embed a secret token which authorizes you.  If the URL for one of your iCal feeds was exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b>, below.</&>
-
-<a href="#" id="ResetAuthTokenPrompt" style="display: none">
-  <&|/l&>I want to reset my secret token.</&>
-</a>
-<& /Elements/Submit,
-    Label       => loc('Reset secret authentication token'),
-    Name        => "ResetAuthToken",
-    id          => "ResetAuthTokenContainer" &>
-<script>
-    jQuery("#ResetAuthTokenContainer").hide();
-    jQuery("#ResetAuthTokenPrompt").show().click(function(ev){
-        jQuery(this).slideUp();
-        jQuery("#ResetAuthTokenContainer").slideDown();
-        ev.preventDefault();
-    });
-</script>
-</&>
-
-% $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormRightColumn' );
-</td>
-</tr>
-
-</table>
+<& Elements/EditAboutMe, UserObj => $UserObj &>
 
 % $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormEnd' );
 
@@ -255,11 +110,11 @@ else {
     }
 
     my %password_cond = $UserObj->CurrentUserRequireToSetPassword;
-    if (defined $Pass1 && length $Pass1 ) {
+    if (defined $NewPass1 && length $NewPass1 ) {
         my ($status, $msg) = $UserObj->SafeSetPassword(
             Current      => $CurrentPass,
-            New          => $Pass1,
-            Confirmation => $Pass2,
+            New          => $NewPass1,
+            Confirmation => $NewPass2,
         );
         push @results, loc("Password: [_1]", $msg);
     }
@@ -300,7 +155,7 @@ $State  => undef
 $Zip  => undef
 $Country => undef
 $CurrentPass => undef
-$Pass1 => undef
-$Pass2 => undef
+$NewPass1 => undef
+$NewPass2 => undef
 $Create=> undef
 </%ARGS>
diff --git a/share/html/Prefs/AboutMe.html b/share/html/Prefs/Elements/EditAboutMe
similarity index 71%
copy from share/html/Prefs/AboutMe.html
copy to share/html/Prefs/Elements/EditAboutMe
index 7eaf36755..5569ec8ab 100644
--- a/share/html/Prefs/AboutMe.html
+++ b/share/html/Prefs/Elements/EditAboutMe
@@ -45,20 +45,14 @@
 %# those contributions and any derivatives thereof.
 %#
 %# END BPS TAGGED BLOCK }}}
-<& /Elements/Header, Title=>loc("Preferences") &>
-<& /Elements/Tabs &>
 
-<& /Elements/ListActions, actions => \@results &>
-
-<form action="<%RT->Config->Get('WebPath')%>/Prefs/AboutMe.html" method="post">
+<form name="EditAboutMe" action="" method="post">
 <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'), id => "user-prefs-identity" &>
-
 <input type="hidden" class="hidden" name="Name" value="<%$UserObj->Name%>" />
 <table cellspacing="0" cellpadding="0">
   <tr>
@@ -104,7 +98,6 @@
 <& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Phones', InTable => 1 &>
 </table>
 </&>
-
 %if ($UserObj->Privileged) {
 <&| /Widgets/TitleBox, title => loc('Signature'), id => "user-prefs-signature" &>
 <textarea cols="80" rows="5" name="Signature" class="signature" wrap="hard">
@@ -113,26 +106,29 @@
 % }
 
 % $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormLeftColumn' );
+
 </td>
 <td valign="top" class="boxcontainer">
-
 <&| /Widgets/TitleBox, title => loc('Access control'), id => "user-prefs-password" &>
 % if ( $UserObj->__Value('Password') ne '*NO-PASSWORD*' ) {
 <& /Elements/EditPassword,
     User => $UserObj,
-    Name => [qw(CurrentPass Pass1 Pass2)],
+    Name => [qw(CurrentPass NewPass1 NewPass2)],
 &>
 % }
-
 <& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Access control' &>
-
 </&>
 
+%my $AdminUser = $session{'CurrentUser'}->HasRight( Object => RT->System, Right => 'AdminUsers' );
 <&| /Widgets/TitleBox, title => loc('Location'), id => "user-prefs-location" &>
 <table cellspacing="0" cellpadding="0">
   <tr>
     <td class="label"><&|/l&>Organization</&>:</td>
+%if ( $AdminUser ) {
     <td class="value"><input name="Organization" value="<%$UserObj->Organization || ''%>" /></td>
+%} else {
+    <td class="value"><%$UserObj->Organization || ''%></td>
+%}
   </tr>
   <tr>
     <td class="label"><&|/l&>Address1</&>:</td>
@@ -161,15 +157,11 @@
 <& /Elements/EditCustomFields, Object => $UserObj, Grouping => 'Location', InTable => 1 &>
 </table>
 </&>
-
-
-
 <& /Elements/EditCustomFieldCustomGroupings, Object => $UserObj &>
 
-
-
 <& /Elements/Submit, Label => loc('Save Preferences') &>
 
+%if ( $AdminUser ) {
 <&| /Widgets/TitleBox, title => loc('Secret authentication token'), id => "user-prefs-feeds" &>
 
 <&|/l&>All iCal feeds embed a secret token which authorizes you.  If the URL for one of your iCal feeds was exposed to the outside world, you can get a new secret, <b>breaking all existing iCal feeds</b>, below.</&>
@@ -190,117 +182,13 @@
     });
 </script>
 </&>
+%}
 
 % $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormRightColumn' );
 </td>
 </tr>
-
 </table>
 
-% $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormEnd' );
-
-</form>
-
-
-<%INIT>
-
-my $UserObj = RT::User->new( $session{'CurrentUser'} );
-$UserObj->Load($id) if $id;
-$UserObj->Load($Name) if $Name && !$UserObj->id;
-unless ( $UserObj->id ) {
-    Abort(loc("Couldn't load user #[_1] or user '[_2]'", $id, $Name))
-        if $id && $Name;
-    Abort(loc("Couldn't load user #[_1]", $id))
-        if $id;
-    Abort(loc("Couldn't load user '[_1]'", $Name))
-        if $Name;
-    Abort(loc("Couldn't load user"));
-}
-$id = $UserObj->id;
-
-my @results;
-
-if ( $ARGS{'ResetAuthToken'} ) {
-    my ($status, $msg) = $UserObj->GenerateAuthToken;
-    push @results, $msg;
-}
-else {
-    my @fields = qw(
-        Name Comments Signature EmailAddress FreeformContactInfo 
-        Organization RealName NickName Lang Gecos HomePhone WorkPhone
-        MobilePhone PagerPhone Address1 Address2 City State Zip Country
-        Timezone
-    );
-
-    $m->callback(
-        CallbackName => 'UpdateLogic',
-        fields       => \@fields,
-        results      => \@results,
-        UserObj      => $UserObj,
-        ARGSRef      => \%ARGS,
-    );
-
-    push @results, UpdateRecordObject (
-        AttributesRef => \@fields,
-        Object => $UserObj,
-        ARGSRef => \%ARGS,
-    );
-
-    push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj );
-
-    # Deal with special fields: Privileged, Enabled, and Password
-    if  ( $SetPrivileged and $Privileged != $UserObj->Privileged ) {
-        my ($code, $msg) = $UserObj->SetPrivileged( $Privileged );
-        push @results, loc('Privileged status: [_1]', loc_fuzzy($msg));
-    }
-
-    my %password_cond = $UserObj->CurrentUserRequireToSetPassword;
-    if (defined $Pass1 && length $Pass1 ) {
-        my ($status, $msg) = $UserObj->SafeSetPassword(
-            Current      => $CurrentPass,
-            New          => $Pass1,
-            Confirmation => $Pass2,
-        );
-        push @results, loc("Password: [_1]", $msg);
-    }
-}
-
-
-MaybeRedirectForResults(
-    Actions   => \@results,
-);
-
-</%INIT>
-
-
 <%ARGS>
-$id => $session{'CurrentUser'}->Id
-$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
-$Gecos => 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
+$UserObj
 </%ARGS>
diff --git a/share/html/Prefs/Elements/ShowAboutMe b/share/html/Prefs/Elements/ShowAboutMe
new file mode 100644
index 000000000..f82a10b7e
--- /dev/null
+++ b/share/html/Prefs/Elements/ShowAboutMe
@@ -0,0 +1,141 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2018 Best Practical Solutions, LLC
+%#                                          <sales at 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 }}}
+
+<table width="100%" border="0">
+  <tr>
+    <td valign="top" class="boxcontainer">
+      <&| /Widgets/TitleBox, title => loc('Identity'), id => "user-prefs-identity" &>
+      <input type="hidden" class="hidden" name="Name" value="<%$UserObj->Name%>" />
+      <table cellspacing="0" cellpadding="0">
+        <tr>
+          <td class="label"><&|/l&>Email</&>:</td>
+          <td class="value"><%$UserObj->EmailAddress%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>Real Name</&>:</td>
+          <td class="value"><%$UserObj->RealName%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>Nickname</&>:</td>
+          <td class="value"><%$UserObj->NickName || ''%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>Language</&>:</td>
+          <td class="value"><%$UserObj->Lang%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>Timezone</&>:</td>
+          <td class="value"><%$UserObj->Timezone%></td>
+        </tr>
+      <& /Elements/ShowCustomFields, Object => $UserObj, Grouping => 'Identity', InTable => 1 &>
+      </table>
+      </&>
+      <&| /Widgets/TitleBox, title => loc('Phone numbers'), id => "user-prefs-phone" &>
+      <table cellspacing="0" cellpadding="0">
+        <tr>
+          <td class="label"><&|/l&>Residence</&>:</td>
+          <td class="value"><%$UserObj->HomePhone || ''%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>Work</&>:</td>
+          <td class="value"><%$UserObj->WorkPhone || ''%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>Mobile</&>:</td>
+          <td class="value"><%$UserObj->MobilePhone || ''%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>Pager</&>:</td>
+          <td class="value"><%$UserObj->PagerPhone || ''%></td>
+        </tr>
+      <& /Elements/ShowCustomFields, Object => $UserObj, Grouping => 'Phones', InTable => 1 &>
+      </table>
+      </&>
+    </td>
+    <td valign="top" class="boxcontainer">
+      <&| /Widgets/TitleBox, title => loc('Location'), id => "user-prefs-location" &>
+      <table cellspacing="0" cellpadding="0">
+        <tr>
+          <td class="label"><&|/l&>Organization</&>:</td>
+          <td class="value"><%$UserObj->Organization || ''%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>Address1</&>:</td>
+          <td class="value"><%$UserObj->Address1 || ''%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>Address2</&>:</td>
+          <td class="value"><%$UserObj->Address2 || ''%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>City</&>:</td>
+          <td class="value"><%$UserObj->City || ''%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>State</&>:</td>
+          <td class="value"><%$UserObj->State || ''%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>Zip</&>:</td>
+          <td class="value"><%$UserObj->Zip || ''%></td>
+        </tr>
+        <tr>
+          <td class="label"><&|/l&>Country</&>:</td>
+          <td class="value"><%$UserObj->Country || ''%></td>
+        </tr>
+      <& /Elements/ShowCustomFields, Object => $UserObj, Grouping => 'Location', InTable => 1 &>
+      </table>
+      </&>
+      <& /Elements/ShowCustomFieldCustomGroupings, Object => $UserObj &>
+    </td>
+  </tr>
+</table>
+
+<%ARGS>
+$UserObj
+</%ARGS>
diff --git a/share/html/SelfService/Prefs.html b/share/html/SelfService/Prefs.html
index b4c57c0fc..ea7bf7d58 100644
--- a/share/html/SelfService/Prefs.html
+++ b/share/html/SelfService/Prefs.html
@@ -48,6 +48,12 @@
 <& /SelfService/Elements/Header, Title => loc('Preferences') &>
 
 <& /Elements/ListActions, actions => \@results &>
+% my $pref = RT->Config->Get( 'SelfServiceUserPrefs' ) || '';
+% if ( $pref eq 'full-edit' ) {
+<& /Prefs/Elements/EditAboutMe, UserObj => $user &>
+% } elsif ( $pref eq 'full-view' ) {
+<& /Prefs/Elements/ShowAboutMe, UserObj => $user &>
+% } else {
 <form method="post">
 
 <table width="100%" border="0">
@@ -81,13 +87,14 @@
 <& /Elements/Submit, Label => loc('Save Changes') &>
 </form>
 
+% }
 
 <%INIT>
 my @results;
 
 my $user = $session{'CurrentUser'}->UserObj;
 
-if (defined $NewPass1 && length $NewPass1 ) {
+if ( defined $NewPass1 && length $NewPass1 ) {
     my ($status, $msg) = $user->SafeSetPassword(
         Current      => $CurrentPass,
         New          => $NewPass1,
@@ -97,7 +104,9 @@ if (defined $NewPass1 && length $NewPass1 ) {
 }
 
 my @fields = qw(
-        Lang Timezone
+        Name Comments EmailAddress FreeformContactInfo Organization RealName
+        NickName Lang Gecos HomePhone WorkPhone MobilePhone PagerPhone Address1
+        Address2 City State Zip Country Timezone
     );
 
 $m->callback(
@@ -114,6 +123,8 @@ push @results, UpdateRecordObject (
     ARGSRef => \%ARGS,
 );
 
+push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $user );
+
 if ( $Lang ) {
     $session{'CurrentUser'}->LanguageHandle($Lang);
     $session{'CurrentUser'} = $session{'CurrentUser'}; # force writeback
@@ -129,6 +140,10 @@ if ($Signature) {
 
 #A hack to make sure that session gets rewritten.
 $session{'i'}++;
+
+MaybeRedirectForResults(
+    Actions   => \@results,
+);
 </%INIT>
 
 <%ARGS>

commit 08ab3b671021c9cd43d645bc726b0e66b77930bd
Author: Maureen E. Mirville <maureen at bestpractical.com>
Date:   Fri Jun 8 12:38:22 2018 -0400

    Clean up SelfService code that is not being used

diff --git a/share/html/SelfService/Prefs.html b/share/html/SelfService/Prefs.html
index ea7bf7d58..993de96b6 100644
--- a/share/html/SelfService/Prefs.html
+++ b/share/html/SelfService/Prefs.html
@@ -130,14 +130,6 @@ if ( $Lang ) {
     $session{'CurrentUser'} = $session{'CurrentUser'}; # force writeback
 }
 
-if ($Signature) {
-    $Signature =~ s/(\r\n|\r)/\n/g;
-    if ($Signature ne $user->Signature) {
-        my ($val, $msg) = $user->SetSignature($Signature);
-        push (@results, "Signature: ".$msg);
-    }
-}
-
 #A hack to make sure that session gets rewritten.
 $session{'i'}++;
 
@@ -147,7 +139,6 @@ MaybeRedirectForResults(
 </%INIT>
 
 <%ARGS>
-$Signature => undef
 $CurrentPass => undef
 $NewPass1 => undef
 $NewPass2 => undef

commit 303bc6d9e5b3b495470c7980725bf2cd84b9e9d1
Author: Maureen E. Mirville <maureen at bestpractical.com>
Date:   Fri Jun 8 12:05:02 2018 -0400

    Add $SelfServiceUserPrefs config tests to verify SelfService display

diff --git a/t/web/self_service.t b/t/web/self_service.t
index 7afc008c6..99d4c4d92 100644
--- a/t/web/self_service.t
+++ b/t/web/self_service.t
@@ -2,7 +2,7 @@ use strict;
 use warnings;
 
 use RT::Test
-  tests  => 17,
+  tests  => undef,
   config => 'Set( $ShowUnreadMessageNotifications, 1 );'
 ;
 
@@ -51,4 +51,35 @@ $m->follow_link_ok(
 $m->content_contains( "<h1>$title</h1>", "contains <h1>$title</h1>" );
 $m->content_lacks( "There are unread messages on this ticket." );
 
+diag 'Test $SelfServiceUserPrefs config';
+{
+  # Verify the $SelfServiceUserPrefs config option renders the correct display at
+  # /SelfService/Prefs.html for each of the available options
+
+  is( RT->Config->Get( 'SelfServiceUserPrefs' ), 'brief', '$SelfServiceUserPrefs is set to "brief" by default' );
+
+  for my $config ( 'brief', 'full-view', 'full-edit' ) {
+    RT::Test->stop_server;
+    RT->Config->Set( SelfServiceUserPrefs => $config );
+    ( $url, $m ) = RT::Test->started_ok;
+    ok( $m->login('user_a' => 'password'), 'unprivileged user logged in' );
+    $m->get_ok( '/SelfService/Prefs.html');
+
+    if ( $config eq 'brief' ) {
+      $m->content_lacks( 'Nickname', "'Brief' option does not contain full user info" );
+    } elsif ( $config eq 'full-view' ) {
+      $m->content_lacks( '<td class="value"><input name="NickName" value="" /></td>', "'Full-view' option contains no input fields for full user info" );
+    } else {
+      RT::Test->add_rights( { Principal => $user_a, Right => ['ModifySelf'] } );
+      my $nickname = 'user_a_nickname';
+      $m->form_name('EditAboutMe');
+      $m->field( NickName => $nickname );
+      $m->submit;
+      $m->content_contains( $nickname, "'Full-edit' option allows user to update user info" );
+    }
+  }
+}
+
 # TODO need more SelfService tests
+
+done_testing();

-----------------------------------------------------------------------


More information about the rt-commit mailing list