migrade Survey editTest to FormBuilder

This commit is contained in:
Doug Bell 2011-02-10 15:50:51 -06:00
parent 963227b571
commit 033a1b7793
3 changed files with 64 additions and 22 deletions

View file

@ -2763,8 +2763,7 @@ sub www_editTestSuite {
my $out = $error . $addmenu;
$out .= $tests if $testsFound;
my $ac = $self->getAdminConsole;
return $ac->render($out, 'Survey');
return '<h1>Survey</h1>' . $out;
}
@ -2800,21 +2799,20 @@ sub www_editTest {
}
##Build the form
my $form = WebGUI::HTMLForm->new($session);
$form->hidden( name=>"func", value=>"editTestSave");
$form->hidden( name=>"testId", value=>$testId);
$form->hidden( name=>"assetId", value=>$self->getId);
my $form = WebGUI::FormBuilder->new($session, action => $self->getUrl);
$form->addField( "hidden", name=>"func", value=>"editTestSave");
$form->addField( "hidden", name=>"testId", value=>$testId);
$form->addField( "hidden", name=>"assetId", value=>$self->getId);
$test->crud_form($form, $test);
$form->submit;
$form->addField( "submit", name => "submit" );
if ($testId eq 'new') {
$test->delete;
}
my $ac = $self->getAdminConsole;
my $i18n = WebGUI::International->new($session, 'Asset_Survey');
$ac->addSubmenuItem($self->session->url->page("func=editTest;testId=$testId"), $i18n->get('edit test'));
$ac->addSubmenuItem($self->session->url->page("func=runTest;testId=$testId"), $i18n->get('run test'));
return $ac->render($error.$form->print, $i18n->get('edit test'));
#$ac->addSubmenuItem($self->session->url->page("func=editTest;testId=$testId"), $i18n->get('edit test'));
#$ac->addSubmenuItem($self->session->url->page("func=runTest;testId=$testId"), $i18n->get('run test'));
return '<h1>' . $i18n->get('edit test') . '</h1>' . $error . $form->toHtml;
}
#-------------------------------------------------------------------

View file

@ -25,6 +25,7 @@ use Clone qw/clone/;
use WebGUI::DateTime;
use WebGUI::Exception;
use WebGUI::HTMLForm;
use Scalar::Util qw( blessed );
has session => (
is => 'ro',
@ -385,11 +386,12 @@ sub crud_dropTable {
=head2 crud_form ( $form, [$object] )
A class method to populate a WebGUI::HTMLForm object with all the fields for this Cruddy object.
A class method to populate a WebGUI::FormBuilder object with all the fields for this Cruddy object.
=head3 $form
A WebGUI::HTMLForm object
A WebGUI::FormBuilder object, or any object that does
FormBuilder::Role::HasFields
=head3 $object
@ -399,9 +401,14 @@ An object of this class, used to provide values to the form. It's optional.
sub crud_form {
my ($class, $form, $object) = @_;
my $properties = $class->crud_getProperties;
my $definition = [ { properties => $properties, }];
$form->dynamicForm($definition, 'properties', $object);
my $properties = $class->crud_getProperties( $form->session );
for my $propName ( keys %$properties ) {
my $prop = $properties->{ $propName };
$form->addField( delete $prop->{fieldType},
%$prop,
value => $object ? $object->get( $propName ) : undef,
);
}
}
#-------------------------------------------------------------------
@ -416,12 +423,21 @@ session.
sub crud_getProperties {
my ($class, $session) = @_;
# We must really have a class here
if ( blessed $class ) {
$class = blessed $class;
}
my @property_names = $class->meta->get_all_property_list();
my $properties = {};
foreach my $property_name (@property_names) {
my $property = $class->meta->find_attribute_by_name($property_name);
my $form_properties = $property->form;
$properties->{$property_name} = $form_properties;
next unless $property;
$properties->{$property_name} = {
%{ $class->getFormProperties( $session, $property_name ) },
name => $property_name,
fieldType => $property->form->{fieldType},
};
}
return $properties;
}
@ -942,9 +958,13 @@ sub updateFromFormPost {
my $session = $self->session;
my $form = $session->form;
my %data;
my $properties = $self->meta->get_all_property_list($session);
foreach my $property ($form->param) {
$data{$property} = $form->get($property, $properties->{$property}{fieldType}, $properties->{$property}{default});
my @properties = $self->meta->get_all_property_list($session);
foreach my $property_name ( @properties ) {
my $property = $self->meta->find_attribute_by_name($property_name);
next unless $property;
$data{$property_name} = $form->get($property_name,
$property->form->{fieldType}, $property->default);
$self->session->log->warn(" SETTING $property_name to $data{$property_name}");
}
return $self->update(\%data);
}

View file

@ -17,7 +17,7 @@ my $session = WebGUI::Test->session;
#----------------------------------------------------------------------------
# Tests
plan tests => 51;
plan tests => 57;
#----------------------------------------------------------------------------
# put your tests here
@ -288,3 +288,27 @@ $mech->content_contains( 'uploads/temp', 'uploads link exists' );
my $survey_json = $survey->www_loadSurvey({});
my $survey_data = JSON::from_json($survey_json);
unlike($survey_data->{edithtml}, qr/\^International/, 'www_loadSurvey process macros');
#----------------------------------------------------------------------------
# www_editTest
my $mech = WebGUI::Test::Mechanize->new( config => WebGUI::Test->file );
$mech->get_ok( '/' );
$mech->session->user({ userId => 3 });
$mech->get_ok( $survey->getUrl( 'func=editTest' ) );
$mech->submit_form_ok({
fields => {
name => 'TEST Test',
},
}, "Create a new test"
);
use WebGUI::Asset::Wobject::Survey::Test;
my $tests = WebGUI::Asset::Wobject::Survey::Test->getAllIds( $session, {
constraints => [{
'assetId = ?' => $survey->getId,
}],
});
is( @$tests, 1, "test exists" );
my $test = WebGUI::Asset::Wobject::Survey::Test->new( $session, $tests->[0] );
ok( $test, "test exists" );
is( $test->name, "TEST Test", "name set correctly" );