Merge branch 'master' of https://github.com/jgoodman/Freeside
[freeside.git] / rt / share / html / Elements / ShowLinks
1 %# BEGIN BPS TAGGED BLOCK {{{
2 %#
3 %# COPYRIGHT:
4 %#
5 %# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
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 <table>
49   <tr>
50     <td class="labeltop"><& ShowRelationLabel, id => $id, Label => loc('Depends on'), Relation => 'DependsOn' &>:\
51 % if ($can_create) {
52         <span class="create">(<a href="<%$clone->{'DependsOn-new'}%>"><% loc('Create') %></a>)</span>
53 % }
54     </td>
55     <td class="value">
56 <%PERL>
57 my ( $depends_on, @active, @inactive, @not_tickets );
58 $depends_on = $Ticket->DependsOn;
59
60 while ( my $link = $depends_on->Next ) {
61     my $target = $link->TargetObj;
62     if ( $target && $target->isa('RT::Ticket') ) {
63         if ( $target->QueueObj->IsInactiveStatus( $target->Status ) ) {
64             push( @inactive, $link->TargetURI );
65         }
66         else {
67             push( @active, $link->TargetURI );
68         }
69     }
70     else {
71         push( @not_tickets, $link->TargetURI );
72     }
73 }
74 </%PERL>
75 <ul>
76 % for my $Link (@not_tickets, @active, @inactive) {
77 <li><& ShowLink, URI => $Link &></li>
78 % }
79 </ul>
80     </td>
81   </tr>
82   <tr>
83     <td class="labeltop"><& ShowRelationLabel, id => $id, Label => loc('Depended on by'), Relation => 'DependedOnBy' &>:\
84 % if ($can_create) {
85         <span class="create">(<a href="<%$clone->{'new-DependsOn'}%>"><% loc('Create') %></a>)</span>
86 % }
87     </td>
88     <td class="value">
89 <ul>
90 % while (my $Link = $Ticket->DependedOnBy->Next) {
91 <li><& ShowLink, URI => $Link->BaseURI &></li>
92 % }
93 </ul>
94     </td>
95   </tr>
96   <tr>
97     <td class="labeltop"><& ShowRelationLabel, id => $id, Label => loc('Parents'), Relation => 'Parents' &>:\
98 % if ($can_create) {
99         <span class="create">(<a href="<%$clone->{'MemberOf-new'}%>"><% loc('Create') %></a>)</span>
100 % }
101     </td>
102     <td class="value"><& /Ticket/Elements/ShowParents, Ticket => $Ticket &></td>
103   </tr>
104   <tr>
105     <td class="labeltop"><& ShowRelationLabel, id => $id, Label => loc('Children'), Relation => 'Children' &>:\
106 % if ($can_create) {
107         <span class="create">(<a href="<%$clone->{'new-MemberOf'}%>"><% loc('Create') %></a>)</span>
108 % }
109     </td>
110     <td class="value"><& /Ticket/Elements/ShowMembers, Ticket => $Ticket &></td>
111   </tr>
112   <tr>
113     <td class="labeltop"><& ShowRelationLabel, id => $id, Label => loc('Refers to'), Relation => 'RefersTo' &>:\
114 % if ($can_create) {
115         <span class="create">(<a href="<%$clone->{'RefersTo-new'}%>"><% loc('Create') %></a>)</span>
116 % }
117     </td>
118     <td class="value">
119 <ul>
120 % while (my $Link = $Ticket->RefersTo->Next) {
121 <li><& ShowLink, URI => $Link->TargetURI &></li>
122 % }
123 </ul>
124     </td>
125   </tr>
126   <tr>
127     <td class="labeltop"><& ShowRelationLabel, id => $id, Label => loc('Referred to by'), Relation => 'ReferredToBy' &>:\
128 % if ($can_create) {
129         <span class="create">(<a href="<%$clone->{'new-RefersTo'}%>"><% loc('Create') %></a>)</span>
130 % }
131     </td>
132     <td class="value">
133     <ul>
134 % while (my $Link = $Ticket->ReferredToBy->Next) {
135 % next if (UNIVERSAL::isa($Link->BaseObj, 'RT::Ticket')  && $Link->BaseObj->Type eq 'reminder');
136 <li><& ShowLink, URI => $Link->BaseURI &></li>
137 % }
138 </ul>
139     </td>
140   </tr>
141 % # Allow people to add more rows to the table
142 % $m->callback( %ARGS );
143 </table>
144 <%INIT>
145
146 my $id = $Ticket->id;
147
148 my $clone = {};
149 my $path
150     = RT->Config->Get('WebPath')
151     . '/Ticket/Create.html?Queue='
152     . $Ticket->Queue
153     . '&CloneTicket='
154     . $id;
155 my $can_create = $Ticket->QueueObj->CurrentUserHasRight('CreateTicket');
156
157 for my $relation (
158     qw(RefersTo ReferredToBy)) {
159     my $mode  = $RT::Ticket::LINKTYPEMAP{$relation}->{Mode};
160     my $type  = $RT::Ticket::LINKTYPEMAP{$relation}->{Type};
161     my $other = "Local" . $mode;
162     my $field = $mode eq 'Base' ? 'new-' . $type : $type . '-new';
163     $clone->{$field} 
164         = $path . "&$field="
165         . join( '%20',
166         ( map { $_->$other() } @{ $Ticket->$relation->ItemsArrayRef } ), $id );
167 }
168
169 for my $relation ( qw(MemberOf Members DependsOn DependedOnBy)) {
170     my $mode  = $RT::Ticket::LINKTYPEMAP{$relation}->{Mode};
171     my $type  = $RT::Ticket::LINKTYPEMAP{$relation}->{Type};
172     my $field = $mode eq 'Base' ? 'new-' . $type : $type . '-new';
173     $clone->{$field} = $path . "&$field=$id";
174 }
175
176 </%INIT>
177 <%ARGS>
178 $Ticket => undef
179 </%ARGS>