first major round of EMS changes. much more to come late tonight.
This commit is contained in:
parent
f3404c319a
commit
2c60283ba3
27 changed files with 5196 additions and 33 deletions
|
|
@ -24,6 +24,227 @@ use WebGUI::Commerce::Item;
|
|||
use WebGUI::Utility;
|
||||
use Data::Dumper;
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub _getFieldHash {
|
||||
my $self = shift;
|
||||
return $self->{_fieldHash} if ($self->{_fieldHash});
|
||||
|
||||
my %hash;
|
||||
tie %hash, "Tie::IxHash";
|
||||
%hash = (
|
||||
"eventName"=>{
|
||||
name=>"Event Name",
|
||||
type=>"text",
|
||||
compare=>"text",
|
||||
method=>"text",
|
||||
columnName=>"title",
|
||||
tableName=>"p",
|
||||
initial=>1
|
||||
},
|
||||
"eventDescription"=>{
|
||||
name=>"Description",
|
||||
type=>"text",
|
||||
compare=>"text",
|
||||
method=>"text",
|
||||
columnName=>"description",
|
||||
tableName=>"p",
|
||||
initial=>1
|
||||
},
|
||||
"maxAttendees"=>{
|
||||
name=>"Max Attendees",
|
||||
type=>"text",
|
||||
compare=>"numeric",
|
||||
method=>"integer",
|
||||
columnName=>"maximumAttendees",
|
||||
tableName=>"e",
|
||||
initial=>1
|
||||
},
|
||||
"seatsAvailable"=>{
|
||||
name=>"Seats Available",
|
||||
type=>"text",
|
||||
method=>"integer",
|
||||
compare=>"numeric",
|
||||
calculated=>1,
|
||||
initial=>1
|
||||
},
|
||||
"price"=>{
|
||||
name=>"Price",
|
||||
type=>"text",
|
||||
compare=>"numeric",
|
||||
method=>"float",
|
||||
columnName=>"price",
|
||||
tableName=>"p",
|
||||
initial=>1
|
||||
},
|
||||
"startDate"=>{
|
||||
name=>"Starts",
|
||||
type=>"dateTime",
|
||||
compare=>"numeric",
|
||||
method=>"dateTime",
|
||||
columnName=>"startDate",
|
||||
tableName=>"e",
|
||||
initial=>1
|
||||
},
|
||||
"endDate"=>{
|
||||
name=>"Ends",
|
||||
type=>"dateTime",
|
||||
compare=>"numeric",
|
||||
method=>"dateTime",
|
||||
columnName=>"endDate",
|
||||
tableName=>"e",
|
||||
initial=>1
|
||||
},
|
||||
"requirement"=>{
|
||||
name=>"Requirement",
|
||||
type=>"select",
|
||||
list=>{''=>'Select One'},
|
||||
# list=>$self->_getAllEvents(),
|
||||
compare=>"boolean",
|
||||
method=>"selectList",
|
||||
calculated=>1,
|
||||
initial=>1
|
||||
}
|
||||
);
|
||||
# Add custom metadata fields to the list, matching the types up
|
||||
# automatically.
|
||||
my $fieldList = $self->getEventMetaDataArrayRef;
|
||||
foreach my $field (@{$fieldList}) {
|
||||
my $dataType = $field->{dataType};
|
||||
my $compare = $self->_matchTypes($dataType);
|
||||
my $type;
|
||||
if ($dataType =~ /^date/i) {
|
||||
$type = lcfirst($dataType);
|
||||
} elsif ($compare eq 'text' || $compare eq 'numeric') {
|
||||
$type = 'text';
|
||||
} else {
|
||||
$type = 'select';
|
||||
}
|
||||
$hash{$field->{fieldId}} = {
|
||||
name=>$field->{name},
|
||||
type=>$type,
|
||||
method=>$dataType,
|
||||
initial=>$field->{autoSearch},
|
||||
compare=>$compare,
|
||||
calculated=>1,
|
||||
metadata=>1
|
||||
};
|
||||
if ($hash{$field->{fieldId}}->{type} eq 'select') {
|
||||
$hash{$field->{fieldId}}->{list} = $self->_matchPairs($field->{possibleValues});
|
||||
}
|
||||
}
|
||||
$self->{_fieldHash} = \%hash;
|
||||
return $self->{_fieldHash};
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
sub _matchPairs {
|
||||
my $self = shift;
|
||||
my $options = shift;
|
||||
my %hash;
|
||||
tie %hash, 'Tie::IxHash';
|
||||
$hash{''} = 'Select One';
|
||||
foreach (split("\n",$options)) {
|
||||
my $val = $_;
|
||||
$val =~ s/\s//g;
|
||||
$val =~ s/\n//g;
|
||||
$hash{$val} = $val;
|
||||
}
|
||||
return \%hash;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
sub _matchTypes {
|
||||
my $self = shift;
|
||||
my $dataType = lc(shift);
|
||||
return 'text' if (
|
||||
WebGUI::Utility::isIn($dataType, qw(
|
||||
codearea
|
||||
email
|
||||
htmlarea
|
||||
phone
|
||||
text
|
||||
textarea
|
||||
url
|
||||
zipcode
|
||||
))
|
||||
);
|
||||
return 'numeric' if (
|
||||
WebGUI::Utility::isIn($dataType, qw(
|
||||
date
|
||||
datetime
|
||||
float
|
||||
integer
|
||||
interval
|
||||
))
|
||||
);
|
||||
return 'boolean' if (
|
||||
WebGUI::Utility::isIn($dataType, qw(
|
||||
checkbox
|
||||
combo
|
||||
selectlist
|
||||
checklist
|
||||
contenttype
|
||||
databaselink
|
||||
fieldtype
|
||||
group
|
||||
ldaplink
|
||||
radio
|
||||
radiolist
|
||||
selectbox
|
||||
selectlist
|
||||
template
|
||||
timezone
|
||||
yesno
|
||||
))
|
||||
);
|
||||
return 'text';
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
sub buildMenu {
|
||||
my $self = shift;
|
||||
my $var = shift;
|
||||
my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
|
||||
my $fields = $self->_getFieldHash();
|
||||
my $counter = 0;
|
||||
my $js = "var filterList = {\n";
|
||||
foreach my $fieldId (keys %{$fields}) {
|
||||
my $field = $fields->{$fieldId};
|
||||
$js .= ",\n" if($counter++ > 0);
|
||||
my $fieldName = $field->{name};
|
||||
my $fieldType = $field->{type};
|
||||
my $compareType = $field->{compare};
|
||||
my $autoSearch = $field->{initial};
|
||||
$js .= qq|"$fieldId": {|;
|
||||
$js .= qq| "name":"$fieldName"|;
|
||||
$js .= qq| ,"type":"$fieldType"|;
|
||||
$js .= qq| ,"compare":"$compareType"|;
|
||||
$js .= qq| ,"autoSearch":"$autoSearch"|;
|
||||
if($fieldType eq "select") {
|
||||
my $list = $field->{list};
|
||||
my $fieldList = "";
|
||||
foreach my $key (keys %{$list}) {
|
||||
$fieldList .= "," if($fieldList ne "");
|
||||
my $value = $list->{$key};
|
||||
$value =~ s/"/\"/g;
|
||||
$fieldList .= qq|"$key":"$value"|
|
||||
}
|
||||
$js .= qq| ,"list":{ $fieldList }|;
|
||||
}
|
||||
$js .= q| }|;
|
||||
}
|
||||
$js .= "\n};\n";
|
||||
|
||||
$var->{'search.filters.options'} = $js;
|
||||
$var->{'search.data.url'} = $self->getUrl;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 checkConflicts ( )
|
||||
|
|
@ -159,6 +380,13 @@ sub definition {
|
|||
label=>$i18n->get('global prerequisite'),
|
||||
hoverHelp=>$i18n->get('global prerequisite description')
|
||||
},
|
||||
globalMetadata =>{
|
||||
fieldType=>"yesNo",
|
||||
defaultValue=>1,
|
||||
tab=>"properties",
|
||||
label=>$i18n->get('global metadata'),
|
||||
hoverHelp=>$i18n->get('global metadata description')
|
||||
},
|
||||
);
|
||||
push(@{$definition}, {
|
||||
assetName=>$i18n->get('assetName'),
|
||||
|
|
@ -345,6 +573,64 @@ sub getPrerequisiteEventList {
|
|||
return $self->session->db->buildHashRef($sql);
|
||||
}
|
||||
|
||||
|
||||
#------------------------------------------------------------------
|
||||
|
||||
=head2 getEventMetaDataArrayRef ( )
|
||||
|
||||
Returns an arrayref of hash references of the metadata fields.
|
||||
|
||||
Checks $self->get("globalMetadata") by default; otherwise uses the first parameter.
|
||||
|
||||
=head3 useGlobalMetadata
|
||||
|
||||
Whether or not to use the asset's global setting, and the override.
|
||||
|
||||
=cut
|
||||
|
||||
sub getEventMetaDataArrayRef {
|
||||
my $self = shift;
|
||||
my $useGlobalMetadata = shift;
|
||||
my $productId = shift;
|
||||
$useGlobalMetadata = ($useGlobalMetadata)?$useGlobalMetadata:$self->get("globalMetadata");
|
||||
my $globalWhere = ($useGlobalMetadata == 0 || $useGlobalMetadata == 'false')?" where assetId='".$self->getId."'":'';
|
||||
return $self->getEventMetaDataFields($productId) if $productId;
|
||||
return $self->session->db->buildArrayRefOfHashRefs("select * from EventManagementSystem_metaField $globalWhere order by sequenceNumber, assetId");
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getEventMetaDataFields ( productId )
|
||||
|
||||
Returns a hash reference containing all metadata field properties.
|
||||
|
||||
=head3 productId
|
||||
|
||||
Which product to get metadata for.
|
||||
|
||||
=cut
|
||||
|
||||
sub getEventMetaDataFields {
|
||||
my $self = shift;
|
||||
my $productId = shift;
|
||||
my $useGlobalMetadata = shift;
|
||||
my $globalWhere = ($useGlobalMetadata == 0 || $useGlobalMetadata == 'false')?" where f.assetId='".$self->getId."'":'';
|
||||
my $sql = "select f.*, d.fieldData
|
||||
from EventManagementSystem_metaField f
|
||||
left join EventManagementSystem_metaData d on f.fieldId=d.fieldId and d.productId=".$self->session->db->quote($productId)." $globalWhere order by f.sequenceNumber";
|
||||
tie my %hash, 'Tie::IxHash';
|
||||
my $sth = $self->session->db->read($sql);
|
||||
while( my $h = $sth->hashRef) {
|
||||
foreach(keys %$h) {
|
||||
$hash{$h->{fieldId}}{$_} = $h->{$_};
|
||||
}
|
||||
}
|
||||
$sth->finish;
|
||||
return \%hash;
|
||||
}
|
||||
|
||||
|
||||
#------------------------------------------------------------------
|
||||
|
||||
=head2 getRequiredEventName ( prerequisiteId )
|
||||
|
|
@ -647,6 +933,12 @@ sub validateEditEventForm {
|
|||
"maximumAttendees" => $i18n->get("add/edit event maximum attendees"),
|
||||
);
|
||||
|
||||
my $mdFields = $self->getEventMetaDataFields;
|
||||
foreach my $mdField (keys %{$mdFields}) {
|
||||
next unless $mdFields->{$mdField}->{required};
|
||||
$requiredFields{'metadata_'.$mdField} = $mdFields->{$mdField}->{name};
|
||||
}
|
||||
|
||||
$errors = $self->checkRequiredFields(\%requiredFields);
|
||||
|
||||
#Check price greater than zero
|
||||
|
|
@ -767,13 +1059,13 @@ sub www_deleteEvent {
|
|||
return $self->session->privilege->insufficient unless ($self->session->user->isInGroup($self->get("groupToAddEvents")));
|
||||
|
||||
#Remove this event as a prerequisite to any other event
|
||||
$self->session->db->write("delete from EventManagementSystem_prerequisiteEvents where requiredProductId=?".
|
||||
$self->session->db->write("delete from EventManagementSystem_prerequisiteEvents where requiredProductId=?",
|
||||
[$eventId]);
|
||||
$self->deleteOrphans;
|
||||
|
||||
#Remove the event
|
||||
$self->deleteCollateral('EventManagementSystem_products', 'productId', $eventId);
|
||||
$self->session->db->write("delete from products where productId=?",[$eventId]);
|
||||
$self->deleteCollateral('products','productId',$eventId);
|
||||
$self->reorderCollateral('EventManagementSystem_products', 'productId');
|
||||
|
||||
return $self->www_manageEvents;
|
||||
|
|
@ -803,6 +1095,30 @@ sub www_deletePrerequisite {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_edit ( )
|
||||
|
||||
Edit wobject method.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_edit {
|
||||
my $self = shift;
|
||||
return $self->session->privilege->insufficient() unless $self->canEdit;
|
||||
my ($tag) = ($self->get("className") =~ /::(\w+)$/);
|
||||
my $tag2 = $tag;
|
||||
$tag =~ s/([a-z])([A-Z])/$1 $2/g; #Separate studly caps
|
||||
$tag =~ s/([A-Z]+(?![a-z]))/$1 /g; #Separate acronyms
|
||||
$self->getAdminConsole->setHelp(lc($tag)." add/edit", "Asset_".$tag2);
|
||||
my $i18n = WebGUI::International->new($self->session,'Asset_Wobject');
|
||||
my $addEdit = ($self->session->form->process("func") eq 'add') ? $i18n->get('add') : $i18n->get('edit');
|
||||
my $i18n2 = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
|
||||
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=manageEventMetadata'), $i18n2->get('manage event metadata'));
|
||||
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=manageEvents'), $i18n2->get('manage events'));
|
||||
return $self->getAdminConsole->render($self->getEditForm->print,$addEdit.' '.$self->getName);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_editEvent ( errors )
|
||||
|
||||
Method to generate form to Add or Edit an events properties including prerequisite assignments and event approval.
|
||||
|
|
@ -918,6 +1234,38 @@ sub www_editEvent {
|
|||
-name => "approved",
|
||||
-value => 0 || $event->{approved}
|
||||
);
|
||||
|
||||
# add dynamically added metadata fields.
|
||||
my $meta = {};
|
||||
my $fieldList = $self->getEventMetaDataArrayRef;
|
||||
if ($pid ne 'new') {
|
||||
$meta = $self->getEventMetaDataFields($pid);
|
||||
} else {
|
||||
foreach my $field1 (@{$fieldList}) {
|
||||
$meta->{$field1->{fieldId}} = $field1;
|
||||
$meta->{$field1->{fieldId}}->{fieldData} = $field1->{defaultValues};
|
||||
}
|
||||
}
|
||||
my $i18n3 = WebGUI::International->new($self->session, "Asset");
|
||||
foreach my $field (@{$fieldList}) {
|
||||
my $dataType = $meta->{$field->{fieldId}}{dataType};
|
||||
my $options;
|
||||
# Add a "Select..." option on top of a select list to prevent from
|
||||
# saving the value on top of the list when no choice is made.
|
||||
if($dataType eq "selectList") {
|
||||
$options = {"", $i18n3->get("Select")};
|
||||
}
|
||||
$f->dynamicField(
|
||||
name=>"metadata_".$meta->{$field->{fieldId}}{fieldId},
|
||||
label=>$meta->{$field->{fieldId}}{name},
|
||||
hoverHelp=>$meta->{$field->{fieldId}}{label},
|
||||
value=>($self->session->form->process("metadata_".$meta->{$field->{fieldId}}{fieldId},$dataType) || $meta->{$field->{fieldId}}{fieldData}),
|
||||
extras=>qq/title="$meta->{$field->{fieldId}}{label}"/,
|
||||
possibleValues=>$meta->{$field->{fieldId}}{possibleValues},
|
||||
options=>$options,
|
||||
fieldType=>$dataType
|
||||
);
|
||||
}
|
||||
|
||||
my $prerequisiteList = $self->getPrerequisiteEventList($pid);
|
||||
if ( scalar(keys %{$prerequisiteList}) > 0) {
|
||||
|
|
@ -977,6 +1325,7 @@ sub www_editEvent {
|
|||
my $output = $f->print;
|
||||
$self->getAdminConsole->setHelp('add/edit event','Asset_EventManagementSystem');
|
||||
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=manageEvents'),$i18n->get("manage events"));
|
||||
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=manageEventMetadata'), $i18n->get('manage event metadata'));
|
||||
my $addEdit = ($pid eq "new" or !$pid) ? $i18n->get('add', 'Asset_Wobject') : $i18n->get('edit', 'Asset_Wobject');
|
||||
return $self->getAdminConsole->render($output, $addEdit.' '.$i18n->get('event'));
|
||||
}
|
||||
|
|
@ -1005,13 +1354,20 @@ sub www_editEventSave {
|
|||
$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")),
|
||||
startDate => $self->session->form->process("startDate",'dateTime'),
|
||||
endDate => $self->session->form->process("endDate",'dateTime'),
|
||||
maximumAttendees => $self->session->form->get("maximumAttendees"),
|
||||
approved => $self->session->form->get("approved")
|
||||
},1,1
|
||||
);
|
||||
|
||||
#Save the event metadata
|
||||
my $mdFields = $self->getEventMetaDataFields;
|
||||
foreach my $mdField (keys %{$mdFields}) {
|
||||
my $value = $self->session->form->process("metadata_".$mdField,$mdFields->{$mdField}->{dataType});
|
||||
$self->session->db->write("insert into EventManagementSystem_metaData values (".$self->session->db->quoteAndJoin([$mdField,$pid,$value]).") on duplicate key update fieldData=".$self->session->db->quote($value));
|
||||
}
|
||||
|
||||
#Save the standard product data
|
||||
$event = {
|
||||
productId => $pid,
|
||||
|
|
@ -1108,11 +1464,250 @@ sub www_manageEvents {
|
|||
|
||||
$self->getAdminConsole->setHelp('event management system manage events','Asset_EventManagementSystem');
|
||||
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=editEvent;pid=new'), $i18n->get('add event'));
|
||||
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=manageEventMetadata'), $i18n->get('manage event metadata'));
|
||||
return $self->getAdminConsole->render($output, $i18n->get("manage events"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_manageEventMetadata ( )
|
||||
|
||||
Method to display the event metadata management console.
|
||||
|
||||
=cut
|
||||
|
||||
sub www_manageEventMetadata {
|
||||
my $self = shift;
|
||||
|
||||
return $self->session->privilege->insufficient unless ($self->session->user->isInGroup($self->get("groupToAddEvents")));
|
||||
|
||||
my $output;
|
||||
my $metadataFields = $self->getEventMetaDataArrayRef('false');
|
||||
my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
|
||||
my $count = 0;
|
||||
my $number = scalar(@{$metadataFields});
|
||||
foreach my $row1 (@{$metadataFields}) {
|
||||
my %row = %{$row1};
|
||||
$count++;
|
||||
$output .= "<div>".
|
||||
$self->session->icon->delete('func=deleteEventMetaDataField;fieldId='.$row{fieldId},$self->getUrl,$i18n->get('confirm delete event metadata')).
|
||||
$self->session->icon->edit('func=editEventMetaDataField;fieldId='.$row{fieldId}, $self->getUrl).
|
||||
$self->session->icon->moveUp('func=moveEventMetaDataFieldUp;fieldId='.$row{fieldId}, $self->getUrl,($count == 1)?1:0);
|
||||
$output .= $self->session->icon->moveDown('func=moveEventMetaDataFieldDown;fieldId='.$row{fieldId}, $self->getUrl,($count == $number)?1:0).
|
||||
" ".$row{name}." ( ".$row{label}." )</div>";
|
||||
}
|
||||
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=editEventMetaDataField;fieldId=new'), $i18n->get("add new event metadata field"));
|
||||
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=manageEvents'), $i18n->get('manage events'));
|
||||
return $self->getAdminConsole->render($output, $i18n->get("manage event metadata"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub www_editEventMetaDataField {
|
||||
my $self = shift;
|
||||
my $fieldId = shift || $self->session->form->process("fieldId");
|
||||
my $error = shift;
|
||||
return $self->session->privilege->insufficient unless ($self->session->user->isInGroup($self->get("groupToAddEvents")));
|
||||
my $i18n2 = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
|
||||
my $i18n = WebGUI::International->new($self->session,"WebGUIProfile");
|
||||
my $f = WebGUI::HTMLForm->new($self->session, (
|
||||
action => $self->getUrl."?func=editEventMetaDataFieldSave;fieldId=".$fieldId
|
||||
));
|
||||
my $data = {};
|
||||
if ($error) {
|
||||
# load submitted data.
|
||||
$data = {
|
||||
name => $self->session->form->process("name"),
|
||||
label => $self->session->form->process("label"),
|
||||
dataType => $self->session->form->process("dataType",'fieldType'),
|
||||
visible => $self->session->form->process("visible",'yesNo'),
|
||||
required => $self->session->form->process("required",'yesNo'),
|
||||
possibleValues => $self->session->form->process("possibleValues",'textarea'),
|
||||
defaultValues => $self->session->form->process("defaultValues",'textarea'),
|
||||
};
|
||||
$f->readOnly(
|
||||
-name => 'error',
|
||||
-label => 'Error:',
|
||||
-value => '<span style="color:red;font-weight:bold">'.$error.'</span>',
|
||||
);
|
||||
} elsif ($fieldId ne 'new') {
|
||||
$data = $self->session->db->quickHashRef("select * from EventManagementSystem_metaField where fieldId=?",[$fieldId]);
|
||||
} else {
|
||||
# new field defaults
|
||||
$data = {
|
||||
name => $i18n2->get('type name here'),
|
||||
label => $i18n2->get('type label here'),
|
||||
dataType => 'text',
|
||||
visible => 0,
|
||||
required => 0,
|
||||
autoSearch => 0
|
||||
};
|
||||
}
|
||||
$f->text(
|
||||
-name => "name",
|
||||
-label => $i18n->get(475),
|
||||
-hoverHelp => $i18n->get('475 description'),,
|
||||
-extras=>(($data->{name} eq $i18n2->get('type name here'))?' style="color:#bbbbbb" ':'').' onblur="if(!this.value){this.value=\''.$i18n2->get('type name here').'\';this.style.color=\'#bbbbbb\';}" onfocus="if(this.value == \''.$i18n2->get('type name here').'\'){this.value=\'\';this.style.color=\'\';}"',
|
||||
-value => $data->{name},
|
||||
);
|
||||
$f->text(
|
||||
-name => "label",
|
||||
-label => $i18n->get(472),
|
||||
-hoverHelp => $i18n->get('472 description'),
|
||||
-value => $data->{label},
|
||||
-extras=>(($data->{label} eq $i18n2->get('type label here'))?' style="color:#bbbbbb" ':'').' onblur="if(!this.value){this.value=\''.$i18n2->get('type label here').'\';this.style.color=\'#bbbbbb\';}" onfocus="if(this.value == \''.$i18n2->get('type label here').'\'){this.value=\'\';this.style.color=\'\';}"',
|
||||
);
|
||||
$f->yesNo(
|
||||
-name=>"visible",
|
||||
-label=>$i18n->get('473a'),
|
||||
-hoverHelp=>$i18n->get('473a description'),
|
||||
-value=>$data->{visible}
|
||||
);
|
||||
$f->yesNo(
|
||||
-name=>"required",
|
||||
-label=>$i18n->get(474),
|
||||
-hoverHelp=>$i18n->get('474 description'),
|
||||
-value=>$data->{required}
|
||||
);
|
||||
my $fieldType = WebGUI::Form::FieldType->new($self->session,
|
||||
-name=>"dataType",
|
||||
-label=>$i18n->get(486),
|
||||
-hoverHelp=>$i18n->get('486 description'),
|
||||
-value=>ucfirst $data->{dataType},
|
||||
-defaultValue=>"Text",
|
||||
);
|
||||
my @profileForms = ();
|
||||
foreach my $form ( sort @{ $fieldType->get("types") }) {
|
||||
next if $form eq 'DynamicField';
|
||||
my $cmd = join '::', 'WebGUI::Form', $form;
|
||||
eval "use $cmd";
|
||||
my $w = eval {"$cmd"->new($self->session)};
|
||||
push @profileForms, $form if $w->get("profileEnabled");
|
||||
}
|
||||
|
||||
$fieldType->set("types", \@profileForms);
|
||||
$f->raw($fieldType->toHtmlWithWrapper());
|
||||
$f->textarea(
|
||||
-name => "possibleValues",
|
||||
-label => $i18n->get(487),
|
||||
-hoverHelp => $i18n->get('487 description'),
|
||||
-value => $data->{possibleValues},
|
||||
);
|
||||
$f->textarea(
|
||||
-name => "defaultValues",
|
||||
-label => $i18n->get(488),
|
||||
-hoverHelp => $i18n->get('488 description'),
|
||||
-value => $data->{defaultValues},
|
||||
);
|
||||
$f->yesNo(
|
||||
-name => "autoSearch",
|
||||
-label => 'Initial Search Field',
|
||||
-hoverHelp => 'Make this appear as a Filter Field on the Advanced Search screen by default',
|
||||
-value => $data->{autoSearch},
|
||||
);
|
||||
my %hash;
|
||||
foreach my $category (@{WebGUI::ProfileCategory->getCategories($self->session)}) {
|
||||
$hash{$category->getId} = $category->getLabel;
|
||||
}
|
||||
$f->submit;
|
||||
$self->getAdminConsole->setHelp('event management system manage events','Asset_EventManagementSystem');
|
||||
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=manageEventMetadata'), $i18n2->get('manage event metadata'));
|
||||
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=editEventMetaDataField;fieldId=new'), $i18n2->get("add new event metadata field"));
|
||||
$self->getAdminConsole->addSubmenuItem($self->getUrl('func=manageEvents'), $i18n->get('manage events'));
|
||||
return $self->getAdminConsole->render($f->print, $i18n2->get("add new event metadata field"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub www_editEventMetaDataFieldSave {
|
||||
my $self = shift;
|
||||
return $self->session->privilege->insufficient unless ($self->session->user->isInGroup($self->get("groupToAddEvents")));
|
||||
my $error = '';
|
||||
my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
|
||||
foreach ('name','label') {
|
||||
if ($self->session->form->get($_) eq "" ||
|
||||
$self->session->form->get($_) eq $i18n->get('type name here') ||
|
||||
$self->session->form->get($_) eq $i18n->get('type label here')) {
|
||||
$error .= sprintf($i18n->get('null field error'),$_)."<br />";
|
||||
}
|
||||
}
|
||||
return $self->www_editEventMetaDataField(undef,$error) if $error;
|
||||
my $newId = $self->setCollateral("EventManagementSystem_metaField", "fieldId",{
|
||||
fieldId=>$self->session->form->process('fieldId'),
|
||||
name => $self->session->form->process("name"),
|
||||
label => $self->session->form->process("label"),
|
||||
dataType => $self->session->form->process("dataType",'fieldType'),
|
||||
visible => $self->session->form->process("visible",'yesNo'),
|
||||
required => $self->session->form->process("required",'yesNo'),
|
||||
possibleValues => $self->session->form->process("possibleValues",'textarea'),
|
||||
defaultValues => $self->session->form->process("defaultValues",'textarea'),
|
||||
autoSearch => $self->session->form->process("autoSearch",'yesNo')
|
||||
},1,1);
|
||||
return $self->www_manageEventMetadata();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_moveEventMetaDataFieldDown ( )
|
||||
|
||||
Method to move an event down one position in display order
|
||||
|
||||
=cut
|
||||
|
||||
sub www_moveEventMetaDataFieldDown {
|
||||
my $self = shift;
|
||||
my $eventId = $self->session->form->get("fieldId");
|
||||
|
||||
return $self->session->privilege->insufficient unless ($self->session->user->isInGroup($self->get("groupToAddEvents")));
|
||||
|
||||
$self->moveCollateralDown('EventManagementSystem_metaField', 'fieldId', $eventId);
|
||||
|
||||
return $self->www_manageEventMetadata;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_moveEventMetaDataFieldUp ( )
|
||||
|
||||
Method to move an event metdata field up one position in display order
|
||||
|
||||
=cut
|
||||
|
||||
sub www_moveEventMetaDataFieldUp {
|
||||
my $self = shift;
|
||||
my $eventId = $self->session->form->get("fieldId");
|
||||
|
||||
return $self->session->privilege->insufficient unless ($self->session->user->isInGroup($self->get("groupToAddEvents")));
|
||||
|
||||
$self->moveCollateralUp('EventManagementSystem_metaField', 'fieldId', $eventId);
|
||||
|
||||
return $self->www_manageEventMetadata;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_deleteEventMetaDataField ( )
|
||||
|
||||
Method to move an event metdata field up one position in display order
|
||||
|
||||
=cut
|
||||
|
||||
sub www_deleteEventMetaDataField {
|
||||
my $self = shift;
|
||||
my $eventId = $self->session->form->get("fieldId");
|
||||
|
||||
return $self->session->privilege->insufficient unless ($self->session->user->isInGroup($self->get("groupToAddEvents")));
|
||||
|
||||
$self->deleteCollateral('EventManagementSystem_metaField', 'fieldId', $eventId);
|
||||
$self->reorderCollateral('EventManagementSystem_metaField', 'fieldId');
|
||||
$self->deleteCollateral('EventManagementSystem_metaData', 'fieldId', $eventId); # deleteCollateral doesn't care about assetId.
|
||||
|
||||
return $self->www_manageEventMetadata;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_moveEventDown ( )
|
||||
|
||||
Method to move an event down one position in display order
|
||||
|
|
@ -1167,7 +1762,7 @@ sub www_saveRegistration {
|
|||
city => $self->session->form->get("city", "text"),
|
||||
state => $self->session->form->get("state", "text"),
|
||||
zipCode => $self->session->form->get("zipCode", "text"),
|
||||
country => $self->session->form->get("country", "selectList"),
|
||||
country => join("\n",$self->session->form->get("country", "selectList")),
|
||||
phone => $self->session->form->get("phoneNumber", "phone"),
|
||||
email => $self->session->form->get("email", "email")
|
||||
},0,0
|
||||
|
|
@ -1183,7 +1778,6 @@ sub www_saveRegistration {
|
|||
}
|
||||
$counter++;
|
||||
}
|
||||
#use Data::Dumper; print "<pre>".Dumper($self->session)."</pre>";
|
||||
return $self->www_view;
|
||||
}
|
||||
|
||||
|
|
@ -1201,6 +1795,12 @@ sub prepareView {
|
|||
my $templateId = $self->get("displayTemplateId");
|
||||
my $template = WebGUI::Asset::Template->new($self->session, $templateId);
|
||||
$template->prepare;
|
||||
my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
|
||||
my $language = $i18n->getLanguage(undef,"languageAbbreviation");
|
||||
$self->session->style->setScript($self->session->config->get('extrasURL').'/calendar/calendar.js',{ type=>'text/javascript' });
|
||||
$self->session->style->setScript($self->session->config->get('extrasURL').'/calendar/lang/calendar-'.$language.'.js',{ type=>'text/javascript' });
|
||||
$self->session->style->setScript($self->session->config->get('extrasURL').'/calendar/calendar-setup.js',{ type=>'text/javascript' });
|
||||
$self->session->style->setLink($self->session->config->get('extrasURL').'/calendar/calendar-win2k-1.css', { rel=>"stylesheet", type=>"text/css", media=>"all" });
|
||||
$self->{_viewTemplate} = $template;
|
||||
}
|
||||
|
||||
|
|
@ -1208,24 +1808,99 @@ sub prepareView {
|
|||
sub view {
|
||||
my $self = shift;
|
||||
my %var;
|
||||
|
||||
my $keywords = $self->session->form->get("searchKeywords");
|
||||
my @keys;
|
||||
push(@keys,$keywords) if $keywords;
|
||||
unless ($keywords =~ /^".*"$/) {
|
||||
foreach (split(" ",$keywords)) {
|
||||
push(@keys,$_) unless $keywords eq $_;
|
||||
}
|
||||
} else {
|
||||
$keywords =~ s/"//g;
|
||||
@keys = ($keywords);
|
||||
}
|
||||
my $searchPhrases;
|
||||
if (scalar(@keys)) {
|
||||
$searchPhrases = " and ( ";
|
||||
my $count = 0;
|
||||
foreach (@keys) {
|
||||
$count++;
|
||||
$searchPhrases .= ' and ' unless $count == 1;
|
||||
my $val = $self->session->db->quote('%'.$_.'%');
|
||||
$searchPhrases .= "(p.title like $val or p.description like $val)";
|
||||
}
|
||||
$searchPhrases .= " )";
|
||||
}
|
||||
if ($self->session->form->get("advSearch")) {
|
||||
$searchPhrases = '';
|
||||
my $fields = $self->_getFieldHash();
|
||||
my $counter = 0;
|
||||
for (my $cfilter = 1; $cfilter < 30; $cfilter++) {
|
||||
my $value = $self->session->form->get("cfilter_t".$cfilter);
|
||||
my $fieldId = $self->session->form->get("cfilter_s".$cfilter);
|
||||
next if ($fieldId eq 'seatsAvailable' || $fieldId eq 'registration');
|
||||
if ($value && defined $fields->{$fieldId}) {
|
||||
my $compare = $self->session->form->get("cfilter_c".$cfilter);
|
||||
#Format Value with Operator
|
||||
$value =~ s/%//g;
|
||||
my $field = $fields->{$fieldId};
|
||||
if ($field->{type} =~ /^date/i) {
|
||||
$value = $self->session->datetime->setToEpoch($value);
|
||||
} else {
|
||||
$value = lc($value);
|
||||
}
|
||||
if($compare eq "eq") {
|
||||
$value = "=".$self->session->db->quote($value);
|
||||
} elsif($compare eq "ne"){
|
||||
$value = "<>".$self->session->db->quote($value);
|
||||
} elsif($compare eq "notlike") {
|
||||
$value = "not like ".$self->session->db->quote("%".$value."%");
|
||||
} elsif($compare eq "starts") {
|
||||
$value = "like ".$self->session->db->quote($value."%");
|
||||
} elsif($compare eq "ends") {
|
||||
$value = "like ".$self->session->db->quote("%".$value);
|
||||
} elsif($compare eq "gt") {
|
||||
$value = "> ".$value;
|
||||
} elsif($compare eq "lt") {
|
||||
$value = "< ".$value;
|
||||
} elsif($compare eq "lte") {
|
||||
$value = "<= ".$value;
|
||||
} elsif($compare eq "gte") {
|
||||
$value = ">= ".$value;
|
||||
} elsif($compare eq "like") {
|
||||
$value = " like ".$self->session->db->quote("%".$value."%");
|
||||
}
|
||||
$searchPhrases .= " and" if($counter);
|
||||
$counter++;
|
||||
unless ($compare eq 'numeric') {
|
||||
$searchPhrases .= " lower(".$field->{tableName}.'.'.$field->{columnName}.") ".$value;
|
||||
} else {
|
||||
$searchPhrases .= " ".$field->{tableName}.'.'.$field->{columnName}." ".$value;
|
||||
}
|
||||
}
|
||||
}
|
||||
$searchPhrases &&= " and ( ".$searchPhrases." )";
|
||||
}
|
||||
my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
|
||||
# Get the products available for sale for this page
|
||||
my $sql = "select p.productId, p.title, p.description, p.price, p.templateId, e.approved, e.maximumAttendees
|
||||
my $sql = "select p.productId, p.title, p.description, p.price, p.templateId, e.approved, e.maximumAttendees, e.startDate, e.endDate
|
||||
from products as p, EventManagementSystem_products as e
|
||||
where
|
||||
p.productId = e.productId and approved=1
|
||||
and e.assetId =".$self->session->db->quote($self->get("assetId"))."
|
||||
and p.productId not in (select distinct(productId) from EventManagementSystem_prerequisites)";
|
||||
and e.assetId =".$self->session->db->quote($self->get("assetId")).$searchPhrases;
|
||||
# ."
|
||||
# and p.productId not in (select distinct(productId) from EventManagementSystem_prerequisites)";
|
||||
|
||||
$var{'basicSearch.formHeader'} = WebGUI::Form::formHeader($self->session,{action=>$self->getUrl.'?advSearch=0'});
|
||||
$var{'advSearch.formHeader'} = WebGUI::Form::formHeader($self->session,{action=>$self->getUrl.'?advSearch=1'});
|
||||
$var{isAdvSearch} = $self->session->form->get('advSearch');
|
||||
$var{'search.formFooter'} = WebGUI::Form::formFooter($self->session);
|
||||
$var{'search.formSubmit'} = WebGUI::Form::submit($self->session, {value=>'Filter'});
|
||||
my $p = WebGUI::Paginator->new($self->session,$self->getUrl,$self->get("paginateAfter"));
|
||||
$p->setDataByQuery($sql);
|
||||
my $eventData = $p->getPageData;
|
||||
my @events;
|
||||
|
||||
#We are getting each events information, passing it to the *events* template and processing it
|
||||
#The html returned from each events template is returned to the Event Manager Display Template for arranging
|
||||
#how the events are displayed in relation to one another.
|
||||
foreach my $event (@$eventData) {
|
||||
my %eventFields;
|
||||
|
||||
|
|
@ -1237,16 +1912,18 @@ sub view {
|
|||
$eventFields{'numberRegistered'} = $numberRegistered;
|
||||
$eventFields{'maximumAttendees'} = $event->{'maximumAttendees'};
|
||||
$eventFields{'seatsRemaining'} = $event->{'maximumAttendees'} - $numberRegistered;
|
||||
$eventFields{'startDate.human'} = $self->session->datetime->epochToHuman($event->{'startDate'});
|
||||
$eventFields{'endDate.human'} = $self->session->datetime->epochToHuman($event->{'endDate'});
|
||||
$eventFields{'eventIsFull'} = ($eventFields{'seatsRemaining'} == 0);
|
||||
|
||||
if ($eventFields{'eventIsFull'}) {
|
||||
$eventFields{'purchase.label'} = "Sold Out";;
|
||||
$eventFields{'purchase.label'} = $i18n->get('sold out');
|
||||
}
|
||||
else {
|
||||
$eventFields{'purchase.url'} = $self->getUrl('func=addToCart;pid='.$event->{'productId'});
|
||||
$eventFields{'purchase.label'} = $i18n->get('add to cart');
|
||||
}
|
||||
push (@events, {'event' => $self->processTemplate(\%eventFields, $event->{'templateId'}) });
|
||||
push (@events, {'event' => $self->processTemplate(\%eventFields, $event->{'templateId'}), %eventFields });
|
||||
}
|
||||
$var{'checkout.url'} = $self->getUrl('op=viewCart');
|
||||
$var{'checkout.label'} = "Checkout";
|
||||
|
|
@ -1261,7 +1938,8 @@ sub view {
|
|||
$var{'canManageEvents'} = 0;
|
||||
}
|
||||
$p->appendTemplateVars(\%var);
|
||||
|
||||
$self->buildMenu(\%var);
|
||||
$var{'ems.wobject.dir'} = $self->session->config->get("extrasURL")."/wobject/EventManagementSystem";
|
||||
my $templateId = $self->get("displayTemplateId");
|
||||
return $self->processTemplate(\%var, undef, $self->{_viewTemplate});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue