From 7dacfd56b6488fcd4abc4a6de6a316c4e483b82e Mon Sep 17 00:00:00 2001 From: Matthew Wilson Date: Mon, 14 Feb 2005 16:14:10 +0000 Subject: [PATCH] new Event asset. Had to take out the previous/next, but they can/will be re-added sometime. --- lib/WebGUI/Asset/Event.pm | 531 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 531 insertions(+) create mode 100644 lib/WebGUI/Asset/Event.pm diff --git a/lib/WebGUI/Asset/Event.pm b/lib/WebGUI/Asset/Event.pm new file mode 100644 index 000000000..07e155591 --- /dev/null +++ b/lib/WebGUI/Asset/Event.pm @@ -0,0 +1,531 @@ +package WebGUI::Asset::Event; + +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2005 Plain Black Corporation. +#------------------------------------------------------------------- +# 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 Tie::CPHash; +use WebGUI::DateTime; +use WebGUI::Grouping; +use WebGUI::HTML; +use WebGUI::HTMLForm; +use WebGUI::HTTP; +use WebGUI::Icon; +use WebGUI::Id; +use WebGUI::International; +use WebGUI::MessageLog; +use WebGUI::Operation; +use WebGUI::Paginator; +use WebGUI::Privilege; +use WebGUI::Session; +use WebGUI::SQL; +use WebGUI::Style; +use WebGUI::Asset::Template; +use WebGUI::URL; +use WebGUI::User; +use WebGUI::Utility; +use WebGUI::Asset; +use WebGUI::Asset::Wobject::EventsCalendar; + +our @ISA = qw(WebGUI::Asset); + + + +#------------------------------------------------------------------- +sub definition { + my $class = shift; + my $definition = shift; + push(@{$definition}, { + tableName=>'EventsCalendar_Event', + className=>'WebGUI::Asset::Event', + properties=>{ + description => { + fieldType=>"HTMLArea", + defaultValue=>undef + }, + eventStartDate => { + fieldType=>"dateTime", + defaultValue=>time() + }, + eventEndDate => { + fieldType=>"dateTime", + defaultValue=>time() + }, + EventsCalendar_recurringId => { + fieldType=>"hidden", + defaultValue=>undef + }, + eventLocation => { + fieldType=>"text", + defaultValue=>undef + }, +# allowRegistration => { +# fieldType=>"yesNo", +# defaultValue=>0 +# }, +# allowUnregistration => { +# fieldType=>"yesNo", +# defaultValue=>0 +# }, +# regConfirm => { +# fieldType=>"yesNo", +# defaultValue=>0 +# }, +# regNotify => { +# fieldType=>"yesNo", +# defaultValue=>0 +# }, +# regStartDate => { +# fieldType=>"dateTime", +# defaultValue=>time() +# }, +# regEndDate => { +# fieldType=>"dateTime", +# defaultValue=>time() +# }, +# allowReminders => { +# fieldType=>"yesNo", +# defaultValue=>0 +# }, +# reminderStartDate => { +# fieldType=>"dateTime", +# defaultValue=>time() +# }, +# reminderEndDate => { +# fieldType=>"dateTime", +# defaultValue=>time() +# }, +# reminderRecurs => { +# fieldType=>"interval", +# defaultValue=>604800 +# }, +# chargeForEvent => { +# fieldType=>"yesNo", +# defaultValue=>0 +# }, +# firstAttendeeFee => { +# fieldType=>"float", +# defaultValue=>0 +# }, +# secondAttendeeFee => { +# fieldType=>"float", +# defaultValue=>0 +# }, +# availableSeats => { +# fieldType=>"integer", +# defaultValue=>0 +# }, + templateId => { + fieldType=>"template", + defaultValue=>'PBtmpl0000000000000023' + }, +# regConfirmTemplateId => { +# fieldType=>"template", +# defaultValue=>'MWtmplregConfirm000001' +# }, +# regNotifyTemplateId => { +# fieldType=>"template", +# defaultValue=>'MWtmplregNotify0000001' +# }, +# reminderTemplateId => { +# fieldType=>"template", +# defaultValue=>'MWtmplreminder00000001' +# }, +# groupCanRegister => { +# fieldType=>"group", +# defaultValue=>'2' +# }, +# groupCanReminder => { +# fieldType=>"group", +# defaultValue=>'2' +# }, +# groupRegNotify => { +# fieldType=>"group", +# defaultValue=>'3' +# } + } + }); + return $class->SUPER::definition($definition); +} + + + +#------------------------------------------------------------------- +sub getEditForm { + my $self = shift; + + my $tabform = $self->SUPER::getEditForm(); + #return $tabform; + $tabform->getTab("properties")->HTMLArea( + -name=>"description", -label=>WebGUI::International::get(512,"EventsCalendar"), + -value=>$self->getValue("description") + ); + $tabform->getTab("properties")->dateTime( + -name=>"eventStartDate", -label=>WebGUI::International::get(513,"EventsCalendar"), + -extras=>'onBlur="this.form.eventEndDate.value=this.form.eventStartDate.value;this.form.until.value=this.form.eventStartDate.value;"', + -value=>$self->getValue("eventStartDate") + ); + $tabform->getTab("properties")->dateTime( + -name=>"eventEndDate", -label=>WebGUI::International::get(514,"EventsCalendar"), + -extras=>'onBlur="this.form.until.value=this.form.eventEndDate.value;"', + -value=>$self->getValue("eventEndDate") + ); + $tabform->getTab("properties")->text( + -name=>"eventLocation", -label=>WebGUI::International::get(515,"EventsCalendar"), + -value=>$self->getValue("eventLocation") + ); +# $tabform->getTab("properties")->yesNo( +# -name=>"allowRegistration", -label=>WebGUI::International::get(516,"EventsCalendar"), +# -value=>$self->getValue("allowRegistration") +# ); +# $tabform->getTab("properties")->yesNo( +# -name=>"allowUnregistration", -label=>WebGUI::International::get(517,"EventsCalendar"), +# -value=>$self->getValue("allowUnregistration") +# ); +# $tabform->getTab("properties")->yesNo( +# -name=>"regConfirm", -label=>WebGUI::International::get(518,"EventsCalendar"), +# -value=>$self->getValue("regConfirm") +# ); +# $tabform->getTab("properties")->yesNo( +# -name=>"regNotify", -label=>WebGUI::International::get(519,"EventsCalendar"), +# -value=>$self->getValue("regNotify") +# ); +# $tabform->getTab("properties")->dateTime( +# -name=>"regStartDate", -label=>WebGUI::International::get(520,"EventsCalendar"), +# -extras=>'onBlur="this.form.regEndDate.value=this.form.regStartDate.value;this.form.until.value=this.form.regStartDate.value;"', +# -value=>$self->getValue("regStartDate") +# ); +# $tabform->getTab("properties")->dateTime( +# -name=>"regEndDate", -label=>WebGUI::International::get(521,"EventsCalendar"), +# -extras=>'onBlur="this.form.until.value=this.form.regEndDate.value;"', +# -value=>$self->getValue("regEndDate") +# ); +# $tabform->getTab("properties")->yesNo( +# -name=>"allowReminders", -label=>WebGUI::International::get(522,"EventsCalendar"), +# -value=>$self->getValue("allowReminders") +# ); +# $tabform->getTab("properties")->dateTime( +# -name=>"reminderStartDate", -label=>WebGUI::International::get(523,"EventsCalendar"), +# -extras=>'onBlur="this.form.reminderEndDate.value=this.form.reminderStartDate.value;this.form.until.value=this.form.reminderStartDate.value;"', +# -value=>$self->getValue("reminderStartDate") +# ); +# $tabform->getTab("properties")->dateTime( +# -name=>"reminderEndDate", -label=>WebGUI::International::get(524,"EventsCalendar"), +# -extras=>'onBlur="this.form.until.value=this.form.reminderEndDate.value;"', +# -value=>$self->getValue("regEndDate") +# ); +# $tabform->getTab("properties")->interval( +# -name=>"reminderRecurs", +# -label=>WebGUI::International::get(524.5,"EventsCalendar"), +# -value=>$self->getValue("reminderRecurs") +# ); +# Not quite implemented yet... +# $tabform->getTab("properties")->yesNo( +# -name=>"chargeForEvent", -label=>WebGUI::International::get(525,"EventsCalendar"), +# -value=>$self->getValue("chargeForEvent") +# ); +# $tabform->getTab("properties")->float( +# -name=>"firstAttendeeFee", -label=>WebGUI::International::get(526,"EventsCalendar"), +# -value=>$self->getValue("firstAttendeeFee") +# ); +# $tabform->getTab("properties")->float( +# -name=>"secondAttendeeFee", -label=>WebGUI::International::get(527,"EventsCalendar"), +# -value=>$self->getValue("secondAttendeeFee") +# ); +# $tabform->getTab("properties")->integer( +# -name=>"availableSeats", -label=>WebGUI::International::get(528,"EventsCalendar"), +# -value=>$self->getValue("availableSeats") +# ); + if (($session{form}{func} eq "addStyledEvent") || ($session{form}{func} eq "addEvent")) { + my %recursEvery; + tie %recursEvery, 'Tie::IxHash'; + %recursEvery = ( + 'never'=>WebGUI::International::get(4,"EventsCalendar"), + 'day'=>WebGUI::International::get(700), + 'week'=>WebGUI::International::get(701), + 'month'=>WebGUI::International::get(702), + 'year'=>WebGUI::International::get(703) + ); + $tabform->getTab("properties")->raw( + ''.WebGUI::International::get(8,"EventsCalendar").'' + ); + $tabform->getTab("properties")->integer("interval","",1,"","","",3); + $tabform->getTab("properties")->selectList("recursEvery",\%recursEvery); + $tabform->getTab("properties")->raw(''.WebGUI::International::get(9,"EventsCalendar").''); + $tabform->getTab("properties")->date("until"); + $tabform->getTab("properties")->raw(""); + } +# $tabform->getTab("display")->template( +# -name=>"confirmationTemplateId", +# -value=>$self->getValue("confirmationTemplateId"), +# -namespace=>"EventsCalendar/Event", +# -label=>WebGUI::International::get(529,"EventsCalendar"), +# -afterEdit=>'func=edit' +# ); + $tabform->getTab("display")->template( + -name=>"templateId", + -value=>$self->getValue("templateId"), + -namespace=>"EventsCalendar/Event", + -label=>WebGUI::International::get(530,"EventsCalendar"), + -afterEdit=>'func=edit&wid='.$self->get("wobjectId") + ); +# $tabform->getTab("display")->template( +# -name=>"regNotifyTemplateId", +# -value=>$self->getValue("regNotifyTemplateId"), +# -namespace=>"EventsCalendar/Event", +# -label=>WebGUI::International::get(531,"EventsCalendar"), +# -afterEdit=>'func=edit&wid='.$self->get("wobjectId") +# ); +# $tabform->getTab("display")->template( +# -name=>"reminderTemplateId", +# -value=>$self->getValue("reminderTemplateId"), +# -namespace=>"EventsCalendar/Event", +# -label=>WebGUI::International::get(532,"EventsCalendar"), +# -afterEdit=>'func=edit&wid='.$self->get("wobjectId") +# ); +# $tabform->getTab("security")->group( +# -name=>"groupCanRegister", -label=>WebGUI::International::get(533,"EventsCalendar"), +# -value=>[$self->getValue("groupCanRegister")] +# ); +# $tabform->getTab("security")->group( +# -name=>"groupCanReminder", -label=>WebGUI::International::get(534,"EventsCalendar"), +# -value=>[$self->getValue("groupCanReminder")] +# ); +# $tabform->getTab("security")->group( +# -name=>"groupNotify", -label=>WebGUI::International::get(535,"EventsCalendar"), +# -value=>[$self->getValue("regNotifyGroupId")] +# ); + return $tabform; +} + + + +#------------------------------------------------------------------- +sub getIcon { + my $self = shift; + my $small = shift; + return $session{config}{extrasURL}.'/assets/small/calendar.gif' if ($small); + return $session{config}{extrasURL}.'/assets/calendar.gif'; +} + + +#------------------------------------------------------------------- +sub getName { + return WebGUI::International::get(511,"EventsCalendar"); +} + + +#------------------------------------------------------------------- +sub view { + my $self = shift; + return WebGUI::Privilege::noAccess() unless $self->canView; + $self->logView() if ($session{setting}{passiveProfilingEnabled}); + my ($output, $event, %var, $id); + $event = $self; + $var{title} = $event->getValue("title"); + $var{"start.label"} = WebGUI::International::get(14,"EventsCalendar"); + $var{"start.date"} = epochToHuman($self->getValue("eventStartDate"),"%z"); + $var{"start.time"} = epochToHuman($self->getValue("eventStartDate"),"%Z"); + $var{"end.label"} = WebGUI::International::get(15,"EventsCalendar"); + $var{"end.date"} = epochToHuman($self->getValue("eventEndDate"),"%z"); + $var{"end.time"} = epochToHuman($self->getValue("eventEndDate"),"%Z"); + $var{canEdit} = $self->canEdit; + $var{"edit.url"} = WebGUI::URL::page('func=edit'); + $var{"edit.label"} = WebGUI::International::get(575); + $var{"delete.url"} = WebGUI::URL::page('func=deleteEvent&rid='.$self->getValue("EventsCalendar_recurringId")); + $var{"delete.label"} = WebGUI::International::get(576); +# my $query = "select EventsCalendar_eventId from EventsCalendar_event where EventsCalendar_eventId<>".quote($event->getValue("EventsCalendar_eventId}); +# $query .= " and wobjectId=".quote($self->get("wobjectId")) unless ($self->get("isMaster")); +# $query .= " and startDate<=$event->getValue("startDate} order by startDate desc, endDate desc"; +# ($id) = WebGUI::SQL->quickArray($query,WebGUI::SQL->getSlave); +# $var{"previous.label"} = '«'.WebGUI::International::get(92,"EventsCalendar"); +# $var{"previous.url"} = WebGUI::URL::page("func=viewEvent&wid=".$self->get("wobjectId")."&eid=".$id) if ($id); +# $query = "select EventsCalendar_eventId from EventsCalendar_event where EventsCalendar_eventId<>".quote($event->getValue("EventsCalendar_eventId}); +# $query .= " and wobjectId=".quote($self->get("wobjectId")) unless ($self->get("isMaster")); +# $query .= " and startDate>=$event->getValue("eventStartDate") order by startDate, endDate"; +# ($id) = WebGUI::SQL->quickArray($query,WebGUI::SQL->getSlave); +# $var{"next.label"} = WebGUI::International::get(93,"EventsCalendar").'»'; +# $var{"next.url"} = WebGUI::URL::page("func=viewEvent&wid=".$self->get("wobjectId")."&eid=".$id) if ($id); + $var{description} = $event->getValue("description"); +# my $where = "eventscalendar.type=2"; +# my $kiddos = $self->getLineageWhere(["children"],{returnObjects=>1,joinClass=>"WebGUI::Asset::Wobject::EventsCalendar",whereClause=>$where}); +# my $tabform = WebGUI::TabForm->new(); +# #let's try to create a template variable that is a tabform of agendas. +# foreach my $agenda (@{$kiddos}) { +# $tabform->addTab($agenda->getId,$agenda->getValue("title")); +# #These will be in order of lineage. Use the Asset Manager to change the order. +# $tabform->getTab($agenda->getId)->raw($agenda->WebGUI::Asset::Wobject::EventsCalendar::view); +# } +# $var{agendas} = $tabform->print; + my $vars = \%var; + #get parent so we can get the parent's style. Hopefully the parent is an EventsCalendar. If not, oh well. + my $parent = $self->getParent; + return WebGUI::Style::process($self->processTemplate($vars,$self->getValue("templateId")),$parent->getValue("styleTemplateId")); +} + + +#------------------------------------------------------------------- +sub www_deleteEvent { + my $self = shift; + return WebGUI::Privilege::insufficient() unless ($self->canEdit); + my ($output); + $output = '

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

