X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FElements%2FShowLinks;h=bd27302993520b76957cbe84d46c50a3ef4cae6c;hp=8880224f763ebd1301b0aa507869cb67b99333de;hb=44dd00a3ff974a17999e86e64488e996edc71e3c;hpb=73a6a80a9ca5edbd43d139b7cb25bfee4abfd35e diff --git a/rt/share/html/Elements/ShowLinks b/rt/share/html/Elements/ShowLinks index 8880224f7..bd2730299 100755 --- a/rt/share/html/Elements/ShowLinks +++ b/rt/share/html/Elements/ShowLinks @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2019 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -46,134 +46,63 @@ %# %# END BPS TAGGED BLOCK }}} +% for my $type (@display) { - - - - - - - - - - - - - - - - - - - - - % # Allow people to add more rows to the table % $m->callback( %ARGS ); + <& /Elements/ShowCustomFields, Object => $Object, Grouping => 'Links', Table => 0 &>
<& ShowRelationLabel, id => $id, Label => loc('Depends on'), Relation => 'DependsOn' &>:\ -% if ($can_create) { - (<% loc('Create') %>) -% } - -<%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 ); - } -} - -
    -% for my $Link (@not_tickets, @active, @inactive) { -
  • <& ShowLink, URI => $Link &>
  • -% } -
-
<& ShowRelationLabel, id => $id, Label => loc('Depended on by'), Relation => 'DependedOnBy' &>:\ -% if ($can_create) { - (<% loc('Create') %>) -% } - -
    -% while (my $Link = $Ticket->DependedOnBy->Next) { -
  • <& ShowLink, URI => $Link->BaseURI &>
  • -% } -
-
<& ShowRelationLabel, id => $id, Label => loc('Parents'), Relation => 'Parents' &>:\ -% if ($can_create) { - (<% loc('Create') %>) -% } - <& /Ticket/Elements/ShowParents, Ticket => $Ticket &>
<& ShowRelationLabel, id => $id, Label => loc('Children'), Relation => 'Children' &>:\ -% if ($can_create) { - (<% loc('Create') %>) -% } - <& /Ticket/Elements/ShowMembers, Ticket => $Ticket &>
<& ShowRelationLabel, id => $id, Label => loc('Refers to'), Relation => 'RefersTo' &>:\ -% if ($can_create) { - (<% loc('Create') %>) -% } + + <& ShowRelationLabel, Object => $Object, Label => $labels{$type}.':', Relation => $type &> +% if ($clone{$type}) { + (<% loc('Create') %>) +% } -
    -% while (my $Link = $Ticket->RefersTo->Next) { -
  • <& ShowLink, URI => $Link->TargetURI &>
  • -% } -
+ <& ShowLinksOfType, Object => $Object, Type => $type, Recurse => ($type eq 'Members') &>
<& ShowRelationLabel, id => $id, Label => loc('Referred to by'), Relation => 'ReferredToBy' &>:\ -% if ($can_create) { - (<% loc('Create') %>) % } - -
    -% while (my $Link = $Ticket->ReferredToBy->Next) { -% next if (UNIVERSAL::isa($Link->BaseObj, 'RT::Ticket') && $Link->BaseObj->Type eq 'reminder'); -
  • <& ShowLink, URI => $Link->BaseURI &>
  • -% } -
-
<%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); + } } - <%ARGS> -$Ticket => undef +$Object