Upgrade to 4.2.8
[usit-rt.git] / share / html / REST / 1.0 / Forms / ticket / links
CommitLineData
84fb5b46
MKG
1%# BEGIN BPS TAGGED BLOCK {{{
2%#
3%# COPYRIGHT:
4%#
3ffc5f4f 5%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
84fb5b46
MKG
6%# <sales@bestpractical.com>
7%#
8%# (Except where explicitly superseded by other copyright notices)
9%#
10%#
11%# LICENSE:
12%#
13%# This work is made available to you under the terms of Version 2 of
14%# the GNU General Public License. A copy of that license should have
15%# been provided with this software, but in any event can be snarfed
16%# from www.gnu.org.
17%#
18%# This work is distributed in the hope that it will be useful, but
19%# WITHOUT ANY WARRANTY; without even the implied warranty of
20%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21%# General Public License for more details.
22%#
23%# You should have received a copy of the GNU General Public License
24%# along with this program; if not, write to the Free Software
25%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26%# 02110-1301 or visit their web page on the internet at
27%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
28%#
29%#
30%# CONTRIBUTION SUBMISSION POLICY:
31%#
32%# (The following paragraph is not intended to limit the rights granted
33%# to you to modify and distribute this software under the terms of
34%# the GNU General Public License and is only of importance to you if
35%# you choose to contribute your changes and enhancements to the
36%# community by submitting them to Best Practical Solutions, LLC.)
37%#
38%# By intentionally submitting any modifications, corrections or
39%# derivatives to this work, or any other work intended for use with
40%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
41%# you are the copyright holder for those contributions and you grant
42%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
43%# royalty-free, perpetual, license to use, copy, create derivative
44%# works based on those contributions, and sublicense and distribute
45%# those contributions and any derivatives thereof.
46%#
47%# END BPS TAGGED BLOCK }}}
48%# REST/1.0/Forms/ticket/links
49%#
50<%ARGS>
51$id
52$format => 's'
53$changes => undef
54</%ARGS>
55<%INIT>
56my @data;
57my $ticket = RT::Ticket->new($session{CurrentUser});
58
59$ticket->Load($id);
60if (!$ticket->Id) {
61 return [ "# Ticket $id does not exist.", [], {}, 1 ];
62}
63
64my ($c, $o, $k, $e) = ("", [], {}, 0);
65my @fields = qw(DependsOn DependedOnBy RefersTo ReferredToBy Members MemberOf);
66my %fields = map { lc $_ => $_ } @fields;
67
68my %lfields = (
69 Members => { Type => 'MemberOf', Mode => 'Base' },
70 ReferredToBy => { Type => 'RefersTo', Mode => 'Base' },
71 DependedOnBy => { Type => 'DependsOn', Mode => 'Base' },
72 MemberOf => { Type => 'MemberOf', Mode => 'Target' },
73 RefersTo => { Type => 'RefersTo', Mode => 'Target' },
74 DependsOn => { Type => 'DependsOn', Mode => 'Target' },
75);
76
77if ($changes) {
78 my ($get, $set, $key, $val, $n, $s);
79 my %data = %$changes;
80 my @comments;
81
82 foreach $key (keys %data) {
83 $val = $data{$key};
84 $key = lc $key;
85 $n = 1;
86
87 if (exists $fields{$key}) {
88 $key = $fields{$key};
89
90 my %old;
91 my $field = $lfields{$key}->{Mode};
92 while (my $link = $ticket->$key->Next) {
93 $old{$link->$field} = 1;
94 }
95
96 my %new;
97 foreach my $nkey (@{vsplit($val)}) {
98 if ($nkey =~ /^\d+$/) {
99 my $uri = RT::URI->new($session{CurrentUser});
100 my $tick = RT::Ticket->new($session{CurrentUser});
101 $tick->Load($nkey);
102 if ($tick->Id) {
b5747ff2
MKG
103 $uri->FromObject($tick);
104 $nkey = $uri->URI;
84fb5b46
MKG
105 }
106 else {
107 $n = 0;
108 $s = "Ticket $nkey does not exist.";
109 goto SET;
110 }
111 }
112 $new{$nkey} = 1;
113 }
114
115 foreach my $u (keys %old) {
116 if (exists $new{$u}) {
117 delete $new{$u};
118 }
119 else {
120 my $type = $lfields{$key}->{Type};
121 my $mode = $lfields{$key}->{Mode};
122 ($n, $s) = $ticket->DeleteLink(Type => $type, $mode => $u);
123 goto SET;
124 }
125 }
126 foreach my $u (keys %new) {
127 my $type = $lfields{$key}->{Type};
128 my $mode = $lfields{$key}->{Mode};
129 ($n, $s) = $ticket->AddLink(Type => $type, $mode => $u);
130 goto SET;
131 }
132 }
133 elsif ($key ne 'id' && $key ne 'type') {
134 $n = 0;
135 $s = "Unknown field: $key";
136 }
137
138 SET:
139 if ($n == 0) {
140 $e = 1;
141 push @comments, "# $key: $s";
142 unless (@$o) {
143 @$o = ("id", @fields);
144 %$k = %data;
145 }
146 }
147 }
148
149 push(@comments, "# Links for ticket $id updated.") unless @comments;
150 $c = join("\n", @comments) if @comments;
151}
152else {
153 my @data;
154
155 push @data, [ id => "ticket/".$ticket->Id."/links" ];
156 foreach my $key (@fields) {
157 my @val;
158
159 my $field = $lfields{$key}->{Mode};
160 while (my $link = $ticket->$key->Next) {
161 push @val, $link->$field;
162 }
163 push(@val, "") if (@val == 0 && defined $format && $format eq 'l');
164 push @data, [ $key => [ @val ] ] if @val;
165 }
166
167 my %k = map {@$_} @data;
168 $o = [ map {$_->[0]} @data ];
169 $k = \%k;
170}
171
172return [ $c, $o, $k, $e ];
173</%INIT>