[Rt-commit] r5050 - in rt/branches/3.7-EXPERIMENTAL: . html/Search
lib/RT/Report
ruz at bestpractical.com
ruz at bestpractical.com
Wed Apr 19 11:18:50 EDT 2006
Author: ruz
Date: Wed Apr 19 11:18:48 2006
New Revision: 5050
Modified:
rt/branches/3.7-EXPERIMENTAL/ (props changed)
rt/branches/3.7-EXPERIMENTAL/html/Search/Chart
rt/branches/3.7-EXPERIMENTAL/html/Search/Elements/Chart
rt/branches/3.7-EXPERIMENTAL/lib/RT/Report/Tickets.pm
Log:
r2409 at cubic-pc: cubic | 2006-04-19 19:26:05 +0400
* change API of the GroupBy to be consistent with DBIx::SB
* add initial changes to allow to group by custom field values
Modified: rt/branches/3.7-EXPERIMENTAL/html/Search/Chart
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Search/Chart (original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Search/Chart Wed Apr 19 11:18:48 2006
@@ -34,7 +34,7 @@
my $tix = RT::Report::Tickets->new( $session{'CurrentUser'} );
$tix->FromSQL( $Query );
my $count_name = $tix->Column( FUNCTION => 'COUNT', FIELD => 'id' );
-$tix->GroupBy( $PrimaryGroupBy );
+$tix->GroupBy( FIELD => $PrimaryGroupBy );
my $value_name = $tix->Column( FIELD => $PrimaryGroupBy );
my %class = (
Modified: rt/branches/3.7-EXPERIMENTAL/html/Search/Elements/Chart
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Search/Elements/Chart (original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Search/Elements/Chart Wed Apr 19 11:18:48 2006
@@ -9,7 +9,7 @@
my $tix = RT::Report::Tickets->new( $session{'CurrentUser'} );
$tix->FromSQL( $Query );
my $count_name = $tix->Column( FUNCTION => 'COUNT', FIELD => 'id' );
-$tix->GroupBy( $PrimaryGroupBy );
+$tix->GroupBy( FIELD => $PrimaryGroupBy );
my $value_name = $tix->Column( FIELD => $PrimaryGroupBy );
my %class = (
Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Report/Tickets.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/Report/Tickets.pm (original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/Report/Tickets.pm Wed Apr 19 11:18:48 2006
@@ -1,7 +1,10 @@
package RT::Report::Tickets;
+
use base qw/RT::Tickets/;
use RT::Report::Tickets::Entry;
+use strict;
+use warnings;
sub Groupings {
qw (Owner
@@ -26,19 +29,16 @@
StartsMonthly
StartsAnnually
)
-
}
sub GroupBy {
my $self = shift;
- my $field = shift;
+ my %args = ref $_[0]? %{ $_[0] }: (@_);
- $self->{'_group_by_field'} = $field;
-
- my $function;
- (undef, $function) = $self->_FieldToFunction($field);
- $self->GroupByCols({ FIELD => $field, FUNCTION => $function});
+ $self->{'_group_by_field'} = $args{'FIELD'};
+ %args = $self->_FieldToFunction( %args );
+ $self->SUPER::GroupBy( \%args );
}
sub Column {
@@ -46,9 +46,10 @@
my %args = (@_);
if ( $args{'FIELD'} && !$args{'FUNCTION'} ) {
- ( undef, $args{'FUNCTION'} ) = $self->_FieldToFunction( $args{'FIELD'} ); }
+ %args = $self->_FieldToFunction( %args );
+ }
- return $self->SUPER::Column(%args);
+ return $self->SUPER::Column( %args );
}
=head2 _DoSearch
@@ -60,13 +61,10 @@
sub _DoSearch {
my $self = shift;
- $self->SUPER::_DoSearch(@_);
- $self->AddEmptyRows();
-
+ $self->SUPER::_DoSearch( @_ );
+ $self->AddEmptyRows;
}
-
-
=head2 _FieldToFunction FIELD
Returns a tuple of the field or a database function to allow grouping on that
@@ -74,29 +72,35 @@
=cut
-sub _FieldToFunction{
+sub _FieldToFunction {
my $self = shift;
- my $field = shift;
- my $func = '';
+ my %args = (@_);
+
+ my $field = $args{'FIELD'};
if ($field =~ /^(.*)(Daily|Monthly|Annually)$/) {
- $field = $1;
- $grouping = $2;
- if ($grouping =~ /Daily/) {
- $func = "SUBSTR($field,1,10)";
- $field = '';
+ my ($field, $grouping) = ($1, $2);
+ if ( $grouping =~ /Daily/ ) {
+ $args{'FUNCTION'} = "SUBSTR($field,1,10)";
}
- elsif ($grouping =~ /Monthly/) {
- $func = "SUBSTR($field,1,7)";
- $field = '';
+ elsif ( $grouping =~ /Monthly/ ) {
+ $args{'FUNCTION'} = "SUBSTR($field,1,7)";
}
- elsif ($grouping =~ /Annually/) {
- $func = "SUBSTR($field,1,4)";
- $field = '';
+ elsif ( $grouping =~ /Annually/ ) {
+ $args{'FUNCTION'} = "SUBSTR($field,1,4)";
+ }
+ } elsif ( $field =~ /^(?:CF|CustomField)\.{(.*)}$/ ) { #XXX: use CFDecipher method
+ my $cf_name = $1;
+ my $cf = RT::CustomField->new( $self->CurrentUser );
+ $cf->Load($cf_name);
+ unless ( $cf->id ) {
+ $RT::Logger->error("Couldn't load CustomField #$cf_name");
+ } else {
+ my ($ticket_cf_alias, $cf_alias) = $self->_CustomFieldJoin($cf->id, $cf->id, $cf_name);
+ @args{qw(ALIAS FIELD)} = ($ticket_cf_alias, 'Content');
}
-
}
- return ($field, $func);
+ return %args;
}
@@ -136,19 +140,18 @@
sub AddEmptyRows {
my $self = shift;
- if ( $self->{'_group_by_field'} eq 'Status' ) {
- foreach my $status (RT::Queue->new($self->CurrentUser)->StatusArray ) {
- unless ( grep { $_->__Value('Status') eq $status } @{ $self->ItemsArrayRef } ) {
- my $record = $self->NewItem;
- $record->LoadFromHash(
- {
- id => 0,
- status => $status
- }
- );
- $self->AddRecord($record);
- }
+ if ( $self->{'_group_by_field'} eq 'Status' ) {
+ foreach my $status ( RT::Queue->new($self->CurrentUser)->StatusArray ) {
+ next if grep $_->__Value('Status') eq $status, @{ $self->ItemsArrayRef };
+
+ my $record = $self->NewItem;
+ $record->LoadFromHash( {
+ id => 0,
+ status => $status
+ } );
+ $self->AddRecord($record);
+ }
}
}
-}
+
1;
More information about the Rt-commit
mailing list