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??? }