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;