Beginnings of the new Event Management System

This commit is contained in:
Roy Johnson 2006-01-26 09:42:38 +00:00
parent db06c4ba13
commit d35d57e1b8
4 changed files with 468 additions and 0 deletions

View file

@ -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;
<a name="id<tmpl_var assetId>" id="id<tmpl_var assetId>"></a>
<tmpl_if session.var.adminOn>
<p><tmpl_var controls></p>
</tmpl_if>
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 = <<SQL1;
create table EventManagementSystem (
assetId varchar(22) not null,
revisionDate bigint(20) not null,
displayTemplateId varchar(22),
paginateAfter int(11) default 10,
groupToAddEvents varchar(22),
groupToApproveEvents varchar(22),
primary key(assetId,revisionDate)
)
SQL1
my $sql2 = <<SQL2;
create table EventManagementSystem_products (
productId varchar(22) not null,
assetId varchar(22),
startDate bigint(20),
endDate bigint(20),
maximumAttendees int(11),
approved tinyint,
sequenceNumber int(11),
primary key(productId)
)
SQL2
my $sql3 = <<SQL3;
create table EventManagementSystem_registrations (
registrationId varchar(22) not null,
productId varchar(22),
purchaseId varchar(22),
firstName varchar(100),
lastName varchar(100),
address varchar(100),
city varchar(100),
state varchar(50),
zipCode varchar(15),
country varchar(255),
phone varchar(50),
email varchar(255),
primary key(registrationId)
)
SQL3
my $sql4 = <<SQL4;
create table EventManagementSystem_purchases (
purchaseId varchar(22) not null,
userId varchar(22),
primary key(purchaseId)
)
SQL4
my $sql5 = <<SQL5;
create table EventManagementSystem_prerequisites (
prerequisiteId varchar(22) not null,
productId varchar(22),
operator varchar(100),
primary key(prerequisiteId)
)
SQL5
my $sql6 = <<SQL6;
create table EventManagementSystem_prerequisiteEvents (
prerequisiteEventId varchar(22) not null,
prerequisiteId varchar(22),
requiredProductId varchar(22),
primary key(prerequisiteEventId)
)
SQL6
$session->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 {

View file

@ -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, \

View file

@ -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 .= "<span style='color: red; font-weight: bold;'>ERROR: $_ </span><br />";
}
$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;

View file

@ -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;