From b7f35d7ddd9761f1a19448526ca7dfee13732aed Mon Sep 17 00:00:00 2001 From: JT Smith Date: Sun, 26 May 2002 00:51:48 +0000 Subject: [PATCH] Added the Events Calendar wobject. --- docs/upgrades/upgrade_3.7.0-3.8.0.sql | 8 +- lib/WebGUI/Widget.pm | 207 ------------ lib/WebGUI/Widget/EventsCalendar.pm | 457 -------------------------- lib/WebGUI/Wobject/EventsCalendar.pm | 384 ++++++++++++++++++++++ 4 files changed, 391 insertions(+), 665 deletions(-) delete mode 100644 lib/WebGUI/Widget.pm delete mode 100644 lib/WebGUI/Widget/EventsCalendar.pm create mode 100644 lib/WebGUI/Wobject/EventsCalendar.pm diff --git a/docs/upgrades/upgrade_3.7.0-3.8.0.sql b/docs/upgrades/upgrade_3.7.0-3.8.0.sql index d2a0d944e..7cf85e4c4 100644 --- a/docs/upgrades/upgrade_3.7.0-3.8.0.sql +++ b/docs/upgrades/upgrade_3.7.0-3.8.0.sql @@ -99,8 +99,14 @@ insert into wobject (wobjectId, pageId, title, displayTitle, processMacros, desc delete from widget where namespace='SQLReport'; alter table SQLReport change widgetId wobjectId int not null; +insert into wobject (wobjectId, pageId, title, displayTitle, processMacros, description, dateAdded, addedBy, namespace, lastEdited, editedBy, templatePosition, sequenceNumber, startDate, endDate) select widgetId, pageId, title, displayTitle, processMacros, description, dateAdded, addedBy, namespace, lastEdited, editedBy, templatePosition, sequenceNumber, dateAdded, 1336444487 from widget where namespace='EventsCalendar'; +delete from widget where namespace='EventsCalendar'; +alter table EventsCalendar change widgetId wobjectId int not null; +alter table EventsCalendar_event change widgetId wobjectId int not null; -INSERT INTO international VALUES (38,'UserSubmission','English','(Select \"No\" if you\'re writing a HTML/Rich Edit submission.)'); +INSERT INTO international VALUES (21,'EventsCalendar','English','Proceed to add event?'); +INSERT INTO international VALUES (20,'EventsCalendar','English','Add an event.'); +INSERT INTO international VALUES (38,'UserSubmission','English','(Select \"No\" if you\'re writing an HTML/Rich Edit submission.)'); update international set message='Select \"Yes\" to change all the pages under this page to this style.' where internationalId='106' and namespace='WebGUI' and language='English'; update international set message='Select \"Yes\" to change the privileges of all pages under this page to these privileges.' where internationalId='116' and namespace='WebGUI' and language='English'; INSERT INTO international VALUES (500,'WebGUI','English','Page ID'); diff --git a/lib/WebGUI/Widget.pm b/lib/WebGUI/Widget.pm deleted file mode 100644 index c703a9c24..000000000 --- a/lib/WebGUI/Widget.pm +++ /dev/null @@ -1,207 +0,0 @@ -package WebGUI::Widget; - - - -##################################################################### -##################################################################### -# NOTICE: Use of this subsystem is depricated and is not recommended. -##################################################################### -##################################################################### - - - - - - -#------------------------------------------------------------------- -# 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 CGI::Carp qw(fatalsToBrowser); -use DBI; -use Exporter; -use strict qw(subs vars); -use Tie::IxHash; -use WebGUI::International; -use WebGUI::Node; -use WebGUI::Session; -use WebGUI::SQL; -use WebGUI::Template; -use WebGUI::URL; - -our @ISA = qw(Exporter); -our @EXPORT = qw(&getProperties &purgeWidget &www_jumpDown &www_jumpUp &update &www_moveUp &www_moveDown &www_delete &www_deleteConfirm &www_cut &create &www_paste); - -#------------------------------------------------------------------- -sub _reorderWidgets { - my ($sth, $i, $wid); - $sth = WebGUI::SQL->read("select widgetId from widget where pageId=$_[0] order by templatePosition,sequenceNumber"); - while (($wid) = $sth->array) { - $i++; - WebGUI::SQL->write("update widget set sequenceNumber='$i' where widgetId=$wid"); - } - $sth->finish; -} - -#------------------------------------------------------------------- -sub create { - my ($widgetId, $nextSeq); - $widgetId = getNextId("widgetId"); - ($nextSeq) = WebGUI::SQL->quickArray("select max(sequenceNumber) from widget where pageId=$_[0]"); - $nextSeq += 1; - WebGUI::SQL->write("insert into widget values ($widgetId, $_[0], '$_[1]', '$nextSeq', ".quote($_[2]).", '$_[3]', ".quote($_[4]).", '$_[5]', ".time().", '$session{user}{userId}', 0, 0, '$_[6]')"); - return $widgetId; -} - -#------------------------------------------------------------------- -sub getPositions { - my (%hash); - tie %hash, "Tie::IxHash"; - %hash = WebGUI::Template::getPositions($session{page}{template}); - return %hash; -} - -#------------------------------------------------------------------- -sub getProperties { - my (%data); - tie %data, 'Tie::CPHash'; - %data = WebGUI::SQL->quickHash("select * from widget,$_[0] where widget.widgetId=$_[1] and widget.widgetId=$_[0].widgetId"); - return %data; -} - -#------------------------------------------------------------------- -sub purgeWidget { - my ($node); - WebGUI::SQL->write("delete from $_[2] where widgetId=$_[0]",$_[1]); - WebGUI::SQL->write("delete from widget where widgetId=$_[0]",$_[1]); - $node = WebGUI::Node->new($_[0]); - $node->delete; -} - -#------------------------------------------------------------------- -sub update { - WebGUI::SQL->write("update widget set title=".quote($session{form}{title}).", displayTitle='$session{form}{displayTitle}', description=".quote($session{form}{description}).", processMacros='$session{form}{processMacros}', lastEdited=".time().", editedBy='$session{user}{userId}', templatePosition='$session{form}{templatePosition}' where widgetId=$session{form}{wid}"); -} - -#------------------------------------------------------------------- -sub www_cut { - if (WebGUI::Privilege::canEditPage()) { - WebGUI::SQL->write("update widget set pageId=2 where widgetId=".$session{form}{wid}); - _reorderWidgets($session{page}{pageId}); - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_delete { - my ($output); - if (WebGUI::Privilege::canEditPage()) { - $output = ''; - $output .= '

'.WebGUI::International::get(42).'

'; - $output .= WebGUI::International::get(43); - $output .= '

'; - $output .= '

'; - $output .= WebGUI::International::get(44); - $output .= ''; - $output .= '    '; - $output .= WebGUI::International::get(45); - $output .= '
'; - return $output; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_deleteConfirm { - if (WebGUI::Privilege::canEditPage()) { - WebGUI::SQL->write("update widget set pageId=3 where widgetId=".$session{form}{wid}); - _reorderWidgets($session{page}{pageId}); - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_jumpDown { - my (@data, $thisSeq); - if (WebGUI::Privilege::canEditPage()) { - WebGUI::SQL->write("update widget set sequenceNumber=9999 where widgetId=$session{form}{wid}"); - _reorderWidgets($session{page}{pageId}); - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_jumpUp { - my (@data, $thisSeq); - if (WebGUI::Privilege::canEditPage()) { - WebGUI::SQL->write("update widget set sequenceNumber=0 where widgetId=$session{form}{wid}"); - _reorderWidgets($session{page}{pageId}); - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} -#------------------------------------------------------------------- -sub www_moveDown { - my (@data, $thisSeq); - if (WebGUI::Privilege::canEditPage()) { - ($thisSeq) = WebGUI::SQL->quickArray("select sequenceNumber from widget where widgetId=$session{form}{wid}"); - @data = WebGUI::SQL->quickArray("select widgetId from widget where pageId=$session{page}{pageId} and sequenceNumber=$thisSeq+1"); - if ($data[0] ne "") { - WebGUI::SQL->write("update widget set sequenceNumber=sequenceNumber+1 where widgetId=$session{form}{wid}"); - WebGUI::SQL->write("update widget set sequenceNumber=sequenceNumber-1 where widgetId=$data[0]"); - _reorderWidgets($session{page}{pageId}); - } - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_moveUp { - my (@data, $thisSeq); - if (WebGUI::Privilege::canEditPage()) { - ($thisSeq) = WebGUI::SQL->quickArray("select sequenceNumber from widget where widgetId=$session{form}{wid}"); - @data = WebGUI::SQL->quickArray("select widgetId from widget where pageId=$session{page}{pageId} and sequenceNumber=$thisSeq-1"); - if ($data[0] ne "") { - WebGUI::SQL->write("update widget set sequenceNumber=sequenceNumber-1 where widgetId=$session{form}{wid}"); - WebGUI::SQL->write("update widget set sequenceNumber=sequenceNumber+1 where widgetId=$data[0]"); - _reorderWidgets($session{page}{pageId}); - } - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_paste { - my ($output, $nextSeq); - if (WebGUI::Privilege::canEditPage()) { - ($nextSeq) = WebGUI::SQL->quickArray("select max(sequenceNumber) from widget where pageId=$session{page}{pageId}"); - $nextSeq += 1; - WebGUI::SQL->write("update widget set pageId=$session{page}{pageId}, sequenceNumber='$nextSeq' where widgetId=$session{form}{wid}"); - _reorderWidgets($session{page}{pageId}); - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -1; diff --git a/lib/WebGUI/Widget/EventsCalendar.pm b/lib/WebGUI/Widget/EventsCalendar.pm deleted file mode 100644 index f72746013..000000000 --- a/lib/WebGUI/Widget/EventsCalendar.pm +++ /dev/null @@ -1,457 +0,0 @@ -package WebGUI::Widget::EventsCalendar; - -our $namespace = "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::International; -use WebGUI::Macro; -use WebGUI::Paginator; -use WebGUI::Privilege; -use WebGUI::Session; -use WebGUI::Shortcut; -use WebGUI::SQL; -use WebGUI::URL; -use WebGUI::Utility; -use WebGUI::Widget; - -#------------------------------------------------------------------- -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 name, description, startDate, endDate from EventsCalendar_event where widgetId='$_[0]' order by startDate,endDate"); - while (%event = $sth->hash) { - if (epochToHuman($event{startDate},"%M %y") eq $thisMonth || - epochToHuman($event{endDate},"%M %y") eq $thisMonth) { - $message = $event{name}; - if ($event{description}) { - $message = ''. - $message.''; - } - $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, %data, $newWidgetId, $pageId, @row, $newEventId, $previousRecurringEventId); - tie %data, 'Tie::CPHash'; - %data = getProperties($namespace,$_[0]); - $pageId = $_[1] || $data{pageId}; - $newWidgetId = create($pageId,$namespace,$data{title}, - $data{displayTitle},$data{description},$data{processMacros},$data{templatePosition}); - WebGUI::SQL->write("insert into EventsCalendar values ($newWidgetId, '$data{calendarLayout}', '$data{paginateAfter}')"); - $sth = WebGUI::SQL->read("select * from EventsCalendar_event where widgetId=$_[0] 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, $newWidgetId, ". - quote($row[2]).", ".quote($row[3]).", '".$row[4]. - "', '".$row[5]."', $row[6])"); - } - $sth->finish; -} - -#------------------------------------------------------------------- -sub purge { - WebGUI::SQL->write("delete from EventsCalendar_event where widgetId=$_[0]",$_[1]); - purgeWidget($_[0],$_[1],$namespace); -} - -#------------------------------------------------------------------- -sub widgetName { - return WebGUI::International::get(2,$namespace); -} - -#------------------------------------------------------------------- -sub www_add { - my ($output, %hash); - tie %hash, "Tie::IxHash"; - if (WebGUI::Privilege::canEditPage()) { - $output = helpLink(1,$namespace); - $output .= '

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

'; - $output .= formHeader(); - $output .= WebGUI::Form::hidden("widget",$namespace); - $output .= WebGUI::Form::hidden("func","addSave"); - $output .= ''; - $output .= tableFormRow(WebGUI::International::get(99), - WebGUI::Form::text("title",20,128,'Events Calendar')); - $output .= tableFormRow(WebGUI::International::get(174),WebGUI::Form::checkbox("displayTitle",1,1)); - $output .= tableFormRow(WebGUI::International::get(175),WebGUI::Form::checkbox("processMacros",1)); - %hash = WebGUI::Widget::getPositions(); - $output .= tableFormRow(WebGUI::International::get(363), - WebGUI::Form::selectList("templatePosition",\%hash)); - $output .= tableFormRow(WebGUI::International::get(85),WebGUI::Form::textArea("description",'',50,5,1)); - %hash = (list => WebGUI::International::get(17,$namespace), - calendar => WebGUI::International::get(18,$namespace)); - $output .= tableFormRow(WebGUI::International::get(16,$namespace), - WebGUI::Form::selectList("calendarLayout",\%hash)); - $output .= tableFormRow(WebGUI::International::get(19,$namespace), - WebGUI::Form::text("paginateAfter",20,30,50)); - $output .= tableFormRow(WebGUI::International::get(1,$namespace),WebGUI::Form::checkbox("proceed",1,1)); - $output .= formSave(); - $output .= '
'; - return $output; - } else { - return WebGUI::Privilege::insufficient(); - } - return $output; -} - -#------------------------------------------------------------------- -sub www_addSave { - my ($widgetId); - if (WebGUI::Privilege::canEditPage()) { - $widgetId = create($session{page}{pageId},$session{form}{widget}, - $session{form}{title},$session{form}{displayTitle},$session{form}{description}, - $session{form}{processMacros},$session{form}{templatePosition}); - WebGUI::SQL->write("insert into EventsCalendar values ($widgetId, '$session{form}{calendarLayout}', '$session{form}{paginateAfter}')"); - if ($session{form}{proceed} == 1) { - $session{form}{wid} = $widgetId; - return www_addEvent(); - } else { - return ""; - } - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_addEvent { - my ($output, $today, %recursEvery); - tie %recursEvery, 'Tie::IxHash'; - %recursEvery = ('never'=>WebGUI::International::get(4,$namespace), - 'day'=>WebGUI::International::get(5,$namespace), - 'week'=>WebGUI::International::get(6,$namespace) - ); - if (WebGUI::Privilege::canEditPage()) { - ($today) = epochToSet(time()); - $output = '

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

'; - $output .= formHeader(); - $output .= WebGUI::Form::hidden("wid",$session{form}{wid}); - $output .= WebGUI::Form::hidden("func","addEventSave"); - $output .= ''; - $output .= tableFormRow(WebGUI::International::get(99),WebGUI::Form::text("name",20,128)); - $output .= tableFormRow(WebGUI::International::get(85), - WebGUI::Form::textArea("description",'',50,10,1)); - $output .= tableFormRow(WebGUI::International::get(14,$namespace), - WebGUI::Form::text("startDate",20,30,$today,1,'onBlur="this.form.endDate.value=this.form.startDate.value;this.form.until.value=this.form.startDate.value;"')); - $output .= tableFormRow(WebGUI::International::get(15,$namespace), - WebGUI::Form::text("endDate",20,30,$today,1)); - $output .= tableFormRow(WebGUI::International::get(8,$namespace),WebGUI::Form::selectList("recursEvery",\%recursEvery).' '.WebGUI::International::get(9,$namespace).' '.WebGUI::Form::text("until",20,30,$today,1)); - $output .= formSave(); - $output .= '
'; - return $output; - } else { - return WebGUI::Privilege::insufficient(); - } - return $output; -} - -#------------------------------------------------------------------- -sub www_addEventSave { - my ($i, $recurringEventId, @startDate, @endDate, @eventId, $until); - if (WebGUI::Privilege::canEditPage()) { - $startDate[0] = setToEpoch($session{form}{startDate}); - $endDate[0] = setToEpoch($session{form}{endDate}); - $until = setToEpoch($session{form}{until}); - $eventId[0] = getNextId("eventId"); - if ($session{form}{recursEvery} eq "never") { - $recurringEventId = 0; - } elsif ($session{form}{recursEvery} eq "day") { - $recurringEventId = getNextId("recurringEventId"); - while ($startDate[$i] < $until) { - $i++; - $eventId[$i] = getNextId("eventId"); - $startDate[$i] = $startDate[0] + (86400 * $i); - $endDate[$i] = $endDate[0] + (86400 * $i); - } - } elsif ($session{form}{recursEvery} eq "week") { - $recurringEventId = getNextId("recurringEventId"); - while ($startDate[$i] < $until) { - $i++; - $eventId[$i] = getNextId("eventId"); - $startDate[$i] = $startDate[0] + (604800 * $i); - $endDate[$i] = $endDate[0] + (604800 * $i); - } - } - $i = 0; - while ($eventId[$i] > 0) { - WebGUI::SQL->write("insert into EventsCalendar_event values ($eventId[$i], $session{form}{wid}, ".quote($session{form}{name}).", ".quote($session{form}{description}).", '".$startDate[$i]."', '".$endDate[$i]."', $recurringEventId)"); - $i++; - } - return www_edit(); - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_copy { - if (WebGUI::Privilege::canEditPage()) { - duplicate($session{form}{wid}); - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_deleteEvent { - my ($output); - if (WebGUI::Privilege::canEditPage()) { - $output = '

'.WebGUI::International::get(42).'

'; - $output .= WebGUI::International::get(10,$namespace); - if ($session{form}{rid} > 0) { - $output .= ' '.WebGUI::International::get(11,$namespace); - } - $output .= '?

'. - WebGUI::International::get(44).'   '. - WebGUI::International::get(45).'
'; - return $output; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_deleteEventConfirm { - my ($output); - if (WebGUI::Privilege::canEditPage()) { - if ($session{form}{rid} > 0) { - WebGUI::SQL->write("delete from EventsCalendar_event where recurringEventId=$session{form}{rid}"); - } else { - WebGUI::SQL->write("delete from EventsCalendar_event where eventId=$session{form}{eid}"); - } - return www_edit(); - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_edit { - my ($output, %data, @event, $sth, %hash, @array); - tie %hash, 'Tie::IxHash'; - tie %data, 'Tie::CPHash'; - if (WebGUI::Privilege::canEditPage()) { - %data = getProperties($namespace,$session{form}{wid});; - $output = helpLink(1,$namespace); - $output .= '

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

'; - $output .= formHeader(); - $output .= WebGUI::Form::hidden("wid",$session{form}{wid}); - $output .= WebGUI::Form::hidden("func","editSave"); - $output .= ''; - $output .= tableFormRow(WebGUI::International::get(99),WebGUI::Form::text("title",20,128,$data{title})); - $output .= tableFormRow(WebGUI::International::get(174), - WebGUI::Form::checkbox("displayTitle",1,$data{displayTitle})); - $output .= tableFormRow(WebGUI::International::get(175), - WebGUI::Form::checkbox("processMacros",1,$data{processMacros})); - $output .= tableFormRow(WebGUI::International::get(85), - WebGUI::Form::textArea("description",$data{description},50,5,1)); - %hash = WebGUI::Widget::getPositions(); - $array[0] = $data{templatePosition}; - $output .= tableFormRow(WebGUI::International::get(363), - WebGUI::Form::selectList("templatePosition",\%hash,\@array)); - %hash = (list => WebGUI::International::get(17,$namespace), - calendar => WebGUI::International::get(18,$namespace)); - $array[0] = $data{calendarLayout}; - $output .= tableFormRow(WebGUI::International::get(16,$namespace), - WebGUI::Form::selectList("calendarLayout",\%hash,\@array)); - $output .= tableFormRow(WebGUI::International::get(19,$namespace), - WebGUI::Form::text("paginateAfter",20,30,$data{paginateAfter})); - $output .= formSave(); - $output .= '
'; - $output .= '

Add New Event

'; - $output .= ''; - $sth = WebGUI::SQL->read("select eventId, name, recurringEventId, startDate from EventsCalendar_event where widgetId='$session{form}{wid}' order by startDate"); - while (@event = $sth->array) { - $output .= ''; - } - $sth->finish; - $output .= '
'. - epochToHuman($event[3],'%m/%d/%y').''.$event[1].'
'; - return $output; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_editSave { - if (WebGUI::Privilege::canEditPage()) { - update(); - WebGUI::SQL->write("update EventsCalendar set calendarLayout='$session{form}{calendarLayout}', paginateAfter='$session{form}{paginateAfter}' where widgetId=$session{form}{wid}"); - return ""; - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_editEvent { - my ($output, %event); - tie %event, 'Tie::CPHash'; - if (WebGUI::Privilege::canEditPage()) { - %event = WebGUI::SQL->quickHash("select * from EventsCalendar_event where eventId='$session{form}{eid}'"); - $output = '

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

'; - $output .= formHeader(); - $output .= WebGUI::Form::hidden("wid",$session{form}{wid}); - $output .= WebGUI::Form::hidden("eid",$session{form}{eid}); - $output .= WebGUI::Form::hidden("func","editEventSave"); - $output .= ''; - $output .= tableFormRow(WebGUI::International::get(99), - WebGUI::Form::text("name",20,128,$event{name})); - $output .= tableFormRow(WebGUI::International::get(85), - WebGUI::Form::textArea("description",$event{description},50,10,1)); - $output .= tableFormRow(WebGUI::International::get(14,$namespace), - WebGUI::Form::text("startDate",20,30,epochToSet($event{startDate}),1)); - $output .= tableFormRow(WebGUI::International::get(15,$namespace), - WebGUI::Form::text("endDate",20,30,epochToSet($event{endDate}),1)); - $output .= formSave(); - $output .= '
'; - return $output; - } else { - return WebGUI::Privilege::insufficient(); - } - return $output; -} - -#------------------------------------------------------------------- -sub www_editEventSave { - my ($eventId); - if (WebGUI::Privilege::canEditPage()) { - WebGUI::SQL->write("update EventsCalendar_event set name=".quote($session{form}{name}).", description=".quote($session{form}{description}).", startDate='".setToEpoch($session{form}{startDate})."', endDate='".setToEpoch($session{form}{endDate})."' where eventId=$session{form}{eid}"); - return www_edit(); - } else { - return WebGUI::Privilege::insufficient(); - } -} - -#------------------------------------------------------------------- -sub www_view { - my (%data, %event, $p, $output, $sth, $flag, %previous, $junk, - @row, $i, $maxDate, $minDate, $nextDate, $first, $last); - tie %data, 'Tie::CPHash'; - tie %event, 'Tie::CPHash'; - tie %previous, 'Tie::CPHash'; - %data = getProperties($namespace,$_[0]); - if (defined %data) { - if ($data{displayTitle}) { - $output = "

".$data{title}."

"; - } - if ($data{description} ne "") { - $output .= $data{description}.'

'; - } - ($minDate) = WebGUI::SQL->quickArray("select min(startDate) from EventsCalendar_event where widgetId=$_[0]"); - ($maxDate) = WebGUI::SQL->quickArray("select max(endDate) from EventsCalendar_event where widgetId=$_[0]"); - ($junk, $maxDate) = WebGUI::DateTime::monthStartEnd($maxDate); - unless ($minDate && $maxDate) { - $minDate = time(); - $maxDate = time()+86400; - } - if ($data{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 name, description, startDate, endDate from EventsCalendar_event where widgetId='$_[0]' 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; - $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,$data{paginateAfter}); - $output .= $p->getPage($session{form}{pn}).$p->getBarSimple($session{form}{pn}); - } - if ($data{processMacros}) { - $output = WebGUI::Macro::process($output); - } - } - return $output; -} - - -1; - diff --git a/lib/WebGUI/Wobject/EventsCalendar.pm b/lib/WebGUI/Wobject/EventsCalendar.pm new file mode 100644 index 000000000..da05e451f --- /dev/null +++ b/lib/WebGUI/Wobject/EventsCalendar.pm @@ -0,0 +1,384 @@ +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, ".$_[0]->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(42).'

'; + $output .= WebGUI::International::get(10,$namespace); + if ($session{form}{rid} > 0) { + $output .= ' '.WebGUI::International::get(11,$namespace); + } + $output .= '?

'. + WebGUI::International::get(44).'   '. + WebGUI::International::get(45).'
'; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_deleteEventConfirm { + if (WebGUI::Privilege::canEditPage()) { + if ($session{form}{rid} > 0) { + WebGUI::SQL->write("delete from EventsCalendar_event where recurringEventId=$session{form}{rid}"); + } else { + WebGUI::SQL->write("delete from EventsCalendar_event where eventId=$session{form}{eid}"); + } + return ""; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_edit { + my ($output, %hash, $f, $paginateAfter, $proceed); + tie %hash, 'Tie::IxHash'; + if (WebGUI::Privilege::canEditPage()) { + if ($_[0]->get("wobjectId") eq "new") { + $proceed = 1; + } + $paginateAfter = $_[0]->get("paginateAfter") || 50; + $output = helpIcon(1,$namespace); + $output .= '

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

'; + $f = WebGUI::HTMLForm->new; + %hash = (list => WebGUI::International::get(17,$namespace), + calendar => WebGUI::International::get(18,$namespace)); + $f->select("calendarLayout",\%hash,WebGUI::International::get(16,$namespace),[$_[0]->get("calendarLayout")]); + $f->integer("paginateAfter",WebGUI::International::get(19,$namespace),$paginateAfter); + $f->yesNo("proceed",WebGUI::International::get(21,$namespace),$proceed); + $output .= $_[0]->SUPER::www_edit($f->printRowsOnly); + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_editSave { + if (WebGUI::Privilege::canEditPage()) { + $_[0]->SUPER::www_editSave(); + $_[0]->set({ + calendarLayout=>$session{form}{calendarLayout}, + paginateAfter=>$session{form}{paginateAfter} + }); + if ($session{form}{proceed}) { + $session{form}{eid} = "new"; + return $_[0]->www_editEvent; + } else { + return ""; + } + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_editEvent { + my (%recursEvery, $special, $output, $f, %event); + tie %event, 'Tie::CPHash'; + tie %recursEvery, 'Tie::IxHash'; + if (WebGUI::Privilege::canEditPage()) { + if ($session{form}{eid} eq "new") { + %recursEvery = ('never'=>WebGUI::International::get(4,$namespace), + 'day'=>WebGUI::International::get(5,$namespace), + 'week'=>WebGUI::International::get(6,$namespace) + ); + $event{endDate} = $event{endDate}; + $f = WebGUI::HTMLForm->new(1); + $f->raw(''.WebGUI::International::get(8,$namespace).''); + $f->select("recursEvery",\%recursEvery); + $f->raw(' '.WebGUI::International::get(9,$namespace).' '); + $f->date("until"); + $f->raw(""); + $special = $f->printRowsOnly; + } else { + %event = WebGUI::SQL->quickHash("select * from EventsCalendar_event where eventId='$session{form}{eid}'"); + $f = WebGUI::HTMLForm->new; + $f->hidden("until"); + $special = $f->printRowsOnly; + } + $output = '

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

'; + $f = WebGUI::HTMLForm->new; + $f->hidden("wid",$_[0]->get("wobjectId")); + $f->hidden("eid",$session{form}{eid}); + $f->hidden("func","editEventSave"); + $f->text("name",WebGUI::International::get(99),$event{name}); + $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->raw($special); + $f->yesNo("proceed",WebGUI::International::get(21,$namespace)); + $f->submit; + $output .= $f->print; + return $output; + } else { + return WebGUI::Privilege::insufficient(); + } + return $output; +} + +#------------------------------------------------------------------- +sub www_editEventSave { + my (@startDate, @endDate, $until, @eventId, $i, $recurringEventId); + if (WebGUI::Privilege::canEditPage()) { + if ($session{form}{eid} eq "new") { + $session{form}{eid} = getNextId("eventId"); + $startDate[0] = setToEpoch($session{form}{startDate}); + $endDate[0] = setToEpoch($session{form}{endDate}); + $until = setToEpoch($session{form}{until}); + $eventId[0] = getNextId("eventId"); + if ($session{form}{recursEvery} eq "never") { + $recurringEventId = 0; + } elsif ($session{form}{recursEvery} eq "day") { + $recurringEventId = getNextId("recurringEventId"); + while ($startDate[$i] < $until) { + $i++; + $eventId[$i] = getNextId("eventId"); + $startDate[$i] = $startDate[0] + (86400 * $i); + $endDate[$i] = $endDate[0] + (86400 * $i); + } + } elsif ($session{form}{recursEvery} eq "week") { + $recurringEventId = getNextId("recurringEventId"); + while ($startDate[$i] < $until) { + $i++; + $eventId[$i] = getNextId("eventId"); + $startDate[$i] = $startDate[0] + (604800 * $i); + $endDate[$i] = $endDate[0] + (604800 * $i); + } + } + $i = 0; + while ($eventId[$i] > 0) { + WebGUI::SQL->write("insert into EventsCalendar_event values ($eventId[$i], + ".$_[0]->get("wobjectId").", ".quote($session{form}{name}).", ".quote($session{form}{description}).", + $startDate[$i], $endDate[$i], $recurringEventId)"); + $i++; + } + } else { + WebGUI::SQL->write("update EventsCalendar_event set name=".quote($session{form}{name}).", + description=".quote($session{form}{description}).", startDate='".setToEpoch($session{form}{startDate})."', + endDate='".setToEpoch($session{form}{endDate})."' where eventId=$session{form}{eid}"); + } + if ($session{form}{proceed}) { + $session{form}{eid} = "new"; + return $_[0]->www_editEvent; + } else { + return ""; + } + } else { + return WebGUI::Privilege::insufficient(); + } +} + +#------------------------------------------------------------------- +sub www_view { + my (%event, $p, $output, $sth, $flag, %previous, $junk, @row, $i, $maxDate, $minDate, $nextDate, $first, $last); + tie %event, 'Tie::CPHash'; + tie %previous, 'Tie::CPHash'; + $output = $_[0]->displayTitle; + $output .= $_[0]->description; + if ($session{var}{adminOn}) { + $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; +