New methods in WebGUI::DateTime that clearly state how they handle timezones.
The standard is everything going into the DB is in UTC. Timezones have to be manually handled after being fetched. Added a test for the new methods and for object construction. Changed Calendar and Event Assets to use the new methods. Interim checkin to get some debug help from Doug.
This commit is contained in:
parent
f6a956c447
commit
17fac4a7cb
4 changed files with 394 additions and 52 deletions
|
|
@ -51,7 +51,7 @@ sub definition {
|
|||
|
||||
my $i18n = WebGUI::International->new($session, 'Asset_Event');
|
||||
|
||||
my $dt = WebGUI::DateTime->new(time);
|
||||
my $dt = WebGUI::DateTime->new($session, time);
|
||||
|
||||
### Set up list options ###
|
||||
|
||||
|
|
@ -215,15 +215,15 @@ sub generateRecurringEvents
|
|||
# Get the distance between the event startDate and endDate
|
||||
my $duration_days = 0;
|
||||
|
||||
my $event_start = WebGUI::DateTime->new(delete($properties->{startDate})." 00:00:00");
|
||||
my $event_end = WebGUI::DateTime->new(delete($properties->{endDate})." 00:00:00");
|
||||
my $event_start = WebGUI::DateTime->new($self->session, delete($properties->{startDate})." 00:00:00");
|
||||
my $event_end = WebGUI::DateTime->new($self->session, delete($properties->{endDate})." 00:00:00");
|
||||
$duration_days = $event_end->subtract_datetime($event_start)->days;
|
||||
|
||||
my @dates = $self->getRecurrenceDates($recur);
|
||||
|
||||
for my $date (@dates)
|
||||
{
|
||||
my $dt = WebGUI::DateTime->new($date." 00:00:00");
|
||||
my $dt = WebGUI::DateTime->new($self->session, $date." 00:00:00");
|
||||
|
||||
### TODO: Only generate if the recurId does not exist on this day
|
||||
$properties->{startDate} = $dt->strftime('%F');
|
||||
|
|
@ -289,13 +289,13 @@ sub getDateTimeStart
|
|||
|
||||
if ($time)
|
||||
{
|
||||
my $dt = new WebGUI::DateTime($date." ".$time);
|
||||
my $dt = new WebGUI::DateTime($self->session, $date." ".$time);
|
||||
$dt->set_time_zone($tz);
|
||||
return $dt;
|
||||
}
|
||||
else
|
||||
{
|
||||
my $dt = new WebGUI::DateTime($date." 00:00:00");
|
||||
my $dt = new WebGUI::DateTime($self->session, $date." 00:00:00");
|
||||
return $dt;
|
||||
}
|
||||
}
|
||||
|
|
@ -333,13 +333,13 @@ sub getDateTimeEnd
|
|||
|
||||
if ($time)
|
||||
{
|
||||
my $dt = new WebGUI::DateTime($date." ".$time);
|
||||
my $dt = new WebGUI::DateTime($self->session, $date." ".$time);
|
||||
$dt->set_time_zone($tz);
|
||||
return $dt;
|
||||
}
|
||||
else
|
||||
{
|
||||
my $dt = new WebGUI::DateTime($date." 23:59:59");
|
||||
my $dt = new WebGUI::DateTime($self->session, $date." 23:59:59");
|
||||
return $dt;
|
||||
}
|
||||
}
|
||||
|
|
@ -719,9 +719,9 @@ sub getRecurrenceDates
|
|||
);
|
||||
|
||||
|
||||
my $dt = WebGUI::DateTime->new($recur->{startDate}." 00:00:00");
|
||||
my $dt = WebGUI::DateTime->new($self->session, $recur->{startDate}." 00:00:00");
|
||||
my $dt_start = $dt->clone; # Keep track of the initial start date
|
||||
my $dt_end = WebGUI::DateTime->new($recur->{endDate}." 00:00:00")
|
||||
my $dt_end = WebGUI::DateTime->new($self->session, $recur->{endDate}." 00:00:00")
|
||||
if $recur->{endDate};
|
||||
# Set an end for events with no end
|
||||
#!!! TODO !!! - Get the appropriate configuration
|
||||
|
|
@ -829,7 +829,7 @@ sub getRecurrenceDates
|
|||
# Pick out the correct day
|
||||
my $startDate = $dt->year."-".$dt->month."-".$recur->{dayNumber};
|
||||
|
||||
my $dt_day = WebGUI::DateTime->new($startDate." 00:00:00");
|
||||
my $dt_day = WebGUI::DateTime->new($self->session, $startDate." 00:00:00");
|
||||
|
||||
# Only if today is not before the recurrence start
|
||||
if ($dt_day->clone->truncate(to => "day") >= $dt_start->clone->truncate(to=>"day"))
|
||||
|
|
@ -951,7 +951,7 @@ sub getRecurrenceDates
|
|||
# Pick out the correct day
|
||||
my $startDate = $dt_month->year."-".$dt_month->month."-".$recur->{dayNumber};
|
||||
|
||||
my $dt_day = WebGUI::DateTime->new($startDate." 00:00:00");
|
||||
my $dt_day = WebGUI::DateTime->new($self->session, $startDate." 00:00:00");
|
||||
|
||||
# Only if today is not before the recurrence start
|
||||
if ($dt_day->clone->truncate(to => "day") >= $dt_start->clone->truncate(to=>"day"))
|
||||
|
|
@ -1423,10 +1423,10 @@ sub processPropertiesFromFormPost
|
|||
# Convert timezone
|
||||
my $tz = $self->session->user->profileField("timeZone");
|
||||
|
||||
my ($startDate,$startTime) = split / /, WebGUI::DateTime->new(mysql => $self->get("startDate")." ".$self->get("startTime"), time_zone => $tz)
|
||||
my ($startDate,$startTime) = split / /, WebGUI::DateTime->new($self->session, mysql => $self->get("startDate")." ".$self->get("startTime"), time_zone => $tz)
|
||||
->set_time_zone("UTC")->toMysql;
|
||||
|
||||
my ($endDate,$endTime) = split / /, WebGUI::DateTime->new(mysql => $self->get("endDate")." ".$self->get("endTime"), time_zone => $tz)
|
||||
my ($endDate,$endTime) = split / /, WebGUI::DateTime->new($self->session, mysql => $self->get("endDate")." ".$self->get("endTime"), time_zone => $tz)
|
||||
->set_time_zone("UTC")->toMysql;
|
||||
|
||||
$self->update({ startDate => $startDate,
|
||||
|
|
@ -1747,39 +1747,42 @@ sub www_edit
|
|||
});
|
||||
|
||||
# start date
|
||||
my $default_start = WebGUI::DateTime->new($session->form->param("start") || time)
|
||||
my $default_start = WebGUI::DateTime->new($self->session, $session->form->param("start") || time)
|
||||
->set_time_zone($tz);
|
||||
my ($startDate,$startTime) = split / /, $self->getDateTimeStart->toMysql
|
||||
my ($startDate,$startTime) = split / /, $self->getDateTimeStart->toUserTimeZone
|
||||
unless $func eq "add" || $self->get("assetId") eq "new";
|
||||
|
||||
$var->{"formStartDate"}= WebGUI::Form::date($session,
|
||||
{
|
||||
name => "startDate",
|
||||
value => $form->process("startDate") || $startDate,
|
||||
defaultValue => $default_start->toMysqlDate,
|
||||
defaultValue => $default_start->toUserTimeZoneDate,
|
||||
});
|
||||
$var->{"formStartTime"} = WebGUI::Form::timeField($session,
|
||||
{
|
||||
name => "startTime",
|
||||
value => $form->process("startTime") || $startTime,
|
||||
defaultValue => $default_start->toMysqlTime,
|
||||
defaultValue => $default_start->toUserTimeZoneTime,
|
||||
});
|
||||
|
||||
# end date
|
||||
$default_start->add(hours => 1);
|
||||
my ($endDate,$endTime) = split / /, $self->getDateTimeEnd->toMysql
|
||||
#my ($endDate,$endTime) = split / /, $self->getDateTimeEnd->toMysql
|
||||
my ($endDate,$endTime) = split / /, $self->getDateTimeEnd->toUserTimeZone
|
||||
unless $func eq "add" || $self->get("assetId") eq "new";
|
||||
$var->{"formEndDate"} = WebGUI::Form::date($session,
|
||||
{
|
||||
name => "endDate",
|
||||
value => $form->process("endDate") || $endDate,
|
||||
defaultValue => $default_start->toMysqlDate,
|
||||
#defaultValue => $default_start->toMysqlDate,
|
||||
defaultValue => $default_start->toUserTimeZoneDate,
|
||||
});
|
||||
$var->{"formEndTime"} = WebGUI::Form::timeField($session,
|
||||
{
|
||||
name => "endTime",
|
||||
value => $form->process("endTime") || $endTime,
|
||||
defaultValue => $default_start->toMysqlTime,
|
||||
#defaultValue => $default_start->toUserTimeZoneTime,
|
||||
});
|
||||
|
||||
# time
|
||||
|
|
|
|||
|
|
@ -635,9 +635,9 @@ sub getEventsIn
|
|||
my ($startDate,$startTime) = split / /, $start;
|
||||
my ($endDate,$endTime) = split / /, $end;
|
||||
|
||||
my $startTz = WebGUI::DateTime->new(mysql => $start, time_zone => $tz)
|
||||
my $startTz = WebGUI::DateTime->new($self->session, mysql => $start, time_zone => $tz)
|
||||
->set_time_zone("UTC")->toMysql;
|
||||
my $endTz = WebGUI::DateTime->new(mysql => $end, time_zone => $tz)
|
||||
my $endTz = WebGUI::DateTime->new($self->session, mysql => $end, time_zone => $tz)
|
||||
->set_time_zone("UTC")->toMysql;
|
||||
|
||||
my $where = qq{(Event.startTime IS NULL && Event.endTime IS NULL && Event.startDate >= '$startDate' && Event.startDate < '$endDate')}
|
||||
|
|
@ -886,7 +886,7 @@ sub view
|
|||
}
|
||||
else
|
||||
{
|
||||
$params->{start} = WebGUI::DateTime->from_epoch(epoch => time(), time_zone => $session->user->profileField("timeZone"))->toMysql;
|
||||
$params->{start} = WebGUI::DateTime->new($self->session, time)->toUserTimeZone;
|
||||
}
|
||||
}
|
||||
$params->{type} ||= $self->get("defaultView") || "Month";
|
||||
|
|
@ -979,7 +979,7 @@ sub viewDay
|
|||
|
||||
### Get all the events in this time period
|
||||
# Get the range of the epoch of this day
|
||||
my $dt = WebGUI::DateTime->new($params->{start});
|
||||
my $dt = WebGUI::DateTime->new($self->session, $params->{start});
|
||||
$dt->set_locale($i18n->get("locale"));
|
||||
$dt->truncate( to => "day");
|
||||
|
||||
|
|
@ -1073,12 +1073,12 @@ sub viewMonth
|
|||
my $i18n = WebGUI::International->new($session,"Asset_Calendar");
|
||||
my $var = {};
|
||||
my $tz = $session->user->profileField("timeZone");
|
||||
my $today = WebGUI::DateTime->new(time)->set_time_zone($tz)
|
||||
my $today = WebGUI::DateTime->new($self->session, time)->set_time_zone($tz)
|
||||
->toMysqlDate;
|
||||
|
||||
#### Get all the events in this time period
|
||||
# Get the range of the epoch of this month
|
||||
my $dt = WebGUI::DateTime->new($params->{start});
|
||||
my $dt = WebGUI::DateTime->new($self->session, $params->{start});
|
||||
$dt->set_locale($i18n->get("locale"));
|
||||
$dt->truncate( to => "month");
|
||||
|
||||
|
|
@ -1220,13 +1220,13 @@ sub viewWeek
|
|||
my $i18n = WebGUI::International->new($session,"Asset_Calendar");
|
||||
my $var = {};
|
||||
my $tz = $session->user->profileField("timeZone");
|
||||
my $today = WebGUI::DateTime->new(time)->set_time_zone($tz)
|
||||
my $today = WebGUI::DateTime->new($self->session, time)->set_time_zone($tz)
|
||||
->toMysqlDate;
|
||||
|
||||
|
||||
#### Get all the events in this time period
|
||||
# Get the range of the epoch of this week
|
||||
my $dt = WebGUI::DateTime->new($params->{start});
|
||||
my $dt = WebGUI::DateTime->new($self->session, $params->{start});
|
||||
$dt->truncate( to => "day");
|
||||
|
||||
# Apply First Day of Week settings
|
||||
|
|
@ -1459,12 +1459,12 @@ sub www_ical
|
|||
#}
|
||||
#else
|
||||
#{
|
||||
$dt_start = WebGUI::DateTime->from_epoch(epoch => time(), time_zone => $session->user->profileField("timeZone"));
|
||||
$dt_start = WebGUI::DateTime->new($self->session, time)->toUserTimeZone;
|
||||
#}
|
||||
}
|
||||
else
|
||||
{
|
||||
$dt_start = WebGUI::DateTime->new($start)->set_time_zone($session->user->profileField("timeZone"));
|
||||
$dt_start = WebGUI::DateTime->new($self->session, $start)->set_time_zone($session->user->profileField("timeZone"));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1487,7 +1487,7 @@ sub www_ical
|
|||
}
|
||||
else
|
||||
{
|
||||
$dt_end = WebGUI::DateTime->new($end)->set_time_zone($session->user->profileField("timeZone"));
|
||||
$dt_end = WebGUI::DateTime->new($self->session, $end)->set_time_zone($session->user->profileField("timeZone"));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1519,12 +1519,12 @@ sub www_ical
|
|||
|
||||
# LAST-MODIFIED (revisionDate)
|
||||
$ical .= qq{LAST-MODIFIED:}
|
||||
. WebGUI::DateTime->new($event->get("revisionDate"))->toIcal
|
||||
. WebGUI::DateTime->new($self->session, $event->get("revisionDate"))->toIcal
|
||||
. "\r\n";
|
||||
|
||||
# CREATED (creationDate)
|
||||
$ical .= qq{CREATED:}
|
||||
. WebGUI::DateTime->new($event->get("creationDate"))->toIcal
|
||||
. WebGUI::DateTime->new($self->session, $event->get("creationDate"))->toIcal
|
||||
. "\r\n";
|
||||
|
||||
# DTSTART
|
||||
|
|
@ -1640,7 +1640,7 @@ sub www_search
|
|||
if ($self->session->user->userId eq $data->{ownerUserId} || $self->session->user->isInGroup($data->{groupIdView}) || $self->session->user->isInGroup($data->{groupIdEdit}))
|
||||
{
|
||||
# Format the date
|
||||
my $dt = WebGUI::DateTime->new($data->{startDate}." ".($data->{startTime}?$data->{startTime}:"00:00:00"));
|
||||
my $dt = WebGUI::DateTime->new($self->session, $data->{startDate}." ".($data->{startTime}?$data->{startTime}:"00:00:00"));
|
||||
$dt->set_time_zone($self->session->user->profileField("timeZone"))
|
||||
if ($data->{startTime});
|
||||
|
||||
|
|
@ -1660,7 +1660,7 @@ sub www_search
|
|||
}
|
||||
|
||||
# Prepare the form
|
||||
my $default_dt = WebGUI::DateTime->new(time);
|
||||
my $default_dt = WebGUI::DateTime->new($self->session, time);
|
||||
my $default_start = $default_dt->toMysqlDate;
|
||||
my $default_end = $default_dt->add(years => 1)->toMysqlDate;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue