From d35d57e1b8cf0af610995fb83b4cc91f96f4176c Mon Sep 17 00:00:00 2001 From: Roy Johnson Date: Thu, 26 Jan 2006 09:42:38 +0000 Subject: [PATCH] Beginnings of the new Event Management System --- docs/upgrades/upgrade_6.8.5-6.9.0.pl | 109 +++++++ etc/WebGUI.conf.original | 1 + .../Asset/Wobject/EventManagementSystem.pm | 294 ++++++++++++++++++ .../English/Asset_EventManagementSystem.pm | 64 ++++ 4 files changed, 468 insertions(+) create mode 100644 lib/WebGUI/Asset/Wobject/EventManagementSystem.pm create mode 100644 lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm diff --git a/docs/upgrades/upgrade_6.8.5-6.9.0.pl b/docs/upgrades/upgrade_6.8.5-6.9.0.pl index d1fc9d829..763a1d832 100644 --- a/docs/upgrades/upgrade_6.8.5-6.9.0.pl +++ b/docs/upgrades/upgrade_6.8.5-6.9.0.pl @@ -23,9 +23,118 @@ my $session = start(); # this line required templateParsers(); removeFiles(); addSearchEngine(); +addEMSTemplates(); +addEMSTables(); finish($session); # this line required +#------------------------------------------------- +sub addEMSTemplates { + print "\tAdding Event Management System Templates.\n" unless ($quiet); +my $template = < + + +

+
+ +EOT1 + my $in = WebGUI::Asset->getImportNode($session); + $in->addChild({ + className=>'WebGUI::Asset::Template', + template=>$template, + namespace=>'EventManagementSystem', + }, "EventManagerTmpl000001" + ); +} + +#------------------------------------------------- +sub addEMSTables { + + print "\t Creating Event Management System tables.\n" unless ($quiet); + +my $sql1 = <db->write($sql1); + $session->db->write($sql2); + $session->db->write($sql3); + $session->db->write($sql4); + $session->db->write($sql5); + $session->db->write($sql6); + +} #------------------------------------------------- sub addSearchEngine { diff --git a/etc/WebGUI.conf.original b/etc/WebGUI.conf.original index f5a5e19b1..7214aacbc 100644 --- a/etc/WebGUI.conf.original +++ b/etc/WebGUI.conf.original @@ -137,6 +137,7 @@ assets = WebGUI::Asset::Snippet, \ WebGUI::Asset::Wobject::Collaboration, \ WebGUI::Asset::Wobject::DataForm, \ WebGUI::Asset::Wobject::EventsCalendar, \ + WebGUI::Asset::Wobject::EventManagementSystem, \ WebGUI::Asset::Wobject::HttpProxy, \ WebGUI::Asset::Wobject::MessageBoard, \ WebGUI::Asset::Wobject::Navigation, \ diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm new file mode 100644 index 000000000..f7dc5a0f1 --- /dev/null +++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm @@ -0,0 +1,294 @@ +package WebGUI::Asset::Wobject::EventManagementSystem; + +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2006 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 base 'WebGUI::Asset::Wobject'; +use Tie::IxHash; +use WebGUI::HTMLForm; +use WebGUI::International; + + +#------------------------------------------------------------------- +sub error { + my $self = shift; + my $errors = shift; + my $callback = shift; + my @errorMessages; + + foreach my $error (@$errors) { + #Null Field Error + if ($error->{type} eq "nullField") { + push(@errorMessages, "The ".$error->{fieldName}." field cannot be blank."); + } + + #General Error Message + elsif ($error->{type} eq "general") { + push(@errorMessages, $error->{message}); + } + } + return $self->$callback(\@errorMessages); +} + +#------------------------------------------------------------------- +sub checkRequiredFields { + my $self = shift; + my $requiredFields = shift; + my @errors; + + foreach my $requiredField (keys %{$requiredFields}) { + if ($self->session->form->get($requiredField) eq "") { + push(@errors, { + type => "nullField", + fieldName => $requiredFields->{"$requiredField"} + } + ); + } + } + + return \@errors; +} + +#------------------------------------------------------------------ +sub validateEditEventForm { + my $self = shift; + my $errors; + + my %requiredFields; + tie %requiredFields, 'Tie::IxHash'; + + #-----Form name--------------User Friendly Name----# + %requiredFields = ( + "title" => "Title", + "description" => "Description", + "price" => "Price", + "maximumAttendees" => "Maximum Attendees", + ); + + $errors = $self->checkRequiredFields(\%requiredFields); + + #Check price greater than zero + if ($self->session->form->get("price") <= 0) { + push (@{$errors}, { + type => "general", + message => "Price must be greater than zero." + } + ); + } + + #Other checks go here + + return $errors; +} + +#------------------------------------------------------------------- +sub definition { + my $class = shift; + my $session = shift; + my $definition = shift; + my %properties; + tie %properties, 'Tie::IxHash'; + my $i18n = WebGUI::International->new($session,'Asset_EventManagementSystem'); + %properties = ( + displayTemplateId =>{ + fieldType=>"template", + defaultValue=>'EventManagerTmpl000001', + tab=>"display", + namespace=>"EventManagementSystem", + hoverHelp=>$i18n->get('display template description'), + label=>$i18n->get('display template') + }, + paginateAfter =>{ + fieldType=>"integer", + defaultValue=>10, + tab=>"display", + hoverHelp=>$i18n->get('paginate after description'), + label=>$i18n->get('paginate after') + }, + groupToAddEvents =>{ + fieldType=>"group", + defaultValue=>3, + tab=>"security", + hoverHelp=>$i18n->get('group to add events description'), + label=>$i18n->get('group to add events') + }, + groupToApproveEvents =>{ + fieldType=>"group", + defaultValue=>3, + tab=>"security", + hoverHelp=>$i18n->get('group to approve events description'), + label=>$i18n->get('group to approve events') + }, + ); + push(@{$definition}, { + assetName=>$i18n->get('assetName'), + icon=>'article.gif', + autoGenerateForms=>1, + tableName=>'EventManagementSystem', + className=>'WebGUI::Asset::Wobject::EventManagementSystem', + properties=>\%properties + }); + return $class->SUPER::definition($session,$definition); +} + +#------------------------------------------------------------------- +sub www_editEvent { + my $self = shift; + my $errors = shift; + my $errorMessages; + my $pid = $self->session->form->get("pid"); + my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem'); + + my $event = $self->session->db->quickHashRef(" + select p.productId, p.title, p.description, p.price, p.weight, p.sku, p.templateId, + e.startDate, e.endDate, e.maximumAttendees, e.approved + from + products as p, EventManagementSystem_products as e + where + p.productId = e.productId and p.productId=".$self->session->db->quote($pid) + ); + + my $f = WebGUI::HTMLForm->new($self->session,-action=>$self->getUrl); + + # Errors + foreach (@$errors) { + $errorMessages .= "ERROR: $_
"; + } + $f->readOnly( -value=>$errorMessages ); + + $f->hidden( -name=>"assetId", -value=>$self->get("assetId") ); + $f->hidden( -name=>"func",-value=>"editEventSave" ); + $f->hidden( -name=>"pid", -value=>$pid ); + + $f->text( + -name => "title", + -value => $self->session->form->get("title") || $event->{title}, + -hoverHelp => $i18n->get('add/edit event title description'), + -label => "Title" #$i18n->get('add/edit event title') + ); + + $f->HTMLArea( + -name => "description", + -value => $self->session->form->get("description") || $event->{description}, + -hoverHelp => $i18n->get('add/edit event description description'), + -label => "Description" #$i18n->get('add/edit event description') + ); + + $f->float( + -name => "price", + -value => $self->session->form->get("price") || $event->{price}, + -hoverHelp => $i18n->get('add/edit event price description'), + -label => "Price" #$i18n->get('add/edit event price') + ); + + $f->template( + -name => "templateId", + -namespace => "product", + -value => $self->session->form->get("templateId") || $event->{templateId}, + -hoverHelp => $i18n->get('add/edit event template description'), + -label => "Event Template" #$i18n->get('add/edit event template') + ); + + $f->hidden( + -name => "weight", + -value => "0" + ); + + $f->hidden( + -name => "sku", + -value => $event->{sku} || $self->session->id->generate() + ); + + $f->dateTime( + -name => "startDate", + -value => $self->session->form->get("startDate") || $event->{startDate}, + -hoverHelp => $i18n->get('add/edit event start date description'), + -label => "Start Date" #$i18n->get('add/edit event start date') + ); + + $f->dateTime( + -name => "endDate", + -value => $self->session->form->get("endDate") || $event->{endDate}, + -defaultValue => "32472169200", + -hoverHelp => $i18n->get('add/edit event end date description'), + -label => "End Date" #$i18n->get('add/edit event end date') + ); + + $f->integer( + -name => "maximumAttendees", + -value => $self->session->form->get("maximumAttendees") || $event->{maximumAttendees}, + -defaultValue => 100, + -hoverHelp => $i18n->get('add/edit event maximum attendees description'), + -label => "Maximum Attendees" #$i18n->get('add/edit event maximum attendees') + ); + + $f->submit; + + my $output = $f->print; + return $self->getAdminConsole->render($output, "Add/Edit Event"); +} + +#------------------------------------------------------------------- +sub www_editEventSave { + my $self = shift; + + my $errors = $self->validateEditEventForm; + if (scalar(@$errors) > 0) { return $self->error($errors, "www_editEvent"); } + + my $pid = $self->session->form->get("pid"); + my $eventIsNew = 1 if ($pid eq "" || $pid eq "new"); + my $event; + + #Save the extended product data + $pid = $self->setCollateral("EventManagementSystem_products", "productId", + { + productId => $pid, + startDate => $self->session->datetime->humanToEpoch($self->session->form->get("startDate")), + endDate => $self->session->datetime->humanToEpoch($self->session->form->get("endDate")), + maximumAttendees => $self->session->form->get("maximumAttendees"), + approved => "0" + },1,1 + ); + + #Save the standard product data + $event = { + productId => $pid, + title => $self->session->form->get("title"), + description => $self->session->form->get("description"), + price => $self->session->form->get("price"), + weight => $self->session->form->get("weight"), + sku => $self->session->form->get("sku"), + skuTemplate => $self->session->form->get("skuTemplate"), + templateId => $self->session->form->get("templateId") + }; + + if ($eventIsNew) { # Event is new we need to use the same productId so we can join them later + $self->session->db->setRow("products", "productId",$event,$pid); + } + else { # Updating the row + $self->session->db->setRow("products", "productId", $event); + } + + return $self->www_view; +} + +#------------------------------------------------------------------- +sub view { + my $self = shift; + my %var; + + my $templateId = $self->get("displayTemplateId"); + return $self->processTemplate(\%var, $templateId); +} + + +1; + diff --git a/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm b/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm new file mode 100644 index 000000000..a9b50141b --- /dev/null +++ b/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm @@ -0,0 +1,64 @@ +package WebGUI::i18n::English::Asset_EventManagementSystem; + +our $I18N = { ##hashref of hashes + 'display template' => { + message => q|Display Template|, + lastUpdated => 1131394070, #seconds from the epoch + context => q|Field label for template selector| + }, + + 'display template description' => { + message => q|Controls the layout, look, and appearence of an Event Management System.|, + lastUpdated => 1131394072, + context => q|Describes this template field selector| + }, + + 'paginate after' => { + message => q|Paginate After|, + lastUpdated => 1131394072, + context => q|Field label for Paginate After| + }, + + 'paginate after description' => { + message => q|Number of events to display on one page.|, + lastUpdated => 1131394072, + context => q|Describes the Paginate After field| + }, + + 'group to add events' => { + message => q|Group to Add Events|, + lastUpdated => 1131394072, + context => q|Field label| + }, + + 'group to add events description' => { + message => q|Members of the selected group will have the ability to add events to an Event Management System. + Events added will not be available for purchase until the event is approved by a member of the Group to Approve Events.|, + lastUpdated => 1131394072, + context => q|Describes the Group To Add Events field| + }, + + 'group to approve events' => { + message => q|Group to Approve Events|, + lastUpdated => 1131394072, + context => q|Field Label| + }, + + 'group to approve events description' => { + message => q|Members of the selected group will have the ability to approve a pending event so that it is available for purchase.|, + lastUpdated => 1131394072, + context => q|Describes the Group To Approve Events field| + }, + + + #If the help file documents an Asset, it must include an assetName key + #If the help file documents an Macro, it must include an macroName key + #For all other types, use topicName + 'assetName' => { + message => q|Event Management System|, + lastUpdated => 1131394072, + }, + +}; + +1;