migrate Thingy editField to FormBuilder

This commit is contained in:
Doug Bell 2011-02-10 15:48:29 -06:00
parent 1fb51f2e75
commit 963227b571
2 changed files with 155 additions and 82 deletions

View file

@ -707,7 +707,8 @@ sub getEditFieldForm {
"required" => $i18n->get('fieldstatus required label'),
);
my %fieldTypes = %{WebGUI::Form::FieldType->new($session)->getTypes};
my $fieldType = WebGUI::Pluggable::instanciate( "WebGUI::Form::FieldType", "new", [ $session ] );
my %fieldTypes = %{$fieldType->getTypes};
my $things = $self->session->db->read('select thingId, Thingy_things.label, count(*) from Thingy_things '
.'left join Thingy_fields using(thingId) where Thingy_things.assetId = ? and fieldId != "" '
@ -733,121 +734,168 @@ sub getEditFieldForm {
$dialogPrefix = "edit_".$fieldId."_Dialog";
}
my $f = WebGUI::HTMLForm->new($self->session,{
my $f = WebGUI::FormBuilder->new($self->session,
action=>$self->getUrl,
tableExtras=>' cellpadding="0" cellspacing="0"'
});
$f->hidden(
-name => "fieldId",
-value => $fieldId,
);
$f->addField( "hidden",
name => "fieldId",
value => $fieldId,
);
$f->hidden(
-name => "thingId",
-value => $field->{thingId},
$f->addField( "hidden",
name => "thingId",
value => $field->{thingId},
);
$f->hidden(
-name => "func",
-value => "editFieldSave"
$f->addField( "hidden",
name => "func",
value => "editFieldSave"
);
$f->text(
-name=>"label",
-label=>$i18n->get('field label label'),
-hoverHelp=>$i18n->get('field label description'),
-value=>$field->{label}
$f->addField( "text",
name=>"label",
label=>$i18n->get('field label label'),
hoverHelp=>$i18n->get('field label description'),
value=>$field->{label}
);
$f->selectBox(
-name=>"fieldType",
-label=>$i18n->get('field type label'),
-hoverHelp=>$i18n->get('field type description'),
-value=>$field->{fieldType} || "Text",
-options=>\@fieldTypes,
-id=>$dialogPrefix."_fieldType_formId",
$f->addField( "selectBox",
name=>"fieldType",
label=>$i18n->get('field type label'),
hoverHelp=>$i18n->get('field type description'),
value=>$field->{fieldType} || "Text",
options=>\@fieldTypes,
id=>$dialogPrefix."_fieldType_formId",
);
$f->raw($self->getHtmlWithModuleWrapper($dialogPrefix."_fieldInThing_module"));
$f->addField( "ReadOnly",
name => "${dialogPrefix}_fieldInThing_module",
value => $self->getHtmlWithModuleWrapper($dialogPrefix."_fieldInThing_module")
);
$f->raw($self->getHtmlWithModuleWrapper($dialogPrefix."_defaultFieldInThing_module"));
$f->addField( "ReadOnly",
name => "${dialogPrefix}_defaultFieldInThing_module",
value => $self->getHtmlWithModuleWrapper($dialogPrefix."_defaultFieldInThing_module"),
);
unless ($field->{fieldType} =~ m/^otherThing/x){
$defaultValue = $field->{defaultValue};
}
my $defaultValueForm = WebGUI::Form::Textarea($self->session, {
my $defaultValueForm = WebGUI::Form::Textarea->new($self->session, {
name=>"defaultValue",
value=>$defaultValue,
subtext=>'<br />'.$i18n->get('default value subtext'),
width=>200,
height=>40,
resizable=>0,
});
$f->raw($self->getHtmlWithModuleWrapper($dialogPrefix."_defaultValue_module",$defaultValueForm,
$i18n->get('default value label'),$i18n->get('default value description')));
})->toHtml;
$f->addField( "ReadOnly",
name => "${dialogPrefix}_defaultValue_module",
value => $self->getHtmlWithModuleWrapper(
$dialogPrefix."_defaultValue_module",
$defaultValueForm,
$i18n->get('default value label'),
$i18n->get('default value description')
)
);
$f->text(
-name=>"pretext",
-value=>$field->{pretext},
-label=>$i18n->get('pretext label'),
-hoverHelp=>$i18n->get('pretext description'),
$f->addField( "text",
name=>"pretext",
value=>$field->{pretext},
label=>$i18n->get('pretext label'),
hoverHelp=>$i18n->get('pretext description'),
);
$f->text(
$f->addField( "text",
-name=>"subtext",
-value=>$field->{subtext},
-label=>$i18n->get('subtext label'),
-hoverHelp=>$i18n->get('subtext description'),
);
$f->selectBox(
-name=>"status",
-options=>\@fieldStatus,
-label=>$i18n->get('field status label'),
-hoverHelp=>$i18n->get('field status description'),
-value=> [ $field->{status} || "editable" ] ,
$f->addField( "selectBox",
name=>"status",
options=>\@fieldStatus,
label=>$i18n->get('field status label'),
hoverHelp=>$i18n->get('field status description'),
value=> [ $field->{status} || "editable" ] ,
);
my $widthForm = WebGUI::Form::Integer($self->session, {
my $widthForm = WebGUI::Form::Integer->new($self->session, {
name=>"width",
value=>($field->{width} || 250),
size=>10,
});
$f->raw($self->getHtmlWithModuleWrapper($dialogPrefix."_width_module",$widthForm,$i18n->get('width label'),
$i18n->get('width description')));
})->toHtml;
$f->addField( "ReadOnly",
name => "${dialogPrefix}_width_module",
value => $self->getHtmlWithModuleWrapper(
$dialogPrefix."_width_module",
$widthForm,
$i18n->get('width label'),
$i18n->get('width description')
)
);
my $sizeForm = WebGUI::Form::Integer($self->session, {
my $sizeForm = WebGUI::Form::Integer->new($self->session, {
name=>"size",
value=>($field->{size} || 25),
size=>10,
});
$f->raw($self->getHtmlWithModuleWrapper($dialogPrefix."_size_module",$sizeForm,$i18n->get('size label'),
$i18n->get('size description'),));
})->toHtml;
$f->addField( "ReadOnly",
name => "${dialogPrefix}_size_module",
value => $self->getHtmlWithModuleWrapper(
$dialogPrefix."_size_module",
$sizeForm,
$i18n->get('size label'),
$i18n->get('size description'),
)
);
my $heightForm = WebGUI::Form::Integer($self->session, {
my $heightForm = WebGUI::Form::Integer->new($self->session, {
name=>"height",
value=>$field->{height} || 40,
label=>$i18n->get('height label'),
size=>10,
});
$f->raw($self->getHtmlWithModuleWrapper($dialogPrefix."_height_module",$heightForm,$i18n->get('height label'),
$i18n->get('height description')));
})->toHtml;
$f->addField( "ReadOnly",
name => "${dialogPrefix}_height_module",
value => $self->getHtmlWithModuleWrapper(
$dialogPrefix."_height_module",
$heightForm,
$i18n->get('height label'),
$i18n->get('height description')
)
);
my $verticalForm = WebGUI::Form::YesNo($self->session, {
my $verticalForm = WebGUI::Form::YesNo->new($self->session, {
name=>"vertical",
value=>$field->{vertical},
label=>$i18n->get('vertical label'),
});
$f->raw($self->getHtmlWithModuleWrapper($dialogPrefix."_vertical_module",$verticalForm,$i18n->get('vertical label'),
$i18n->get('vertical description')));
})->toHtml;
$f->addField( "ReadOnly",
name => "${dialogPrefix}_vertical_module",
value => $self->getHtmlWithModuleWrapper(
$dialogPrefix."_vertical_module",
$verticalForm,
$i18n->get('vertical label'),
$i18n->get('vertical description')
)
);
my $valuesForm = WebGUI::Form::Textarea($self->session, {
my $valuesForm = WebGUI::Form::Textarea->new($self->session, {
name=>"possibleValues",
value=>$field->{possibleValues},
width=>200,
height=>60,
resizable=>0,
});
$f->raw($self->getHtmlWithModuleWrapper($dialogPrefix."_values_module",$valuesForm,$i18n->get('possible values label'),
$i18n->get('possible values description')));
$f->text(
-name=>"extras",
-value=>$field->{extras},
-label=>$i18n->get('extras label'),
-hoverHelp=>$i18n->get('extras description'),
);
})->toHtml;
$f->addField( "ReadOnly",
name => "${dialogPrefix}_values_module",
value => $self->getHtmlWithModuleWrapper(
$dialogPrefix."_values_module",
$valuesForm,
$i18n->get('possible values label'),
$i18n->get('possible values description')
)
);
$f->addField( "text",
name=>"extras",
value=>$field->{extras},
label=>$i18n->get('extras label'),
hoverHelp=>$i18n->get('extras description'),
);
#unless ($dialogPrefix eq "addDialog") {
# $f->raw('<script type="text/javascript">initHoverHelp("'.$dialogPrefix.'");</script>');
@ -1076,18 +1124,11 @@ sub getHtmlWithModuleWrapper {
my $hoverHelp = shift;
$hoverHelp &&= '<div class="wg-hoverhelp">' . $hoverHelp . '</div>';
my $html = "\n<tr><td colspan='2'>\n";
$html .= "\t<div id='".$id."'>\n";
my $html = "\t<div id='".$id."'>\n";
$html .= "\t<div class='bd' style='padding:0px;'>\n";
$html .= "\t<table cellpadding='0' cellspacing='0' style='width: 100%;'>\n";
$html .= "\t<tr><td class='formDescription' valign='top' style='width:180px'>";
$html .= $formDescription.$hoverHelp."</td>";
$html .= "<td valign='top' class='tableData' style='padding-left:4px'>";
$html .= $formElement."</td>";
$html .= "\t\n</tr>\n";
$html .= "\t</table>";
$html .= $formDescription.$hoverHelp;
$html .= $formElement;
$html .= "\t\n</div>\t\n</div>\n";
$html .= "</td></tr>";
return $html;
@ -2077,7 +2118,7 @@ sub www_editThing {
my %fieldProperties;
$fieldProperties{thingId} = $thingId;
my $dialogBody = $self->getEditFieldForm(\%fieldProperties);
$dialog .= $dialogBody->print;
$dialog .= $dialogBody->toHtml;
$dialog .= "</div>\n"
."</div>";
@ -2179,7 +2220,7 @@ sub www_editField {
# Make sure we send debug information along with the field edit screen.
$session->log->preventDebugOutput;
$self->session->output->print($dialogBody->print);
$self->session->output->print($dialogBody->toHtml);
return "chunked";
}
#-------------------------------------------------------------------

View file

@ -15,10 +15,11 @@ use strict;
use WebGUI::Test;
use WebGUI::Test::MockAsset;
use WebGUI::Session;
use Test::More tests => 30; # increment this value for each test you create
use Test::More tests => 35; # increment this value for each test you create
use Test::Deep;
use JSON;
use WebGUI::Asset::Wobject::Thingy;
use WebGUI::Test::Mechanize;
use Data::Dumper;
my $session = WebGUI::Test->session;
@ -434,3 +435,34 @@ is $json, '{}', 'www_editThingDataSaveViaAjax: Empty JSON hash';
is $session->response->status, 200, '... http status=200';
$session->request->setup_body({ });
#----------------------------------------------------------------------------
# www_editField
my $fieldThingId = $thingy->addThing();
diag( "Field Thing ID: $fieldThingId" );
my $mech = WebGUI::Test::Mechanize->new( config => WebGUI::Test->file );
$mech->get_ok( '/' );
$mech->session->user({ userId => 3 });
my %fieldInfo = (
thingId => $fieldThingId,
label => 'Escape Plan',
defaultValue => 'zihuatanejo',
pretext => '',
subtext => 'PS: Dont tell anyone!',
);
$mech->get_ok( $thingy->getUrl( 'func=editField;thingId=' . $fieldThingId . ';fieldId=new' ) );
$mech->submit_form_ok({
fields => \%fieldInfo,
},
"add field to thing",
);
my $field = $session->db->quickHashRef(
"SELECT * FROM Thingy_fields WHERE assetId=? AND thingId=?",
[ $thingy->getId, $fieldThingId ],
);
ok( $field, "field exists" );
cmp_deeply( $field, superhashof( \%fieldInfo ), 'field info saved' );