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

View file

@ -15,10 +15,11 @@ use strict;
use WebGUI::Test; use WebGUI::Test;
use WebGUI::Test::MockAsset; use WebGUI::Test::MockAsset;
use WebGUI::Session; 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 Test::Deep;
use JSON; use JSON;
use WebGUI::Asset::Wobject::Thingy; use WebGUI::Asset::Wobject::Thingy;
use WebGUI::Test::Mechanize;
use Data::Dumper; use Data::Dumper;
my $session = WebGUI::Test->session; my $session = WebGUI::Test->session;
@ -434,3 +435,34 @@ is $json, '{}', 'www_editThingDataSaveViaAjax: Empty JSON hash';
is $session->response->status, 200, '... http status=200'; is $session->response->status, 200, '... http status=200';
$session->request->setup_body({ }); $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' );