'; + $output .= WebGUI::International::get(75,"EventsCalendar").'

'; + $output .= ''.WebGUI::International::get(76,"EventsCalendar").'

'; + $output .= '' + .WebGUI::International::get(77,"EventsCalendar").'

' if ($session{form}{rid}); + $output .= ''.WebGUI::International::get(78,"EventsCalendar").''; + $output .= '

'; + return return WebGUI::Style::process($output,$self->getParent->getValue("styleTemplateId")); +} + + +#------------------------------------------------------------------- +sub www_deleteEventConfirm { + my $self = shift; + return WebGUI::Privilege::insufficient() unless ($self->canEdit); + if ($session{form}{rid} ne "") { + my $where = "EventsCalendar_Event.EventsCalendar_recurringId=".quote($session{form}{rid}); + my $series = $self->getParent->getLineageWhere(["descendants"],{returnObjects=>1, + joinClass=>"WebGUI::Asset::Event",whereClause=>$where}); + foreach my $trashedEvent (@{$series}) { + $trashedEvent->trash; + } + } else { + $self->trash; + } + return $self->getParent->getContainer->www_view;; +} + + +#------------------------------------------------------------------- +sub www_edit { + my $self = shift; + return WebGUI::Privilege::insufficient() unless $self->canEdit; + $self->getAdminConsole->setHelp("event add/edit"); + return $self->getAdminConsole->render($self->getEditForm->print,WebGUI::International::get('13', 'EventsCalendar')); +} + + +#------------------------------------------------------------------- + +=head2 www_editSave ( ) + +Saves the event or a new (series of) event(s). + +=cut + +sub www_editSave { + my $self = shift; + my $object; + # Somebody please help me debug this... it was adding recurring events just fine; then + # I changed something and it stopped working... :( I suspect it has something to do + # with processPropertiesFromFormPost. It's as if $session{form}{recursEvery} always equals never. + + if ($session{form}{assetId} eq "new") { + $self = $self->getParent() if ($self->getValue("className") eq "WebGUI::Asset::Event"); + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless ($self->canEdit); + my (@startDate, @endDate, @regStartDate, @regEndDate, @reminderStartDate, + @reminderEndDate, $until, @eventId, $i, $recurringEventId); + $startDate[0] = WebGUI::DateTime::setToEpoch($session{form}{eventStartDate}); + $startDate[0] = time() unless ($startDate[0] > 0); + $endDate[0] = WebGUI::DateTime::setToEpoch($session{form}{eventEndDate}); + $endDate[0] = $startDate[0] unless ($endDate[0] >= $startDate[0]); +# $regStartDate[0] = WebGUI::DateTime::setToEpoch($session{form}{regStartDate}); +# $regEndDate[0] = WebGUI::DateTime::setToEpoch($session{form}{regStartDate}); +# $regEndDate[0] = $regStartDate[0] unless ($regEndDate[0] >= $regStartDate[0]); +# $reminderStartDate[0] = WebGUI::DateTime::setToEpoch($session{form}{reminderStartDate}); +# $reminderEndDate[0] = WebGUI::DateTime::setToEpoch($session{form}{reminderStartDate}); +# $reminderEndDate[0] = $reminderStartDate[0] unless ($reminderEndDate[0] >= $reminderStartDate[0]); + $session{form}{title} = $session{form}{title} || WebGUI::International::get(557,"EventsCalendar"); + $until = WebGUI::DateTime::setToEpoch($session{form}{until}); + $until = $endDate[0] unless ($until >= $endDate[0]); + $eventId[0] = WebGUI::Id::generate(); + $session{form}{interval} = 1 if ($session{form}{interval} < 1); + if ($session{form}{recursEvery} eq "never") { + $recurringEventId = 0; + my $newEvent = $self->addChild({ + className=>"WebGUI::Asset::Event", + title=>$session{form}{title}, + description=>$session{form}{description}, + EventsCalendar_recurringId=>$recurringEventId + }); + $newEvent->processPropertiesFromFormPost; + $newEvent->updateHistory("edited"); + $newEvent->{_parent} = $self; + } else { + $recurringEventId = WebGUI::Id::generate(); + my $firstEvent = $self->addChild({ + className=>"WebGUI::Asset::Event", + title=>$session{form}{title}, + eventStartDate=>$startDate[0], + eventEndDate=>$endDate[0], + description=>$session{form}{description}, + EventsCalendar_recurringId=>$recurringEventId, + eventLocation=>$session{form}{description}, + templateId=>$self->getValue("eventTemplateId") + }); + $firstEvent->processPropertiesFromFormPost; + $firstEvent->updateHistory("edited"); + $firstEvent->{_parent} = $self; + while ($startDate[$i] < $until) { + $i++; + $eventId[$i] = WebGUI::Id::generate(); + if ($session{form}{recursEvery} eq "day") { + $startDate[$i] = addToDate($startDate[0],0,0,($i*$session{form}{interval})); + $endDate[$i] = addToDate($endDate[0],0,0,($i*$session{form}{interval})); + } elsif ($session{form}{recursEvery} eq "week") { + $startDate[$i] = addToDate($startDate[0],0,0,(7*$i*$session{form}{interval})); + $endDate[$i] = addToDate($endDate[0],0,0,(7*$i*$session{form}{interval})); + } elsif ($session{form}{recursEvery} eq "month") { + $startDate[$i] = addToDate($startDate[0],0,($i*$session{form}{interval}),0); + $endDate[$i] = addToDate($endDate[0],0,($i*$session{form}{interval}),0); + } elsif ($session{form}{recursEvery} eq "year") { + $startDate[$i] = addToDate($startDate[0],($i*$session{form}{interval}),0,0); + $endDate[$i] = addToDate($endDate[0],($i*$session{form}{interval}),0,0); + } + my $newEvent = $self->duplicate($firstEvent); + $newEvent->update({ + eventStartDate=>$startDate[$i], + eventEndDate=>$endDate[$i] + }); + print "\n$i\n"; + $newEvent->fixUrl; + $newEvent->updateHistory("edited"); + $newEvent->{_parent} = $self; + } + } + } else { + return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless ($self->canEdit); + $self->processPropertiesFromFormPost; + $self->updateHistory("edited"); + } + return $self->www_manageAssets if ($session{form}{proceed} eq "manageAssets" && $session{form}{assetId} eq "new"); + if ($session{form}{proceed} ne "") { + my $method = "www_".$session{form}{proceed}; + $session{asset} = $object; + return $object->$method(); + } + return (($self->getParent)->getContainer)->www_view; +} + + + +#------------------------------------------------------------------- +#sub www_editStyled { +# my $self = shift; +# #get parent so we can get the parent's style. Hopefully the parent is a wobject. If not, oh well. +# my $parent = WebGUI::Asset->newByDynamicClass($self->get("parentId")); +# return WebGUI::Privilege::noAccess() unless (($parent->getValue("className") eq "WebGUI::Asset::Wobject::EventsCalendar") && #($parent->canEdit)); +# return WebGUI::Style::process($self->getEditForm->print,$parent->getValue("styleTemplateId")); +#} + +1; +