package WebGUI::Wobject::EventsCalendar;
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2002 Plain Black Software.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
use strict;
use HTML::CalendarMonthSimple;
use Tie::CPHash;
use WebGUI::DateTime;
use WebGUI::HTMLForm;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::Paginator;
use WebGUI::Privilege;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::URL;
use WebGUI::Utility;
use WebGUI::Wobject;
our @ISA = qw(WebGUI::Wobject);
our $namespace = "EventsCalendar";
our $name = WebGUI::International::get(2,$namespace);
#-------------------------------------------------------------------
sub _calendarLayout {
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");
($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) {
$message = "";
if ($session{var}{adminOn}) {
$message = deleteIcon('func=deleteEvent&wid='.$_[0]->get("wobjectId").'&eid='.$event{eventId}
.'&rid='.$event{recurringEventId})
.editIcon('func=editEvent&wid='.$_[0]->get("wobjectId").'&eid='.$event{eventId})
.' ';
}
if ($event{description}) {
$message .= ''.$event{name}.'';
} else {
$message .= $event{name};
}
$message .= '
';
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 duplicate {
my ($sth, $w, @row, $newEventId, $previousRecurringEventId);
$w = $_[0]->SUPER::duplicate($_[1]);
$w = WebGUI::Wobject::EventsCalendar->new({wobjectId=>$w,namespace=>$namespace});
$w->set({
calendarLayout=>$_[0]->get("calendarLayout"),
paginateAfter=>$_[0]->get("paginateAfter")
});
$sth = WebGUI::SQL->read("select * from EventsCalendar_event where wobjectId=".$_[0]->get("wobjectId")." order by recurringEventId");
while (@row = $sth->array) {
$newEventId = getNextId("eventId");
if ($row[6] > 0 && $row[6] != $previousRecurringEventId) {
$row[6] = getNextId("recurringEventId");
$previousRecurringEventId = $row[6];
}
WebGUI::SQL->write("insert into EventsCalendar_event values ($newEventId, ".$w->get("wobjectId").", ".
quote($row[2]).", ".quote($row[3]).", '".$row[4]."', '".$row[5]."', $row[6])");
}
$sth->finish;
}
#-------------------------------------------------------------------
sub new {
my ($self, $class, $property);
$class = shift;
$property = shift;
$self = WebGUI::Wobject->new($property);
bless $self, $class;
}
#-------------------------------------------------------------------
sub purge {
WebGUI::SQL->write("delete from EventsCalendar_event where wobjectId=".$_[0]->get("wobjectId"));
$_[0]->SUPER::purge();
}
#-------------------------------------------------------------------
sub set {
$_[0]->SUPER::set($_[1],[qw(calendarLayout paginateAfter)]);
}
#-------------------------------------------------------------------
sub www_copy {
if (WebGUI::Privilege::canEditPage()) {
$_[0]->duplicate;
return "";
} else {
return WebGUI::Privilege::insufficient();
}
}
#-------------------------------------------------------------------
sub www_deleteEvent {
my ($output);
if (WebGUI::Privilege::canEditPage()) {
$output = '
' .WebGUI::International::get(20,$namespace).'
';
}
($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;
}
if ($_[0]->get("calendarLayout") eq "calendar") {
$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);
}
$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});
$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{eventId}
.'&rid='.$event{recurringEventId})
.editIcon('func=editEvent&wid='.$_[0]->get("wobjectId").'&eid='.$event{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); } 1;