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