made events calendar 100% templatable

This commit is contained in:
JT Smith 2004-02-22 17:24:55 +00:00
parent 8fbbdf654c
commit 016c33171e
8 changed files with 312 additions and 1283 deletions

View file

@ -39,10 +39,15 @@ This package provides easy to use date math functions, which are normally a comp
use WebGUI::DateTime;
$epoch = WebGUI::DateTime::addToDate($epoch, $years, $months, $days);
$epoch = WebGUI::DateTime::addToTime($epoch, $hours, $minutes, $seconds);
$epoch = WebGUI::DateTime::arrayToEpoch(@date);
($startEpoch, $endEpoch) = WebGUI::DateTime::dayStartEnd($epoch);
@date = WebGUI::DateTime::epochToArray($epoch);
$dateString = WebGUI::DateTime::epochToHuman($epoch, $formatString);
$setString = WebGUI::DateTime::epochToSet($epoch);
$day = WebGUI::DateTime::getDayName($dayInteger);
$integer = WebGUI::DateTime::getDaysInMonth($epoch);
$integer = WebGUI::DateTime::getDaysInInterval($start, $end);
$integer = WebGUI::DateTime::getFirstDayInMonthPosition($epoch);
$month = WebGUI::DateTime::getMonthName($monthInteger);
$seconds = WebGUI::DateTime::getSecondsFromEpoch($seconds);
$epoch = WebGUI::DateTime::humanToEpoch($dateString);
@ -94,9 +99,9 @@ The number of days to add to the epoch.
sub addToDate {
my ($year,$month,$day, $hour,$min,$sec, $newDate);
($year,$month,$day, $hour,$min,$sec) = Date::Calc::Time_to_Date($_[0]);
($year,$month,$day, $hour,$min,$sec) = epochToArray($_[0]);
($year,$month,$day) = Date::Calc::Add_Delta_YMD($year,$month,$day, $_[1],$_[2],$_[3]);
$newDate = Date::Calc::Date_to_Time($year,$month,$day, $hour,$min,$sec);
$newDate = arrayToEpoch($year,$month,$day, $hour,$min,$sec);
return $newDate;
}
@ -130,12 +135,39 @@ The number of seconds to add to the epoch.
sub addToTime {
my ($year,$month,$day, $hour,$min,$sec, $newDate);
($year,$month,$day, $hour,$min,$sec) = Date::Calc::Time_to_Date($_[0]);
($year,$month,$day, $hour,$min,$sec) = epochToArray($_[0]);
($year,$month,$day, $hour,$min,$sec) = Date::Calc::Add_Delta_DHMS($year,$month,$day,$hour,$min,$sec,0,$_[1],$_[2],$_[3]);
$newDate = Date::Calc::Date_to_Time($year,$month,$day, $hour,$min,$sec);
$newDate = arrayToEpoch($year,$month,$day, $hour,$min,$sec);
return $newDate;
}
#-------------------------------------------------------------------
=head2 arrayToEpoch ( date )
Returns an epoch date.
=over
=item date
An array of the format year, month, day, hour, min, sec.
=back
=cut
sub arrayToEpoch {
my $year = shift;
my $month = shift;
my $day = shift;
my $hour = shift;
my $min = shift;
my $sec = shift;
return Date::Calc::Date_to_Time($year,$month,$day,$hour,$min,$sec);
}
#-------------------------------------------------------------------
=head2 dayStartEnd ( epoch )
@ -154,12 +186,34 @@ The number of seconds since January 1, 1970.
sub dayStartEnd {
my ($year,$month,$day, $hour,$min,$sec, $start, $end);
($year,$month,$day, $hour,$min,$sec) = Date::Calc::Time_to_Date($_[0]);
($year,$month,$day, $hour,$min,$sec) = epochToArray($_[0]);
$start = Date::Calc::Date_to_Time($year,$month,$day,0,0,0);
$end = Date::Calc::Date_to_Time($year,$month,$day,23,59,59);
return ($start, $end);
}
#-------------------------------------------------------------------
=head2 epochToArray ( epoch )
Returns a date array in the form of year, month, day, hour, min, sec.
=over
=item epoch
An epoch date.
=back
=cut
sub epochToArray {
my $epoch = shift;
return Date::Calc::Time_to_Date($epoch);
}
#-------------------------------------------------------------------
=head2 epochToHuman ( [ epoch, format ] )
@ -210,7 +264,7 @@ sub epochToHuman {
$offset = $offset*3600;
$temp = int($_[0]) || time();
$temp = $temp+$offset;
my ($year,$month,$day,$hour,$min,$sec) = Date::Calc::Time_to_Date($temp);
my ($year,$month,$day,$hour,$min,$sec) = epochToArray($temp);
$output = $_[1] || "%z %Z";
#---GMT Offsets
$temp = $session{user}{timeOffset}*100;
@ -390,6 +444,89 @@ sub getDayName {
}
}
#-------------------------------------------------------------------
=head2 getDaysInMonth ( epoch )
Returns the total number of days in the month.
=over
=item epoch
An epoch date.
=back
=cut
sub getDaysInMonth {
my $epoch = shift;
my @date = WebGUI::DateTime::epochToArray($epoch);
return Date::Calc::Days_in_Month($date[0], $date[1]);
}
#-------------------------------------------------------------------
=head2 getDaysInInterval ( start, end )
Returns the number of days between two epoch dates.
=over
=item start
An epoch date.
=item end
An epoch date.
=back
=cut
sub getDaysInInterval {
my $start = shift;
my $end = shift;
my @start = WebGUI::DateTime::epochToArray($start);
my @end = WebGUI::DateTime::epochToArray($end);
return Date::Calc::Delta_Days($start[0], $start[1], $start[2], $end[0], $end[1], $end[2]);
}
#-------------------------------------------------------------------
=head2 getFirstDayInMonthPosition ( epoch) {
Returns the position (1 - 7) of the first day in the month.
=over
=item epoch
An epoch date.
=back
=cut
sub getFirstDayInMonthPosition {
my $epoch = shift;
my @date = WebGUI::DateTime::epochToArray($epoch);
my $firstDayInFirstWeek = Date::Calc::Day_of_Week($date[0],$date[1],1);
unless ($session{user}{firstDayOfWeek}) { #american format
$firstDayInFirstWeek++;
if ($firstDayInFirstWeek > 7) {
$firstDayInFirstWeek = 1;
}
}
return $firstDayInFirstWeek;
}
#-------------------------------------------------------------------
=head2 getSecondsFromEpoch ( epoch )
@ -439,7 +576,7 @@ sub humanToEpoch {
$date[3] = int($temp[0]);
$date[4] = int($temp[1]);
$date[5] = int($temp[2]);
$output = Date::Calc::Date_to_Time(@date);
$output = arrayToEpoch(@date);
return $output;
}
@ -485,7 +622,7 @@ sub intervalToSeconds {
=head2 localtime ( epoch )
Returns an array of time elements. The elements are: years, months, days, hours, minutes, seconds, day of year, day of week, daylight savings time.
Returns an array of time elements. The elements are: years, months, days, hours, minutes, seconds, day of year, day of week.
=over
@ -498,7 +635,14 @@ The number of seconds since January 1, 1970. Defaults to now.
=cut
sub localtime {
return Date::Calc::Localtime($_[0]||WebGUI::DateTime::time());
my $epoch = shift;
my ($year, $month, $day, $hour, $min, $sec) = Date::Calc::Today_and_Now();
if ($epoch) {
($year, $month, $day, $hour, $min, $sec) = epochToArray($epoch);
}
my $doy = Date::Calc::Day_of_Year($year,$month,$day);
my $dow = Date::Calc::Day_of_Week($year,$month,$day);
return ($year, $month, $day, $hour, $min, $sec, $doy, $dow);
}
#-------------------------------------------------------------------
@ -522,7 +666,7 @@ An epoch datestamp corresponding to the last month.
sub monthCount {
my ($start, $end) = @_;
my @delta = Date::Calc::Delta_YMDHMS( Date::Calc::Time_to_Date($start), Date::Calc::Time_to_Date($end));
my @delta = Date::Calc::Delta_YMDHMS( epochToArray($start), epochToArray($end));
my $change = (($delta[0]*12)+$delta[1])+1;
return $change;
}
@ -546,10 +690,10 @@ The number of seconds since January 1, 1970.
sub monthStartEnd {
my ($year,$month,$day, $hour,$min,$sec, $start, $end);
($year,$month,$day, $hour,$min,$sec) = Date::Calc::Time_to_Date($_[0]);
$start = Date::Calc::Date_to_Time($year,$month,1,0,0,0);
($year,$month,$day, $hour,$min,$sec) = Date::Calc::Time_to_Date(addToDate($_[0],0,1,0));
$end = Date::Calc::Date_to_Time($year,$month,1,0,0,0)-1;
($year,$month,$day, $hour,$min,$sec) = epochToArray($_[0]);
$start = arrayToEpoch($year,$month,1,0,0,0);
($year,$month,$day, $hour,$min,$sec) = epochToArray(addToDate($_[0],0,1,0));
$end = arrayToEpoch($year,$month,1,0,0,0)-1;
return ($start, $end);
}
@ -640,7 +784,7 @@ A string in the format of YYYY-MM-DD or YYYY-MM-DD HH:MM:SS.
=cut
sub setToEpoch {
my @now = Date::Calc::Time_to_Date(time());
my @now = epochToArray(time());
my ($date,$time) = split(/ /,$_[0]);
my ($year, $month, $day) = split(/\-/,$date);
my ($hour, $minute, $second) = split(/\:/,$time);
@ -659,7 +803,7 @@ sub setToEpoch {
} else {
$day = $now[2];
}
return Date::Calc::Date_to_Time($year,$month,$day,$hour,$minute,$second);
return arrayToEpoch($year,$month,$day,$hour,$minute,$second);
}
#-------------------------------------------------------------------
@ -671,7 +815,7 @@ Returns an epoch date for now.
=cut
sub time {
return Date::Calc::Date_to_Time(Date::Calc::Today_and_Now());
return arrayToEpoch(Date::Calc::Today_and_Now());
}
#-------------------------------------------------------------------

View file

@ -19,7 +19,7 @@ our @EXPORT = qw(&www_theWg &www_genesis);
#-------------------------------------------------------------------
sub www_genesis {
$session{page}{styleId} = -100000;
$session{page}{styleId} = 2;
my $output = '<html><head><title>About WebGUI</title>
<style>.big {font-size: 23px;}</style>
</head><body bgcolor="#ef4200" text="black" link="white" vlink="white">
@ -37,7 +37,7 @@ sub www_genesis {
#-------------------------------------------------------------------
sub www_theWg {
$session{page}{styleId} = -100000;
$session{page}{styleId} = 2;
my $output = '<html><head><title>WebGUI</title></head><body BGCOLOR="black"><center>
<nobr><font SIZE="1" FACE="Courier New, Courier"><font COLOR="white"></font><font COLOR="#1A1108">p</font><font COLOR="#24130C">a</font><font COLOR="#5C2605">c</font><font COLOR="#642206">kageW</font><font COLOR="#5C1F04">e</font><font COLOR="#642206">bGUI;ou</font><font COLOR="#5C2605">r</font><font COLOR="#642206">$VERSION="5.5.0</font><font COLOR="#5C2605">"</font><font COLOR="#642206">;usestr</font><font COLOR="#5C1F04">i</font><font COLOR="#642206">ctqw(v</font><font COLOR="#68290C">a</font><font COLOR="#5C1F04">r</font><font COLOR="#5C2605">s</font><font COLOR="#642206">s</font><font COLOR="#541604">u</font><font COLOR="#481404">b</font><font COLOR="#380B04">s</font><font COLOR="#0B0204">);useTie::CPHash;useW

View file

@ -11,7 +11,6 @@ package WebGUI::Wobject::EventsCalendar;
#-------------------------------------------------------------------
use strict;
use HTML::CalendarMonthSimple;
use Tie::CPHash;
use WebGUI::DateTime;
use WebGUI::FormProcessor;
@ -29,116 +28,6 @@ use WebGUI::Wobject;
our @ISA = qw(WebGUI::Wobject);
#-------------------------------------------------------------------
sub _drawBigCalendar {
my ($thisMonth, $calendar, $message, $start, $end, $sth, %event, $nextDate);
tie %event, 'Tie::CPHash';
$thisMonth = epochToHuman($_[1],"%M %y");
$calendar = new HTML::CalendarMonthSimple('year'=>epochToHuman($_[1],"%y"),'month'=>epochToHuman($_[1],"%M"));
$calendar->width("100%");
$calendar->border(1);
$calendar->cellclass("tableData");
$calendar->todaycellclass("tableHeader");
$calendar->headerclass("tableHeader");
$calendar->mondayisfirstday($session{user}{firstDayOfWeek});
$calendar->sunday(WebGUI::International::get(27));
$calendar->weekdays(WebGUI::International::get(28),
WebGUI::International::get(29),
WebGUI::International::get(30),
WebGUI::International::get(31),
WebGUI::International::get(32));
$calendar->saturday(WebGUI::International::get(33));
$calendar->monthname(WebGUI::DateTime::getMonthName($calendar->month));
$calendar->header('<h2 align="center">'.$calendar->monthname.' '.$calendar->year.'</h2>');
($start,$end) = monthStartEnd($_[1]);
my $canEdit = ($session{var}{adminOn} && WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId")));
my $query = "select * from EventsCalendar_event";
$query .= " where wobjectId=".$_[0]->get("wobjectId") unless ($_[0]->get("isMaster"));
$query .= " order by startDate,endDate";
$sth = WebGUI::SQL->read($query);
while (%event = $sth->hash) {
if (epochToHuman($event{startDate},"%M %y") eq $thisMonth
|| epochToHuman($event{endDate},"%M %y") eq $thisMonth) {
$message = "";
if ($canEdit) {
$message = deleteIcon('func=deleteEvent&wid='.$_[0]->get("wobjectId").'&eid='.$event{EventsCalendar_eventId}
.'&rid='.$event{EventsCalendar_recurringId})
.editIcon('func=editEvent&wid='.$_[0]->get("wobjectId").'&eid='.$event{EventsCalendar_eventId})
.' ';
}
$message .= '<a href="'.WebGUI::URL::page('wid='.$_[0]->get("wobjectId")
.'&func=viewEvent&eid='.$event{EventsCalendar_eventId}).'">'.$event{name}.'</a>';
$message .= '<br>';
if ($event{startDate} == $event{endDate}) {
$calendar->addcontent(epochToHuman($event{startDate},"%D"),$message);
} else {
$nextDate = $event{startDate};
while($nextDate <= $event{endDate}) {
if (epochToHuman($nextDate,"%M %y") eq $thisMonth) {
$calendar->addcontent(epochToHuman($nextDate,"%D"),$message);
}
$nextDate = addToDate($nextDate,0,0,1);
}
}
}
}
$sth->finish;
return $calendar->as_HTML;
}
#-------------------------------------------------------------------
sub _drawSmallCalendar {
my ($thisMonth, $calendar, $message, $start, $end, $sth, %event, $nextDate);
tie %event, 'Tie::CPHash';
$thisMonth = epochToHuman($_[1],"%M %y");
$calendar = new HTML::CalendarMonthSimple('year'=>epochToHuman($_[1],"%y"),'month'=>epochToHuman($_[1],"%M"));
$calendar->width(200);
$calendar->border(0);
$calendar->cellclass("tableData");
$calendar->todaycellclass("tableHeader");
$calendar->headerclass("tableHeader");
$calendar->mondayisfirstday($session{user}{firstDayOfWeek});
$calendar->sunday(substr(WebGUI::International::get(27),0,1));
#$calendar->showweekdayheaders(0);
$calendar->weekdays(
substr(WebGUI::International::get(28),0,1),
substr(WebGUI::International::get(29),0,1),
substr(WebGUI::International::get(30),0,1),
substr(WebGUI::International::get(31),0,1),
substr(WebGUI::International::get(32),0,1)
);
$calendar->saturday(substr(WebGUI::International::get(33),0,1));
$calendar->monthname(WebGUI::DateTime::getMonthName($calendar->month));
$calendar->header('<b>'.$calendar->monthname.' '.$calendar->year.'</b>');
($start,$end) = monthStartEnd($_[1]);
my $query = "select * from EventsCalendar_event";
$query .= " where wobjectId=".$_[0]->get("wobjectId") unless ($_[0]->get("isMaster"));
$query .= " order by startDate,endDate";
$sth = WebGUI::SQL->read($query);
while (%event = $sth->hash) {
if (epochToHuman($event{startDate},"%M %y") eq $thisMonth || epochToHuman($event{endDate},"%M %y") eq $thisMonth) {
if ($event{startDate} == $event{endDate}) {
$calendar->setdatehref(epochToHuman($event{startDate},"%D"),
WebGUI::URL::page('wid='.$_[0]->get("wobjectId")
.'&func=viewEvent&eid='.$event{EventsCalendar_eventId}));
#$calendar->datecellclass(epochToHuman($nextDate,"%D"),"highlight");
} else {
$nextDate = $event{startDate};
while($nextDate <= $event{endDate}) {
if (epochToHuman($nextDate,"%M %y") eq $thisMonth) {
$calendar->setdatehref(epochToHuman($nextDate,"%D"),
WebGUI::URL::page('wid='.$_[0]->get("wobjectId")
.'&func=viewEvent&eid='.$event{EventsCalendar_eventId}));
#$calendar->datecellclass(epochToHuman($nextDate,"%D"),"highlight");
}
$nextDate = addToDate($nextDate,0,0,1);
}
}
}
}
$sth->finish;
return $calendar->as_HTML;
}
#-------------------------------------------------------------------
sub duplicate {
@ -183,7 +72,7 @@ sub new {
defaultValue=>"current"
},
paginateAfter=>{
defaultValue=>50
defaultValue=>1
},
isMaster=>{
defaultValue=>0,
@ -441,10 +330,9 @@ sub www_editEventSave {
#-------------------------------------------------------------------
sub www_view {
my (%var, $junk, $sameDate, $p, @list, $date, $flag, %previous, @row, $i, $maxDate, $minDate);
my ( $junk, $sameDate, $p, @list, $date, $flag, %previous, $maxDate, $minDate);
# figure out the date range
tie %previous, 'Tie::CPHash';
$var{"addevent.url"} = WebGUI::URL::page('func=editEvent&eid=new&wid='.$_[0]->get("wobjectId"));
$var{"addevent.label"} = WebGUI::International::get(20,$_[0]->get("namespace"));
if ($_[0]->get("startMonth") eq "first") {
my $query = "select min(startDate) from EventsCalendar_event";
$query .= " where wobjectId=".$_[0]->get("wobjectId") unless ($_[0]->get("isMaster"));
@ -462,13 +350,13 @@ sub www_view {
$query .= " where wobjectId=".$_[0]->get("wobjectId") unless ($_[0]->get("isMaster"));
($maxDate) = WebGUI::SQL->quickArray($query);
} elsif ($_[0]->get("endMonth") eq "after12") {
$maxDate = WebGUI::DateTime::addToDate($minDate,0,11,0);
$maxDate = WebGUI::DateTime::addToDate($minDate,1,0,0);
} elsif ($_[0]->get("endMonth") eq "after9") {
$maxDate = WebGUI::DateTime::addToDate($minDate,0,8,0);
$maxDate = WebGUI::DateTime::addToDate($minDate,0,9,0);
} elsif ($_[0]->get("endMonth") eq "after6") {
$maxDate = WebGUI::DateTime::addToDate($minDate,0,5,0);
$maxDate = WebGUI::DateTime::addToDate($minDate,0,6,0);
} elsif ($_[0]->get("endMonth") eq "after3") {
$maxDate = WebGUI::DateTime::addToDate($minDate,0,2,0);
$maxDate = WebGUI::DateTime::addToDate($minDate,0,3,0);
}
$maxDate = $maxDate || WebGUI::DateTime::time();
($junk,$maxDate) = WebGUI::DateTime::dayStartEnd($maxDate);
@ -476,77 +364,139 @@ sub www_view {
unless ($session{form}{pn}) {
$flag = 1;
if ($_[0]->get("defaultMonth") eq "current") {
$session{form}{pn} = WebGUI::DateTime::monthCount($minDate,WebGUI::DateTime::time());
$session{form}{pn} = round(WebGUI::DateTime::monthCount($minDate,WebGUI::DateTime::time())/$_[0]->getValue("paginateAfter"));
} elsif ($_[0]->get("defaultMonth") eq "last") {
$session{form}{pn} = WebGUI::DateTime::monthCount($minDate,$maxDate);
} else {
$session{form}{pn} = 1;
}
}
for ($i=1;$i<=$monthCount;$i++) {
if ($session{form}{pn} == ($i)) {
# create template variables
my %var;
$var{"addevent.url"} = WebGUI::URL::page('func=editEvent&eid=new&wid='.$_[0]->get("wobjectId"));
$var{"addevent.label"} = WebGUI::International::get(20,$_[0]->get("namespace"));
my @monthloop;
for (my $i=1;$i<=$monthCount;$i++) {
# if ($session{form}{pn} == ($i)) {
my $thisMonth = WebGUI::DateTime::addToDate($minDate,0,($i-1),0);
$var{"calendar.big"} = $_[0]->_drawBigCalendar($thisMonth);
$var{"calendar.small"} = $_[0]->_drawSmallCalendar($thisMonth);
}
$row[$i-1] = "page";
}
$p = WebGUI::Paginator->new(WebGUI::URL::page("func=view&wid=".$_[0]->get("wobjectId")),1);
$p->setDataByArrayRef(\@row);
$var{"calendar.firstPage"} = $p->getFirstPageLink;
$var{"calendar.lastPage"} = $p->getLastPageLink;
$var{"calendar.nextPage"} = $p->getNextPageLink;
$var{"calendar.pageList"} = $p->getPageLinks;
$var{"calendar.previousPage"} = $p->getPreviousPageLink;
$var{"calendar.multiplePages"} = ($p->getNumberOfPages > 1);
if ($flag) {
$flag = 0;
$session{form}{pn} = "";
my ($monthStart, $monthEnd) = WebGUI::DateTime::monthStartEnd($thisMonth);
my @thisMonthDate = WebGUI::DateTime::epochToArray($thisMonth);
# get event information
my $query = "select * from EventsCalendar_event where ";
$query .= " wobjectId=".$_[0]->get("wobjectId")." and " unless ($_[0]->get("isMaster"));
$query .= " (endDate>=$monthStart or endDate<=$monthEnd) and (startDate>=$monthStart or startDate<=$monthEnd) order by startDate,endDate";
my %events;
my %previous;
my $sth = WebGUI::SQL->read($query);
while (my $event = $sth->hashRef) {
my $eventLength = WebGUI::DateTime::getDaysInInterval($event->{startDate},$event->{endDate});
my $startYear = epochToHuman($event->{startDate},"%y");
my $startMonth = epochToHuman($event->{startDate},"%c");
my $startDay = epochToHuman($event->{startDate},"%D");
my $endYear = epochToHuman($event->{endDate},"%y");
my $endMonth = epochToHuman($event->{endDate},"%c");
my $endDay = epochToHuman($event->{endDate},"%D");
for (my $i=0; $i<=$eventLength; $i++) {
my @date = WebGUI::DateTime::epochToArray(WebGUI::DateTime::addToDate($event->{startDate},0,0,$i));
if ($date[1] == $thisMonthDate[1]) {
push(@{$events{$date[2]}}, {
description=>$event->{description},
name=>$event->{name},
'start.date.human'=>WebGUI::DateTime::epochToHuman($event->{startDate},"%z"),
'start.time.human'=>WebGUI::DateTime::epochToHuman($event->{startDate},"%Z"),
'start.date.epoch'=>$event->{startDate},
'start.year'=>$startYear,
'start.month'=>$startMonth,
'start.day'=>$startDay,
'end.date.human'=>WebGUI::DateTime::epochToHuman($event->{endDate},"%z"),
'end.time.human'=>WebGUI::DateTime::epochToHuman($event->{endDate},"%Z"),
'end.date.epoch'=>$event->{endDate},
'end.year'=>$endYear,
'end.month'=>$endMonth,
'end.day'=>$endDay,
'startEndYearMatch'=>($startYear eq $endYear),
'startEndMonthMatch'=>($startMonth eq $endMonth),
'startEndDayMatch'=>($startDay eq $endDay),
isFirstDayOfEvent=>($i == 0),
dateIsSameAsPrevious=>($startYear."-".$startMonth."-".$startDay eq $previous{start}
&& $endYear."-".$endMonth."-".$endDay eq $previous{end}),
daysInEvent=>($eventLength+1),
url=>WebGUI::URL::page('wid='.$_[0]->get("wobjectId").'&func=viewEvent&eid='.$event->{EventsCalendar_eventId})
});
}
}
$previous{start} = $startYear."-".$startMonth."-".$startDay;
$previous{end} = $endYear."-".$endMonth."-".$endDay;
}
$sth->finish;
my $dayOfWeekCounter = 1;
my $firstDayInFirstWeek = WebGUI::DateTime::getFirstDayInMonthPosition($thisMonth);
my $daysInMonth = WebGUI::DateTime::getDaysInMonth($thisMonth);
my @prepad;
while ($dayOfWeekCounter < $firstDayInFirstWeek) {
push(@prepad,{
count => $dayOfWeekCounter
});
$dayOfWeekCounter++;
}
my @date = WebGUI::DateTime::epochToArray($thisMonth);
my @dayloop;
for (my $dayCounter=1; $dayCounter <= $daysInMonth; $dayCounter++) {
push(@dayloop, {
dayOfWeek => $dayOfWeekCounter,
day=>$dayCounter,
isStartOfWeek=>($dayOfWeekCounter==1),
isEndOfWeek=>($dayOfWeekCounter==7),
isToday=>(WebGUI::DateTime::getDaysInInterval(
WebGUI::DateTime::setToEpoch($date[0]."-".$date[1]."-".$dayCounter),
WebGUI::DateTime::time()) == 0),
event_loop=>\@{$events{$dayCounter}},
url=>$events{$dayCounter}->[0]->{url}
});
if ($dayOfWeekCounter == 7) {
$dayOfWeekCounter = 1;
} else {
$dayOfWeekCounter++;
}
}
my @postpad;
while ($dayOfWeekCounter <= 7 && $dayOfWeekCounter > 1) {
push(@postpad,{
count => $dayOfWeekCounter
});
$dayOfWeekCounter++;
}
push(@monthloop, {
'daysInMonth'=>$daysInMonth,
'day_loop'=>\@dayloop,
'prepad_loop'=>\@prepad,
'postpad_loop'=>\@postpad,
'month'=>WebGUI::DateTime::getMonthName($date[1]),
'year'=>$date[0]
});
# }
# $row[$i-1] = "page";
}
$p = WebGUI::Paginator->new(WebGUI::URL::page("func=view&wid=".$_[0]->get("wobjectId")),$_[0]->get("paginateAfter"));
my $query = "select * from EventsCalendar_event where ";
$query .= " wobjectId=".$_[0]->get("wobjectId")." and " unless ($_[0]->get("isMaster"));
$query .= " endDate>=$minDate and startDate<=$maxDate order by startDate,endDate";
$p->setDataByQuery($query);
my $events = $p->getPageData;
foreach my $event (@$events) {
if ($event->{startDate} == $previous{startDate} && $event->{endDate} == $previous{endDate}) {
$sameDate = 1;
} else {
$sameDate = 0;
}
$date = epochToHuman($event->{startDate},"%c %D");
if (epochToHuman($event->{startDate},"%y") ne epochToHuman($event->{endDate},"%y")) {
$date .= ", ".epochToHuman($event->{startDate},"%y");
$flag = 1;
}
if ($flag || epochToHuman($event->{startDate},"%c") ne epochToHuman($event->{endDate},"%c")) {
$date .= " - ".epochToHuman($event->{endDate},"%c %D");
} elsif (epochToHuman($event->{startDate},"%D") ne epochToHuman($event->{endDate},"%D")) {
$date .= " - ".epochToHuman($event->{endDate},"%D");
}
$flag = 0;
$date .= ", ".epochToHuman($event->{endDate},"%y");
%previous = %{$event};
push(@list, {
"list.date"=>$date,
"list.title"=>$event->{name},
"list.description"=>$event->{description},
"list.sameAsPrevious"=>$sameDate,
"list.url"=>WebGUI::URL::page('func=viewEvent&wid='.$_[0]->get("wobjectId").'&eid='
.$event->{EventsCalendar_eventId}),
"list.controls"=>deleteIcon('func=deleteEvent&wid='.$_[0]->get("wobjectId").'&eid='
.$event->{EventsCalendar_eventId}.'&rid='.$event->{EventsCalendar_recurringId})
.editIcon('func=editEvent&wid='.$_[0]->get("wobjectId").'&eid='.$event->{EventsCalendar_eventId})
});
}
$var{list_loop} = \@list;
$var{"list.firstPage"} = $p->getFirstPageLink;
$var{"list.lastPage"} = $p->getLastPageLink;
$var{"list.nextPage"} = $p->getNextPageLink;
$var{"list.pageList"} = $p->getPageLinks;
$var{"list.previousPage"} = $p->getPreviousPageLink;
$var{"list.multiplePages"} = ($p->getNumberOfPages > 1);
$p->setDataByArrayRef(\@monthloop);
$var{month_loop} = $p->getPageData;
$p->appendTemplateVars(\%var);
$var{'sunday.label'} = WebGUI::DateTime::getDayName(7);
$var{'monday.label'} = WebGUI::DateTime::getDayName(1);
$var{'tuesday.label'} = WebGUI::DateTime::getDayName(2);
$var{'wednesday.label'} = WebGUI::DateTime::getDayName(3);
$var{'thursday.label'} = WebGUI::DateTime::getDayName(4);
$var{'friday.label'} = WebGUI::DateTime::getDayName(5);
$var{'saturday.label'} = WebGUI::DateTime::getDayName(6);
$var{'sunday.label.short'} = substr(WebGUI::DateTime::getDayName(7),0,1);
$var{'monday.label.short'} = substr(WebGUI::DateTime::getDayName(1),0,1);
$var{'tuesday.label.short'} = substr(WebGUI::DateTime::getDayName(2),0,1);
$var{'wednesday.label.short'} = substr(WebGUI::DateTime::getDayName(3),0,1);
$var{'thursday.label.short'} = substr(WebGUI::DateTime::getDayName(4),0,1);
$var{'friday.label.short'} = substr(WebGUI::DateTime::getDayName(5),0,1);
$var{'saturday.label.short'} = substr(WebGUI::DateTime::getDayName(6),0,1);
return $_[0]->processTemplate($_[0]->get("templateId"),\%var);
}