From f5af4fcceb8a36c3d0885dfa197798a77de64727 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 20 Jun 2007 22:28:28 +0000 Subject: integrate RTx::Statistics package, part of merging spiritone RT changes (#1661) --- .../Statistics/Elements/CollectionAsTable/Header | 126 +++++++++++++++ .../Elements/CollectionAsTable/ParseFormat | 109 +++++++++++++ .../RTx/Statistics/Elements/CollectionAsTable/Row | 112 +++++++++++++ .../Statistics/Elements/ControlsAsTable/ControlBox | 103 ++++++++++++ .../Statistics/Elements/ControlsAsTable/UpdatePage | 5 + rt/html/RTx/Statistics/Elements/DateSelectRow | 55 +++++++ rt/html/RTx/Statistics/Elements/DurationAsString | 18 +++ rt/html/RTx/Statistics/Elements/GraphBox | 27 ++++ rt/html/RTx/Statistics/Elements/SelectMultiQueue | 81 ++++++++++ rt/html/RTx/Statistics/Elements/StatColumnMap | 173 +++++++++++++++++++++ rt/html/RTx/Statistics/Elements/Tabs | 72 +++++++++ 11 files changed, 881 insertions(+) create mode 100644 rt/html/RTx/Statistics/Elements/CollectionAsTable/Header create mode 100644 rt/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat create mode 100644 rt/html/RTx/Statistics/Elements/CollectionAsTable/Row create mode 100644 rt/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox create mode 100644 rt/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage create mode 100644 rt/html/RTx/Statistics/Elements/DateSelectRow create mode 100755 rt/html/RTx/Statistics/Elements/DurationAsString create mode 100644 rt/html/RTx/Statistics/Elements/GraphBox create mode 100755 rt/html/RTx/Statistics/Elements/SelectMultiQueue create mode 100644 rt/html/RTx/Statistics/Elements/StatColumnMap create mode 100755 rt/html/RTx/Statistics/Elements/Tabs (limited to 'rt/html/RTx/Statistics/Elements') diff --git a/rt/html/RTx/Statistics/Elements/CollectionAsTable/Header b/rt/html/RTx/Statistics/Elements/CollectionAsTable/Header new file mode 100644 index 000000000..cecb02eee --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/CollectionAsTable/Header @@ -0,0 +1,126 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# +%# +%# (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., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# 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 }}} +<%ARGS> +@Format => undef +$FormatString => undef +$AllowSorting => undef +$Order=>undef +$BaseURL => undef +$Query => undef +$Rows => undef +$Page => undef +$maxitems => undef + + +<%perl> + +my %generic_query_args = ( Query => $Query, Rows => $Rows, Page => $Page, Format => $FormatString ); + +my $item = 0; +foreach my $col (@Format) { + $item++; + if ( $col->{title} eq 'NEWLINE' ) { + while ( $item < $maxitems ) { + $m->out(qq{ \n}); + $item++; + } + + $item = 0; + $m->out(qq{\n}); + } + else { + $m->out('out( 'align="' . $col->{align} . '"' ) if ( $col->{align} ); + $m->out( 'style="' . $col->{style} . '"' ) if ( $col->{style} ); + $m->out('>'); + my $title = $col->{title}; + $title =~ s/^__(.*)__$/$1/o; + $title = ( + $m->comp( + '/RTx/Statistics/Elements/StatColumnMap', + Name => $title, + Attr => 'title' + ) + || $title + ); + if ( + $AllowSorting + && $col->{'attribute'} + && $m->comp( + '/RTx/Statistics/Elements/StatColumnMap', + Name => $col->{'attribute'}, + Attr => 'attribute' + ) + ) + { + + $m->out( + '' + . loc($title) . '' + ); + } + else { + $m->out( loc($title) ); + } + $m->out(''); + } +} + + diff --git a/rt/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat b/rt/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat new file mode 100644 index 000000000..a482f817e --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat @@ -0,0 +1,109 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# +%# +%# (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., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# 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 }}} +<%ARGS> +$Format + + +<%init> +use Regexp::Common; +my @Columns; + +while ($Format =~ /($RE{delimited}{-delim=>qq{\'"}}|[{}\w.]+)/go) { + my $col = $1; + + if ($col =~ /^$RE{quoted}$/o) { + substr($col,0,1) = ""; + substr($col,-1,1) = ""; + } + + my $colref; + + # kfh at mqsoftware.com added this to be able + # to create columns where the actual heading and value + # aren't know ahead of time. For instance queue names. + # it will work with subcols, but all subcols will have the same KEY + if ( $col =~ s!/KEY:([^/]+)!!io ) { + $colref->{'keyname'} = $1; + } + if ( $col =~ s!/STYLE:([^/]+)!!io ) { + $colref->{'style'} = $1; + } + if ( $col =~ s!/CLASS:([^/]+)!!io ) { + $colref->{'class'} = $1; + } + if ( $col =~ s!/TITLE:([^/]+)!!io ) { + $colref->{'title'} = $1; + } + if ( $col =~ s!/ALIGN:([^\/]+)!!io ) { + $colref->{'align'} = $1; + } + if ( $col =~ /__(.*?)__/gio ) { + my @subcols; + while ( $col =~ s/^(.*?)__(.*?)__//o ) { + push ( @subcols, $1 ) if ($1); + push ( @subcols, "__$2__" ); + $colref->{'attribute'} = $2; + } + push ( @subcols, $col ); + @{ $colref->{'output'} } = @subcols; + } + else { + @{ $colref->{'output'} } = ( "__" . $col . "__" ); + $colref->{'attribute'} = $col; + } + + if ( !$colref->{'title'} && grep { /^__(.*?)__$/io } + @{ $colref->{'output'} } ) + { + $colref->{'title'} = $1; + $colref->{'attribute'} = $1; + } + + + push @Columns, $colref; +} + return(@Columns); + diff --git a/rt/html/RTx/Statistics/Elements/CollectionAsTable/Row b/rt/html/RTx/Statistics/Elements/CollectionAsTable/Row new file mode 100644 index 000000000..bcfabe5c3 --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/CollectionAsTable/Row @@ -0,0 +1,112 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# +%# +%# (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., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# 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 }}} +<%ARGS> +$i => undef +@Format => undef +$record => undef +$maxitems => undef +$Depth => undef +$Warning => undef + + +<%PERL> +$m->out('' ); +my $item; +foreach my $column (@Format) { + if ( $column->{title} eq 'NEWLINE' ) { + while ( $item < $maxitems ) { + $m->out(qq{ \n}); + $item++; + } + $item = 0; + $m->out(''); + $m->out('' ); + next; + } + $item++; + $m->out('out( 'align="' . $column->{align} . '"' ) if ( $column->{align} ); + $m->out( 'style="' . $column->{style} . '"' ) if ( $column->{style} ); + $m->out('>'); + foreach my $subcol ( @{ $column->{output} } ) { + if ( $subcol =~ /^__(.*?)__$/o ) { + my $col = $1; + my $value = $m->comp( + '/RTx/Statistics/Elements/StatColumnMap', + Name => $col, + Attr => 'value' + ); + my @out; + + if ( $value && ref($value) ) { + + # All HTML snippets are returned by the callback function + # as scalar references. Data fetched from the objects are + # plain scalars, and needs to be escaped properly. + @out = + map { + ref($_) ? $$_ : $m->interp->apply_escapes( $_ => 'h' ) + } &{$value}( $record, $i, $column->{keyname} ); + ; + } + else { + + # Simple value; just escape it. + @out = $m->interp->apply_escapes( $value => 'h' ); + } + s/\n/
/gs for @out; + $m->out( @out ); + } + else { + $m->out($subcol); + } + } + $m->out(''); +} +$m->out(''); + diff --git a/rt/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox b/rt/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox new file mode 100644 index 000000000..ce043e294 --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox @@ -0,0 +1,103 @@ + + + + + + + + + + +
+ + X  + + <% $Title %> + +   +
+ +% if (defined $ShowStatus) { + + + + +% } +% if (defined $ShowSingleQueue) { + + + + +% } +% if (defined $ShowDates) { + + <& /RTx/Statistics/Elements/DateSelectRow, Label => "Start Date:", + refMonth => $sMonth, nameMonth => "sMonth", + refDay => $sDay, nameDay => "sDay", + refYear => $sYear, nameYear => "sYear" &> + + + <& /RTx/Statistics/Elements/DateSelectRow, Label => "End Date:", + refMonth => $eMonth, nameMonth => "eMonth", + refDay => $eDay, nameDay => "eDay", + refYear => $eYear, nameYear => "eYear" &> + + + + + +% } +% if (defined $ShowMultiQueues) { + +% if (defined $ShowDates) { +%# If we're showing the dates, we put these side by side. + + +% } else { + + + + +% } + +% } + <& /RTx/Statistics/Elements/ControlsAsTable/UpdatePage &> +
Show Status: + <& /Elements/SelectStatus, Name=>"status", Default => $Status, DefaultValue => undef &> +
Show Queue: + <& /Elements/SelectQueue, Name=>"Queue", Default=>$Queue ,ShowNullOption=>0, + CheckQueueRight=>'SeeQueue' &> +
Show Weekends: + +
Select All Queues: + <& /RTx/Statistics/Elements/SelectMultiQueue, Name=>"queues", Selected=>$queues_ref, + ShowNullOption=>0, CheckQueueRight=>'SeeQueue', Size => 10, NamedValues => 1 &> + + <& /RTx/Statistics/Elements/SelectMultiQueue, Name=>"queues", Selected=>$queues_ref, + ShowNullOption=>0, CheckQueueRight=>'SeeQueue', Size => 10, NamedValues => 1 &> +
Select All Queues:
+
+ + +
+<%args> +$Title => undef +$ShowMultiQueues => undef +$queues_ref => undef +$ShowDates => undef +$sMonth => undef +$sDay => undef +$sYear => undef +$eMonth => undef +$eDay => undef +$eYear => undef +$weekends => undef +$ShowSingleQueue => undef +$Queue => undef +$ShowStatus => undef +$Status => undef + + diff --git a/rt/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage b/rt/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage new file mode 100644 index 000000000..b4ccfd56f --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage @@ -0,0 +1,5 @@ + + + + + diff --git a/rt/html/RTx/Statistics/Elements/DateSelectRow b/rt/html/RTx/Statistics/Elements/DateSelectRow new file mode 100644 index 000000000..325e168c9 --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/DateSelectRow @@ -0,0 +1,55 @@ + <% $Label %> + + + + + + + + + + + +<%args> +$Label => undef +$refMonth => undef +$nameMonth => undef +$refDay => undef +$nameDay => undef +$refYear => undef +$nameYear => undef + +<%init> +use RTx::Statistics; +my $n; +my $selected; + + diff --git a/rt/html/RTx/Statistics/Elements/DurationAsString b/rt/html/RTx/Statistics/Elements/DurationAsString new file mode 100755 index 000000000..c0b4d9af4 --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/DurationAsString @@ -0,0 +1,18 @@ +<%$days|'00'%> days <%$hours|'00'%>:<%$minutes|'00'%> +<%INIT> + +my $MINUTE = 60; +my $HOUR = $MINUTE*60; +my $DAY = $HOUR * 24; +my $WEEK = $DAY * 7; +my $days = int($Duration / $DAY); +$Duration = $Duration % $DAY; +my $hours = int($Duration / $HOUR); +$hours = sprintf("%02d", $hours); +$Duration = $Duration % $HOUR; +my $minutes = int($Duration/$MINUTE); +$minutes = sprintf("%02d", $minutes); + +<%ARGS> +$Duration => undef + diff --git a/rt/html/RTx/Statistics/Elements/GraphBox b/rt/html/RTx/Statistics/Elements/GraphBox new file mode 100644 index 000000000..3dc06973e --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/GraphBox @@ -0,0 +1,27 @@ +
+ + + + + + + + + + +
+ + X  + + + Download Chart as Image + + +   +
+ Result Graph +
+
+<%args> +$GraphURL => undef + diff --git a/rt/html/RTx/Statistics/Elements/SelectMultiQueue b/rt/html/RTx/Statistics/Elements/SelectMultiQueue new file mode 100755 index 000000000..637f6dc80 --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/SelectMultiQueue @@ -0,0 +1,81 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# +%# +%# (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., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# 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 }}} + +<%ARGS> +$CheckQueueRight => 'CreateTicket' +$ShowNullOption => 1 +$ShowAllQueues => 1 +$Name => undef +$Verbose => undef +$NamedValues => 0 +$Selected => undef # ref to array containing selected queue names +$Lite => 0 +$Size => 5 + + +<%INIT> + +# put list of queue names into string, starting and ending with commas +my $sel_list = "," . join(",", @$Selected) . ","; + +my $q=new RT::Queues($session{'CurrentUser'}); +$q->UnLimit; + + diff --git a/rt/html/RTx/Statistics/Elements/StatColumnMap b/rt/html/RTx/Statistics/Elements/StatColumnMap new file mode 100644 index 000000000..aef9e2f3e --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/StatColumnMap @@ -0,0 +1,173 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# +%# +%# (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., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# 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 }}} +<%ARGS> +$Name => undef +$Attr => undef + + + +<%ONCE> +our ( $STAT_COLUMN_MAP ); + +sub StatColumnMap { + my $name = shift; + my $attr = shift; + + # First deal with the simple things from the map + if ( $STAT_COLUMN_MAP->{$name} ) { + return ( $STAT_COLUMN_MAP->{$name}->{$attr} ); + } + + # now, let's deal with harder things, like Custom Fields + + elsif ( $name =~ /^(?:CF|CustomField)\.\{(.+)\}$/ ) { + my $field = $1; + + if ( $attr eq 'attribute' ) { + return (undef); + } + elsif ( $attr eq 'title' ) { + return ( $field ); + } + elsif ( $attr eq 'value' ) { + # Display custom field contents, separated by newlines. + # For Image custom fields we also show a thumbnail here. + return sub { + my $values = $_[0]->CustomFieldValues($field); + return map { + ( + ($_->CustomFieldObj->Type eq 'Image') + ? \($m->scomp( '/Elements/ShowCustomFieldImage', Object => $_ )) + : $_->Content + ), + \'
', + } @{ $values->ItemsArrayRef } + }; + } + } +} + +sub LinkCallback { + my $method = shift; + + my $mode = $RT::Ticket::LINKTYPEMAP{$method}{Mode}; + my $type = $RT::Ticket::LINKTYPEMAP{$method}{Type}; + my $mode_uri = $mode.'URI'; + my $local_type = 'Local'.$mode; + + return sub { + map { + \'', + ( $_->$mode_uri->IsLocal ? $_->$local_type : $_->$mode ), + \'
', + } @{ $_[0]->Links($mode,$type)->ItemsArrayRef } + } +} + +$STAT_COLUMN_MAP = { + LastUpdated => { + attribute => 'LastUpdated', + title => 'Last Updated', + value => sub { return $_[0]->LastUpdatedObj->AsString } + }, + + Statistics_Date => { + title => 'Date', + value => sub { return $_[0]{values}{Statistics_Date} } + }, + + Statistics_Created_Count => { + title => 'Created', + value => sub { return $_[0]{values}{Statistics_Created_Count} } + }, + + Statistics_Resolved_Count => { + title => 'Resolved', + value => sub { return $_[0]{values}{Statistics_Resolved_Count} } + }, + + Statistics_Deleted_Count => { + title => 'Deleted', + value => sub { return $_[0]{values}{Statistics_Deleted_Count} } + }, + + Statistics_Totals => { + title => 'Totals', + value => sub { return $_[0]{values}{Statistics_Totals} } + }, + + Statistics_Status => { + title => 'Status', + value => sub { return $_[0]{values}{Statistics_Status} } + }, + + Statistics_Dynamic => { + # Depends on having a KEY as second param + value => sub { + my $record = shift; + my $line = shift; + my $key = shift; + return $$record{values}{$key} + } + }, + + # Everything from LINKTYPEMAP + (map { + $_ => { value => LinkCallback( $_ ) } + } keys %RT::Ticket::LINKTYPEMAP), + + '_CLASS' => { + value => sub { return $_[1] % 2 ? 'oddline' : 'evenline' } + }, + +}; + +<%init> +$m->comp( '/Elements/Callback', STAT_COLUMN_MAP => $STAT_COLUMN_MAP, _CallbackName => 'StatColumnMap'); +return StatColumnMap($Name, $Attr); + diff --git a/rt/html/RTx/Statistics/Elements/Tabs b/rt/html/RTx/Statistics/Elements/Tabs new file mode 100755 index 000000000..4fde113ea --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/Tabs @@ -0,0 +1,72 @@ +%# BEGIN LICENSE BLOCK +%# +%# Copyright (c) 1996-2003 Jesse Vincent +%# +%# (Except where explictly superceded by other copyright notices) +%# +%# 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. +%# +%# Unless otherwise specified, all modifications, corrections or +%# extensions to this work which alter its source code become the +%# property of Best Practical Solutions, LLC when submitted for +%# inclusion in the work. +%# +%# +%# END LICENSE BLOCK +<& /Elements/Tabs, + tabs => $tabs, + current_toptab => 'RTx/Statistics/index.html', + current_tab => $current_tab, + Title => $Title &> + +<%INIT> + my $tabs = { A => { title => loc('Tickets per Day'), + path => 'RTx/Statistics/CallsQueueDay/index.html', + }, + B => { title => loc('Tickets by status'), + path => 'RTx/Statistics/OpenStalled/index.html', + }, + C => { title => loc('Multiple Queues'), + path => 'RTx/Statistics/CallsMultiQueue/index.html', + }, + D => { title => loc('Ticket Trends by Day'), + path => 'RTx/Statistics/DayOfWeek/index.html', + }, + E => { 'title' => loc('Time to Resolve'), + path => 'RTx/Statistics/Resolution/index.html', + }, + F => { 'title' => loc('Resolve Time Graph'), + path => 'RTx/Statistics/TimeToResolve/index.html', + }, + Z => { 'title' => loc('FAQ'), + path => 'RTx/Statistics/FAQ/index.html', + }, + }; + + # Now let callbacks add their extra tabs + $m->comp('/Elements/Callback', tabs => $tabs, %ARGS); + + foreach my $tab (sort keys %{$tabs}) { + if ($tabs->{$tab}->{'path'} eq $current_tab) { + $tabs->{$tab}->{"subtabs"} = $subtabs; + $tabs->{$tab}->{"current_subtab"} = $current_subtab; + } + } + + + + +<%ARGS> +$subtabs => undef +$current_tab => undef +$current_subtab => undef +$Title => undef + -- cgit v1.2.1