diff options
author | ivan <ivan> | 2010-05-18 18:49:59 +0000 |
---|---|---|
committer | ivan <ivan> | 2010-05-18 18:49:59 +0000 |
commit | e70abd21bab68b23488f7ef1ee2e693a3b365691 (patch) | |
tree | 75986ffa9ba6ab4f961f9033468a1344e1653408 /rt/lib/RT/Report | |
parent | b4b0c7e72d7eaee2fbfc7022022c9698323203dd (diff) |
import rt 3.8.8
Diffstat (limited to 'rt/lib/RT/Report')
-rw-r--r-- | rt/lib/RT/Report/Tickets.pm | 64 | ||||
-rw-r--r-- | rt/lib/RT/Report/Tickets/Entry.pm | 27 |
2 files changed, 75 insertions, 16 deletions
diff --git a/rt/lib/RT/Report/Tickets.pm b/rt/lib/RT/Report/Tickets.pm index c539ab10e..c34d1cbdd 100644 --- a/rt/lib/RT/Report/Tickets.pm +++ b/rt/lib/RT/Report/Tickets.pm @@ -68,14 +68,13 @@ sub Groupings { ); } - push @fields, map {$_, $_} qw( - DueDaily DueMonthly DueAnnually - ResolvedDaily ResolvedMonthly ResolvedAnnually - CreatedDaily CreatedMonthly CreatedAnnually - LastUpdatedDaily LastUpdatedMonthly LastUpdatedAnnually - StartedDaily StartedMonthly StartedAnnually - StartsDaily StartsMonthly StartsAnnually - ); + + for my $field (qw(Due Resolved Created LastUpdated Started Starts)) { + for my $frequency (qw(Hourly Daily Monthly Annually)) { + my $item = $field.$frequency; + push @fields, $item, $item; + } + } my $queues = $args{'Queues'}; if ( !$queues && $args{'Query'} ) { @@ -183,20 +182,53 @@ sub _FieldToFunction { my $field = $args{'FIELD'}; - if ($field =~ /^(.*)(Daily|Monthly|Annually)$/) { + if ($field =~ /^(.*)(Hourly|Daily|Monthly|Annually)$/) { my ($field, $grouping) = ($1, $2); my $alias = $args{'ALIAS'} || 'main'; + + my $func = "$alias.$field"; + + my $db_type = RT->Config->Get('DatabaseType'); + if ( RT->Config->Get('ChartsTimezonesInDB') ) { + my $tz = $self->CurrentUser->UserObj->Timezone + || RT->Config->Get('Timezone') + || 'UTC'; + if ( lc $tz eq 'utc' ) { + # do nothing + } + elsif ( $db_type eq 'Pg' ) { + $func = "timezone('UTC', $func)"; + $func = "timezone(". $self->_Handle->dbh->quote($tz) .", $func)"; + } + elsif ( $db_type eq 'mysql' ) { + $func = "CONVERT_TZ($func, 'UTC', " + . $self->_Handle->dbh->quote($tz) + .")"; + } + else { + $RT::Logger->warning( + "ChartsTimezonesInDB config option" + ." is not supported on $db_type." + ); + } + } + # Pg 8.3 requires explicit casting - $field .= '::text' if RT->Config->Get('DatabaseType') eq 'Pg'; - if ( $grouping =~ /Daily/ ) { - $args{'FUNCTION'} = "SUBSTR($alias.$field,1,10)"; + $func .= '::text' if $db_type eq 'Pg'; + + if ( $grouping eq 'Hourly' ) { + $func = "SUBSTR($func,1,13)"; + } + if ( $grouping eq 'Daily' ) { + $func = "SUBSTR($func,1,10)"; } - elsif ( $grouping =~ /Monthly/ ) { - $args{'FUNCTION'} = "SUBSTR($alias.$field,1,7)"; + elsif ( $grouping eq 'Monthly' ) { + $func = "SUBSTR($func,1,7)"; } - elsif ( $grouping =~ /Annually/ ) { - $args{'FUNCTION'} = "SUBSTR($alias.$field,1,4)"; + elsif ( $grouping eq 'Annually' ) { + $func = "SUBSTR($func,1,4)"; } + $args{'FUNCTION'} = $func; } elsif ( $field =~ /^(?:CF|CustomField)\.{(.*)}$/ ) { #XXX: use CFDecipher method my $cf_name = $1; my $cf = RT::CustomField->new( $self->CurrentUser ); diff --git a/rt/lib/RT/Report/Tickets/Entry.pm b/rt/lib/RT/Report/Tickets/Entry.pm index 49c1a9225..78e4cab22 100644 --- a/rt/lib/RT/Report/Tickets/Entry.pm +++ b/rt/lib/RT/Report/Tickets/Entry.pm @@ -52,6 +52,33 @@ use base qw/RT::Record/; # XXX TODO: how the heck do we acl a report? sub CurrentUserHasRight {1} +=head2 LabelValue + +If you're pulling a value out of this collection and using it as a label, +you may want the "cleaned up" version. This includes scrubbing 1970 dates +and ensuring that dates are in local not DB timezones. + +=cut + +sub LabelValue { + my $self = shift; + my $field = shift; + my $value = $self->__Value( $field ); + + if ( $field =~ /(Daily|Monthly|Annually|Hourly)$/ ) { + my $re; + # it's not just 1970-01-01 00:00:00 because of timezone shifts + # and conversion from UTC to user's TZ + $re = qr{19(?:70-01-01|69-12-31) [0-9]{2}} if $field =~ /Hourly$/; + $re = qr{19(?:70-01-01|69-12-31)} if $field =~ /Daily$/; + $re = qr{19(?:70-01|69-12)} if $field =~ /Monthly$/; + $re = qr{19(?:70|69)} if $field =~ /Annually$/; + $value =~ s/^$re/Not Set/; + } + + return $value; +} + eval "require RT::Report::Tickets::Entry_Vendor"; if ($@ && $@ !~ qr{^Can't locate RT/Report/Tickets/Entry_Vendor.pm}) { die $@; |