diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt
index c578fd619..a9fcfb92f 100644
--- a/docs/changelog/7.x.x.txt
+++ b/docs/changelog/7.x.x.txt
@@ -4,6 +4,7 @@
- fix: SQL Report: Paginate After (Still) (William McKee / Knowmad
Technologies)
- fix: Bug in thumbnailer.pl
+ - fix: Events userDefined fields now work.
7.3.12
diff --git a/lib/WebGUI/Asset/Event.pm b/lib/WebGUI/Asset/Event.pm
index 63a0e02da..c5f9e2a0e 100644
--- a/lib/WebGUI/Asset/Event.pm
+++ b/lib/WebGUI/Asset/Event.pm
@@ -15,6 +15,7 @@ $VERSION = "0.0.0";
use strict;
use Tie::IxHash;
+use Carp qw(cluck confess);
use Storable qw(nfreeze thaw);
use WebGUI::International;
@@ -49,7 +50,6 @@ sub definition {
my $definition = shift;
my $i18n = WebGUI::International->new($session, 'Asset_Event');
-
my $dt = WebGUI::DateTime->new($session, time);
### Set up list options ###
@@ -109,7 +109,7 @@ sub definition {
### Add user defined fields
for my $num (1..5) {
- $properties{"UserDefined".$num} = {
+ $properties{"userDefined".$num} = {
fieldType => "text",
defaultValue => "",
};
@@ -173,65 +173,45 @@ sub canEdit {
####################################################################
-=head2 generateRecurringEvents ( [ \%recurrence_data ] )
+=head2 generateRecurringEvents ( )
-Generate a series of events.
+Generates Events according to this Event's recurrence pattern.
-If given a hashref of recurrence data, will create a new recurrence row in the
-database and set the event to this new recurrence pattern. Will return undef if
-there is an error creating the recurrence pattern.
-
-If not given recurrence data, will use the event's existing recurrence. This is
-used for generating future occurrences of events that don't end.
-
-Returns the new recurrence pattern's ID, or undef if failure. (NOTE: This
-should probably use croak instead)
+Will croak on failure.
=cut
sub generateRecurringEvents {
my $self = shift;
- my $recur = shift;
my $parent = $self->getParent;
my $session = $self->session;
- my $recurId;
- if ($recur) {
- $recurId = $self->setRecurrence($recur);
- return () unless $recurId;
+ my $properties = $self->get;
+ my $recurId = $self->get("recurId");
+ my $recur = {$self->getRecurrence};
+
+ # This method only works on events that have recurrence patterns
+ if (!$recurId) {
+ croak("Cannot generate recurring events: Event has no recurrence pattern.");
}
- else {
- $recurId = $self->get("recurId");
- $recur = {$self->getRecurrence};
- }
-
- $self->update({ recurId => $recurId });
- my $properties = {%{$self->get}};
- $properties->{recurId} = $recurId;
-
+
# Get the distance between the event startDate and endDate
# Only days, since event recurrence only changes the Date the event occurs, not
# the time.
- my $duration_days = 0;
+ # TODO: Allow recurrence patterns of less than a single day.
+ my $duration_days = 0;
my $event_start
- = WebGUI::DateTime->new($self->session, delete($properties->{startDate})." 00:00:00");
+ = WebGUI::DateTime->new($session, $properties->{startDate}." 00:00:00");
my $event_end
- = WebGUI::DateTime->new($self->session, delete($properties->{endDate})." 00:00:00");
+ = WebGUI::DateTime->new($session, $properties->{endDate}." 00:00:00");
$duration_days
= $event_end->subtract_datetime($event_start)->days;
- my @dates = $self->getRecurrenceDates($recur);
+ my @dates = $self->getRecurrenceDates;
for my $date (@dates) {
# Only generate if the recurId does not exist on this day
- use Data::Dumper;
- warn "COMPARING $date TO $properties->{startDate}";
- warn Dumper $session->db->quickArray(
- "select count(*) from Event where recurId=? and startDate=?",
- [$properties->{recurId}, $date],
- );
-
my ($exists)
= $session->db->quickArray(
"select count(*) from Event where recurId=? and startDate=?",
@@ -239,11 +219,11 @@ sub generateRecurringEvents {
);
if (!$exists) {
- warn "Making event on $date";
my $dt = WebGUI::DateTime->new($self->session, $date." 00:00:00");
- $properties->{startDate} = $dt->toDatabaseDate;
- $properties->{endDate} = $dt->clone->add(days => $duration_days)->toDatabaseDate;
+ $properties->{startDate} = $dt->toDatabaseDate;
+ $properties->{endDate}
+ = $dt->clone->add(days => $duration_days)->toDatabaseDate;
my $newEvent = $parent->addChild($properties);
$newEvent->requestAutoCommit;
@@ -295,7 +275,7 @@ sub getDateTimeStart {
#$self->session->errorHandler->warn($self->getId.":: Date: $date -- Time: $time");
if (!$date) {
- $self->session->errorHandler->warn("This event (".$self->get("assetId").") has no date.");
+ $self->session->errorHandler->warn("Event::getDateTimeStart -- This event (".$self->get("assetId").") has no start date.");
return;
}
@@ -334,11 +314,10 @@ sub getDateTimeEnd {
#$self->session->errorHandler->warn($self->getId.":: Date: $date -- Time: $time");
if (!$date) {
- $self->session->errorHandler->warn("This event (".$self->get("assetId").") has no date.");
+ $self->session->errorHandler->warn("Event::getDateTimeEnd -- This event (".$self->get("assetId").") has no end date.");
return;
}
-
if ($time) {
my $dt = WebGUI::DateTime->new($self->session, $date." ".$time);
$dt->set_time_zone($tz);
@@ -377,8 +356,7 @@ sub getEventNext {
. "|| Event.startTime >= '00:00:00')";
}
# Non all-day events must look for greater than time
- else
- {
+ else {
$where .= "((Event.startTime = '".$self->get("startTime")."' "
. "&& assetData.title > ".$db->quote($self->get("title")).")"
. "|| Event.startTime > '".$self->get("startTime")."')";
@@ -693,21 +671,21 @@ sub getRecurrence {
####################################################################
-=head2 getRecurrenceDates
+=head2 getRecurrenceDates ( endDate )
-Gets a series of dates in the specified recurrence pattern.
+Gets a series of dates in this event's recurrence pattern, up to the
+calendar's configured "maintainRecurrenceOffset".
-This is quite possibly the worst algorithm I've ever created. We should be using
-DateTime::Event::ICal instead.
+This is quite possibly the worst algorithm I've ever created. We should be
+using DateTime::Event::ICal instead.
=cut
sub getRecurrenceDates {
- my $self = shift;
- my $recur = shift;
+ my $self = shift;
my %date;
-
+ my $recur = {$self->getRecurrence};
return undef unless $recur->{recurType};
my %dayNames = (
@@ -736,17 +714,15 @@ sub getRecurrenceDates {
$dt_end = WebGUI::DateTime->new($self->session, $recur->{endDate}." 00:00:00");
}
# Set an end for events with no end
- #!!! TODO !!! - Get the appropriate configuration
+ # TODO: Get the maintainRecurrenceOffset value
elsif (!$recur->{endDate} && !$recur->{endAfter}) {
$dt_end = $dt->clone->add(years=>2);
}
- RECURRENCE: while (1)
- {
+ RECURRENCE: while (1) {
####### daily
- if ($recur->{recurType} eq "daily")
- {
+ if ($recur->{recurType} eq "daily") {
### Add date
$date{$dt->strftime('%F')}++;
@@ -754,8 +730,7 @@ sub getRecurrenceDates {
$dt->add(days => $recur->{every});
# Test for quit
- if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end))
- {
+ if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end)) {
last RECURRENCE;
}
@@ -763,35 +738,30 @@ sub getRecurrenceDates {
next RECURRENCE;
}
####### weekday
- elsif ($recur->{recurType} eq "weekday")
- {
+ elsif ($recur->{recurType} eq "weekday") {
my $today = $dt->day_name;
# If today is not a weekday
- unless (grep /$today/i,qw(monday tuesday wednesday thursday friday))
- {
+ unless (grep /$today/i,qw(monday tuesday wednesday thursday friday)) {
# Add a day
$dt->add(days => 1);
# Test for quit
- if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end))
- {
+ if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end)) {
last RECURRENCE;
}
# next
next RECURRENCE;
}
- else
- {
+ else {
### Add date
$date{$dt->strftime('%F')}++;
$dt->add(days => $recur->{every});
# Test for quit
- if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end))
- {
+ if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end)) {
last RECURRENCE;
}
@@ -800,10 +770,8 @@ sub getRecurrenceDates {
}
}
####### weekly
- elsif ($recur->{recurType} eq "weekly")
- {
- for (0..6) # Work through the week
- {
+ elsif ($recur->{recurType} eq "weekly") {
+ for (0..6) { # Work through the week
my $dt_day = $dt->clone->add(days => $_);
# If today is past the endDate, quit.
@@ -812,8 +780,7 @@ sub getRecurrenceDates {
my $today = $dayNames{lc $dt_day->day_name};
- if (grep /$today/i, @{$recur->{dayNames}})
- {
+ if (grep /$today/i, @{$recur->{dayNames}}) {
### Add date
$date{$dt_day->strftime('%F')}++;
}
@@ -827,8 +794,7 @@ sub getRecurrenceDates {
$dt->add(weeks => $recur->{every});
# Test for quit
- if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end))
- {
+ if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end)) {
last RECURRENCE;
}
@@ -837,16 +803,14 @@ sub getRecurrenceDates {
}
####### monthday
- elsif ($recur->{recurType} eq "monthDay")
- {
+ elsif ($recur->{recurType} eq "monthDay") {
# Pick out the correct day
my $startDate = $dt->year."-".$dt->month."-".$recur->{dayNumber};
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"))
- {
+ if ($dt_day->clone->truncate(to => "day") >= $dt_start->clone->truncate(to=>"day")) {
# If today is past the endDate, quit.
last RECURRENCE
if ($recur->{endDate} && $dt_day > $dt_end);
@@ -859,8 +823,7 @@ sub getRecurrenceDates {
$dt->add(months => $recur->{every})->truncate(to => "month");
# Test for quit
- if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end))
- {
+ if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end)) {
last RECURRENCE;
}
@@ -868,19 +831,15 @@ sub getRecurrenceDates {
next RECURRENCE;
}
###### monthweek
- elsif ($recur->{recurType} eq "monthWeek")
- {
+ elsif ($recur->{recurType} eq "monthWeek") {
# For each week remaining in this month
my $dt_week = $dt->clone;
- while ($dt->month eq $dt_week->month)
- {
+ while ($dt->month eq $dt_week->month) {
my $week = int($dt_week->day_of_month / 7);
- if (grep /$weeks{$week}/i, @{$recur->{weeks}})
- {
+ if (grep /$weeks{$week}/i, @{$recur->{weeks}}) {
# Pick out the correct days
- for (0..6) # Work through the week
- {
+ for (0..6) { # Work through the week
my $dt_day = $dt_week->clone->add(days => $_);
# If today is past the endDate, quit.
@@ -909,13 +868,11 @@ sub getRecurrenceDates {
}
### If last is selected
- if (grep /last/, @{$recur->{weeks}})
- {
+ if (grep /last/, @{$recur->{weeks}}) {
my $dt_last = $dt->clone->truncate(to => "month")
->add(months => 1)->subtract(days => 1);
- for (0..6)
- {
+ for (0..6) {
my $dt_day = $dt_last->clone->subtract(days => $_);
# If today is before the startDate, don't even bother
@@ -925,11 +882,9 @@ sub getRecurrenceDates {
my $today = $dayNames{lc $dt_day->day_name};
- if (grep /$today/i, @{$recur->{dayNames}})
- {
+ if (grep /$today/i, @{$recur->{dayNames}}) {
### Add date
$date{$dt_day->strftime('%F')}++;
-
}
# If occurrences is past the endAfter, quit
@@ -943,8 +898,7 @@ sub getRecurrenceDates {
$dt->add(months => $recur->{every})->truncate(to => "month");
# Test for quit
- if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end))
- {
+ if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end)) {
last RECURRENCE;
}
@@ -952,23 +906,19 @@ sub getRecurrenceDates {
next RECURRENCE;
}
####### yearday
- elsif ($recur->{recurType} eq "yearDay")
- {
+ elsif ($recur->{recurType} eq "yearDay") {
# For each month
my $dt_month = $dt->clone;
- while ($dt->year eq $dt_month->year)
- {
+ while ($dt->year eq $dt_month->year) {
my $mon = $dt_month->month_abbr;
- if (grep /$mon/i, @{$recur->{months}})
- {
+ if (grep /$mon/i, @{$recur->{months}}) {
# Pick out the correct day
my $startDate = $dt_month->year."-".$dt_month->month."-".$recur->{dayNumber};
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"))
- {
+ if ($dt_day->clone->truncate(to => "day") >= $dt_start->clone->truncate(to=>"day")) {
# If today is past the endDate, quit.
last RECURRENCE
if ($recur->{endDate} && $dt_day > $dt_end);
@@ -990,8 +940,7 @@ sub getRecurrenceDates {
$dt->add(years => $recur->{every})->truncate(to => "year");
# Test for quit
- if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end))
- {
+ if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end)) {
last RECURRENCE;
}
@@ -999,25 +948,19 @@ sub getRecurrenceDates {
next RECURRENCE;
}
####### yearweek
- elsif ($recur->{recurType} eq "yearWeek")
- {
+ elsif ($recur->{recurType} eq "yearWeek") {
# For each month
my $dt_month = $dt->clone;
- while ($dt->year eq $dt_month->year)
- {
+ while ($dt->year eq $dt_month->year) {
my $mon = $dt_month->month_abbr;
- if (grep /$mon/i, @{$recur->{months}})
- {
+ if (grep /$mon/i, @{$recur->{months}}) {
# For each week remaining in this month
my $dt_week = $dt_month->clone;
- while ($dt_month->month eq $dt_week->month)
- {
+ while ($dt_month->month eq $dt_week->month) {
my $week = int($dt_week->day_of_month / 7);
- if (grep /$weeks{$week}/i, @{$recur->{weeks}})
- {
- for (0..6) # Work through the week
- {
+ if (grep /$weeks{$week}/i, @{$recur->{weeks}}) {
+ for (0..6) { # Work through the week
my $dt_day = $dt_week->clone->add(days => $_);
# If today is past the endDate, quit.
@@ -1029,8 +972,7 @@ sub getRecurrenceDates {
my $today = $dayNames{lc $dt_day->day_name};
- if (grep /$today/i, @{$recur->{dayNames}})
- {
+ if (grep /$today/i, @{$recur->{dayNames}}) {
### Add date
$date{$dt_day->strftime('%F')}++;
}
@@ -1046,12 +988,10 @@ sub getRecurrenceDates {
}
### If last is selected
- if (grep /last/, @{$recur->{weeks}})
- {
+ if (grep /last/, @{$recur->{weeks}}) {
my $dt_last = $dt_month->clone->add(months => 1)->subtract(days => 1);
- for (0..6)
- {
+ for (0..6) {
my $dt_day = $dt_last->clone->subtract(days => $_);
# If today is past the endDate, try the next one
@@ -1060,11 +1000,9 @@ sub getRecurrenceDates {
my $today = $dayNames{lc $dt_day->day_name};
- if (grep /$today/i, @{$recur->{dayNames}})
- {
+ if (grep /$today/i, @{$recur->{dayNames}}) {
### Add date
$date{$dt_day->strftime('%F')}++;
-
}
# If occurrences is past the endAfter, quit
@@ -1083,8 +1021,7 @@ sub getRecurrenceDates {
$dt->add(years => $recur->{every})->truncate(to => "year");
# Test for quit
- if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end))
- {
+ if (($recur->{endAfter} && keys %date >= $recur->{endAfter}) || ($dt_end && $dt > $dt_end)) {
last RECURRENCE;
}
@@ -1120,52 +1057,42 @@ sub getRecurrenceFromForm {
return () unless ($type && $type !~ /none/i);
- if ($type eq "daily")
- {
- if (lc($form->param("recurSubType")) eq "weekday")
- {
+ if ($type eq "daily") {
+ if (lc($form->param("recurSubType")) eq "weekday") {
$recurrence{recurType} = "weekday";
}
- else
- {
+ else {
$recurrence{recurType} = "daily";
}
$recurrence{every} = $form->param("recurDay");
}
- elsif ($type eq "weekly")
- {
+ elsif ($type eq "weekly") {
$recurrence{recurType} = "weekly";
$recurrence{dayNames} = [$form->param("recurWeekDay")];
$recurrence{every} = $form->param("recurWeek");
}
- elsif ($type eq "monthly")
- {
- if (lc($form->param("recurSubType")) eq "monthweek")
- {
+ elsif ($type eq "monthly") {
+ if (lc($form->param("recurSubType")) eq "monthweek") {
$recurrence{recurType} = "monthWeek";
$recurrence{weeks} = [$form->param("recurMonthWeekNumber")];
$recurrence{dayNames} = [$form->param("recurMonthWeekDay")];
}
- elsif (lc($form->param("recurSubType")) eq "monthday")
- {
+ elsif (lc($form->param("recurSubType")) eq "monthday") {
$recurrence{recurType} = "monthDay";
$recurrence{dayNumber} = $form->param("recurMonthDay");
}
$recurrence{every} = $form->param("recurMonth");
}
- elsif ($type eq "yearly")
- {
- if (lc($form->param("recurSubType")) eq "yearweek")
- {
+ elsif ($type eq "yearly") {
+ if (lc($form->param("recurSubType")) eq "yearweek") {
$recurrence{recurType} = "yearWeek";
$recurrence{weeks} = [$form->param("recurYearWeekNumber")];
$recurrence{dayNames} = [$form->param("recurYearWeekDay")];
$recurrence{months} = [$form->param("recurYearWeekMonth")];
}
- elsif (lc($form->param("recurSubType")) eq "yearday")
- {
+ elsif (lc($form->param("recurSubType")) eq "yearday") {
$recurrence{recurType} = "yearDay";
$recurrence{dayNumber} = $form->param("recurYearDay");
$recurrence{months} = [$form->param("recurYearDayMonth")];
@@ -1177,12 +1104,10 @@ sub getRecurrenceFromForm {
$recurrence{every} ||= 1;
$recurrence{startDate} = $form->param("recurStart");
- if (lc $form->param("recurEndType") eq "date")
- {
+ if (lc $form->param("recurEndType") eq "date") {
$recurrence{endDate} = $form->param("recurEndDate");
}
- elsif (lc $form->param("recurEndType") eq "after")
- {
+ elsif (lc $form->param("recurEndType") eq "after") {
$recurrence{endAfter} = $form->param("recurEndAfter");
}
@@ -1201,8 +1126,7 @@ Gets the related links.
=cut
-sub getRelatedLinks
-{
+sub getRelatedLinks {
my $self = shift;
return () unless $self->get("relatedLinks");
return split /\n+/, $self->get("relatedLinks");
@@ -1229,85 +1153,83 @@ sub getTemplateVars {
my %var;
# Some miscellaneous stuff
- $var{"isPublic"} = 1
+ $var{"isPublic"} = 1
if $self->get("groupIdView") eq "7";
- $var{"groupToView"} = $self->get("groupIdView"); # Todo: Remove this?
+ $var{"groupToView"} = $self->get("groupIdView"); # Todo: Remove this?
# Start date/time
my $dtStart = $self->getDateTimeStart;
- $dtStart->set_locale($i18n->get("locale") || "en_US");
- $var{"startDateSecond"} = sprintf "%02d", $dtStart->second;
- $var{"startDateMinute"} = sprintf "%02d", $dtStart->minute;
- $var{"startDateHour24"} = $dtStart->hour;
- $var{"startDateHour"} = $dtStart->hour_12;
- $var{"startDateM"} = ( $dtStart->hour < 12 ? "AM" : "PM" );
- $var{"startDateDayName"} = $dtStart->day_name;
- $var{"startDateDayAbbr"} = $dtStart->day_abbr;
- $var{"startDateDayOfMonth"} = $dtStart->day_of_month;
- $var{"startDateDayOfWeek"} = $dtStart->day_of_week;
- $var{"startDateMonthName"} = $dtStart->month_name;
- $var{"startDateMonthAbbr"} = $dtStart->month_abbr;
- $var{"startDateYear"} = $dtStart->year;
- $var{"startDateYmd"} = $dtStart->ymd;
- $var{"startDateMdy"} = $dtStart->mdy;
- $var{"startDateDmy"} = $dtStart->dmy;
- $var{"startDateHms"} = $dtStart->hms;
- $var{"startDateEpoch"} = $dtStart->epoch;
+ $var{ "startDateSecond" } = sprintf "%02d", $dtStart->second;
+ $var{ "startDateMinute" } = sprintf "%02d", $dtStart->minute;
+ $var{ "startDateHour24" } = $dtStart->hour;
+ $var{ "startDateHour" } = $dtStart->hour_12;
+ $var{ "startDateM" } = ( $dtStart->hour < 12 ? "AM" : "PM" );
+ $var{ "startDateDayName" } = $dtStart->day_name;
+ $var{ "startDateDayAbbr" } = $dtStart->day_abbr;
+ $var{ "startDateDayOfMonth" } = $dtStart->day_of_month;
+ $var{ "startDateDayOfWeek" } = $dtStart->day_of_week;
+ $var{ "startDateMonthName" } = $dtStart->month_name;
+ $var{ "startDateMonthAbbr" } = $dtStart->month_abbr;
+ $var{ "startDateYear" } = $dtStart->year;
+ $var{ "startDateYmd" } = $dtStart->ymd;
+ $var{ "startDateMdy" } = $dtStart->mdy;
+ $var{ "startDateDmy" } = $dtStart->dmy;
+ $var{ "startDateHms" } = $dtStart->hms;
+ $var{ "startDateEpoch" } = $dtStart->epoch;
# End date/time
- my $dtEnd = $self->getDateTimeEnd;
- $dtEnd->set_locale($i18n->get("locale") || "en_US");
+ my $dtEnd = $self->getDateTimeEnd;
- $var{"endDateSecond"} = sprintf "%02d", $dtEnd->second;
- $var{"endDateMinute"} = sprintf "%02d", $dtEnd->minute;
- $var{"endDateHour24"} = $dtEnd->hour;
- $var{"endDateHour"} = $dtEnd->hour_12;
- $var{"endDateM"} = ( $dtEnd->hour < 12 ? "AM" : "PM" );
- $var{"endDateDayName"} = $dtEnd->day_name;
- $var{"endDateDayAbbr"} = $dtEnd->day_abbr;
- $var{"endDateDayOfMonth"} = $dtEnd->day_of_month;
- $var{"endDateDayOfWeek"} = $dtEnd->day_of_week;
- $var{"endDateMonthName"} = $dtEnd->month_name;
- $var{"endDateMonthAbbr"} = $dtEnd->month_abbr;
- $var{"endDateYear"} = $dtEnd->year;
- $var{"endDateYmd"} = $dtEnd->ymd;
- $var{"endDateMdy"} = $dtEnd->mdy;
- $var{"endDateDmy"} = $dtEnd->dmy;
- $var{"endDateHms"} = $dtEnd->hms;
- $var{"endDateEpoch"} = $dtEnd->epoch;
-
-
-
- $var{isAllDay} = $self->isAllDay;
- $var{isOneDay} = 1 if ($var{isAllDay} && $var{startDateDmy} eq $var{endDateDmy});
+ $var{ "endDateSecond" } = sprintf "%02d", $dtEnd->second;
+ $var{ "endDateMinute" } = sprintf "%02d", $dtEnd->minute;
+ $var{ "endDateHour24" } = $dtEnd->hour;
+ $var{ "endDateHour" } = $dtEnd->hour_12;
+ $var{ "endDateM" } = ( $dtEnd->hour < 12 ? "AM" : "PM" );
+ $var{ "endDateDayName" } = $dtEnd->day_name;
+ $var{ "endDateDayAbbr" } = $dtEnd->day_abbr;
+ $var{ "endDateDayOfMonth" } = $dtEnd->day_of_month;
+ $var{ "endDateDayOfWeek" } = $dtEnd->day_of_week;
+ $var{ "endDateMonthName" } = $dtEnd->month_name;
+ $var{ "endDateMonthAbbr" } = $dtEnd->month_abbr;
+ $var{ "endDateYear" } = $dtEnd->year;
+ $var{ "endDateYmd" } = $dtEnd->ymd;
+ $var{ "endDateMdy" } = $dtEnd->mdy;
+ $var{ "endDateDmy" } = $dtEnd->dmy;
+ $var{ "endDateHms" } = $dtEnd->hms;
+ $var{ "endDateEpoch" } = $dtEnd->epoch;
+ $var{ "isAllDay" } = $self->isAllDay;
+ $var{ "isOneDay" } = $var{isAllDay} && $var{startDateDmy} eq $var{endDateDmy}
+ ? 1 : 0
+ ;
# Make a Friendly date span
- $var{dateSpan} = $var{startDateDayName}.", "
- . $var{startDateMonthName}." "
- . $var{startDateDayOfMonth}." "
- . ( !$var{isAllDay} ? $var{startDateHour}.":".$var{startDateMinute}." ".$var{startDateM} : "" )
- . ( !$var{isOneDay} ?
- ' • '
- . $var{endDateDayName}.", "
- .$var{endDateMonthName}." "
- .$var{endDateDayOfMonth}." "
- . ( !$var{isAllDay} ? $var{endDateHour}.":".$var{endDateMinute}." ".$var{endDateM} : "")
- : "");
+ $var{dateSpan}
+ = $var{startDateDayName}.", "
+ . $var{startDateMonthName}." "
+ . $var{startDateDayOfMonth}." "
+ . ( !$var{isAllDay} ? $var{startDateHour}.":".$var{startDateMinute}." ".$var{startDateM} : "" )
+ . ( !$var{isOneDay} ?
+ ' • '
+ . $var{endDateDayName}.", "
+ .$var{endDateMonthName}." "
+ .$var{endDateDayOfMonth}." "
+ . ( !$var{isAllDay} ? $var{endDateHour}.":".$var{endDateMinute}." ".$var{endDateM} : "")
+ : "");
# Make some friendly URLs
- $var{"url"} = $self->getUrl;
- $dtStart->truncate(to=>"day");
- $var{"urlDay"} = $self->getParent->getUrl("type=day;start=".$dtStart->toMysql);
- $var{"urlWeek"} = $self->getParent->getUrl("type=week;start=".$dtStart->toMysql);
- $var{"urlMonth"} = $self->getParent->getUrl("type=month;start=".$dtStart->toMysql);
- $var{"urlParent"} = $self->getParent->getUrl;
+ my $urlStartParam = $dtStart->cloneToUserTimeZone->truncate(to => "day");
+ $var{ "url" } = $self->getUrl;
+ $var{ "urlDay" } = $self->getParent->getUrl("type=day;start=".$urlStartParam);
+ $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;
# Related links
- $var{"relatedLinks"} = [];
+ $var{ "relatedLinks" } = [];
push @{$var{"relatedLinks"}}, { "linkUrl" => $_ }
for ($self->getRelatedLinks);
@@ -1348,30 +1270,25 @@ If the "print" form parameter is set, will prepare the print template.
=cut
-sub prepareView
-{
+sub prepareView {
my $self = shift;
- my $parent = $self->getParent;
+ my $parent = $self->getParent;
my $templateId;
- if ($parent)
- {
- if ($self->session->form->param("print"))
- {
- $templateId = $parent->get("templateIdPrintEvent");
+ if ($parent) {
+ if ($self->session->form->param("print")) {
+ $templateId = $parent->get("templateIdPrintEvent");
$self->session->style->makePrintable(1);
}
- else
- {
- $templateId = $parent->get("templateIdEvent");
+ else {
+ $templateId = $parent->get("templateIdEvent");
}
}
- else
- {
- $templateId = "CalendarEvent000000001";
+ else {
+ $templateId = "CalendarEvent000000001";
}
- my $template = WebGUI::Asset::Template->new($self->session,$templateId);
+ my $template = WebGUI::Asset::Template->new($self->session,$templateId);
$template->prepare;
$self->{_viewTemplate} = $template;
@@ -1427,7 +1344,7 @@ sub processPropertiesFromFormPost {
}
- ### Form is verified, fix properties
+ ### Form is verified
# Events are always hidden from navigation
$self->update({ isHidden => 1 });
@@ -1446,16 +1363,17 @@ sub processPropertiesFromFormPost {
groupIdEdit => $groupIdEdit,
});
}
-
+
# Fix times according to input (allday, timezone)
+ # All day events have no time
if ($form->param("allday")) {
$self->update({
startTime => undef,
endTime => undef,
});
}
+ # Non-allday events need timezone conversion
else {
- # Convert timezone
my $tz = $self->session->user->profileField("timeZone");
my $dtStart
@@ -1495,11 +1413,15 @@ sub processPropertiesFromFormPost {
# Delete all old events and create new ones
my $old_id = $self->get("recurId");
- my $new_id = $self->generateRecurringEvents(\%recurrence_new);
+ # Set the new recurrence pattern
+ my $new_id = $self->setRecurrence(\%recurrence_new);
return ["There is something wrong with your recurrence pattern."]
unless $new_id;
-
- ## Delete old events
+
+ # Generate the new recurring events
+ $self->generateRecurringEvents();
+
+ # Delete old events
my $events = $self->getLineage(["siblings"], {
returnObjects => 1,
includeOnlyClasses => ['WebGUI::Asset::Event'],
@@ -1509,14 +1431,10 @@ sub processPropertiesFromFormPost {
$_->purge for @$events;
}
- # Include / exclude keys
- #elsif ()
- #{
- # # Delete / create necessary events
- #
- #}
- # No change
else {
+ # TODO: Give users a form property to decide what events to update
+ # TODO: Make a workflow activity to do this, so that updating
+ # 1 million events doesn't kill the server.
# Just update related events
my %properties = %{ $self->get };
delete $properties{startDate};
@@ -1534,8 +1452,8 @@ sub processPropertiesFromFormPost {
my $event = WebGUI::Asset->newByDynamicClass($session,$eventId);
# Add a revision
- $properties{startDate} = $event->get("startDate");
- $properties{endDate} = $event->get("endDate");
+ $properties{ startDate } = $event->get("startDate");
+ $properties{ endDate } = $event->get("endDate");
# addRevision returns the new revision
$event = $event->addRevision(\%properties);
@@ -1566,46 +1484,39 @@ Returns the ID of the row if success, otherwise returns 0.
=cut
-sub setRecurrence
-{
+sub setRecurrence {
my $self = shift;
my $vars = shift;
my $type = $vars->{recurType} || return;
my $pattern;
- if ($type eq "daily" || $type eq "weekday")
- {
+ if ($type eq "daily" || $type eq "weekday") {
return 0 unless ($vars->{every});
#(\d+)
$pattern = $vars->{every};
}
- elsif ($type eq "weekly")
- {
+ elsif ($type eq "weekly") {
return 0 unless ($vars->{every} && $vars->{dayNames});
#(\d+) ([umtwrfs]+)
$pattern = $vars->{every}." ".join("",@{$vars->{dayNames}});
}
- elsif ($type eq "monthWeek")
- {
+ elsif ($type eq "monthWeek") {
return 0 unless ($vars->{every} && $vars->{weeks} && $vars->{dayNames});
#(\d+) (first,second,third,fourth,last) ([umtwrfs]+)
$pattern = $vars->{every}." ".join(",",@{$vars->{weeks}})." ".join("",@{$vars->{dayNames}});
}
- elsif ($type eq "monthDay")
- {
+ elsif ($type eq "monthDay") {
return 0 unless ($vars->{every} && $vars->{dayNumber});
#(\d+) on (\d+)
$pattern = $vars->{every}." ".$vars->{dayNumber};
}
- elsif ($type eq "yearWeek")
- {
+ elsif ($type eq "yearWeek") {
return 0 unless ($vars->{every} && $vars->{weeks} && $vars->{dayNames} && $vars->{months});
#(\d+) (first,second,third,fourth,last) ([umtwrfs]+)? (jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec)
$pattern = $vars->{every}." ".join(",",@{$vars->{weeks}})." ".join("",@{$vars->{dayNames}})." ".join(",",@{$vars->{months}});
}
- elsif ($type eq "yearDay")
- {
+ elsif ($type eq "yearDay") {
return 0 unless ($vars->{every} && $vars->{dayNumber} && $vars->{months});
#(\d+) on (\d+) (jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec)
$pattern = $vars->{every}." ".$vars->{dayNumber}." ".join(",",@{$vars->{months}});
@@ -1613,22 +1524,20 @@ sub setRecurrence
my $end = undef;
- if ($vars->{endAfter})
- {
+ if ($vars->{endAfter}) {
$end = "after ".$vars->{endAfter};
}
- elsif ($vars->{endDate})
- {
+ elsif ($vars->{endDate}) {
$end = $vars->{endDate};
}
my $data = {
- recurId => "new",
- recurType => $type,
- pattern => $pattern,
- startDate => $vars->{startDate},
- endDate => $end,
+ recurId => "new",
+ recurType => $type,
+ pattern => $pattern,
+ startDate => $vars->{startDate},
+ endDate => $end,
};
## Set to the database
@@ -1648,10 +1557,9 @@ Sets the event's related links.
=cut
-sub setRelatedLinks
-{
+sub setRelatedLinks {
my $self = shift;
- my @links = @_;
+ my @links = @_;
$self->update({
relatedLinks => join("\n", @links),
@@ -1670,27 +1578,26 @@ Returns the template to be viewed.
=cut
-sub view
-{
- my $self = shift;
- my $session = $self->session;
+sub view {
+ my $self = shift;
+ my $session = $self->session;
# Get, of course, the event data
- my $var = $self->get;
+ my $var = $self->get;
# Get some more template vars
- my %dates = $self->getTemplateVars;
- $var->{$_} = $dates{$_} for keys %dates;
+ my %dates = $self->getTemplateVars;
+ $var->{$_} = $dates{$_} for keys %dates;
# Next and previous events
- my $next = $self->getEventNext;
- $var->{"nextUrl"} = $next->getUrl
+ my $next = $self->getEventNext;
+ $var->{"nextUrl"} = $next->getUrl
if ($next);
- my $prev = $self->getEventPrev;
- $var->{"prevUrl"} = $prev->getUrl
+ my $prev = $self->getEventPrev;
+ $var->{"prevUrl"} = $prev->getUrl
if ($prev);
@@ -1710,8 +1617,7 @@ Edit the event.
=cut
# Author's note: This sub is ugly and should be reformatted according to PBP
-sub www_edit
-{
+sub www_edit {
my $self = shift;
my $session = $self->session;
my $form = $self->session->form;
@@ -1721,22 +1627,19 @@ sub www_edit
return $self->session->privilege->noAccess() unless $self->getParent->canAddEvent();
- if ($func eq "add" || $form->param("assetId") eq "new")
- {
- $var->{"formHeader"} = WebGUI::Form::formHeader($session,
- {
- action => $self->getParent->getUrl,
- })
- . WebGUI::Form::hidden($self->session,
- {
- name =>"assetId",
- value =>"new",
- })
- . WebGUI::Form::hidden($self->session,
- {
- name =>"class",
- value =>$self->session->form->process("class","className")
- });
+ if ($func eq "add" || $form->param("assetId") eq "new") {
+ $var->{"formHeader"}
+ = WebGUI::Form::formHeader($session, {
+ action => $self->getParent->getUrl,
+ })
+ . WebGUI::Form::hidden($self->session, {
+ name => "assetId",
+ value => "new",
+ })
+ . WebGUI::Form::hidden($self->session, {
+ name => "class",
+ value => $self->session->form->process("class","className"),
+ });
}
else {
$var->{"formHeader"}
@@ -1745,27 +1648,26 @@ sub www_edit
});
}
- $var->{"formHeader"} .= WebGUI::Form::hidden($self->session,
- {
- name => "func",
- value => "editSave"
- })
- . WebGUI::Form::hidden($self->session,
- {
- name => "recurId",
- value => $self->get("recurId"),
- });
+ $var->{"formHeader"}
+ .= WebGUI::Form::hidden($self->session, {
+ name => "func",
+ value => "editSave"
+ })
+ . WebGUI::Form::hidden($self->session, {
+ name => "recurId",
+ value => $self->get("recurId"),
+ });
- $var->{"formFooter"} = WebGUI::Form::formFooter($session);
+ $var->{"formFooter"} = WebGUI::Form::formFooter($session);
###### Event Tab
# title AS long title
- $var->{"formTitle"} = WebGUI::Form::text($session,
- {
- name => "title",
- value => $form->process("title") || $self->get("title"),
- });
+ $var->{"formTitle"}
+ = WebGUI::Form::text($session, {
+ name => "title",
+ value => $form->process("title") || $self->get("title"),
+ });
# menu title AS short title
$var->{"formMenuTitle"}
@@ -1779,16 +1681,16 @@ sub www_edit
# location
$var->{"formLocation"}
= WebGUI::Form::text($session, {
- name => "location",
- value => $form->process("location") || $self->get("location"),
+ name => "location",
+ value => $form->process("location") || $self->get("location"),
});
# description
- $var->{"formDescription"}= WebGUI::Form::HTMLArea($session,
- {
- name => "description",
- value => $form->process("description") || $self->get("description"),
- });
+ $var->{"formDescription"}
+ = WebGUI::Form::HTMLArea($session, {
+ name => "description",
+ value => $form->process("description") || $self->get("description"),
+ });
### Start date
my $default_start;
@@ -1865,38 +1767,38 @@ sub www_edit
: $self->isAllDay
;
- $var->{"formTime"} =
- q|
+ $var->{"formTime"}
+ = q|
+ . (!$allday ? 'checked="checked"' : '')
+ . q| />
@@ -2026,15 +1928,16 @@ sub www_edit # Start - $var->{"formRecurStart"} = WebGUI::Form::date($session, - { - name => "recurStart", - value => $recur{startDate}, - defaultValue => $self->get("startDate"), - }); + $var->{"formRecurStart"} + = WebGUI::Form::date($session, { + name => "recurStart", + value => $recur{startDate}, + defaultValue => $self->get("startDate"), + }); # End - $var->{"formRecurEnd"} = q| + $var->{"formRecurEnd"} + = q|