import of rt 3.0.9
[freeside.git] / rt / html / REST / 1.0 / Forms / ticket / history
1 %# REST/1.0/Forms/ticket/history
2 %#
3 <%ARGS>
4 $id
5 $args => undef
6 $format => undef
7 $fields => undef
8 </%ARGS>
9 <%perl>
10 my $ticket = new RT::Ticket $session{CurrentUser};
11 my ($c, $o, $k, $e) = ("", [], {}, "");
12
13 $ticket->Load($id);
14 unless ($ticket->Id) {
15     return [ "# Ticket $id does not exist.", [], {}, 1 ];
16 }
17
18 my $trans = $ticket->Transactions();
19 my $total = $trans->Count();
20
21 chomp $args;
22 my @arglist = split('/', $args);
23 my ($type, $tid);
24
25 if ($arglist[0] eq 'type') {
26     $type = $arglist[1];
27 } elsif ($arglist[0] eq 'id') {
28     $tid = $arglist[1];
29 } else {
30     $type = $args;
31 }
32
33 if ($type) {
34     # Create, Set, Status, Correspond, Comment, Give, Steal, Take, Told
35     # CustomField, AddLink, DeleteLink, AddWatcher, DelWatcher
36     if ($args =~ /^links?$/) {
37         $trans->Limit(FIELD => 'Type', OPERATOR => 'LIKE', VALUE => '%Link');
38     }
39     elsif ($args =~ /^watchers?$/) {
40         $trans->Limit(FIELD => 'Type', OPERATOR => 'LIKE', VALUE => '%Watcher');
41     }
42     else {
43         $trans->Limit(FIELD => 'Type', OPERATOR => '=', VALUE => $type);
44     }
45 } elsif ($tid) {
46     $trans->Limit(FIELD => 'Id', OPERATOR => '=', VALUE => $tid);
47 }
48
49 if ($tid) {
50     my @data;
51     my $t = new RT::Transaction $session{CurrentUser};
52     $t->Load($tid);
53
54     push @data, [ id    => $t->Id   ];
55     push @data, [ EffectiveTicket    => $t->EffectiveTicket   ]
56         if (!%$fields || exists $fields->{lc 'EffectiveTicket'});
57     push @data, [ Ticket    => $t->Ticket   ]
58         if (!%$fields || exists $fields->{lc 'Ticket'});
59     push @data, [ TimeTaken    => $t->TimeTaken   ]
60         if (!%$fields || exists $fields->{lc 'TimeTaken'});
61     push @data, [ Type    => $t->Type   ]
62         if (!%$fields || exists $fields->{lc 'Type'});
63     push @data, [ Field    => $t->Field   ]
64         if (!%$fields || exists $fields->{lc 'Field'});
65     push @data, [ OldValue    => $t->OldValue   ]
66         if (!%$fields || exists $fields->{lc 'OldValue'});
67     push @data, [ NewValue    => $t->NewValue   ]
68         if (!%$fields || exists $fields->{lc 'NewValue'});
69     push @data, [ Data    => $t->Data   ]
70         if (!%$fields || exists $fields->{lc 'Data'});
71     push @data, [ Description    => $t->Description   ]
72         if (!%$fields || exists $fields->{lc 'Description'});
73     push @data, [ Content    => $t->Content   ]
74         if (!%$fields || exists $fields->{lc 'Content'});
75
76
77     if (!%$fields || exists $fields->{lc 'Content'}) {    
78         my $creator = new RT::User $session{CurrentUser};
79         $creator->Load($t->Creator);
80         push @data, [ Creator    => $creator->Name   ];
81     }
82     push @data, [ Created    => $t->Created   ]
83         if (!%$fields || exists $fields->{lc 'Created'});
84
85     if (!%$fields || exists $fields->{lc 'Attachments'}) {
86         my $attachlist;
87         my $attachments = $t->Attachments;
88         while (my $a = $attachments->Next) {
89             my $size = length($a->Content);
90             if ($size > 1024) { $size  = int($size/102.4)/10 . "k" }
91             else              { $size .= "b" }
92             $attachlist .= "\n" . $a->Id.": ".($a->Filename || "untitled")." (".$size.")";
93         }
94         
95         push @data, [Attachments => $attachlist];
96     }
97
98     my %k = map {@$_} @data;
99     $o = [ map {$_->[0]} @data ];
100     $k = \%k;
101
102 } else {
103     my (@data, $tids);
104     $format ||= "s";
105     $format = "l" if (%$fields);
106
107     while (my $t = $trans->Next) {
108         my $tid = $t->Id;
109
110         if ($format eq "l") {
111             $tids .= "," if $tids;
112             $tids .= $tid;
113         } else {
114             push @$o, $tid;
115             $k->{$tid} = $t->Description;
116         }
117     }
118
119     if ($format eq "l") {
120         my @tid;
121         push @tid, "ticket/$id/history/id/$tids";
122         my $fieldstring;
123         foreach my $key (keys %$fields) {
124             $fieldstring .= "," if $fieldstring;
125             $fieldstring .= $key;
126         }
127         my ($content, $forms);
128
129         $m->subexec("$RT::WebPath/REST/1.0/show", 
130                     id => \@tid, 
131                     format => $format,
132                     fields => $fieldstring);
133         return [ $c, $o, $k, $e ];
134     }
135 }
136
137 if (!$c) {
138     my $sub = $trans->Count();
139     $c = "# $sub/$total ($args/total)";
140 }
141
142 return [ $c, $o, $k, $e ];
143
144 </%perl>