1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
%# REST/1.0/Forms/user/default
%#
<%ARGS>
$id
$format => 's'
$changes => {}
</%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);
my %fields = map { lc $_ => $_ } @fields;
if ($id ne 'new') {
$user->Load($id);
if (!$user->Id) {
return [ "# User $id does not exist.", [], {}, 1 ];
}
}
else {
if (%data == 0) {
return [
"# Required: Name, EmailAddress",
[ qw(id Name EmailAddress Organization Password Comments) ],
{
id => "user/new",
Name => "",
EmailAddress => "",
Organization => "",
Password => "",
Comments => ""
},
0
];
}
else {
my %v;
my %create = %fields;
$create{name} = "Name";
$create{password} = "Password";
$create{emailaddress} = "EmailAddress";
$create{contactinfo} = "FreeformContactInfo";
# Do any fields need to be excluded here?
foreach my $k (keys %data) {
if (exists $create{lc $k}) {
$v{$create{lc $k}} = delete $data{$k};
}
}
$user->Create(%v);
unless ($user->Id) {
return [ "# Could not create user.", [], {}, 1 ];
}
$id = $user->Id;
delete $data{id};
push(@comments, "# User $id created.");
goto DONE if %data == 0;
}
}
if (%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;
if ($format eq 'l' || (defined $val && $val ne '')) {
$key = "ContactInfo" if $key eq 'FreeformContactInfo';
push @data, [ $key => $val ];
}
}
my %k = map {@$_} @data;
$o = [ map {$_->[0]} @data ];
$k = \%k;
}
else {
my ($get, $set, $key, $val, $n, $s);
foreach $key (keys %data) {
$val = $data{$key};
$key = lc $key;
$n = 1;
if ($key eq 'name' || $key eq 'emailaddress' ||
$key eq 'contactinfo' || exists $fields{$key})
{
if (exists $fields{$key}) {
$key = $fields{$key};
}
else {
$key = "FreeformContactInfo" if $key eq 'contactinfo';
$key = "EmailAddress" if $key eq 'emailaddress';
$key = "Name" if $key eq 'name';
}
$set = "Set$key";
next if $val eq $user->$key;
($n, $s) = $user->$set($val);
}
elsif ($key eq 'password') {
($n, $s) = $user->SetPassword($val) unless $val =~ /^\**$/;
}
elsif ($key ne 'id') {
$n = 0;
$s = "Unknown field.";
}
SET:
if ($n == 0) {
$e = 1;
push @comments, "# $key: $s";
unless (@$o) {
my %o = keys %$changes;
delete @o{"id", @fields};
@$o = ("id", @fields, keys %o);
$k = $changes;
}
}
}
push(@comments, "# User $id updated.") unless $n == 0;
}
DONE:
$c ||= join("\n", @comments) if @comments;
return [ $c, $o, $k, $e ];
</%perl>
|