diff options
Diffstat (limited to 'rt/share/html/Elements/ShowLinks')
-rwxr-xr-x | rt/share/html/Elements/ShowLinks | 155 |
1 files changed, 42 insertions, 113 deletions
diff --git a/rt/share/html/Elements/ShowLinks b/rt/share/html/Elements/ShowLinks index 8880224..30dff00 100755 --- a/rt/share/html/Elements/ShowLinks +++ b/rt/share/html/Elements/ShowLinks @@ -46,134 +46,63 @@ %# %# END BPS TAGGED BLOCK }}} <table> +% for my $type (@display) { <tr> - <td class="labeltop"><& ShowRelationLabel, id => $id, Label => loc('Depends on'), Relation => 'DependsOn' &>:\ -% if ($can_create) { - <span class="create">(<a href="<%$clone->{'DependsOn-new'}%>"><% loc('Create') %></a>)</span> -% } - </td> - <td class="value"> -<%PERL> -my ( $depends_on, @active, @inactive, @not_tickets ); -$depends_on = $Ticket->DependsOn; - -while ( my $link = $depends_on->Next ) { - my $target = $link->TargetObj; - if ( $target && $target->isa('RT::Ticket') ) { - if ( $target->QueueObj->IsInactiveStatus( $target->Status ) ) { - push( @inactive, $link->TargetURI ); - } - else { - push( @active, $link->TargetURI ); - } - } - else { - push( @not_tickets, $link->TargetURI ); - } -} -</%PERL> -<ul> -% for my $Link (@not_tickets, @active, @inactive) { -<li><& ShowLink, URI => $Link &></li> -% } -</ul> - </td> - </tr> - <tr> - <td class="labeltop"><& ShowRelationLabel, id => $id, Label => loc('Depended on by'), Relation => 'DependedOnBy' &>:\ -% if ($can_create) { - <span class="create">(<a href="<%$clone->{'new-DependsOn'}%>"><% loc('Create') %></a>)</span> -% } - </td> - <td class="value"> -<ul> -% while (my $Link = $Ticket->DependedOnBy->Next) { -<li><& ShowLink, URI => $Link->BaseURI &></li> -% } -</ul> - </td> - </tr> - <tr> - <td class="labeltop"><& ShowRelationLabel, id => $id, Label => loc('Parents'), Relation => 'Parents' &>:\ -% if ($can_create) { - <span class="create">(<a href="<%$clone->{'MemberOf-new'}%>"><% loc('Create') %></a>)</span> -% } - </td> - <td class="value"><& /Ticket/Elements/ShowParents, Ticket => $Ticket &></td> - </tr> - <tr> - <td class="labeltop"><& ShowRelationLabel, id => $id, Label => loc('Children'), Relation => 'Children' &>:\ -% if ($can_create) { - <span class="create">(<a href="<%$clone->{'new-MemberOf'}%>"><% loc('Create') %></a>)</span> -% } - </td> - <td class="value"><& /Ticket/Elements/ShowMembers, Ticket => $Ticket &></td> - </tr> - <tr> - <td class="labeltop"><& ShowRelationLabel, id => $id, Label => loc('Refers to'), Relation => 'RefersTo' &>:\ -% if ($can_create) { - <span class="create">(<a href="<%$clone->{'RefersTo-new'}%>"><% loc('Create') %></a>)</span> -% } + <td class="labeltop"> + <& ShowRelationLabel, Object => $Object, Label => $labels{$type}.':', Relation => $type &> +% if ($clone{$type}) { + <span class="create">(<a href="<% $clone{$type} %>"><% loc('Create') %></a>)</span> +% } </td> <td class="value"> -<ul> -% while (my $Link = $Ticket->RefersTo->Next) { -<li><& ShowLink, URI => $Link->TargetURI &></li> -% } -</ul> + <& ShowLinksOfType, Object => $Object, Type => $type, Recurse => ($type eq 'Members') &> </td> </tr> - <tr> - <td class="labeltop"><& ShowRelationLabel, id => $id, Label => loc('Referred to by'), Relation => 'ReferredToBy' &>:\ -% if ($can_create) { - <span class="create">(<a href="<%$clone->{'new-RefersTo'}%>"><% loc('Create') %></a>)</span> % } - </td> - <td class="value"> - <ul> -% while (my $Link = $Ticket->ReferredToBy->Next) { -% next if (UNIVERSAL::isa($Link->BaseObj, 'RT::Ticket') && $Link->BaseObj->Type eq 'reminder'); -<li><& ShowLink, URI => $Link->BaseURI &></li> -% } -</ul> - </td> - </tr> % # Allow people to add more rows to the table % $m->callback( %ARGS ); + <& /Elements/ShowCustomFields, Object => $Object, Grouping => 'Links', Table => 0 &> </table> <%INIT> +my @display = qw(DependsOn DependedOnBy MemberOf Members RefersTo ReferredToBy); +$m->callback( %ARGS, CallbackName => 'ChangeDisplay', display => \@display ); +my %labels = ( + DependsOn => loc('Depends on'), + DependedOnBy => loc('Depended on by'), + MemberOf => loc('Parents'), + Members => loc('Children'), + RefersTo => loc('Refers to'), + ReferredToBy => loc('Referred to by'), +); +my %clone; -my $id = $Ticket->id; +if ( $Object->isa("RT::Ticket") + and $Object->QueueObj->CurrentUserHasRight('CreateTicket')) +{ + my $id = $Object->id; + my $path + = RT->Config->Get('WebPath') + . '/Ticket/Create.html?Queue=' + . $Object->Queue + . '&CloneTicket=' + . $id; -my $clone = {}; -my $path - = RT->Config->Get('WebPath') - . '/Ticket/Create.html?Queue=' - . $Ticket->Queue - . '&CloneTicket=' - . $id; -my $can_create = $Ticket->QueueObj->CurrentUserHasRight('CreateTicket'); + for my $relation (@display) { + my $mode = $RT::Link::TYPEMAP{$relation}->{Mode}; + my $type = $RT::Link::TYPEMAP{$relation}->{Type}; + my $field = $mode eq 'Base' ? 'new-' . $type : $type . '-new'; + my @copy = ($id); -for my $relation ( - qw(RefersTo ReferredToBy)) { - my $mode = $RT::Ticket::LINKTYPEMAP{$relation}->{Mode}; - my $type = $RT::Ticket::LINKTYPEMAP{$relation}->{Type}; - my $other = "Local" . $mode; - my $field = $mode eq 'Base' ? 'new-' . $type : $type . '-new'; - $clone->{$field} - = $path . "&$field=" - . join( '%20', - ( map { $_->$other() } @{ $Ticket->$relation->ItemsArrayRef } ), $id ); -} + # Canonicalized type captures both directions + if ($type eq "RefersTo") { + my $other = "Local" . $mode; + push @copy, map { $_->$other() } @{ $Object->$relation->ItemsArrayRef }; + } -for my $relation ( qw(MemberOf Members DependsOn DependedOnBy)) { - my $mode = $RT::Ticket::LINKTYPEMAP{$relation}->{Mode}; - my $type = $RT::Ticket::LINKTYPEMAP{$relation}->{Type}; - my $field = $mode eq 'Base' ? 'new-' . $type : $type . '-new'; - $clone->{$field} = $path . "&$field=$id"; + $clone{$relation} = "$path&$field=" . join('%20', grep { $_ } @copy); + } } - </%INIT> <%ARGS> -$Ticket => undef +$Object </%ARGS> |