Skip to content

Commit 1f38e9d

Browse files
Merge branch '6.0/calendar-date-fields' into 6.0-trunk
2 parents 7c4f16f + 066a7b4 commit 1f38e9d

File tree

2 files changed

+62
-33
lines changed

2 files changed

+62
-33
lines changed

share/html/Search/Elements/Calendar

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
361359
my $rtdate = RT::Date->new($session{'CurrentUser'});
362360

363361
my $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
447437
my ($starts_field, $ends_field) = RT::Search::Calendar::GetMultipleDayFields(\@Dates);

t/web/search_results.t

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@ RT::Test->create_tickets(
1515
{ Requestor => 'bob@localhost', },
1616
);
1717

18+
for my $cf_type (qw/Freeform Date DateTime/) {
19+
my $cf = RT::Test->load_or_create_custom_field(
20+
Name => "${cf_type}Example",
21+
Type => $cf_type,
22+
Queue => 0,
23+
LookupType => 'RT::Queue-RT::Ticket',
24+
);
25+
ok $cf && $cf->id, "Created $cf_type custom field";
26+
}
27+
1828
ok $m->login, 'logged in';
1929

2030
$m->get_ok('/Search/Results.html?Query=id>0');
@@ -67,4 +77,33 @@ diag "Test extended status column map when 'UseSQLForACLChecks' is false";
6777
$m_user_a->content_lacks('Invalid column', 'No invalid column map results from extended status');
6878
}
6979

80+
diag 'Test date columns for calendar display mode';
81+
{
82+
ok $m->login, 'logged in';
83+
$m->get_ok("/Search/Calendar.html?Query=id>0&Format='__id__', CF.FreeformExample");
84+
$m->content_contains( 'No date columns were found' );
85+
86+
for my $field (qw/Created Starts Started Due LastUpdated Resolved/) {
87+
for my $column ( $field, "${field}Relative", "__${field}__", "__${field}Relative__" ) {
88+
$m->get_ok("/Search/Calendar.html?Query=id>0&Format='__id__', $column");
89+
$m->content_lacks( 'No date columns were found', "Date column $column works" );
90+
}
91+
}
92+
93+
for my $field (qw/DateExample DateTimeExample/) {
94+
for my $column (
95+
"CF.$field", "CF.{$field}",
96+
"CustomField.$field", "CustomField.{$field}",
97+
"__CF.${field}__", "__CF.{$field}__",
98+
"__CustomField.${field}__", "__CustomField.{$field}__",
99+
"CustomFieldView.$field", "CustomFieldView.{$field}",
100+
"__CustomFieldView.${field}__", "__CustomFieldView.{$field}__",
101+
)
102+
{
103+
$m->get_ok("/Search/Calendar.html?Query=id>0&Format='__id__', $column");
104+
$m->content_lacks( 'No date columns were found', "Date column $column works" );
105+
}
106+
}
107+
}
108+
70109
done_testing;

0 commit comments

Comments
 (0)