fix EMSSubmissionForm and all its tests
This commit is contained in:
parent
0c23ba8cd7
commit
b0da37ec15
8 changed files with 81 additions and 64 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 : {};
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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',
|
||||||
} ;
|
} ;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue