add time zone to events for editing, fixes recurrance on wrong days
This commit is contained in:
parent
6e56491ff7
commit
17fdc440b5
4 changed files with 48 additions and 14 deletions
|
|
@ -9,6 +9,7 @@
|
|||
- fix: Anonymous user creation doesn't use default values for yes/no fields
|
||||
- changed hover help to use YUI tooltips, fixes positioning issues
|
||||
- remove duplicate header section in calendar event template
|
||||
- events now have a time zone. fixes recurring events being generated on the wrong day.
|
||||
|
||||
7.4.7
|
||||
- fix: misspelled i18n in webgui password recovery
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ my $quiet; # this line required
|
|||
my $session = start(); # this line required
|
||||
|
||||
# upgrade functions go here
|
||||
addEventTimeZone($session);
|
||||
|
||||
finish($session); # this line required
|
||||
|
||||
|
|
@ -32,6 +33,12 @@ finish($session); # this line required
|
|||
# # and here's our code
|
||||
#}
|
||||
|
||||
#-------------------------------------------------
|
||||
sub addEventTimeZone {
|
||||
my $session = shift;
|
||||
$session->db->write("alter table Event add column timeZone varchar(255) binary default 'UTC'");
|
||||
}
|
||||
|
||||
|
||||
|
||||
# ---- DO NOT EDIT BELOW THIS LINE ----
|
||||
|
|
|
|||
|
|
@ -112,6 +112,9 @@ sub definition {
|
|||
fieldType => "Text",
|
||||
defaultValue => undef,
|
||||
},
|
||||
'timeZone' => {
|
||||
fieldType => 'TimeZone',
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
|
|
@ -210,20 +213,32 @@ sub generateRecurringEvents {
|
|||
$duration_days
|
||||
= $event_end->subtract_datetime($event_start)->days;
|
||||
|
||||
my $eventTime;
|
||||
if ($properties->{startTime}) {
|
||||
$eventTime = WebGUI::DateTime->new($session, $properties->{startDate} . " " . $properties->{startTime});
|
||||
$eventTime = $eventTime->set_time_zone($properties->{timeZone})->toMysqlTime;
|
||||
}
|
||||
|
||||
my @dates = $self->getRecurrenceDates;
|
||||
|
||||
for my $date (@dates) {
|
||||
my $dt;
|
||||
if ($eventTime) {
|
||||
$dt = WebGUI::DateTime->new($session, mysql => $date . " " . $eventTime, time_zone => $properties->{timeZone});
|
||||
}
|
||||
else {
|
||||
$dt = WebGUI::DateTime->new($session, $date." ". "00:00:00");
|
||||
}
|
||||
my $startDate = $dt->toDatabaseDate;
|
||||
# Only generate if the recurId does not exist on this day
|
||||
my ($exists)
|
||||
= $session->db->quickArray(
|
||||
"select count(*) from Event where recurId=? and startDate=?",
|
||||
[$properties->{recurId}, $date],
|
||||
[$properties->{recurId}, $startDate],
|
||||
);
|
||||
|
||||
if (!$exists) {
|
||||
my $dt = WebGUI::DateTime->new($self->session, $date." 00:00:00");
|
||||
|
||||
$properties->{startDate} = $dt->toDatabaseDate;
|
||||
$properties->{startDate} = $startDate;
|
||||
$properties->{endDate}
|
||||
= $dt->clone->add(days => $duration_days)->toDatabaseDate;
|
||||
|
||||
|
|
@ -1244,8 +1259,9 @@ sub getTemplateVars {
|
|||
$var{ "urlWeek" } = $self->getParent->getUrl("type=week;start=".$urlStartParam);
|
||||
$var{ "urlMonth" } = $self->getParent->getUrl("type=month;start=".$urlStartParam);
|
||||
$var{ "urlParent" } = $self->getParent->getUrl;
|
||||
$var{"urlSearch"} = $self->getParent->getSearchUrl;
|
||||
$var{ "urlSearch" } = $self->getParent->getSearchUrl;
|
||||
|
||||
$var{"timeZone"} = $self->get('timeZone');
|
||||
|
||||
# Related links
|
||||
$var{ "relatedLinks" } = [];
|
||||
|
|
@ -1436,7 +1452,7 @@ sub processPropertiesFromFormPost {
|
|||
}
|
||||
# Non-allday events need timezone conversion
|
||||
else {
|
||||
my $tz = $self->session->user->profileField("timeZone");
|
||||
my $tz = $self->get('timeZone');
|
||||
|
||||
my $dtStart
|
||||
= WebGUI::DateTime->new($session,
|
||||
|
|
@ -1728,7 +1744,7 @@ sub www_edit {
|
|||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $form = $self->session->form;
|
||||
my $tz = $session->user->profileField("timeZone");
|
||||
my $tz = $form->param('timeZone') || $self->get('timeZone') || $session->user->profileField('timeZone');
|
||||
my $func = lc $session->form->param("func");
|
||||
my $var = {};
|
||||
|
||||
|
|
@ -1849,7 +1865,7 @@ sub www_edit {
|
|||
$default_start
|
||||
= WebGUI::DateTime->new($session,
|
||||
mysql => $session->form->param("start"),
|
||||
time_zone => $session->user->profileField("timeZone"),
|
||||
time_zone => $tz,
|
||||
);
|
||||
}
|
||||
else {
|
||||
|
|
@ -1863,8 +1879,9 @@ sub www_edit {
|
|||
$startDate = $dtStart->toDatabaseDate;
|
||||
}
|
||||
else {
|
||||
$startDate = $dtStart->toUserTimeZoneDate;
|
||||
$startTime = $dtStart->toUserTimeZoneTime;
|
||||
my $start = $dtStart->clone->set_time_zone($tz);
|
||||
$startDate = $start->toMysqlDate;
|
||||
$startTime = $start->toMysqlTime;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1892,8 +1909,9 @@ sub www_edit {
|
|||
$endDate = $dtEnd->toDatabaseDate;
|
||||
}
|
||||
else {
|
||||
$endDate = $dtEnd->toUserTimeZoneDate;
|
||||
$endTime = $dtEnd->toUserTimeZoneTime;
|
||||
my $end = $dtEnd->clone->set_time_zone($tz);
|
||||
$endDate = $dtEnd->toMysqlDate;
|
||||
$endTime = $dtEnd->toMysqlTime;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1909,6 +1927,12 @@ sub www_edit {
|
|||
value => $form->param("endTime") || $endTime,
|
||||
defaultValue => $default_end->toUserTimeZoneTime,
|
||||
});
|
||||
$var->{"formTimeZone"}
|
||||
= WebGUI::Form::TimeZone($session, {
|
||||
name => "timeZone",
|
||||
value => $tz,
|
||||
});
|
||||
|
||||
|
||||
# time
|
||||
my $allday = defined $form->param("allday")
|
||||
|
|
@ -1930,6 +1954,7 @@ sub www_edit {
|
|||
<div id="times">|
|
||||
. q|Start: |.$var->{"formStartTime"}
|
||||
. q|<br/>End: |.$var->{"formEndTime"}
|
||||
. q|<br/>Time Zone: |.$var->{formTimeZone}
|
||||
. q|</div>|;
|
||||
|
||||
# related links
|
||||
|
|
|
|||
|
|
@ -137,10 +137,11 @@ sub getValueFromPost {
|
|||
}
|
||||
|
||||
# This should probably be rewritten as a cascading ternary
|
||||
if (!$self->get("defaultValue")
|
||||
if ($self->get('format') ne 'mysql' && (
|
||||
!$self->get("defaultValue")
|
||||
|| $self->get("defaultValue") =~ m/^\d+$/
|
||||
|| !$self->get("value")
|
||||
|| $self->get("value") =~ m/^\d+$/) {
|
||||
|| $self->get("value") =~ m/^\d+$/)) {
|
||||
# epoch format
|
||||
return $self->session->datetime->timeToSeconds($self->session->form->param($self->get("name")))-($self->session->user->profileField("timeOffset")*3600);
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue