lots of work on the edit submission form template and supporting code.

This commit is contained in:
daviddelikat 2009-10-15 01:28:46 -05:00
parent ae257f4e37
commit f4cd70f65e

View file

@ -35,6 +35,88 @@ 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
sub _generateFields {
my $tabform = shift;
my $targetField = shift;
my $dummy == $generators->{dummy};
my $tab = $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
my %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 )
@ -599,7 +681,7 @@ sub view {
newSubmissionUrl => $self->getUrl('func=newSubmission'),
viewSubmissionsUrl => $self->getUrl('func=viewSubmissions'),
viewSubmissionQueueUrl => $self->getUrl('func=viewSubmissionQueue'),
addSubmissionFormUrl => $self->getUrl('func=editSubmissionForm'),
addSubmissionFormUrl => $self->getUrl('func=addSubmissionForm'),
manageBadgeGroupsUrl=> $self->getUrl('func=manageBadgeGroups'),
getBadgesUrl => $self->getUrl('func=getBadgesAsJson'),
canEdit => $self->canEdit,
@ -836,8 +918,7 @@ sub www_editSubmissionForm {
my $self = shift;
return $self->session->privilege->insufficient() unless $self->canEdit;
my $session = $self->session;
my $form = $session->form;
my $assetId = shift || $form->get('assetId');
my $assetId = shift || $session->form->get('assetId');
my $asset;
my $i18n = WebGUI::International->new($self->session, "Asset_EventManagementSystem");
@ -863,15 +944,54 @@ sub www_editSubmissionForm {
}
} elsif( $assetId ne 'new' ) {
$asset = WebGUI::Asset->newByDynamicClass($session,$assetId);
if (!defined $asset) { # won't catch everything, but it will help some if an asset blows up
if (!defined $asset) {
$self->session->errorHandler->error(__PACKAGE__ . " - failed to instanciate asset with assetId $assetId");
}
}
my $defs = reverse WebGUI::Asset::EMSSubmissionForm->definition($session);
my $tabform = WebGUI::TabForm->new($session,undef,undef,$self->getUrl());
for my $def ( @$defs ) {
# depricated...by WebGUI 8 they all must autogen forms
next unless ($definition->{autoGenerateForms});
for my $fieldName ( qw/title meuTitle url description/ ) {
if( defined $def->{properties}{$fieldName} ) {
$def->{properties}{$fieldName}{value} = $asset ? $asset->get($fieldName) : '';
$tabform->dynamicField(%{$def->{properties}{$fieldName});
}
}
}
my $fields;
# fixed order for the regular tabs
my @fieldNames = qw/displayTitle startDate duration seatsAvailable
location relatedBadgeGroups sku vendorId shipsSeparately price/;
$defs = reverse WebGUI::Asset::EMSSubmission->definition($session);
for my $def ( @$defs ) {
foreach $fieldName ( @fieldNames ) {
if( defined $def->{$fieldName} ) {
$fields->{$fieldName} = { %{$def->{$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};
}
# create tabs
for my $tabname ( @fieldNames ) {
$tabform->addTab($tabname, $fields->{$tabname}{label}, $0 );
}
for my $field ( values %$fields ) {
_generateFields($tabform, $field);
}
# TODO for new assets fill with blanks, otherwise get asset info to fill in template vars
return $self->processStyle(
$self->processTemplate({
backUrl => $self->getUrl,
pageForm => $tabform->print,
},$self->get('eventSubmissionFormTemplateId')));
}