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
142
143
144
|
%# REST/1.0/Forms/ticket/history
%#
<%ARGS>
$id
$args => undef
$format => undef
$fields => undef
</%ARGS>
<%perl>
my $ticket = new RT::Ticket $session{CurrentUser};
my ($c, $o, $k, $e) = ("", [], {}, "");
$ticket->Load($id);
unless ($ticket->Id) {
return [ "# Ticket $id does not exist.", [], {}, 1 ];
}
my $trans = $ticket->Transactions();
my $total = $trans->Count();
chomp $args;
my @arglist = split('/', $args);
my ($type, $tid);
if ($arglist[0] eq 'type') {
$type = $arglist[1];
} elsif ($arglist[0] eq 'id') {
$tid = $arglist[1];
} else {
$type = $args;
}
if ($type) {
# Create, Set, Status, Correspond, Comment, Give, Steal, Take, Told
# CustomField, AddLink, DeleteLink, AddWatcher, DelWatcher
if ($args =~ /^links?$/) {
$trans->Limit(FIELD => 'Type', OPERATOR => 'LIKE', VALUE => '%Link');
}
elsif ($args =~ /^watchers?$/) {
$trans->Limit(FIELD => 'Type', OPERATOR => 'LIKE', VALUE => '%Watcher');
}
else {
$trans->Limit(FIELD => 'Type', OPERATOR => '=', VALUE => $type);
}
} elsif ($tid) {
$trans->Limit(FIELD => 'Id', OPERATOR => '=', VALUE => $tid);
}
if ($tid) {
my @data;
my $t = new RT::Transaction $session{CurrentUser};
$t->Load($tid);
push @data, [ id => $t->Id ];
push @data, [ EffectiveTicket => $t->EffectiveTicket ]
if (!%$fields || exists $fields->{lc 'EffectiveTicket'});
push @data, [ Ticket => $t->Ticket ]
if (!%$fields || exists $fields->{lc 'Ticket'});
push @data, [ TimeTaken => $t->TimeTaken ]
if (!%$fields || exists $fields->{lc 'TimeTaken'});
push @data, [ Type => $t->Type ]
if (!%$fields || exists $fields->{lc 'Type'});
push @data, [ Field => $t->Field ]
if (!%$fields || exists $fields->{lc 'Field'});
push @data, [ OldValue => $t->OldValue ]
if (!%$fields || exists $fields->{lc 'OldValue'});
push @data, [ NewValue => $t->NewValue ]
if (!%$fields || exists $fields->{lc 'NewValue'});
push @data, [ Data => $t->Data ]
if (!%$fields || exists $fields->{lc 'Data'});
push @data, [ Description => $t->Description ]
if (!%$fields || exists $fields->{lc 'Description'});
push @data, [ Content => $t->Content ]
if (!%$fields || exists $fields->{lc 'Content'});
if (!%$fields || exists $fields->{lc 'Content'}) {
my $creator = new RT::User $session{CurrentUser};
$creator->Load($t->Creator);
push @data, [ Creator => $creator->Name ];
}
push @data, [ Created => $t->Created ]
if (!%$fields || exists $fields->{lc 'Created'});
if (!%$fields || exists $fields->{lc 'Attachments'}) {
my $attachlist;
my $attachments = $t->Attachments;
while (my $a = $attachments->Next) {
my $size = length($a->Content);
if ($size > 1024) { $size = int($size/102.4)/10 . "k" }
else { $size .= "b" }
$attachlist .= "\n" . $a->Id.": ".($a->Filename || "untitled")." (".$size.")";
}
push @data, [Attachments => $attachlist];
}
my %k = map {@$_} @data;
$o = [ map {$_->[0]} @data ];
$k = \%k;
} else {
my (@data, $tids);
$format ||= "s";
$format = "l" if (%$fields);
while (my $t = $trans->Next) {
my $tid = $t->Id;
if ($format eq "l") {
$tids .= "," if $tids;
$tids .= $tid;
} else {
push @$o, $tid;
$k->{$tid} = $t->Description;
}
}
if ($format eq "l") {
my @tid;
push @tid, "ticket/$id/history/id/$tids";
my $fieldstring;
foreach my $key (keys %$fields) {
$fieldstring .= "," if $fieldstring;
$fieldstring .= $key;
}
my ($content, $forms);
$m->subexec("$RT::WebPath/REST/1.0/show",
id => \@tid,
format => $format,
fields => $fieldstring);
return [ $c, $o, $k, $e ];
}
}
if (!$c) {
my $sub = $trans->Count();
$c = "# $sub/$total ($args/total)";
}
return [ $c, $o, $k, $e ];
</%perl>
|