fix EMSSubmissionForm and all its tests

This commit is contained in:
Doug Bell 2011-05-04 15:33:04 -05:00
parent 0c23ba8cd7
commit b0da37ec15
8 changed files with 81 additions and 64 deletions

View file

@ -19,6 +19,10 @@ use Moose;
use WebGUI::Definition::Asset; use WebGUI::Definition::Asset;
use WebGUI::Asset; use WebGUI::Asset;
use WebGUI::International; use WebGUI::International;
use WebGUI::Form::Combo;
use WebGUI::Form::SelectBox;
use WebGUI::Form::CheckList;
extends 'WebGUI::Asset'; extends 'WebGUI::Asset';
define tableName => 'EMSSubmission'; define tableName => 'EMSSubmission';
define assetNae => ['assetName', 'Asset_EMSSubmission']; define assetNae => ['assetName', 'Asset_EMSSubmission'];
@ -204,17 +208,17 @@ sub drawLocationField {
my $ems = $self->ems; my $ems = $self->ems;
my $options = { map { $_ => $_ } ( @{ $ems->getSubmissionLocations || [ $ems->getLocations ] } ) } ; my $options = { map { $_ => $_ } ( @{ $ems->getSubmissionLocations || [ $ems->getLocations ] } ) } ;
if( $ems->isRegistrationStaff ) { if( $ems->isRegistrationStaff ) {
return WebGUI::Form::combo($self->session, { return WebGUI::Form::Combo->new($self->session, {
name => 'location', name => 'location',
value => $self->get('location'), value => $self->get('location'),
options => $options, options => $options,
}); })->toHtml;
} else { } else {
return WebGUI::Form::selectBox($self->session, { return WebGUI::Form::SelectBox->new($self->session, {
name => 'location', name => 'location',
value => $self->get('location'), value => $self->get('location'),
options => $options, options => $options,
}); })->toHtml;
} }
} }
@ -228,12 +232,12 @@ Draws the field for the relatedBadgeGroups property.
sub drawRelatedBadgeGroupsField { sub drawRelatedBadgeGroupsField {
my ($self, $params) = @_; my ($self, $params) = @_;
return WebGUI::Form::checkList($self->session, { return WebGUI::Form::CheckList->new($self->session, {
name => $params->{name}, name => $params->{name},
value => $self->get($params->{name}), value => $self->get($params->{name}),
vertical => 1, vertical => 1,
options => $self->getParent->getParent->getBadgeGroups, options => $self->getParent->getParent->getBadgeGroups,
}); })->toHtml;
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -250,12 +254,12 @@ sub drawRelatedRibbonsField {
foreach my $ribbon (@{$self->getParent->getParent->getRibbons}) { foreach my $ribbon (@{$self->getParent->getParent->getRibbons}) {
$ribbons{$ribbon->getId} = $ribbon->getTitle; $ribbons{$ribbon->getId} = $ribbon->getTitle;
} }
return WebGUI::Form::checkList($self->session, { return WebGUI::Form::CheckList->new($self->session, {
name => $params->{name}, name => $params->{name},
value => $self->get($params->{name}), value => $self->get($params->{name}),
vertical => 1, vertical => 1,
options => \%ribbons, options => \%ribbons,
}); })->toHtml;
} }
#------------------------------------------------------------------- #-------------------------------------------------------------------
@ -271,11 +275,11 @@ sub drawStatusField {
for my $key ( qw/pending created failed/ ) { for my $key ( qw/pending created failed/ ) {
delete $options->{$key} unless $currentStatus eq $key; delete $options->{$key} unless $currentStatus eq $key;
} }
return WebGUI::Form::SelectBox($self->session, { return WebGUI::Form::SelectBox->new($self->session, {
name => 'submissionStatus', name => 'submissionStatus',
value => $currentStatus, value => $currentStatus,
options => $options, options => $options,
}); })->toHtml;
} }
@ -356,23 +360,23 @@ sub www_editSubmission {
my $newform = WebGUI::FormBuilder->new($session,action => $url); my $newform = WebGUI::FormBuilder->new($session,action => $url);
$newform->addField( "hidden", name => 'assetId', value => $assetId); $newform->addField( "hidden", name => 'assetId', value => $assetId);
my $formDescription = $parent->getFormDescription; my $formDescription = $parent->getFormDescription;
my @defs = reverse @{__PACKAGE__->definition($session)};
my @fieldNames = qw/title submissionStatus startDate duration seatsAvailable location description/; my @fieldNames = qw/title submissionStatus startDate duration seatsAvailable location description/;
my $fields; my $fields;
for my $def ( @defs ) { my $class = 'WebGUI::Asset::EMSSubmission';
my $properties = $def->{properties}; foreach my $fieldName (@fieldNames) {
for my $fieldName ( keys %$properties ) { my $attr = $class->meta->find_attribute_by_name( $fieldName );
if( defined $formDescription->{$fieldName} ) { $fields->{$fieldName} = {
$fields->{$fieldName} = { %{$properties->{$fieldName}} }; # a simple first level copy fieldId => $fieldName,
if( $fieldName eq 'description' ) { name => $fieldName,
$fields->{description}{height} = 200; fieldType => $attr->fieldType,
$fields->{description}{width} = 350; noFormPost => $attr->noFormPost,
} %{ $class->getFormProperties( $session, $fieldName ) },
$fields->{$fieldName}{fieldId} = $fieldName; };
$fields->{$fieldName}{name} = $fieldName; if( $fieldName eq 'description' ) {
$fields->{$fieldName}{value} = $self->get($fieldName) if $self; $fields->{description}{height} = 200;
} $fields->{description}{width} = 350;
} }
$fields->{$fieldName}{value} = $self->get($fieldName) if $self;
} }
# add the meta field # add the meta field
for my $metaField ( @{$parent->getParent->getEventMetaFields} ) { for my $metaField ( @{$parent->getParent->getEventMetaFields} ) {
@ -397,11 +401,11 @@ sub www_editSubmission {
my $drawMethod = __PACKAGE__ . '::' . $field->{customDrawMethod}; my $drawMethod = __PACKAGE__ . '::' . $field->{customDrawMethod};
if ($asset->can( $drawMethod )) { if ($asset->can( $drawMethod )) {
$field->{value} = $asset->$drawMethod($field); $field->{value} = $asset->$drawMethod($field);
delete $field->{name}; # don't want readOnly to generate a hidden field $field->{addHidden} = 0;
$field->{fieldType} = "readOnly"; $field->{fieldType} = "readOnly";
} }
$newform->addField( "dynamicField", %$field); $newform->addField( $field->{fieldType}, %$field);
} else { } else {
my $value; my $value;
# TODO see that the data gets formatted # TODO see that the data gets formatted

View file

@ -238,17 +238,16 @@ sub www_editSubmissionForm {
$newform->addField( "hidden",name => 'assetId', value => $assetId ); $newform->addField( "hidden",name => 'assetId', value => $assetId );
my @fieldNames = qw/title description startDate duration seatsAvailable location/; my @fieldNames = qw/title description startDate duration seatsAvailable location/;
my $fields; my $fields;
my @defs = reverse @{ WebGUI::Asset::EMSSubmission->definition($session) }; my $class = 'WebGUI::Asset::EMSSubmission';
foreach my $fieldName (@fieldNames) {
for my $def (@defs) { my $attr = $class->meta->find_attribute_by_name( $fieldName );
foreach my $fieldName (@fieldNames) { $fields->{$fieldName} = {
my $properties = $def->{properties}; fieldId => $fieldName,
if ( defined $properties->{$fieldName} ) { name => $fieldName,
$fields->{$fieldName} = { %{ $properties->{$fieldName} } }; # a simple first level copy fieldType => $attr->fieldType,
# field definitions don't contain their own name, we will need it later on noFormPost => $attr->noFormPost,
$fields->{$fieldName}{fieldId} = $fieldName; %{ $class->getFormProperties( $session, $fieldName ) },
} };
}
} }
for my $metaField ( @{ $parent->getEventMetaFields } ) { for my $metaField ( @{ $parent->getEventMetaFields } ) {
push @fieldNames, $metaField->{fieldId}; push @fieldNames, $metaField->{fieldId};
@ -258,21 +257,23 @@ sub www_editSubmissionForm {
$fields->{ $metaField->{fieldId} }{hoverHelp} = $metaField->{helpText}; $fields->{ $metaField->{fieldId} }{hoverHelp} = $metaField->{helpText};
} }
$newform->addField( "hidden", name => 'fieldNames', value => join( ' ', @fieldNames ) ); $newform->addField( "hidden", name => 'fieldNames', value => join( ' ', @fieldNames ) );
@defs = reverse @{ WebGUI::Asset::EMSSubmissionForm->definition($session) }; $class = 'WebGUI::Asset::EMSSubmissionForm';
for my $def (@defs) { for my $fieldName (
my $properties = $def->{properties}; qw/title menuTitle url description canSubmitGroupId daysBeforeCleanup
for my $fieldName ( deleteCreatedItems submissionDeadline pastDeadlineMessage/
qw/title menuTitle url description canSubmitGroupId daysBeforeCleanup )
deleteCreatedItems submissionDeadline pastDeadlineMessage/ {
) my $attr = $class->meta->find_attribute_by_name( $fieldName );
{ next unless $attr;
if ( defined $properties->{$fieldName} ) { my %fieldParams = (
my %fieldParams = %{ $properties->{$fieldName} }; fieldId => $fieldName,
$fieldParams{name} = $fieldName; name => $fieldName,
$fieldParams{value} = $params->{$fieldName} || $self ? $self->get($fieldName) : undef; fieldType => $attr->fieldType,
$newform->addField( "dynamicField", %fieldParams); noFormPost => $attr->noFormPost,
} %{ $class->getFormProperties( $session, $fieldName ) },
} value => $params->{$fieldName} || $self ? $self->get($fieldName) : undef,
);
$newform->addField( $attr->fieldType, %fieldParams);
} }
my $formDescription = $params->{formDescription} || $self ? $self->getFormDescription : {}; my $formDescription = $params->{formDescription} || $self ? $self->getFormDescription : {};

View file

@ -162,7 +162,7 @@ sub toHtml {
$self->headTags; $self->headTags;
my $session = $self->session; my $session = $self->session;
my $output = '<fieldset style="border:none;margin:0;padding:0">'; my $output = '<fieldset style="border:none;margin:0;padding:0">';
$output .= WebGUI::Form::Hidden($session, { name => $self->privateName('isIn'), value => 1, }); $output .= WebGUI::Form::Hidden->new($session, { name => $self->privateName('isIn'), value => 1, })->toHtml;
my $alignment = $self->alignmentSeparator; my $alignment = $self->alignmentSeparator;
# Add the select all button # Add the select all button

View file

@ -156,7 +156,7 @@ sub definition {
my $definition = shift || []; my $definition = shift || [];
push(@{$definition}, { push(@{$definition}, {
name=>{ name=>{
defaultValue=>undef defaultValue=>''
}, },
value=>{ value=>{
defaultValue=>undef defaultValue=>undef

View file

@ -37,6 +37,18 @@ The following methods are specifically available from this class. Check the supe
=cut =cut
sub definition {
my $class = shift;
my $session = shift;
my $definition = shift || [];
push(@{$definition}, {
# Should we show the hidden field too?
addHidden => {
defaultValue => 1,
},
});
return $definition;
}
#------------------------------------------------------------------- #-------------------------------------------------------------------
=head2 getName ( session ) =head2 getName ( session )
@ -73,7 +85,7 @@ Renders the value and a hidden input type if a "name" attribute was specified.
sub toHtml { sub toHtml {
my $self = shift; my $self = shift;
my $out = $self->getOriginalValue; my $out = $self->getOriginalValue;
if ($self->get('name') ne '') { if ($self->get('addHidden') && $self->get('name') ne '') {
$out .= $self->toHtmlAsHidden; $out .= $self->toHtmlAsHidden;
} }
return $out; return $out;
@ -89,7 +101,7 @@ Outputs nothing unless a "name" attribute was specified.
sub toHtmlAsHidden { sub toHtmlAsHidden {
my $self = shift; my $self = shift;
if ($self->get('name') ne '') { if ($self->get('addHidden') && $self->get('name') ne '') {
return $self->SUPER::toHtmlAsHidden; return $self->SUPER::toHtmlAsHidden;
} }
return undef; return undef;

View file

@ -67,7 +67,7 @@ sub addField {
push @{$self->fields}, $field; push @{$self->fields}, $field;
$self->addObject( $field ); $self->addObject( $field );
$self->{_fieldsByName}{ $field->get('name') } = $field; # TODO: Must allow multiple fields per name $self->{_fieldsByName}{ $field->get('name') || '' } = $field; # TODO: Must allow multiple fields per name
return $field; return $field;
} }

View file

@ -122,7 +122,7 @@ sub toTemplateVars {
} }
# Form field objects # Form field objects
when ( $_->isa( 'WebGUI::Form::Control' ) ) { when ( $_->isa( 'WebGUI::Form::Control' ) ) {
my $name = $obj->get('name'); my $name = $obj->get('name') || '';
$props = $obj->toTemplateVars; $props = $obj->toTemplateVars;
# Add the whole field to the vars # Add the whole field to the vars
$props->{ field } = $obj->toHtmlWithWrapper; $props->{ field } = $obj->toHtmlWithWrapper;

View file

@ -17,6 +17,7 @@ use strict;
use Test::More; use Test::More;
use Test::Deep; use Test::Deep;
use Test::Warn; use Test::Warn;
use Test::Exception;
use HTML::Form; use HTML::Form;
use JSON; use JSON;
use WebGUI::Test; # Must use this before any other WebGUI modules use WebGUI::Test; # Must use this before any other WebGUI modules
@ -309,7 +310,7 @@ cmp_deeply($sub1->get('comments')->[0],{
comment => 'this is a test comment', comment => 'this is a test comment',
rating => 0, rating => 0,
date => re( qr/\d{10}/ ), date => re( qr/\d{10}/ ),
ip => undef, ip => ignore(),
}, "successfully added comment" ); }, "successfully added comment" );
$sub1->update({ $sub1->update({
@ -361,8 +362,7 @@ $cleanupSubmissions->reset;
is($cleanupSubmissions->run, 'complete', 'cleanup complete'); is($cleanupSubmissions->run, 'complete', 'cleanup complete');
is($cleanupSubmissions->run, 'done', 'cleanup done'); is($cleanupSubmissions->run, 'done', 'cleanup done');
$sub2 = WebGUI::Asset->newById($session, $sub2Id); dies_ok { WebGUI::Asset->newById($session, $sub2Id) } 'submission deleted';
is( $sub2, undef, 'submission deleted');
} # end of workflow skip } # end of workflow skip
@ -419,10 +419,10 @@ my $expected = {
}, },
'description' => undef, 'description' => undef,
'_isValid' => 1, '_isValid' => 1,
'deleteCreatedItems' => undef, 'deleteCreatedItems' => '0',
'canSubmitGroupId' => '2', 'canSubmitGroupId' => '2',
'assetId' => 'new', 'assetId' => 'new',
'url' => undef, 'url' => '',
'daysBeforeCleanup' => '7', 'daysBeforeCleanup' => '7',
'title' => 'Untitled', 'title' => 'Untitled',
} ; } ;