%#
%# COPYRIGHT:
%#
-%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC
%# <sales@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
$id
$format => 's'
$changes => {}
+$fields => undef
</%ARGS>
<%perl>
my @comments;
my ($c, $o, $k, $e) = ("", [], {}, 0);
my %data = %$changes;
my $user = RT::User->new($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 @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') {
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;
$k = $changes;
}
}
+ else {
+ $updated ||= 1;
+ }
}
- push(@comments, "# User $id updated.") unless $n == 0;
+ push(@comments, "# User $id updated.") if $updated;
}
DONE: