@@ -356,8 +356,6 @@ my $BaseQuery = $DECODED_ARGS->{BaseQuery};
356356
357357$BaseQuery ||= $Query;
358358
359- my @DateTypes = qw/Created Starts Started Due LastUpdated Resolved/;
360-
361359my $rtdate = RT::Date->new($session{'CurrentUser'});
362360
363361my $weekstart = 'Sunday'; #RT::SiteConfig? user pref?
@@ -408,40 +406,32 @@ my $QueryString =
408406 );
409407
410408# we search all date types in Format string
411- my @CoreDates = grep { $TempFormat =~ m/__${_}(Relative)?__/ } @DateTypes;
412- my @CustomFields = (
413- $TempFormat =~ /__(CustomField\.\{.*?\})__/g,
414- $TempFormat =~ /__(CustomFieldView\.\{.*?\})__/g
415- );
416- my @DateCustomFields;
417-
418- for my $CustomField (@CustomFields) {
419- my $LintCustomField = $CustomField;
420- my $QueryCustomField = $CustomField;
421-
422- # Handle both CustomField.{name} and CustomFieldView.{name} formats
423- if ( $LintCustomField =~ /CustomField\.\{(.*)\}/ ) {
424- $LintCustomField = $1;
425- # QueryCustomField stays the same for CustomField format
426- } elsif ( $LintCustomField =~ /CustomFieldView\.\{(.*)\}/ ) {
427- $LintCustomField = $1;
428- # Convert CustomFieldView to CustomField for TicketSQL compatibility
429- $QueryCustomField = "CustomField.{$1}";
409+ my @formats = $m->comp('/Elements/CollectionAsTable/ParseFormat', Format => $TempFormat);
410+ my @Dates;
411+ for my $format (@formats) {
412+ if ( my $attr = $format->{attribute} ) {
413+ my $table_column = $m->comp(
414+ '/Elements/ColumnMap',
415+ Class => 'RT__Ticket',
416+ Name => $attr,
417+ Attr => 'attribute',
418+ );
419+
420+ if ( $attr =~ /^(?:CF|CustomField(?:View)?)\./ ) {
421+ my $cf = RT::CustomField->new( RT->SystemUser );
422+ my $name = $table_column->();
423+ $cf->LoadByName( Name => $name, LookupType => 'RT::Queue-RT::Ticket' );
424+ push @Dates, "CF.{$name}" if $cf->id && ( $cf->Type eq 'Date' || $cf->Type eq 'DateTime' );
425+ }
426+ elsif (RT::Ticket->_ClassAccessible->{$table_column}
427+ && RT::Ticket->_ClassAccessible->{$table_column}{type} eq 'datetime' )
428+ {
429+ push @Dates, $table_column;
430+ }
430431 }
431-
432- my $CustomFieldObj = RT::CustomField->new( RT->SystemUser );
433- $CustomFieldObj->LoadByName( Name => $LintCustomField );
434- push @DateCustomFields, $QueryCustomField
435- if $CustomFieldObj->id
436- && ( $CustomFieldObj->Type eq 'Date'
437- || $CustomFieldObj->Type eq 'DateTime' );
438432}
439433
440- my @Dates = (@CoreDates, @DateCustomFields);
441- @Dates = map { $_ =~ s/^CustomField\.(.*)$/CF.$1/; $_ } @Dates;
442-
443- # used to display or not a date in Element/CalendarEvent
444- my %DateTypes = map { $_ => 1 } @Dates;
434+ @Dates = List::MoreUtils::uniq(@Dates);
445435
446436# Auto-detect multiple day events based on Format fields
447437my ($starts_field, $ends_field) = RT::Search::Calendar::GetMultipleDayFields(\@Dates);
0 commit comments