Allow for File and Image subclasses to be handled gracefully by the Thingy.

This commit is contained in:
Colin Kuskie 2011-01-02 12:57:54 -08:00
parent 648ea286ea
commit 3e0da41f0a
3 changed files with 38 additions and 12 deletions

View file

@ -13,6 +13,7 @@
- fixed #12007: Hardcoded js in cart view ( Martin Kamerbeek / Oqapi )
- fixed #12010: Related URLs are not copied for events created through recurrence
- fixed #12012: WebGUI Account system does not present login to visitors for proper redirect
- fixed #12015: Thingy: Custom 'File' form fields get deleted upon save
7.10.6
- fixed #11974: Toolbar icons unclickable in Webkit using HTML5

View file

@ -454,7 +454,7 @@ sub copyThingData {
my @storage_field_ids = ();
##Check to see if any of them are File or Image
foreach my $field (@{ $fields }) {
if ($field->{fieldType} eq 'File' or $field->{fieldType} eq 'Image') {
if ($self->field_isa($field->{fieldType}, 'WebGUI::Form::File')) {
push @storage_field_ids, $field->{fieldId};
}
}
@ -512,7 +512,7 @@ sub deleteThingData {
my @storage_field_ids = ();
##Check to see if any of them are File or Image
foreach my $field (@{ $fields }) {
if ($field->{fieldType} eq 'File' or $field->{fieldType} eq 'Image') {
if ($self->field_isa($field->{fieldType}, 'WebGUI::Form::File')) {
push @storage_field_ids, $field->{fieldId};
}
}
@ -610,7 +610,7 @@ sub editThingDataSave {
$fieldType = "" if ($fieldType =~ m/^otherThing/x);
# Modify the defaultValue for certain field types. For most types we want to use
# the default in the database, for these we want the last known value for this thingData
if ( $fieldType eq "File" || $fieldType eq "Image" ) {
if ($self->field_isa($fieldType, 'WebGUI::Form::File')) {
$field->{ defaultValue } = $thingData{ "field_" . $field->{ fieldId } };
}
$fieldValue = $thingData->{$fieldName} || $session->form->process($fieldName,$fieldType,$field->{defaultValue},$field);
@ -674,6 +674,32 @@ sub exportAssetData {
#-------------------------------------------------------------------
=head2 field_isa ( $fieldType, $isa )
Builds a form field and does an isa check on it.
=head2 $fieldType
This is the type of a field to build. It will have 'WebGUI::Form' prepended to it to form
a complete classname.
=head2 $isa
This is the class name to check against.
=cut
sub field_isa {
my $self = shift;
my $session = $self->session;
my $fieldType = shift;
my $isa = shift;
my $control = eval { WebGUI::Pluggable::instanciate("WebGUI::Form::".$fieldType, "new", [ $session, () ]) };
return ($control && $control->isa($isa));
}
#-------------------------------------------------------------------
=head2 _getDbDataType ( fieldType )
returns the database data type for a field based on the fieldType.
@ -1853,12 +1879,12 @@ 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');
while (my $field = $fields->hashRef) {
my $formElement;
if ($field->{fieldType} eq "File"){
$formElement = "<input type='file' name='file'>";
}
if ($field->{fieldType} eq "Image"){
if ($self->field_isa($field->{fieldType}, 'WebGUI::Form::Image')) {
$formElement = "<input type='file' name='image'>";
}
elsif ($self->field_isa($field->{fieldType}, 'WebGUI::Form::File')) {
$formElement = "<input type='file' name='file'>";
}
else{
$formElement = $self->getFormElement($field);
}
@ -2301,12 +2327,12 @@ sub www_editFieldSave {
$newFieldId = $self->setCollateral("Thingy_fields","fieldId",\%properties,1,1,"thingId",$thingId);
}
if ($properties{fieldType} eq "File"){
$formElement = "<input type='file' name='file'>";
}
elsif ($properties{fieldType} eq "Image"){
if ($self->field_isa($properties{fieldType}, 'WebGUI::Form::Image')) {
$formElement = "<input type='file' name='image'>";
}
elsif ($self->field_isa($properties{fieldType}, 'WebGUI::Form::File')) {
$formElement = "<input type='file' name='file'>";
}
else{
$formElement = $self->getFormElement(\%properties);
}

View file

@ -436,7 +436,6 @@ $session->request->setup_body({
$session->user({userId => '3'});
$session->http->setStatus(200);
my $json = $thingy->www_editThingDataSaveViaAjax();
diag "json: ".$json;
is $json, '{}', 'www_editThingDataSaveViaAjax: Empty JSON hash';
is $session->http->getStatus, 200, '... http status=200';