[Rt-commit] rt branch, 4.0/cf-date-parse-in-search, created. rt-4.0.2-119-g3de7dde
? sunnavy
sunnavy at bestpractical.com
Tue Sep 27 01:56:19 EDT 2011
The branch, 4.0/cf-date-parse-in-search has been created
at 3de7dde19c9ec770396f7e0439557f1c0155e776 (commit)
- Log -----------------------------------------------------------------
commit 3de7dde19c9ec770396f7e0439557f1c0155e776
Author: sunnavy <sunnavy at bestpractical.com>
Date: Tue Sep 27 13:19:56 2011 +0800
use RT::Date to parse cf date values like "tomorrow" in search
diff --git a/lib/RT/Tickets.pm b/lib/RT/Tickets.pm
index 5401373..cea4e94 100644
--- a/lib/RT/Tickets.pm
+++ b/lib/RT/Tickets.pm
@@ -1514,6 +1514,24 @@ sub _CustomFieldLimit {
}
}
+ if ( $cf && $cf->Type =~ /^Date(?:Time)?$/ ) {
+ my $date = RT::Date->new( $self->CurrentUser );
+ $date->Set( Format => 'unknown', Value => $value );
+ if ( $date->Unix ) {
+
+ # don't consider tz for Date, use server's all the time.
+ if ( $cf->Type eq 'Date' || $value !~ /:/ ) {
+ $value = $date->Date( Timezone => 'server' );
+ }
+ else {
+ $value = $date->DateTime;
+ }
+ }
+ else {
+ $RT::Logger->warn("$value is not a valid date string");
+ }
+ }
+
my $single_value = !$cf || !$cfid || $cf->SingleValue;
my $cfkey = $cfid ? $cfid : "$queue.$field";
@@ -1611,52 +1629,41 @@ sub _CustomFieldLimit {
$cf->Load($field);
# need special treatment for Date
- if ( $cf->Type eq 'DateTime' && $op eq '=' ) {
+ if ( $cf->Type eq 'DateTime' && $op eq '=' && $value !~ /:/ ) {
- if ( $value =~ /:/ ) {
- # there is time speccified.
- my $date = RT::Date->new( $self->CurrentUser );
- $date->Set( Format => 'unknown', Value => $value );
- $self->_SQLLimit(
- ALIAS => $TicketCFs,
- FIELD => 'Content',
- OPERATOR => "=",
- VALUE => $date->ISO,
- %rest,
- );
- }
- else {
# no time specified, that means we want everything on a
# particular day. in the database, we need to check for >
# and < the edges of that day.
- my $date = RT::Date->new( $self->CurrentUser );
- $date->Set( Format => 'unknown', Value => $value );
- $date->SetToMidnight( Timezone => 'server' );
- my $daystart = $date->ISO;
- $date->AddDay;
- my $dayend = $date->ISO;
+ my $date = RT::Date->new( $self->CurrentUser );
+ $date->Set(
+ Format => 'unknown',
+ Value => $value,
+ Timezone => 'UTC',
+ );
+ my $daystart = $date->ISO;
+ $date->AddDay;
+ my $dayend = $date->ISO;
- $self->_OpenParen;
+ $self->_OpenParen;
- $self->_SQLLimit(
- ALIAS => $TicketCFs,
- FIELD => 'Content',
- OPERATOR => ">=",
- VALUE => $daystart,
- %rest,
- );
+ $self->_SQLLimit(
+ ALIAS => $TicketCFs,
+ FIELD => 'Content',
+ OPERATOR => ">=",
+ VALUE => $daystart,
+ %rest,
+ );
- $self->_SQLLimit(
- ALIAS => $TicketCFs,
- FIELD => 'Content',
- OPERATOR => "<=",
- VALUE => $dayend,
- %rest,
- ENTRYAGGREGATOR => 'AND',
- );
+ $self->_SQLLimit(
+ ALIAS => $TicketCFs,
+ FIELD => 'Content',
+ OPERATOR => "<=",
+ VALUE => $dayend,
+ %rest,
+ ENTRYAGGREGATOR => 'AND',
+ );
- $self->_CloseParen;
- }
+ $self->_CloseParen;
}
elsif ( $op eq '=' || $op eq '!=' || $op eq '<>' ) {
if ( length( Encode::encode_utf8($value) ) < 256 ) {
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list