Thingy now shows all field types when editing a field.

This commit is contained in:
Yung Han Khoe 2008-03-26 19:03:46 +00:00
parent d7680799e2
commit ae6c1ac6df
2 changed files with 59 additions and 38 deletions

View file

@ -347,10 +347,11 @@ returns the form that will be used in the edit dialog for Thingy_fields.
sub getEditFieldForm { sub getEditFieldForm {
my $self = shift; my $self = shift;
my $session = $self->session;
my $field = shift; my $field = shift;
my (%fieldStatus, $f, %fieldTypes, $things); my (%fieldStatus, $f, %fieldTypes, $things);
my $fieldId = $field->{fieldId} || "new"; my $fieldId = $field->{fieldId} || "new";
my $i18n = WebGUI::International->new($self->session, 'Asset_Thingy'); my $i18n = WebGUI::International->new($session, 'Asset_Thingy');
my $defaultValue; my $defaultValue;
tie %fieldStatus, 'Tie::IxHash'; tie %fieldStatus, 'Tie::IxHash';
tie %fieldTypes, 'Tie::IxHash'; tie %fieldTypes, 'Tie::IxHash';
@ -362,26 +363,14 @@ sub getEditFieldForm {
"required" => $i18n->get('fieldstatus required label'), "required" => $i18n->get('fieldstatus required label'),
); );
%fieldTypes = ( foreach my $fieldType ( sort @{ WebGUI::Form::FieldType->new($session)->get("types") }) {
"dateTime" => "dateTime", my $form = eval { WebGUI::Pluggable::instanciate("WebGUI::Form::".$fieldType, "new", [$session]) };
"TimeField" => "TimeField", if ($@) {
"float" => "float", $session->errorHandler->error($@);
"zipcode" => "zipcode", next;
"text" => "text", }
"textarea" => "textarea", $fieldTypes{$fieldType} = $form->getName($self->session);
"HTMLArea" => "HTMLArea", }
"url" => "url",
"date" => "date",
"email" => "email",
"phone" => "phone",
"integer" => "integer",
"yesNo" => "yesNo",
"selectList" => "select",
"radioList" => "radioList",
"checkList" => "checkList",
"selectBox" => "selectBox",
"file" => "file",
);
$things = $self->session->db->read('select thingId, label from Thingy_things where assetId =?',[$self->getId]); $things = $self->session->db->read('select thingId, label from Thingy_things where assetId =?',[$self->getId]);
while (my $thing = $things->hashRef) { while (my $thing = $things->hashRef) {
@ -423,7 +412,7 @@ sub getEditFieldForm {
-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=>ucfirst $field->{fieldType} || "Text",
-options=>\%fieldTypes, -options=>\%fieldTypes,
-id=>$dialogPrefix."_fieldType_formId", -id=>$dialogPrefix."_fieldType_formId",
); );
@ -618,10 +607,11 @@ sub getFormElement {
$param{vertical} = $data->{vertical}; $param{vertical} = $data->{vertical};
$param{fieldType} = $data->{fieldType}; $param{fieldType} = $data->{fieldType};
if ($data->{fieldType} eq "checkbox") { if ($data->{fieldType} eq "Checkbox") {
$param{value} = ($data->{defaultValue} =~ /checked/xi) ? 1 : ""; $param{value} = ($data->{defaultValue} =~ /checked/xi) ? 1 : "";
} }
if (WebGUI::Utility::isIn($data->{fieldType},qw(selectList checkList selectBox))) {
if (WebGUI::Utility::isIn($data->{fieldType},qw(SelectList CheckList SelectBox))) {
my @defaultValues; my @defaultValues;
if ($self->session->form->param($name)) { if ($self->session->form->param($name)) {
@defaultValues = $self->session->form->selectList($name); @defaultValues = $self->session->form->selectList($name);
@ -633,7 +623,8 @@ sub getFormElement {
} }
$param{value} = \@defaultValues; $param{value} = \@defaultValues;
} }
if (WebGUI::Utility::isIn($data->{fieldType},qw(selectList selectBox checkList radioList))) {
if (WebGUI::Utility::isIn($data->{fieldType},qw(SelectList SelectBox CheckList RadioList))) {
delete $param{size}; delete $param{size};
my %options; my %options;
tie %options, 'Tie::IxHash'; tie %options, 'Tie::IxHash';
@ -643,13 +634,15 @@ sub getFormElement {
} }
$param{options} = \%options; $param{options} = \%options;
} }
if ($data->{fieldType} eq "yesNo") {
if ($data->{fieldType} eq "YesNo") {
if ($data->{defaultValue} =~ /yes/xi) { if ($data->{defaultValue} =~ /yes/xi) {
$param{value} = 1; $param{value} = 1;
} elsif ($data->{defaultValue} =~ /no/xi) { } elsif ($data->{defaultValue} =~ /no/xi) {
$param{value} = 0; $param{value} = 0;
} }
} }
if ($data->{fieldType} =~ m/^otherThing/x){ if ($data->{fieldType} =~ m/^otherThing/x){
my $otherThingId = $data->{fieldType}; my $otherThingId = $data->{fieldType};
$otherThingId =~ s/^otherThing_(.*)/$1/x; $otherThingId =~ s/^otherThing_(.*)/$1/x;
@ -1078,6 +1071,7 @@ sub www_editThing {
my $session = $self->session; my $session = $self->session;
my ($tabForm, $output, %properties, $tab, %afterSave, %defaultView, $fields); my ($tabForm, $output, %properties, $tab, %afterSave, %defaultView, $fields);
my ($fieldsHTML, $fieldsViewScreen, $fieldsSearchScreen); my ($fieldsHTML, $fieldsViewScreen, $fieldsSearchScreen);
my (@hasHeightWidth,@hasSize,@hasVertical,@hasValues);
tie %afterSave, 'Tie::IxHash'; tie %afterSave, 'Tie::IxHash';
return $session->privilege->insufficient() unless $self->canEdit; return $session->privilege->insufficient() unless $self->canEdit;
my $i18n = WebGUI::International->new($session, "Asset_Thingy"); my $i18n = WebGUI::International->new($session, "Asset_Thingy");
@ -1137,6 +1131,34 @@ sub www_editThing {
$tab = $tabForm->getTab('fields'); $tab = $tabForm->getTab('fields');
foreach my $fieldType ( sort @{ WebGUI::Form::FieldType->new($session)->get("types") }) {
my $form = eval { WebGUI::Pluggable::instanciate("WebGUI::Form::".$fieldType, "new", [$session]) };
my $definition = $form->definition($session);
if ($@) {
$session->errorHandler->error($@);
next;
}
if ($form->get("height")){
push(@hasHeightWidth, $fieldType);
}
if ($form->get("size")){
push(@hasSize, $fieldType);
}
if (defined $definition->[0]->{vertical}->{defaultValue}){
push(@hasVertical, $fieldType);
}
if ($form->get("options")){
push(@hasValues, $fieldType);
}
}
$tab->raw("<script type='text/javascript'>\n");
$tab->raw('var hasHeightWidth = {'.join(", ",map {'"'.$_.'": true'} @hasHeightWidth).'};');
$tab->raw('var hasSize = {'.join(", ",map {'"'.$_.'": true'} @hasSize).'};');
$tab->raw('var hasVertical = {'.join(", ",map {'"'.$_.'": true'} @hasVertical).'};');
$tab->raw('var hasValues = {'.join(", ",map {'"'.$_.'": true'} @hasValues).'};');
$tab->raw("</script>");
$tab->text( $tab->text(
-name => 'label', -name => 'label',
-label => $i18n->get('thing name label'), -label => $i18n->get('thing name label'),
@ -1184,7 +1206,7 @@ sub www_editThing {
$fields = $self->session->db->read('select * from Thingy_fields where assetId = '.$self->session->db->quote($self->get("assetId")).' and thingId = '.$self->session->db->quote($thingId).' order by sequenceNumber'); $fields = $self->session->db->read('select * from Thingy_fields where assetId = '.$self->session->db->quote($self->get("assetId")).' and thingId = '.$self->session->db->quote($thingId).' order by sequenceNumber');
while (my $field = $fields->hashRef) { while (my $field = $fields->hashRef) {
my $formElement; my $formElement;
if ($field->{fieldType} eq "file"){ if ($field->{fieldType} eq "File"){
$formElement = "<input type='file' name='file'>"; $formElement = "<input type='file' name='file'>";
} }
else{ else{
@ -1570,7 +1592,7 @@ sub www_editFieldSave {
$newFieldId = $self->setCollateral("Thingy_fields","fieldId",\%properties,1,1,"thingId",$thingId); $newFieldId = $self->setCollateral("Thingy_fields","fieldId",\%properties,1,1,"thingId",$thingId);
} }
if ($properties{fieldType} eq "file"){ if ($properties{fieldType} eq "File"){
$formElement = "<input type='file' name='file'>"; $formElement = "<input type='file' name='file'>";
} }
else{ else{

View file

@ -30,35 +30,34 @@ function initOptionalFields(prefix,fieldId) {
YAHOO.util.Event.addListener(prefix+"_fieldType_formId", "change", checkFieldType); YAHOO.util.Event.addListener(prefix+"_fieldType_formId", "change", checkFieldType);
function checkFieldType(){ function checkFieldType(){
if (this.value in hasHeightWidth){
if (this.value == "HTMLArea" || this.value == "textarea"){
height_module.show(); height_module.show();
width_module.show() width_module.show()
}else{ }else{
height_module.hide(); height_module.hide();
width_module.hide() width_module.hide()
} }
if (this.value == "radioList" || this.value == "checkList"){ if (this.value in hasVertical){
vertical_module.show(); vertical_module.show();
}else{ }else{
vertical_module.hide(); vertical_module.hide();
} }
if (this.value == "HTMLArea" || this.value == "textarea" || this.value == "radioList" || this.value == "checkList" || this.value == "zipcode"){ if (this.value in hasSize){
size_module.hide() size_module.show()
}else{ }else{
size_module.show(); size_module.hide();
} }
if (this.value == "selectList" || this.value == "selectBox" || this.value == "radioList" || this.value == "checkList"){ if (this.value in hasValues){
values_module.show(); values_module.show();
}else{ }else{
values_module.hide(); values_module.hide();
} }
var valueStart = this.value.slice(0,10); var valueStart = this.value.slice(0,10);
if(valueStart == "otherThing" || this.value == "file"){ if (valueStart != "otherThing"){
defaultValue_module.hide();
}else{
defaultValue_module.show(); defaultValue_module.show();
}else{
defaultValue_module.hide();
} }
if(valueStart == "otherThing"){ if(valueStart == "otherThing"){
var thingId = this.value.slice(11); var thingId = this.value.slice(11);