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" );