Beginnings of the new Event Management System
This commit is contained in:
parent
db06c4ba13
commit
d35d57e1b8
4 changed files with 468 additions and 0 deletions
|
|
@ -23,9 +23,118 @@ my $session = start(); # this line required
|
||||||
templateParsers();
|
templateParsers();
|
||||||
removeFiles();
|
removeFiles();
|
||||||
addSearchEngine();
|
addSearchEngine();
|
||||||
|
addEMSTemplates();
|
||||||
|
addEMSTables();
|
||||||
|
|
||||||
finish($session); # this line required
|
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 {
|
sub addSearchEngine {
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,7 @@ assets = WebGUI::Asset::Snippet, \
|
||||||
WebGUI::Asset::Wobject::Collaboration, \
|
WebGUI::Asset::Wobject::Collaboration, \
|
||||||
WebGUI::Asset::Wobject::DataForm, \
|
WebGUI::Asset::Wobject::DataForm, \
|
||||||
WebGUI::Asset::Wobject::EventsCalendar, \
|
WebGUI::Asset::Wobject::EventsCalendar, \
|
||||||
|
WebGUI::Asset::Wobject::EventManagementSystem, \
|
||||||
WebGUI::Asset::Wobject::HttpProxy, \
|
WebGUI::Asset::Wobject::HttpProxy, \
|
||||||
WebGUI::Asset::Wobject::MessageBoard, \
|
WebGUI::Asset::Wobject::MessageBoard, \
|
||||||
WebGUI::Asset::Wobject::Navigation, \
|
WebGUI::Asset::Wobject::Navigation, \
|
||||||
|
|
|
||||||
294
lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
Normal file
294
lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
Normal 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;
|
||||||
|
|
||||||
64
lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm
Normal file
64
lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm
Normal 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;
|
||||||
Loading…
Add table
Add a link
Reference in a new issue