more work on editSubmissionForm
This commit is contained in:
parent
949d9fa80e
commit
8183b86eea
3 changed files with 272 additions and 172 deletions
|
|
@ -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"),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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???
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue