rt 4.2.16
[freeside.git] / rt / share / html / REST / 1.0 / Forms / user / default
index 036a862..54ceb65 100755 (executable)
@@ -1,40 +1,40 @@
 %# BEGIN BPS TAGGED BLOCK {{{
-%# 
+%#
 %# COPYRIGHT:
-%# 
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%#                                          <jesse@bestpractical.com>
-%# 
+%#
+%# This software is Copyright (c) 1996-2019 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
@@ -43,7 +43,7 @@
 %# 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 }}}
 %# REST/1.0/Forms/user/default
 %#
 $id
 $format => 's'
 $changes => {}
+$fields => undef
 </%ARGS>
 <%perl>
 my @comments;
 my ($c, $o, $k, $e) = ("", [], {}, 0);
 my %data = %$changes;
-my $user = new RT::User $session{CurrentUser};
-my @fields = qw(RealName NickName Gecos Organization Address1 Address2 City
-                State Zip Country HomePhone WorkPhone MobilePhone PagerPhone
-                FreeformContactInfo Comments Signature Lang EmailEncoding
-                WebEncoding ExternalContactInfoId ContactInfoSystem
-                ExternalAuthId AuthSystem Privileged Disabled);
+my $user = RT::User->new($session{CurrentUser});
+
+my @fields =
+  qw(Name EmailAddress RealName NickName Gecos Organization Address1
+  Address2 City State Zip Country HomePhone WorkPhone MobilePhone PagerPhone
+  FreeformContactInfo Comments Signature Lang EmailEncoding
+  WebEncoding ExternalContactInfoId ContactInfoSystem
+  ExternalAuthId AuthSystem Privileged Disabled);
+
+if ( $fields && %$fields ) {
+  @fields = grep { exists $fields->{ lc $_ } } @fields;
+}
+
 my %fields = map { lc $_ => $_ } @fields;
 
 if ($id ne 'new') {
@@ -117,26 +125,45 @@ if (keys %data == 0) {
     my @data;
 
     push @data, [ id => "user/".$user->Id ];
-    push @data, [ Name => $user->Name ];
-    push @data, [ Password => '********' ];
-    push @data, [ EmailAddress => $user->EmailAddress ];
 
-    foreach my $key (@fields) {
-        my $val = $user->$key;
+    unless ( $fields && %$fields && !exists $fields->{'password'} ) {
+        push @data, [ Password => '********' ];
+    }
 
-        if ( (defined ($format) && $format eq 'l') || (defined $val && $val ne '')) {
+    for my $key (@fields) {
+        my $val = $user->$key;
+        if (   ( $fields && exists $fields->{ lc $key } )
+            || ( defined $format && $format eq 'l' )
+            || ( defined $val && $val ne '' ) )
+        {
             $key = "ContactInfo" if $key eq 'FreeformContactInfo';
             push @data, [ $key => $val ];
         }
     }
 
+    # Custom fields
+    my $CustomFields = $user->CustomFields;
+    while ( my $CustomField = $CustomFields->Next() ) {
+        # show cf unless there are specified fields that don't include it
+        next
+            unless ( !%$fields
+            || exists $fields->{ lc "CF-" . $CustomField->Name } );
+        next unless $CustomField->CurrentUserHasRight('SeeCustomField');
+        my $CFvalues = $user->CustomFieldValues( $CustomField->Id );
+        my @CFvalues;
+        while ( my $CFvalue = $CFvalues->Next() ) {
+            push @CFvalues, $CFvalue->Content;
+        }
+        push @data, [ "CF-" . $CustomField->Name => \@CFvalues ];
+    }
+
     my %k = map {@$_} @data;
     $o = [ map {$_->[0]} @data ];
     $k = \%k;
 }
 else {
     my ($get, $set, $key, $val, $n, $s);
-
+    my $updated;
     foreach $key (keys %data) {
         $val = $data{$key};
         $key = lc $key;
@@ -177,9 +204,12 @@ else {
                 $k = $changes;
             }
         }
+        else {
+            $updated ||= 1;
+        }
     }
 
-    push(@comments, "# User $id updated.") unless $n == 0;
+    push(@comments, "# User $id updated.") if $updated;
 }
 
 DONE: