getEventsIn window is inclusive. Fixes bug #11158

This commit is contained in:
Colin Kuskie 2009-10-20 11:25:08 -07:00
parent a473773214
commit 2159ab1fbc
3 changed files with 225 additions and 186 deletions

View file

@ -31,6 +31,7 @@
- fixed #11138: RichEdit, upload image does not commit a version tag - fixed #11138: RichEdit, upload image does not commit a version tag
- fixed ExpireIncompleteSurveyResponses Workflow: process responses for deleted users - fixed ExpireIncompleteSurveyResponses Workflow: process responses for deleted users
- fixed #11157: calendar tool for entering add event date - fixed #11157: calendar tool for entering add event date
- fixed #11158: Calendar iCal feed doesn't show today's all-day events
7.8.1 7.8.1
- mark $session->datetime->time as deprecated and remove its use from core code - mark $session->datetime->time as deprecated and remove its use from core code

View file

@ -786,8 +786,8 @@ sub getEventsIn {
&& Event.endTime IS NULL && Event.endTime IS NULL
&& &&
!( !(
Event.startDate >= '$endDate' Event.startDate > '$endDate'
|| Event.endDate <= '$startDate' || Event.endDate < '$startDate'
) )
) )
|| !( || !(
@ -810,6 +810,7 @@ sub getEventsIn {
my $orderby = join ',', @order_priority; my $orderby = join ',', @order_priority;
$self->session->log->warn("sql clause: $where");
my $events my $events
= $self->getLineage(["descendants"], { = $self->getLineage(["descendants"], {
returnObjects => 1, returnObjects => 1,
@ -1901,15 +1902,17 @@ sub www_ical {
); );
} }
else { else {
$dt_start = WebGUI::DateTime->new($self->session, time); $dt_start = WebGUI::DateTime->new($session, time);
$dt_start->set_time_zone( $session->datetime->getTimeZone ); $dt_start->set_time_zone( $session->datetime->getTimeZone );
} }
$session->log->warn("start1: ". $dt_start->toMysql);
my $dt_end; my $dt_end;
my $end = $form->param("end"); my $end = $form->param("end");
if ($end) { if ($end) {
$dt_end $dt_end
= WebGUI::DateTime->new($self->session, = WebGUI::DateTime->new($session,
mysql => $end, mysql => $end,
time_zone => $session->datetime->getTimeZone, time_zone => $session->datetime->getTimeZone,
); );
@ -1918,6 +1921,8 @@ sub www_ical {
$dt_end = $dt_start->clone->add( seconds => $self->get('icalInterval') ); $dt_end = $dt_start->clone->add( seconds => $self->get('icalInterval') );
} }
$session->log->warn("start2: ". $dt_start->toMysql);
$session->log->warn("end2: ". $dt_end->toMysql);
# Get all the events we're going to display # Get all the events we're going to display
@ -1929,8 +1934,11 @@ sub www_ical {
. qq{VERSION:2.0\r\n}; . qq{VERSION:2.0\r\n};
# VEVENT: # VEVENT:
$session->log->warn("before event processing");
EVENT: for my $event (@events) { EVENT: for my $event (@events) {
$session->log->warn("have event: ");
next EVENT unless $event->canView(); next EVENT unless $event->canView();
$session->log->warn($event->getTitle);
$ical .= qq{BEGIN:VEVENT\r\n}; $ical .= qq{BEGIN:VEVENT\r\n};
### UID ### UID

View file

@ -57,7 +57,7 @@ use Data::Dumper;
use WebGUI::Asset::Wobject::Calendar; use WebGUI::Asset::Wobject::Calendar;
use WebGUI::Asset::Event; use WebGUI::Asset::Event;
plan tests => 15 + scalar @icalWrapTests; plan tests => 14 + scalar @icalWrapTests;
my $session = WebGUI::Test->session; my $session = WebGUI::Test->session;
@ -221,6 +221,30 @@ my $justAfterwt = $windowCal->addChild({
timeZone => $tz, timeZone => $tz,
}, undef, undef, {skipAutoCommitWorkflows => 1}); }, undef, undef, {skipAutoCommitWorkflows => 1});
my $coincident = $windowCal->addChild({
className => 'WebGUI::Asset::Event',
title => 'Coincident with the window start and window end',
startDate => $startDt->toDatabaseDate,
endDate => $endDt->toDatabaseDate,
timeZone => $tz,
}, undef, undef, {skipAutoCommitWorkflows => 1});
my $coincidentLow = $windowCal->addChild({
className => 'WebGUI::Asset::Event',
title => 'Coincident with the window start',
startDate => $startDt->toDatabaseDate,
endDate => $endDt->clone->add(days => 1)->toDatabaseDate,
timeZone => $tz,
}, undef, undef, {skipAutoCommitWorkflows => 1});
my $coincidentHigh = $windowCal->addChild({
className => 'WebGUI::Asset::Event',
title => 'Coincident with the window end',
startDate => $startDt->clone->add( days => -1, )->toDatabaseDate,
endDate => $endDt->toDatabaseDate,
timeZone => $tz,
}, undef, undef, {skipAutoCommitWorkflows => 1});
# wt suffix = with times # wt suffix = with times
# inside # inside
# insidewt # insidewt
@ -228,6 +252,9 @@ my $justAfterwt = $windowCal->addChild({
# |-------------straddlewt---------------| # |-------------straddlewt---------------|
# straddleLowwt # straddleLowwt
# straddleHighwt # straddleHighwt
# |----------coincident-----------|
# |----------coincidentLow------------------|
# |--------------------coincidentHigh-------|
# window: |-------------------------------| # window: |-------------------------------|
# justBeforewt justAfterwt # justBeforewt justAfterwt
# outside high # outside high
@ -239,7 +266,7 @@ my $tag2 = WebGUI::VersionTag->getWorking($session);
$tag2->commit; $tag2->commit;
WebGUI::Test->tagsToRollback($tag2); WebGUI::Test->tagsToRollback($tag2);
is(scalar @{ $windowCal->getLineage(['children'])}, 10, 'added events to the window calendar'); is(scalar @{ $windowCal->getLineage(['children'])}, 13, 'added events to the window calendar');
my @window = $windowCal->getEventsIn($startDt->toDatabase, $endDt->toDatabase); my @window = $windowCal->getEventsIn($startDt->toDatabase, $endDt->toDatabase);
@ -247,11 +274,14 @@ my @window = $windowCal->getEventsIn($startDt->toDatabase, $endDt->toDatabase);
#note join "\n", map { join ' ', $_->get('title'), $_->get('startDate'), $_->get('startTime')} @window; #note join "\n", map { join ' ', $_->get('title'), $_->get('startDate'), $_->get('startTime')} @window;
#note $endDt->toDatabase; #note $endDt->toDatabase;
is(scalar @window, 6, 'getEventsIn returned 6 events');
cmp_bag( cmp_bag(
[ map { $_->get('title') } @window ], [ map { $_->get('title') } @window ],
[ map { $_->get('title') } ($inside, $insidewt, $straddle, $straddleHighwt, $straddleLowwt, $straddlewt)], [ map { $_->get('title') }
'..returns correct 6 events' ($inside, $insidewt,
$straddle, $straddleHighwt, $straddleLowwt, $straddlewt,
$coincident, $coincidentLow, $coincidentHigh, )
],
'..returns correct set of events'
); );
###################################################################### ######################################################################