summaryrefslogtreecommitdiff
path: root/rt/share/html/Ticket/Graphs
diff options
context:
space:
mode:
Diffstat (limited to 'rt/share/html/Ticket/Graphs')
-rw-r--r--rt/share/html/Ticket/Graphs/Elements/EditGraphProperties167
-rw-r--r--rt/share/html/Ticket/Graphs/Elements/ShowGraph71
-rw-r--r--rt/share/html/Ticket/Graphs/Elements/ShowLegends73
-rw-r--r--rt/share/html/Ticket/Graphs/dhandler80
-rw-r--r--rt/share/html/Ticket/Graphs/index.html114
5 files changed, 505 insertions, 0 deletions
diff --git a/rt/share/html/Ticket/Graphs/Elements/EditGraphProperties b/rt/share/html/Ticket/Graphs/Elements/EditGraphProperties
new file mode 100644
index 000000000..76d28ee8a
--- /dev/null
+++ b/rt/share/html/Ticket/Graphs/Elements/EditGraphProperties
@@ -0,0 +1,167 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| /Widgets/TitleBox, title => loc('Graph Properties') &>
+
+<% loc('Direction') %> <select name="Direction">
+<option value="TB" <% ($Direction||'TB') eq 'TB'? 'selected="selected"': '' |n %>><% loc('top to bottom') %></option>
+<option value="LR" <% ($Direction||'TB') eq 'LR'? 'selected="selected"': '' |n %>><% loc('left to right') %></option>
+%# XXX: not supported by GraphViz perl module
+%#<option value="BT" <% ($Direction||'TB') eq 'BT'? 'selected="selected"': '' |n %>><% loc('bottom to top') %></option>
+%#<option value="RL" <% ($Direction||'TB') eq 'RL'? 'selected="selected"': '' |n %>><% loc('right to left') %></option>
+</select><br />
+
+<% loc('Main type of links') %> <select name="LeadingLink">
+% foreach ( @link_types ) {
+<option value="<% $_ %>" <% ($LeadingLink||'Members') eq $_? 'selected="selected"': '' |n %>><% loc($_) %></option>
+% }
+</select>
+
+<% loc('maximum depth') %> <select name="MaxDepth">
+<option value="0"><% loc('Unlimit') %></option>
+% foreach ( 1..6 ) {
+<option value="<% $_ %>" <% ($MaxDepth||0) == $_? 'selected="selected"': '' %>><% $_ %></option>
+% }
+</select><br />
+
+<% loc('Show as well') %>:
+% foreach my $type ( @link_types ) {
+% my $checked = '';
+% $checked = 'checked="checked"' if grep $type eq $_, @ShowLinks;
+<input type="checkbox" name="ShowLinks" value="<% $type %>" <% $checked |n %> /><% loc($type) %>
+% }
+<br />
+
+% my @properties = RT::Graph::Tickets->TicketProperties( $session{'CurrentUser'} );
+
+<% loc('Fill boxes with color using') %>:
+<select name="FillUsing">
+<option value=""><% loc('nothing') %></option>
+<%PERL>
+my @tmp = @properties;
+while ( my ($group, $list) = (splice @tmp, 0, 2) ) {
+ # coloring by links and dates sounds stupid
+ next if $group eq 'Dates' || $group eq 'Links';
+
+ foreach my $prop ( @$list ) {
+ my $selected = '';
+ $selected = 'selected="selected"' if $prop eq ($FillUsing||'');
+</%PERL>
+<option value="<% $prop %>" <% $selected |n %>><% loc($prop) %></option>
+% } }
+</select><br />
+
+% if ( RT::Link->can('Description' ) ) {
+% my $checked = '';
+% $checked = 'checked="checked"' if $ShowLinkDescriptions;
+<% loc('Show link descriptions') %>:
+<input type="checkbox" name="ShowLinkDescriptions" value="1" <% $checked |n %> />
+<br />
+% }
+
+<%PERL>
+for my $i ( 1..($MaxDepth||6) ) {
+ my @default;
+ if ( my $tmp = $ARGS{ 'Level-'. $i .'-Properties' } ) {
+ @default = ref $tmp? @$tmp : ($tmp);
+ }
+
+ $m->comp('SELF:Properties',
+ Level => $i,
+ Available => \@properties,
+ Default => \@default,
+ );
+}
+</%PERL>
+
+<& /Elements/Submit, Label => loc('Update Graph'), Name => 'Update' &>
+
+</&>
+
+<%ARGS>
+$id => undef
+$Direction => 'TB'
+$LeadingLink => 'Members'
+@ShowLinks => ('MemberOf', 'DependsOn', 'RefersTo')
+$MaxDepth => 3
+$FillUsing => ''
+$ShowLinkDescriptions => 0
+</%ARGS>
+<%INIT>
+require RT::Graph::Tickets;
+require RT::Link;
+
+my @link_types = qw(Members MemberOf RefersTo ReferredToBy DependsOn DependedOnBy); #loc_qw
+@ShowLinks = grep $_ ne $LeadingLink, @ShowLinks;
+</%INIT>
+
+<%METHOD Properties>
+<%ARGS>
+@Available => ()
+@Default => ()
+$Level => 1,
+</%ARGS>
+<%INIT>
+my $id = "graph-properties-box-$Level";
+my $class = '';
+$class = 'class="hidden"' if $Level != 1 && !@Default;
+</%INIT>
+<% loc('Show Tickets Properties on [_1] level', $Level) %>
+(<small><a href="#" onclick="hideshow('<% $id %>'); return false;"><% loc('open/close') %></a></small>):
+<table id="<% $id %>" <% $class |n %>>
+% while ( my ($group, $list) = (splice @Available, 0, 2) ) {
+<tr><td><% loc($group) %>:</td><td>
+% foreach my $prop ( @$list ) {
+% my $checked = '';
+% $checked = 'checked="checked"' if grep $_ eq $prop, @Default;
+<input type="checkbox" class="checkbox" name="Level-<% $Level %>-Properties" value="<% $prop %>" <% $checked |n %> /><% loc($prop) %>
+% }
+</td></tr>
+% }
+</table>
+<br />
+</%METHOD>
diff --git a/rt/share/html/Ticket/Graphs/Elements/ShowGraph b/rt/share/html/Ticket/Graphs/Elements/ShowGraph
new file mode 100644
index 000000000..d989ecc18
--- /dev/null
+++ b/rt/share/html/Ticket/Graphs/Elements/ShowGraph
@@ -0,0 +1,71 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<div><img src="<% RT->Config->Get('WebPath') %>/Ticket/Graphs/<% $id %>?<% $m->comp('/Elements/QueryString', %ARGS) %>" usemap="#<% $graph->{'NAME'} || 'test' %>" style="border: none" />
+<% safe_run_child { Encode::decode_utf8( $graph->as_cmapx ) } |n %>
+</div>
+<& ShowLegends, %ARGS, Ticket => $ticket &>
+<%ARGS>
+$id => undef
+</%ARGS>
+<%INIT>
+use RT::Util 'safe_run_child';
+
+my $ticket = RT::Ticket->new( $session{'CurrentUser'} );
+$ticket->Load( $id );
+unless ( $ticket->id ) {
+ $RT::Logger->error("Couldn't load ticket $id");
+ return;
+}
+$ARGS{'id'} = $id = $ticket->id;
+
+require RT::Graph::Tickets;
+my $graph = RT::Graph::Tickets->TicketLinks(
+ %ARGS,
+ Ticket => $ticket,
+);
+</%INIT>
diff --git a/rt/share/html/Ticket/Graphs/Elements/ShowLegends b/rt/share/html/Ticket/Graphs/Elements/ShowLegends
new file mode 100644
index 000000000..9a4fa1480
--- /dev/null
+++ b/rt/share/html/Ticket/Graphs/Elements/ShowLegends
@@ -0,0 +1,73 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<&| /Widgets/TitleBox, title => loc('Legends'), hideable => $hideable &>
+<table>
+
+<tr style="height: 2.8em;"><td><% loc('Status') %>:</td><td>
+% foreach my $status ( sort keys %RT::Graph::Tickets::ticket_status_style ) {
+% my $style = $RT::Graph::Tickets::ticket_status_style{ $status };
+<span style="color: <% $style->{'fontcolor'} %>; padding: 0.6em; border: 1px solid black;"><% loc($status) %></span>
+% }
+</td></tr>
+
+% if ( $FillUsing ) {
+<tr style="height: 2.8em;"><td><% loc($FillUsing) %>:</td><td>
+% foreach my $value ( sort keys %RT::Graph::Tickets::fill_cache ) {
+% my $color = $RT::Graph::Tickets::fill_cache{ $value };
+<span style="background-color: <% $color %>; padding: 0.6em; border: 1px solid black;"><% loc($value) %></span>
+% }
+</td></tr>
+% }
+
+</table>
+</&>
+
+<%ARGS>
+$FillUsing => ''
+$hideable => 1
+</%ARGS>
diff --git a/rt/share/html/Ticket/Graphs/dhandler b/rt/share/html/Ticket/Graphs/dhandler
new file mode 100644
index 000000000..033a53479
--- /dev/null
+++ b/rt/share/html/Ticket/Graphs/dhandler
@@ -0,0 +1,80 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+my $arg = $m->dhandler_arg;
+
+my $id;
+if ( $arg =~ m{^(\d+)$}i ) {
+ ($id) = ($1);
+} else {
+ return $m->abort( 404 );
+}
+
+my $ticket = RT::Ticket->new($session{'CurrentUser'} );
+$ticket->Load( $id );
+unless ( $ticket->id ) {
+ $RT::Logger->error("Couldn't load ticket #$id");
+ return $m->abort( 404 );
+}
+
+require RT::Graph::Tickets;
+my $graph = RT::Graph::Tickets->TicketLinks(
+ %ARGS,
+ Ticket => $ticket,
+);
+
+$r->content_type( 'image/png' );
+$m->clear_buffer;
+
+my $png;
+safe_run_child { $graph->as_png(\$png) };
+$m->out( $png );
+
+$m->abort;
+
+</%INIT>
diff --git a/rt/share/html/Ticket/Graphs/index.html b/rt/share/html/Ticket/Graphs/index.html
new file mode 100644
index 000000000..e23737c8e
--- /dev/null
+++ b/rt/share/html/Ticket/Graphs/index.html
@@ -0,0 +1,114 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
+%# <jesse@bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<& /Elements/Header, Title => $title &>
+<& /Ticket/Elements/Tabs,
+ Ticket => $ticket,
+ Title => $title,
+ current_tab => "Ticket/ModifyLinks.html?id=$id",
+&>
+
+<& /Elements/ListActions, actions => \@results &>
+
+<& Elements/ShowGraph, %ARGS, Ticket => $ticket &>
+
+<form action="<% RT->Config->Get('WebPath') . $m->request_comp->path %>">
+<input type="hidden" class="hidden" name="id" value="<% $id %>" />
+
+<& Elements/EditGraphProperties, %ARGS, Ticket => $ticket &>
+
+<input type="hidden" class="hidden" name="SavedSearchId" value="<% $saved_search->{Id} %>" />
+<& /Search/Elements/EditSearches,
+ %$saved_search,
+ Title => loc('Manage saved graphs'),
+ Type => 'Graph',
+ SearchFields => \@save_arguments,
+ CurrentSearch => { map { $_ => $ARGS{$_} } @save_arguments },
+ AllowCopy => 0,
+&>
+</form>
+
+<%ARGS>
+</%ARGS>
+<%INIT>
+use RT::Graph::Tickets;
+my @results;
+
+my @save_arguments = qw(id Direction LeadingLink ShowLinks MaxDepth FillUsing ShowLinkDescriptions);
+foreach my $level ( 0 .. 6 ) {
+ push @save_arguments, "Level-". $level ."-Properties";
+}
+my $saved_search = { Type => 'Graph' };
+push @results, $m->comp( '/Search/Elements/EditSearches:Init',
+ %ARGS,
+ Query => \%ARGS,
+ SavedSearch => $saved_search,
+ SearchFields => \@save_arguments,
+);
+
+my $id = $ARGS{'id'};
+my $ticket = LoadTicket( $id );
+$ARGS{'id'} = $id = $ticket->id;
+
+$ARGS{'LeadingLink'} ||= 'Members';
+if ( $ARGS{'ShowLinks'} && !ref $ARGS{'ShowLinks'} ) {
+ $ARGS{'ShowLinks'} = [$ARGS{'ShowLinks'}];
+} elsif ( !$ARGS{'ShowLinks'} ) {
+ $ARGS{'ShowLinks'} = [ qw(MemberOf DependsOn RefersTo) ];
+}
+$ARGS{'ShowLinks'} = [ grep $_ ne $ARGS{'LeadingLink'}, @{ $ARGS{'ShowLinks'} } ];
+$ARGS{'MaxDepth'} = 3 unless defined $ARGS{'MaxDepth'} && length $ARGS{'MaxDepth'};
+
+push @results, $m->comp( '/Search/Elements/EditSearches:Save',
+ %ARGS,
+ Query => \%ARGS,
+ SavedSearch => $saved_search,
+ SearchFields => \@save_arguments,
+);
+
+my $title = loc( "Ticket #[_1] relationships graph", $id );
+</%INIT>