diff --git a/lib/WebGUI/Asset/Wobject/Survey.pm b/lib/WebGUI/Asset/Wobject/Survey.pm index 001589837..7baa11790 100644 --- a/lib/WebGUI/Asset/Wobject/Survey.pm +++ b/lib/WebGUI/Asset/Wobject/Survey.pm @@ -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 '

Survey

' . $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 '

' . $i18n->get('edit test') . '

' . $error . $form->toHtml; } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Crud.pm b/lib/WebGUI/Crud.pm index 42ae3c835..e25402394 100644 --- a/lib/WebGUI/Crud.pm +++ b/lib/WebGUI/Crud.pm @@ -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); } diff --git a/t/Asset/Wobject/Survey.t b/t/Asset/Wobject/Survey.t index b45297071..15c42826f 100644 --- a/t/Asset/Wobject/Survey.t +++ b/t/Asset/Wobject/Survey.t @@ -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" );