diff --git a/lib/WebGUI/Asset/EMSSubmission.pm b/lib/WebGUI/Asset/EMSSubmission.pm
index 07a6f759e..8df62c682 100644
--- a/lib/WebGUI/Asset/EMSSubmission.pm
+++ b/lib/WebGUI/Asset/EMSSubmission.pm
@@ -144,7 +144,7 @@ sub definition {
},
startDate => {
noFormPost => 1,
- fieldType => "hidden",
+ fieldType => "dateTime",
defaultValue => '',
label => $EMS_i18n->get("add/edit event start date"),
hoverHelp => $EMS_i18n->get("add/edit event start date help"),
diff --git a/lib/WebGUI/Asset/EMSSubmissionForm.pm b/lib/WebGUI/Asset/EMSSubmissionForm.pm
index 05e4177dd..440843999 100644
--- a/lib/WebGUI/Asset/EMSSubmissionForm.pm
+++ b/lib/WebGUI/Asset/EMSSubmissionForm.pm
@@ -51,6 +51,167 @@ These methods are available from this class:
=cut
+#-------------------------------------------------------------------
+=head2 _generateFields ( tabform, targetField )
+
+adds input fields to the tab based on the target field
+TODO: I should put this in the EMSSubmissionForm module instead
+
+=head3 tabform
+
+must be a tabform object
+
+=head3 targetField
+
+this is the definition of the field being described by the fields in the tab
+
+=cut
+
+my $generators;
+
+use lib '/root/pb/lib'; use dav;
+
+sub _generateFields {
+ my $tabform = shift;
+ my $targetField = shift;
+ my $formDescription = shift;
+ my $fieldId = $targetField->{fieldId};
+ my $fieldDescription = $formDescription->{$fieldId};
+ my $dummy = $generators->{dummy};
+ my $tab = $tabform->getTab($targetField->{fieldId});
+
+dav::log '_generateFields::fieldId:', $targetField->{fieldId};
+
+ $tab->checkbox(label => 'turn this field on',
+ name => 'fieldSwitchList',
+ value => $fieldId,
+ checked => $fieldDescription->{on} || 0,
+ );
+ $tab->integer(label => 'display order',
+ name => $fieldId . '_displayOrder',
+ value => $fieldDescription->{displayOrder} || 0,
+ );
+ ($generators->{$targetField->{fieldType}} || $dummy)->($tab,$targetField,$fieldDescription);
+ $tab->checkbox(label => 'value is required',
+ name => 'requiredFields',
+ value => $fieldId,
+ checked => $fieldDescription->{required} || 0,
+ );
+ $tab->text(label => 'default value',
+ name => $fieldId . '_defaultValue',
+ value => $fieldDescription->{defaultValue} || '',
+ );
+ $tab->text(label => 'override label',
+ name => $fieldId . '_overrideLabel',
+ value => $fieldDescription->{overrideLabel} || '',
+ );
+ $tab->textarea(label => 'override help',
+ name => $fieldId . '_overrideHelp',
+ value => $fieldDescription->{overrideHelp} || '',
+ );
+}
+
+# FUTURE: this list of functions shouldbe defined in the control classes themselves
+$generators = {
+ dummy => sub {
+ my $tab = shift;
+ my $field = shift;
+ my $description = shift;
+ $tab->readOnly(
+ label => 'ERROR',
+ value => $field->{fieldType} . ' is not defined in EMS Submission Form generators list',
+ );
+ },
+ dateTime => sub {
+ my $tab = shift;
+ my $field = shift;
+ my $description = shift;
+ $tab->readOnly(
+ label => 'TODO',
+ value => $field->{fieldType} . ' needs work
+ add selectlist, range or date-select options ',
+ );
+ },
+ checkList => sub {
+ my $tab = shift;
+ my $field = shift;
+ my $description = shift;
+ $tab->readOnly(
+ label => 'TODO',
+ value => $field->{fieldType} . ' needs work
+ add textarea for a list of options',
+ );
+ },
+ combo => sub {
+ my $tab = shift;
+ my $field = shift;
+ my $description = shift;
+ $tab->readOnly(
+ label => 'TODO',
+ value => $field->{fieldType} . ' needs work
+ hmmm, needs some thought...',
+ );
+ },
+ integer => sub {
+ my $tab = shift;
+ my $field = shift;
+ my $description = shift;
+ $tab->readOnly(
+ label => 'TODO',
+ value => $field->{fieldType} . ' needs work
+ add max and min options (each needs a checkbox)',
+ );
+ },
+ float => sub {
+ my $tab = shift;
+ my $field = shift;
+ my $description = shift;
+ $tab->readOnly(
+ label => 'TODO',
+ value => $field->{fieldType} . ' needs work
+ add max and min options (each needs a checkbox)
+ add precision default = 1',
+ );
+ },
+ vendor => sub {
+ my $tab = shift;
+ my $field = shift;
+ my $description = shift;
+ $tab->readOnly(
+ label => 'TODO',
+ value => $field->{fieldType} . ' needs work -- this might get eliminated',
+ );
+ },
+ yesNo => sub {
+ my $tab = shift;
+ my $field = shift;
+ my $description = shift;
+ $tab->readOnly(
+ label => 'TODO',
+ value => $field->{fieldType} . ' needs work -- possibly no extra options',
+ );
+ },
+ text => sub {
+ my $tab = shift;
+ my $field = shift;
+ my $description = shift;
+ $tab->readOnly(
+ label => 'TODO',
+ value => $field->{fieldType} . ' needs work -- might get eliminated or have no options',
+ );
+ },
+ HTMLArea => sub {
+ my $tab = shift;
+ my $field = shift;
+ my $description = shift;
+ $tab->readOnly(
+ label => 'TODO',
+ value => $field->{fieldType} . ' needs work -- might get eliminated or have no options',
+ );
+ },
+ # TODO add all of the other control types
+};
+
#-------------------------------------------------------------------
=head2 addSubmission
@@ -423,6 +584,113 @@ sub www_edit {
return $self->getAdminConsole->render( $self->getEditForm->print, $i18n->get('edit asset') );
}
+#-------------------------------------------------------------------
+
+=head2 www_editSubmissionForm
+
+is assetId is 'new' edit a blank form, else edit a form with stuff filled in...
+
+=cut
+
+sub editSubmissionForm {
+ my $class = shift;
+ my $parent = shift;
+ my $session = $parent->session;
+ my $i18n = WebGUI::International->new($parent->session,'Asset_EventManagementSystem');
+ my $form = $session->form;
+ my $assetId = shift || $form->get('assetId');
+ my $self;
+
+ if( ! defined( $assetId ) ) {
+ my $res = $parent->getLineage(['children'],{ returnObjects => 1,
+ includeOnlyClasses => ['WebGUI::Asset::EMSSubmissionForm'],
+ } );
+ if( scalar(@$res) == 1 ) {
+ $self = $res->[0];
+ $assetId = $self->getId;
+ } else {
+ my $makeAnchorList =sub{ my $u=shift; my $n=shift; my $d=shift;
+ return qq{
$n} } ;
+ my $listOfLinks = join '', ( map {
+ $makeAnchorList->(
+ $parent->getUrl('func=editSubmissionForm;assetId=' . $_->getId ),
+ $_->get('title'),
+ WebGUI::HTML::filter($_->get('description'),'all')
+ )
+ } ( @$res ) );
+ return $parent->processStyle( '' . $i18n->get('select form to edit') .
+ '
' );
+ }
+ } elsif( $assetId ne 'new' ) {
+ $self = WebGUI::Asset->newByDynamicClass($session,$assetId);
+ if (!defined $self) {
+ $session->errorHandler->error(__PACKAGE__ . " - failed to instanciate asset with assetId $assetId");
+ }
+ }
+ my $tabform = WebGUI::TabForm->new($session,undef,undef,$parent->getUrl());
+ my $fields;
+ # fixed order for the regular tabs
+ my @fieldNames = qw/startDate duration seatsAvailable location
+ relatedBadgeGroups sku vendorId shipsSeparately price/;
+ my @defs = reverse @{WebGUI::Asset::EMSSubmission->definition($session)};
+dav::dump 'editSubmissionForm::definition:', [@defs];
+ for my $def ( @defs ) {
+ foreach my $fieldName ( @fieldNames ) {
+ my $properties = $def->{properties};
+ if( defined $properties->{$fieldName} ) {
+ $fields->{$fieldName} = { %{$properties->{$fieldName}} }; # a simple first level copy
+ # field definitions don't contain their own name, we will need it later on
+ $fields->{$fieldName}{fieldId} = $fieldName;
+ };
+ }
+ }
+ # add the meta field tabs
+ for my $metaField ( @{$parent->getEventMetaFields} ) {
+ push @fieldNames, $metaField->{fieldId};
+ $fields->{$metaField->{fieldId}} = { %$metaField }; # a simple first level copy
+ # meta fields call it data type, we copy it to simplify later on
+ $fields->{$metaField->{fieldId}}{fieldType} = $metaField->{dataType};
+ }
+ unshift @fieldNames, 'main';
+ $fields->{main} = { label => $i18n->get('main tab label'), fieldId => 'main' };
+ # create tabs
+ for my $tabname ( @fieldNames ) {
+ $tabform->addTab($tabname, $fields->{$tabname}{label}, $0 );
+ }
+ my $maintab = $tabform->getTab('main');
+ @defs = reverse @{WebGUI::Asset::EMSSubmissionForm->definition($session)};
+dav::dump 'editSubmissionForm::dump submission form def', \@defs ;
+ for my $def ( @defs ) {
+ my $properties = $def->{properties};
+ for my $fieldName ( qw/title menuTitle url description canSubmitGroupId daysBeforeCleanup
+ deleteCreatedItems submissionDeadline pastDeadlineMessage/ ) {
+ if( defined $properties->{$fieldName} ) {
+ my %param = %{$properties->{$fieldName}};
+ $param{value} = $form->get($fieldName) || $self ? $self->get($fieldName) : $param{defaultValue} || '';
+ $param{name} = $fieldName;
+dav::dump 'editSubmissionForm::properties for ', $fieldName, \%param ;
+ $maintab->dynamicField(%param);
+ }
+ }
+ }
+dav::dump 'editSubmissionForm::dump before generate:',$fields;
+ my $formDescription;
+ if( $form->get('formDescription') ) {
+ $formDescription = JSON->new->decode($form->get('formDescription'));
+ } else {
+ $formDescription = $self ? $self->getFormDescription : { };
+ }
+ for my $field ( values %$fields ) {
+ next if $field->{fieldId} eq 'main' ;
+ _generateFields($tabform, $field,$formDescription);
+ }
+ return $parent->processStyle(
+ $parent->processTemplate({
+ backUrl => $parent->getUrl,
+ pageForm => $tabform->print,
+ },$parent->get('eventSubmissionFormTemplateId')));
+}
+
1;
#vim:ft=perl
diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
index dd0142d46..86c189df6 100644
--- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
+++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm
@@ -35,94 +35,6 @@ use WebGUI::Workflow::Instance;
use Tie::IxHash;
use Data::Dumper;
-#-------------------------------------------------------------------
-=head2 _generateFields ( tabform, targetField )
-
-adds input fields to the tab based on the target field
-TODO: I should put this in the EMSSubmissionForm module instead
-
-=head3 tabform
-
-must be a tabform object
-
-=head3 targetField
-
-this is the definition of the field being described by the fields in the tab
-
-=cut
-
-my $generators;
-
-use lib '/root/pb/lib'; use dav;
-
-sub _generateFields {
- my $tabform = shift;
- my $targetField = shift;
- my $dummy = $generators->{dummy};
- my $tab = $tabform->getTab($targetField->{fieldId});
-
-dav::log '_generateFields::fieldId:', $targetField->{fieldId};
-
-# TODO .. add any standard fields to top of tab
- # hidden fieldID?
- # activate field
- # display order
- ($generators->{$targetField->{fieldType}} || $dummy)->($tabform,$targetField);
-# TODO .. add any standard fields to bottom of tab
- # field label
- # field help
-}
-
-# FUTURE: this list of functions shouldbe defined in the control classes themselves
-$generators = {
- dummy => sub {
- my $tabform = shift;
- my $field = shift;
- return $field->{fieldType} . ' is not defined in EMS Submission Form generators list';
- },
- checkList => sub {
- my $tabform = shift;
- my $field = shift;
- return $field->{fieldType} . ' needs work';
- },
- combo => sub {
- my $tabform = shift;
- my $field = shift;
- return $field->{fieldType} . ' needs work';
- },
- integer => sub {
- my $tabform = shift;
- my $field = shift;
- return $field->{fieldType} . ' needs work';
- },
- float => sub {
- my $tabform = shift;
- my $field = shift;
- return $field->{fieldType} . ' needs work';
- },
- vendor => sub {
- my $tabform = shift;
- my $field = shift;
- return $field->{fieldType} . ' needs work';
- },
- yesNo => sub {
- my $tabform = shift;
- my $field = shift;
- return $field->{fieldType} . ' needs work';
- },
- text => sub {
- my $tabform = shift;
- my $field = shift;
- return $field->{fieldType} . ' needs work';
- },
- HTMLArea => sub {
- my $tabform = shift;
- my $field = shift;
- return $field->{fieldType} . ' needs work';
- },
- # TODO add all of the other control types
-};
-
#-------------------------------------------------------------------
=head2 addGroupToSubmitList ( groupId )
@@ -735,7 +647,6 @@ sub www_addSubmissionForm {
$self->www_editSubmissionForm( 'new' );
}
- my $params = shift || { };
#-------------------------------------------------------------------
=head2 www_addTicketsToBadge ()
@@ -924,90 +835,10 @@ sub www_editSubmissionForm {
my $self = shift;
return $self->session->privilege->insufficient() unless $self->canEdit;
my $session = $self->session;
- my $i18n = WebGUI::International->new($self->session,'Asset_EventManagementSystem');
- my $assetId = shift || $session->form->get('assetId');
- my $asset;
- my $i18n = WebGUI::International->new($self->session, "Asset_EventManagementSystem");
-
- if( ! defined( $assetId ) ) {
- my $res = $self->getLineage(['children'],{ returnObjects => 1,
- includeOnlyClasses => ['WebGUI::Asset::EMSSubmissionForm'],
- } );
- if( scalar(@$res) == 1 ) {
- $asset = $res->[0];
- $assetId = $asset->getId;
- } else {
- my $makeAnchorList =sub{ my $u=shift; my $n=shift; my $d=shift;
- return qq{$n} } ;
- my $listOfLinks = join '', ( map {
- $makeAnchorList->(
- $self->getUrl('func=editSubmissionForm;assetId=' . $_->getId ),
- $_->get('title'),
- WebGUI::HTML::filter($_->get('description'),'all')
- )
- } ( @$res ) );
- return $self->processStyle( '' . $i18n->get('select form to edit') .
- '
' );
- }
- } elsif( $assetId ne 'new' ) {
- $asset = WebGUI::Asset->newByDynamicClass($session,$assetId);
- if (!defined $asset) {
- $self->session->errorHandler->error(__PACKAGE__ . " - failed to instanciate asset with assetId $assetId");
- }
- }
- my $tabform = WebGUI::TabForm->new($session,undef,undef,$self->getUrl());
- my $fields;
- # fixed order for the regular tabs
- my @fieldNames = qw/displayTitle startDate duration seatsAvailable
- location relatedBadgeGroups sku vendorId shipsSeparately price/;
- my @defs = reverse @{WebGUI::Asset::EMSSubmission->definition($session)};
-dav::dump 'editSubmissionForm::definition:', [@defs];
- for my $def ( @defs ) {
- foreach my $fieldName ( @fieldNames ) {
- my $properties = $def->{properties};
- if( defined $properties->{$fieldName} ) {
- $fields->{$fieldName} = { %{$properties->{$fieldName}} }; # a simple first level copy
- # field definitions don't contain their own name, we will need it later on
- $fields->{$fieldName}{fieldId} = $fieldName;
- };
- }
- }
- # add the meta field tabs
- for my $metaField ( @{$self->getEventMetaFields} ) {
- push @fieldNames, $metaField->{fieldId};
- $fields->{$metaField->{fieldId}} = { %$metaField }; # a simple first level copy
- # meta fields call it data type, we copy it to simplify later on
- $fields->{$metaField->{fieldId}}{fieldType} = $metaField->{dataType};
- }
- unshift @fieldNames, 'main';
- $fields->{main} = { label => $i18n->get('main tab label'), fieldId => 'main' };
- # create tabs
- for my $tabname ( @fieldNames ) {
- $tabform->addTab($tabname, $fields->{$tabname}{label}, $0 );
- }
- my $maintab = $tabform->getTab('main');
- @defs = reverse @{WebGUI::Asset::EMSSubmissionForm->definition($session)};
- for my $def ( @defs ) {
- my $properties = $def->{properties};
- for my $fieldName ( qw/title menuTitle url description/ ) {
- if( defined $properties->{$fieldName} ) {
- $properties->{$fieldName}{value} = $asset ? $asset->get($fieldName) : '';
- $maintab->dynamicField($properties->{$fieldName});
- }
- }
- }
-dav::dump 'editSubmissionForm::dump before generate:',$fields;
- for my $field ( values %$fields ) {
- next if $field->{fieldId} eq 'main' ;
- _generateFields($tabform, $field);
- }
- return $self->processStyle(
- $self->processTemplate({
- backUrl => $self->getUrl,
- pageForm => $tabform->print,
- },$self->get('eventSubmissionFormTemplateId')));
+ return WebGUI::Asset::EMSSubmissionForm->editSubmissionForm($self,shift);
}
+
#-------------------------------------------------------------------
=head2 www_editSubmissionFormSave
@@ -1020,6 +851,7 @@ sub www_editSubmissionFormSave {
return $self->session->privilege->insufficient() unless $self->canEdit;
my $form = $self->session->form;
# TOOD call addSubmissionForm or update the submission form...
+ # call edit if it fails
return $self->www_view; # TODO where to go after this???
}