more work on editSubmissionForm

This commit is contained in:
daviddelikat 2009-10-16 10:41:42 -05:00
parent 949d9fa80e
commit 8183b86eea
3 changed files with 272 additions and 172 deletions

View file

@ -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"),

View file

@ -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<br>
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<br>
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<br>
hmmm, needs some thought...',
);
},
integer => sub {
my $tab = shift;
my $field = shift;
my $description = shift;
$tab->readOnly(
label => 'TODO',
value => $field->{fieldType} . ' needs work<br>
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<br>
add max and min options (each needs a checkbox)<br>
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{<li><a href='$u' title='$d'>$n</a></li>} } ;
my $listOfLinks = join '', ( map {
$makeAnchorList->(
$parent->getUrl('func=editSubmissionForm;assetId=' . $_->getId ),
$_->get('title'),
WebGUI::HTML::filter($_->get('description'),'all')
)
} ( @$res ) );
return $parent->processStyle( '<h1>' . $i18n->get('select form to edit') .
'</h1><ul>' . $listOfLinks . '</ul>' );
}
} 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

View file

@ -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{<li><a href='$u' title='$d'>$n</a></li>} } ;
my $listOfLinks = join '', ( map {
$makeAnchorList->(
$self->getUrl('func=editSubmissionForm;assetId=' . $_->getId ),
$_->get('title'),
WebGUI::HTML::filter($_->get('description'),'all')
)
} ( @$res ) );
return $self->processStyle( '<h1>' . $i18n->get('select form to edit') .
'</h1><ul>' . $listOfLinks . '</ul>' );
}
} 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???
}