X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FGraph%2FTickets.pm;h=cd1254eb6aabcca6a2ce6f919e484571fa1de5ab;hb=9ce482da3960ee43decee41fba53b78c12c3e52c;hp=cab429910ff6aaa16bfa887909503ccb2f80f124;hpb=b5c4237a34aef94976bc343c8d9e138664fc3984;p=freeside.git diff --git a/rt/lib/RT/Graph/Tickets.pm b/rt/lib/RT/Graph/Tickets.pm index cab429910..cd1254eb6 100644 --- a/rt/lib/RT/Graph/Tickets.pm +++ b/rt/lib/RT/Graph/Tickets.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -58,10 +58,6 @@ RT::Graph::Tickets - view relations between tickets as graphs =cut unless ($RT::DisableGraphViz) { - require IPC::Run; - IPC::Run->import; - require IPC::Run::SafeHandles; - IPC::Run::SafeHandles->import; require GraphViz; GraphViz->import; } @@ -104,20 +100,23 @@ EOT sub gv_escape($) { my $value = shift; - $value =~ s{(?=")}{\\}g; + $value =~ s{(?=["\\])}{\\}g; return $value; } +sub loc { return HTML::Mason::Commands::loc(@_) }; + our (%fill_cache, @available_colors) = (); our %property_cb = ( - Queue => sub { return $_[0]->QueueObj->Name || $_[0]->Queue }, - CF => sub { + Queue => sub { return $_[0]->QueueObj->Name || $_[0]->Queue }, + Status => sub { return loc($_[0]->Status) }, + CF => sub { my $values = $_[0]->CustomFieldValues( $_[1] ); return join ', ', map $_->Content, @{ $values->ItemsArrayRef }; }, ); -foreach my $field (qw(Subject Status TimeLeft TimeWorked TimeEstimated)) { +foreach my $field (qw(Subject TimeLeft TimeWorked TimeEstimated)) { $property_cb{ $field } = sub { return $_[0]->$field }, } foreach my $field (qw(Creator LastUpdatedBy Owner)) { @@ -167,7 +166,8 @@ sub TicketProperties { next if $seen{ lc $cf->Name }++; next if $cf->Type eq 'Image'; if ( $first ) { - push @res, 'CustomFields', []; + push @res, 'Custom Fields', # loc + []; $first = 0; } push @{ $res[-1] }, 'CF.{'. $cf->Name .'}'; @@ -207,7 +207,8 @@ sub _PropertiesToFields { $RT::Logger->error("Couldn't find property handler for '$key' and '@subkeys' subkeys"); next; } - push @fields, ($subkeys[0] || $key) .': '. $property_cb{ $key }->( $args{'Ticket'}, @subkeys ); + my $label = $key eq 'CF' ? $subkeys[0] : loc($key); + push @fields, $label .': '. $property_cb{ $key }->( $args{'Ticket'}, @subkeys ); } return @fields; @@ -282,6 +283,14 @@ sub TicketLinks { ShowLinkDescriptions => 0, @_ ); + + my %valid_links = map { $_ => 1 } + qw(Members MemberOf RefersTo ReferredToBy DependsOn DependedOnBy); + + # Validate our link types + $args{ShowLinks} = [ grep { $valid_links{$_} } @{$args{ShowLinks}} ]; + $args{LeadingLink} = 'Members' unless $valid_links{ $args{LeadingLink} }; + unless ( $args{'Graph'} ) { $args{'Graph'} = GraphViz->new( name => 'ticket_links_'. $args{'Ticket'}->id, @@ -295,9 +304,12 @@ sub TicketLinks { } $args{'Seen'} ||= {}; - return $args{'Graph'} if $args{'Seen'}{ $args{'Ticket'}->id }++; - - $self->AddTicket( %args ); + if ( $args{'Seen'}{ $args{'Ticket'}->id } && $args{'Seen'}{ $args{'Ticket'}->id } <= $args{'CurrentDepth'} ) { + return $args{'Graph'}; + } elsif ( ! defined $args{'Seen'}{ $args{'Ticket'}->id } ) { + $self->AddTicket( %args ); + } + $args{'Seen'}{ $args{'Ticket'}->id } = $args{'CurrentDepth'}; return $args{'Graph'} if $args{'MaxDepth'} && $args{'CurrentDepth'} >= $args{'MaxDepth'};