From 86d374258cdd0e1f0a0c896d66d72c443bcad3f5 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Mon, 25 Nov 2002 05:50:58 +0000 Subject: [PATCH] Templatized Events Calendar. --- docs/upgrades/upgrade_4.8.0-4.9.0.sql | 34 ++- lib/WebGUI/DateTime.pm | 26 ++ lib/WebGUI/HTMLForm.pm | 3 +- lib/WebGUI/Paginator.pm | 14 +- lib/WebGUI/Template.pm | 2 +- lib/WebGUI/Wobject/EventsCalendar.pm | 353 ++++++++++++++++++-------- 6 files changed, 318 insertions(+), 114 deletions(-) diff --git a/docs/upgrades/upgrade_4.8.0-4.9.0.sql b/docs/upgrades/upgrade_4.8.0-4.9.0.sql index d7a6e795d..1dbef56ef 100644 --- a/docs/upgrades/upgrade_4.8.0-4.9.0.sql +++ b/docs/upgrades/upgrade_4.8.0-4.9.0.sql @@ -35,8 +35,36 @@ delete from groups where groupId=9; delete from groupings where groupId=9; delete from groupGroupings where groupId=9; delete from groupGroupings where inGroup=9; - - - +alter table EventsCalendar add column startMonth varchar(35) not null default 'current'; +alter table EventsCalendar add column endMonth varchar(35) not null default 'after12'; +alter table EventsCalendar add column defaultMonth varchar(35) not null default 'current'; +alter table EventsCalendar add column templateId int not null default 1; +alter table EventsCalendar add column eventTemplateId int not null default 1; +update EventsCalendar set templateId=2 where calendarLayout <> 'calendarMonth'; +delete from international where namespace='EventsCalendar' and internationalId=17; +delete from international where namespace='EventsCalendar' and internationalId=18; +delete from international where namespace='EventsCalendar' and internationalId=74; +delete from international where namespace='EventsCalendar' and internationalId=16; +delete from international where namespace='EventsCalendar' and internationalId=21; +delete from international where namespace='EventsCalendar' and internationalId=1; +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (91,1,'EventsCalendar','Add a new event.', 1038190852); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (82,1,'EventsCalendar','Current.', 1038190803); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (83,1,'EventsCalendar','First in the calendar.', 1038190781); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (85,1,'EventsCalendar','Last in the calendar.', 1038190764); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (90,1,'EventsCalendar','Default Month', 1038190708); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (89,1,'EventsCalendar','Show 3 months from start.', 1038190646); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (88,1,'EventsCalendar','Show 6 months from start.', 1038190632); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (87,1,'EventsCalendar','Show 9 months from start.', 1038190626); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (86,1,'EventsCalendar','Show 12 months from start.', 1038190601); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (84,1,'EventsCalendar','End Month', 1038190527); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (81,1,'EventsCalendar','Start Month', 1038190442); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (80,1,'EventsCalendar','Event Template', 1038190379); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (79,1,'EventsCalendar','Main Template', 1038190356); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (93,1,'EventsCalendar','Next Event', 1038202290); +insert into international (internationalId,languageId,namespace,message,lastUpdated) values (92,1,'EventsCalendar','Previous Event', 1038202281); +INSERT INTO template VALUES (1,'Calendar Month (Big)','\r\n

\r\n
\r\n\r\n\r\n

\r\n\r\n\r\n\r\n \">\r\n

\r\n\r\n\r\n\r\n\r\n\r\n

\r\n · · \r\n
\r\n
','EventsCalendar'); +INSERT INTO template VALUES (2,'Events List','\r\n

\r\n
\r\n\r\n\r\n

\r\n\r\n\r\n\r\n \">\r\n

\r\n\r\n\r\n\r\n \r\n \r\n \r\n

\r\n \r\n \r\n \r\n \r\n \r\n - \r\n \r\n

\r\n

\r\n\r\n\r\n\r\n
\r\n · \r\n
\r\n
','EventsCalendar'); +INSERT INTO template VALUES (3,'Calendar Month (Small)','\r\n

\r\n
\r\n\r\n\r\n

\r\n\r\n\r\n\r\n \">\r\n

\r\n\r\n\r\n\r\n\r\n\r\n

\r\n · \r\n
\r\n
','EventsCalendar'); +INSERT INTO template VALUES (1,'Default Event','

\r\n\r\n\r\n\r\n\r\n
\r\n:
\r\n:
\r\n
\r\n\r\n\r\n \">
\r\n \">
\r\n
\r\n\r\n\r\n \">
\r\n
\r\n\r\n\r\n \">
\r\n
\r\n\r\n
\r\n','EventsCalendar/Event'); diff --git a/lib/WebGUI/DateTime.pm b/lib/WebGUI/DateTime.pm index 80d56153d..f1ecbc0c1 100644 --- a/lib/WebGUI/DateTime.pm +++ b/lib/WebGUI/DateTime.pm @@ -399,6 +399,32 @@ sub localtime { return Date::Calc::Localtime($_[0]); } +#------------------------------------------------------------------- +=head2 monthCount ( startEpoch, endEpoch ) + + Returns the number of months between the start and end dates + (inclusive). + +=item startEpoch + + An epoch datestamp corresponding to the first month. + +=item endEpoch + + An epoch datestamp corresponding to the last month. + +=cut + +sub monthCount { + my ($start, $end) = @_; + my $count = 1; + while (addToDate($start,0,$count,0) < $end) { + $count++; + } + return $count; +} + + #------------------------------------------------------------------- =head2 monthStartEnd ( epoch ) diff --git a/lib/WebGUI/HTMLForm.pm b/lib/WebGUI/HTMLForm.pm index ffe51c507..5b029cc4a 100644 --- a/lib/WebGUI/HTMLForm.pm +++ b/lib/WebGUI/HTMLForm.pm @@ -56,6 +56,7 @@ use WebGUI::SQL; $f->text("firstName", "First Name"); $f->textarea("emailMessage","Email Message"); $f->url("homepage","Home Page"); + $f->whatNext(\%options); $f->yesNo("happy","Are you happy?"); $f->zipcode("workZip","Office Zip Code"); @@ -1775,7 +1776,7 @@ sub url { #------------------------------------------------------------------- -=head2 whatNext ( hashRef ] ) +=head2 whatNext ( options [, value, name, label, subtext, uiLevel, extras ] ) Adds a "What next?" select list to this form for use with chained action forms in WebGUI. diff --git a/lib/WebGUI/Paginator.pm b/lib/WebGUI/Paginator.pm index 24151b252..ba3708c6c 100644 --- a/lib/WebGUI/Paginator.pm +++ b/lib/WebGUI/Paginator.pm @@ -337,7 +337,7 @@ sub getPageData { =cut sub getPageNumber { - return $_[0]->{_pn} || 1; + return $_[0]->{_pn}; } #------------------------------------------------------------------- @@ -429,12 +429,12 @@ sub getPreviousPageLink { sub new { my ($class, $currentURL, $rowsPerPage, $rowRef, $formVar, $pageRef, $pn); - $class = shift; - $currentURL = shift; - $rowRef = shift; - $rowsPerPage = shift || 25; - $pn = shift || $session{form}{$formVar}; - $formVar = shift || "pn"; + $class = $_[0]; + $currentURL = $_[1]; + $rowRef = $_[2]; + $rowsPerPage = $_[3] || 25; + $formVar = $_[5] || "pn"; + $pn = $_[4] || $session{form}{$formVar} || 1; bless {_url => $currentURL, _rpp => $rowsPerPage, _rowRef => $rowRef, _formVar => $formVar, _pn => $pn}, $class; } diff --git a/lib/WebGUI/Template.pm b/lib/WebGUI/Template.pm index ffde8ae0c..5e7747d12 100644 --- a/lib/WebGUI/Template.pm +++ b/lib/WebGUI/Template.pm @@ -95,7 +95,7 @@ sub process { #$value = '{'.join(', ',map {"$_ => $value->{$_}"} keys %$value).'}'; } unless (lc($key) eq "password" || lc($key) eq "identifier") { - $t->param($section.".".$key=>$value); + $t->param("session.".$section.".".$key=>$value); } } } diff --git a/lib/WebGUI/Wobject/EventsCalendar.pm b/lib/WebGUI/Wobject/EventsCalendar.pm index d0ad042cb..415554225 100644 --- a/lib/WebGUI/Wobject/EventsCalendar.pm +++ b/lib/WebGUI/Wobject/EventsCalendar.pm @@ -21,6 +21,7 @@ use WebGUI::Paginator; use WebGUI::Privilege; use WebGUI::Session; use WebGUI::SQL; +use WebGUI::Template; use WebGUI::URL; use WebGUI::Utility; use WebGUI::Wobject; @@ -30,7 +31,7 @@ our $namespace = "EventsCalendar"; our $name = WebGUI::International::get(2,$namespace); #------------------------------------------------------------------- -sub _calendarLayout { +sub _drawBigCalendar { my ($thisMonth, $calendar, $message, $start, $end, $sth, %event, $nextDate); tie %event, 'Tie::CPHash'; $thisMonth = epochToHuman($_[1],"%M %y"); @@ -80,7 +81,59 @@ sub _calendarLayout { } } $sth->finish; - return ''.$calendar->as_HTML; + 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(''.$calendar->monthname.' '.$calendar->year.''); + ($start,$end) = monthStartEnd($_[1]); + $sth = WebGUI::SQL->read("select * from EventsCalendar_event where wobjectId=" + .$_[0]->get("wobjectId")." order by startDate,endDate"); + 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; } #------------------------------------------------------------------- @@ -89,7 +142,11 @@ sub duplicate { $w = $_[0]->SUPER::duplicate($_[1]); $w = WebGUI::Wobject::EventsCalendar->new({wobjectId=>$w,namespace=>$namespace}); $w->set({ - calendarLayout=>$_[0]->get("calendarLayout"), + templateId=>$_[0]->get("templateId"), + eventTemplateId=>$_[0]->get("eventTemplateId"), + startMonth=>$_[0]->get("startMonth"), + endMonth=>$_[0]->get("endMonth"), + defaultMonth=>$_[0]->get("defaultMonth"), paginateAfter=>$_[0]->get("paginateAfter") }); $sth = WebGUI::SQL->read("select * from EventsCalendar_event where wobjectId=" @@ -114,7 +171,7 @@ sub purge { #------------------------------------------------------------------- sub set { - $_[0]->SUPER::set($_[1],[qw(calendarLayout paginateAfter)]); + $_[0]->SUPER::set($_[1],[qw(templateId eventTemplateId startMonth endMonth defaultMonth paginateAfter)]); } #------------------------------------------------------------------- @@ -148,21 +205,70 @@ sub www_deleteEventConfirm { #------------------------------------------------------------------- sub www_edit { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); - my ($output, %hash, $f, $paginateAfter, $proceed); - tie %hash, 'Tie::IxHash'; - if ($_[0]->get("wobjectId") eq "new") { - $proceed = 1; - } + my ($output, $startMonth, $endMonth, $afterEdit, $defaultMonth, $f, $paginateAfter); $paginateAfter = $_[0]->get("paginateAfter") || 50; + $startMonth = $_[0]->get("startMonth") || "current"; + $endMonth = $_[0]->get("endMonth") || "after12"; + $defaultMonth = $_[0]->get("defaultMonth") || "current"; + $afterEdit = 'func=edit&wid='.$_[0]->get("wobjectId") if ($_[0]->get("wobjectId") ne "new"); $output = helpIcon(1,$namespace); $output .= '

'.WebGUI::International::get(12,$namespace).'

'; $f = WebGUI::HTMLForm->new; - %hash = (list => WebGUI::International::get(17,$namespace), - calendarMonth => WebGUI::International::get(18,$namespace)); - # calendarMonthSmall => WebGUI::International::get(74,$namespace)); - $f->select("calendarLayout",\%hash,WebGUI::International::get(16,$namespace),[$_[0]->get("calendarLayout")]); + $f->template( + -name=>"templateId", + -value=>$_[0]->get("templateId"), + -namespace=>$namespace, + -label=>WebGUI::International::get(79,$namespace), + -afterEdit=>$afterEdit + ); + $f->template( + -name=>"eventTemplateId", + -value=>$_[0]->get("eventTemplateId"), + -namespace=>$namespace."/Event", + -label=>WebGUI::International::get(80,$namespace), + -afterEdit=>$afterEdit + ); + $f->select( + -name=>"startMonth", + -options=>{ + "current"=>WebGUI::International::get(82,$namespace), + "first"=>WebGUI::International::get(83,$namespace) + }, + -label=>WebGUI::International::get(81,$namespace), + -value=>[$startMonth] + ); + $f->select( + -name=>"endMonth", + -options=>{ + "last"=>WebGUI::International::get(85,$namespace), + "after12"=>WebGUI::International::get(86,$namespace), + "after9"=>WebGUI::International::get(87,$namespace), + "after6"=>WebGUI::International::get(88,$namespace), + "after3"=>WebGUI::International::get(89,$namespace), + "current"=>WebGUI::International::get(82,$namespace), + }, + -label=>WebGUI::International::get(84,$namespace), + -value=>[$endMonth] + ); + $f->select( + -name=>"defaultMonth", + -options=>{ + "current"=>WebGUI::International::get(82,$namespace), + "last"=>WebGUI::International::get(85,$namespace), + "first"=>WebGUI::International::get(83,$namespace) + }, + -label=>WebGUI::International::get(90,$namespace), + -value=>[$defaultMonth] + ); $f->integer("paginateAfter",WebGUI::International::get(19,$namespace),$paginateAfter); - $f->yesNo("proceed",WebGUI::International::get(21,$namespace),$proceed); + if ($_[0]->get("wobjectId") eq "new") { + $f->whatNext( + -options=>{ + addEvent=>WebGUI::International::get(91,$namespace), + backToPage=>WebGUI::International::get(745) + } + ); + } $output .= $_[0]->SUPER::www_edit($f->printRowsOnly); return $output; } @@ -171,7 +277,11 @@ sub www_edit { sub www_editSave { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditPage()); $_[0]->SUPER::www_editSave({ - calendarLayout=>$session{form}{calendarLayout}, + templateId=>$session{form}{templateId}, + eventTemplateId=>$session{form}{eventTemplateId}, + startMonth=>$session{form}{startMonth}, + endMonth=>$session{form}{endMonth}, + defaultMonth=>$session{form}{defaultMonth}, paginateAfter=>$session{form}{paginateAfter} }); if ($session{form}{proceed}) { @@ -220,7 +330,12 @@ sub www_editEvent { $f->HTMLArea("description",WebGUI::International::get(85),$event{description}); $f->date("startDate",WebGUI::International::get(14,$namespace),$event{startDate}, 'onBlur="this.form.endDate.value=this.form.startDate.value;this.form.until.value=this.form.startDate.value;"'); - $f->date("endDate",WebGUI::International::get(15,$namespace),$event{endDate}); + $f->date( + -name=>"endDate", + -label=>WebGUI::International::get(15,$namespace), + -value=>$event{endDate}, + -extras=>'onBlur="this.form.until.value=this.form.endDate.value;"' + ); $f->raw($special); $f->yesNo("proceed",WebGUI::International::get(21,$namespace)); $f->submit; @@ -285,104 +400,138 @@ sub www_editEventSave { #------------------------------------------------------------------- sub www_view { - my (%event, $p, $output, $sth, $flag, %previous, $junk, @row, $i, $maxDate, $minDate, $nextDate, $first, $last); - tie %event, 'Tie::CPHash'; + my (%var, $sameDate, $p, @list, $date, $flag, %previous, @row, $i, $maxDate, $minDate); tie %previous, 'Tie::CPHash'; - $output = $_[0]->displayTitle; - $output .= $_[0]->description; - if ($session{var}{adminOn}) { - $output .= '

' - .WebGUI::International::get(20,$namespace).'

'; + $var{"addevent.url"} = WebGUI::URL::page('func=editEvent&eid=new&wid='.$_[0]->get("wobjectId")); + $var{"addevent.label"} = WebGUI::International::get(20,$namespace); + if ($_[0]->get("startMonth") eq "first") { + ($minDate) = WebGUI::SQL->quickArray("select min(startDate) from EventsCalendar_event + where wobjectId=".$_[0]->get("wobjectId")); } - ($minDate) = WebGUI::SQL->quickArray("select min(startDate) from EventsCalendar_event where wobjectId=".$_[0]->get("wobjectId")); - ($maxDate) = WebGUI::SQL->quickArray("select max(endDate) from EventsCalendar_event where wobjectId=".$_[0]->get("wobjectId")); - ($junk, $maxDate) = WebGUI::DateTime::monthStartEnd($maxDate); - unless ($minDate && $maxDate) { - $minDate = time(); - $maxDate = time()+86400; + $minDate = $minDate || time(); + if ($_[0]->get("endMonth") eq "last") { + ($maxDate) = WebGUI::SQL->quickArray("select max(endDate) from EventsCalendar_event where + wobjectId=".$_[0]->get("wobjectId")); + } elsif ($_[0]->get("endMonth") eq "after12") { + $maxDate = WebGUI::DateTime::addToDate($minDate,0,12,0); + } elsif ($_[0]->get("endMonth") eq "after9") { + $maxDate = WebGUI::DateTime::addToDate($minDate,0,9,0); + } elsif ($_[0]->get("endMonth") eq "after6") { + $maxDate = WebGUI::DateTime::addToDate($minDate,0,6,0); + } elsif ($_[0]->get("endMonth") eq "after3") { + $maxDate = WebGUI::DateTime::addToDate($minDate,0,3,0); } - if ($_[0]->get("calendarLayout") eq "calendarMonth") { - $nextDate = $minDate; - while ($nextDate <= $maxDate) { - $row[$i] = _calendarLayout($_[0],$nextDate); - ($first,$last) = WebGUI::DateTime::monthStartEnd($nextDate); - if ($session{form}{pn} eq "" && $first <= time() && $last >= time()) { - $session{form}{pn} = $i+1; - } - $i++; - $nextDate = addToDate($nextDate,0,1,0); + $maxDate = $maxDate || time(); + my $monthCount = WebGUI::DateTime::monthCount($minDate,$maxDate); + unless ($session{form}{pn}) { + $flag = 1; + if ($_[0]->get("defaultMonth") eq "current") { + $session{form}{pn} = WebGUI::DateTime::monthCount($minDate,time()); + } elsif ($_[0]->get("defaultMonth") eq "last") { + $session{form}{pn} = WebGUI::DateTime::monthCount($minDate,$maxDate); + } else { + $session{form}{pn} = 1; } - $p = WebGUI::Paginator->new(WebGUI::URL::page(),\@row,1); - $output .= $p->getBar($session{form}{pn}). - $p->getPage($session{form}{pn}). - $p->getBarTraditional($session{form}{pn}); + } + for ($i=0;$i<$monthCount;$i++) { + if ($session{form}{pn} == ($i+1)) { + my $thisMonth = WebGUI::DateTime::addToDate($minDate,0,($i),0); + $var{bigCalendar} = $_[0]->_drawBigCalendar($thisMonth); + $var{smallCalendar} = $_[0]->_drawSmallCalendar($thisMonth); + } + $row[$i] = "page"; + } + $p = WebGUI::Paginator->new("func=view&wid=".$_[0]->get("wobjectId"),\@row,1); + $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} = ""; - } else { - $sth = WebGUI::SQL->read("select * from EventsCalendar_event - where wobjectId=".$_[0]->get("wobjectId")." and endDate>".(time()-86400)." order by startDate,endDate"); - while (%event = $sth->hash) { - unless ($event{startDate} == $previous{startDate} - && $event{endDate} == $previous{endDate}) { - $row[$i] = "".epochToHuman($event{startDate},"%c %D"); - if (epochToHuman($event{startDate},"%y") ne epochToHuman($event{endDate},"%y")) { - $row[$i] .= ", ".epochToHuman($event{startDate},"%y"); - $flag = 1; - } - if ($flag || epochToHuman($event{startDate},"%c") ne epochToHuman($event{endDate},"%c")) { - $row[$i] .= " - ".epochToHuman($event{endDate},"%c %D"); - } elsif (epochToHuman($event{startDate},"%D") ne epochToHuman($event{endDate},"%D")) { - $row[$i] .= " - ".epochToHuman($event{endDate},"%D"); - } - $flag = 0; - $row[$i] .= ", ".epochToHuman($event{endDate},"%y"); - $row[$i] .= ""; - $row[$i] .= "
"; - } - %previous = %event; - if ($session{var}{adminOn}) { - $row[$i] .= deleteIcon('func=deleteEvent&wid='.$_[0]->get("wobjectId").'&eid='.$event{EventsCalendar_eventId} - .'&rid='.$event{EventsCalendar_recurringEventId}) - .editIcon('func=editEvent&wid='.$_[0]->get("wobjectId").'&eid='.$event{EventsCalendar_eventId}) - .' '; - } - $row[$i] .= ''.$event{name}.''; - if ($event{description} ne "") { - $row[$i] .= ' - '; - $row[$i] .= ''.$event{description}; - } - $row[$i] .= '

'; - $i++; - } - $sth->finish; - $p = WebGUI::Paginator->new(WebGUI::URL::page(),\@row,$_[0]->get("paginateAfter")); - $output .= $p->getPage($session{form}{pn}).$p->getBarSimple($session{form}{pn}); } - return $_[0]->processMacros($output); + $p = WebGUI::Paginator->new("func=view&wid=".$_[0]->get("wobjectId"),[],$_[0]->get("paginateAfter")); + $p->setDataByQuery("select * from EventsCalendar_event where wobjectId=".$_[0]->get("wobjectId") + ." and endDate>=$minDate and startDate<=$maxDate order by startDate,endDate"); + 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_recurringEventId}) + .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); + return $_[0]->processMacros($_[0]->processTemplate($_[0]->get("templateId"),\%var)); } #------------------------------------------------------------------- sub www_viewEvent { - my ($output, %event); + my ($output, %event, %var, $id); tie %event, 'Tie::CPHash'; %event = WebGUI::SQL->quickHash("select * from EventsCalendar_event where EventsCalendar_eventId=$session{form}{eid}"); - $output = '

'.$event{name}.'

'; - $output .= ''; - $output .= ''; - $output .= ''; - $output .= '
'; - $output .= ''.WebGUI::International::get(14,$namespace).': '.epochToHuman($event{startDate},"%z").'
'; - $output .= ''.WebGUI::International::get(15,$namespace).': '.epochToHuman($event{endDate},"%z").'
'; - $output .= '
'; - if (WebGUI::Privilege::canEditPage()) { - $output .= ''.WebGUI::International::get(575).'
'; - $output .= '' - .WebGUI::International::get(576).'
'; - } - $output .= '
'; - $output .= $event{description}; - return WebGUI::Macro::process($output); + $var{title} = $event{name}; + $var{"start.label"} = WebGUI::International::get(14,$namespace); + $var{"start.date"} = epochToHuman($event{startDate},"%z"); + $var{"end.label"} = WebGUI::International::get(15,$namespace); + $var{"end.date"} = epochToHuman($event{endDate},"%z"); + $var{canEdit} = WebGUI::Privilege::canEditPage(); + $var{"edit.url"} = WebGUI::URL::page('func=editEvent&eid='.$session{form}{eid}.'&wid='.$session{form}{wid}); + $var{"edit.label"} = WebGUI::International::get(575); + $var{"delete.url"} = WebGUI::URL::page('func=deleteEvent&eid='.$session{form}{eid}.'&wid=' + .$session{form}{wid}.'&rid='.$event{EventsCalendar_recurringEventId}); + $var{"delete.label"} = WebGUI::International::get(576); + ($id) = WebGUI::SQL->quickArray("select EventsCalendar_eventId from EventsCalendar_event + where EventsCalendar_eventId<>$event{EventsCalendar_eventId} and + startDate<=$event{startDate} order by startDate desc, endDate desc"); + $var{"previous.label"} = '«'.WebGUI::International::get(92,$namespace); + $var{"previous.url"} = WebGUI::URL::page("func=viewEvent&wid=".$_[0]->get("wobjectId")."&eid=".$id) if ($id); + ($id) = WebGUI::SQL->quickArray("select EventsCalendar_eventId from EventsCalendar_event + where EventsCalendar_eventId<>$event{EventsCalendar_eventId} and + startDate>=$event{startDate} order by startDate, endDate"); + $var{"next.label"} = WebGUI::International::get(93,$namespace).'»'; + $var{"next.url"} = WebGUI::URL::page("func=viewEvent&wid=".$_[0]->get("wobjectId")."&eid=".$id) if ($id); + $var{description} = $event{description}; + return WebGUI::Macro::process( + WebGUI::Template::process( + WebGUI::Template::get( + $_[0]->get("eventTemplateId"), + "EventsCalendar/Event" + ), + \%var) + ); } 1;