import of rt 3.0.9
[freeside.git] / rt / html / REST / 1.0 / Forms / queue / default
1 %# REST/1.0/Forms/queue/default
2 %#
3 <%ARGS>
4 $id
5 $format => 's'
6 $changes => {}
7 </%ARGS>
8 <%perl>
9 my @comments;
10 my ($c, $o, $k, $e) = ("", [], {}, 0);
11 my %data = %$changes;
12 my $queue = new RT::Queue $session{CurrentUser};
13 my @fields = qw(Name Description CorrespondAddress CommentAddress
14                 InitialPriority FinalPriority DefaultDueIn);
15 my %fields = map { lc $_ => $_ } @fields;
16
17 if ($id ne 'new') {
18     $queue->Load($id);
19     if (!$queue->Id) {
20         return [ "# Queue $id does not exist.", [], {}, 1 ];
21     }
22 }
23 else {
24     if (%data == 0) {
25         return [
26             "# Required: Name",
27             [ "id", @fields ],
28             {
29                 id => 'queue/new',
30                 Name => '<queue name>',
31                 Description => "",
32                 CommentAddress => "",
33                 CorrespondAddress => "",
34                 InitialPriority => "",
35                 FinalPriority => "",
36                 DefaultDueIn => "",
37             },
38             0
39         ];
40     }
41     else {
42         my %v;
43         my %create = %fields;
44
45         foreach my $k (keys %data) {
46             if (exists $create{lc $k}) {
47                 $v{$create{lc $k}} = delete $data{$k};
48             }
49         }
50
51         if ($v{Name} eq '<queue name>') {
52             my %o = keys %$changes;
53             delete @o{"id", @fields};
54             return [
55                 "# Please set the queue name.",
56                 [ "id", @fields, keys %o ], $changes, 1
57             ];
58         }
59
60         $queue->Create(%v);
61         unless ($queue->Id) {
62             return [ "# Could not create queue.", [], {}, 1 ];
63         }
64
65         delete $data{id};
66         $id = $queue->Id;
67         push(@comments, "# Queue $id created.");
68         goto DONE if %data == 0;
69     }
70 }
71
72 if (%data == 0) {
73     my @data;
74
75     push @data, [ id => "queue/".$queue->Id ];
76     foreach my $key (@fields) {
77         push @data, [ $key => $queue->$key ];
78     }
79
80     my %k = map {@$_} @data;
81     $o = [ map {$_->[0]} @data ];
82     $k = \%k;
83 }
84 else {
85     my ($get, $set, $key, $val, $n, $s);
86
87     foreach $key (keys %data) {
88         $val = $data{$key};
89         $key = lc $key;
90         $n = 1;
91
92         if (exists $fields{$key}) {
93             $key = $fields{$key};
94             $set = "Set$key";
95
96             next if $val eq $queue->$key;
97             ($n, $s) = $queue->$set($val);
98         }
99         elsif ($key ne 'id') {
100             $n = 0;
101             $s = "Unknown field.";
102         }
103
104     SET:
105         if ($n == 0) {
106             $e = 1;
107             push @comments, "# $key: $s";
108             unless (@$o) {
109                 my %o = keys %$changes;
110                 delete @o{"id", @fields};
111                 @$o = ("id", @fields, keys %o);
112                 $k = $changes;
113             }
114         }
115     }
116
117     push(@comments, "# Queue $id updated.") unless $n == 0;
118 }
119
120 DONE:
121 $c ||= join("\n", @comments) if @comments;
122 return [ $c, $o, $k, $e ];
123 </%perl>