From bc00c4b6e0b3605d70c8ff829b3e0bc39627fd83 Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Thu, 7 Apr 2011 14:07:58 -0500 Subject: [PATCH] fixed #12056: Adding a Thing always creates a table --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/Thingy.pm | 23 ++++++++++++----------- www/extras/wobject/Thingy/thingy.js | 12 +++++++++--- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index c718cf200..91a8a0e08 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -6,6 +6,7 @@ - fixed #12097: GroupManager pop-up not working - fixed #12098: Missing template breaks WebGUI password recovery by email - remove extra Underground style templates that were part of the 7.10.13 upgrade. + - fixed #12056: Adding a Thing always creates a table 7.10.13 - added #12079: Carousel Auto Play diff --git a/lib/WebGUI/Asset/Wobject/Thingy.pm b/lib/WebGUI/Asset/Wobject/Thingy.pm index 4561e8fe1..4ec824abc 100644 --- a/lib/WebGUI/Asset/Wobject/Thingy.pm +++ b/lib/WebGUI/Asset/Wobject/Thingy.pm @@ -1794,7 +1794,7 @@ sub www_editThing { exportMetaData=>undef, maxEntriesPerUser=>undef, ); - $thingId = $self->addThing(\%properties,0); + $thingId = "new"; } else{ %properties = %{$self->getThing($thingId)}; @@ -2211,9 +2211,13 @@ sub www_editThingSave { my ($thingId, $fields); $thingId = $self->session->form->process("thingId"); - $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'); - + if($fields->rows < 1){ + $self->session->log->warn("Thing failed to create because it had no fields"); + my $i18n = WebGUI::International->new($self->session, "Asset_Thingy"); + return $self->www_editThing($i18n->get("thing must have fields")); + } $self->setCollateral("Thingy_things","thingId",{ thingId=>$thingId, label=>$form->process("label"), @@ -2241,13 +2245,7 @@ sub www_editThingSave { exportMetaData=>$form->process("exportMetaData") || '', maxEntriesPerUser=>$form->process("maxEntriesPerUser") || '', },0,1); - - if($fields->rows < 1){ - $self->session->log->warn("Thing failed to create because it had no fields"); - my $i18n = WebGUI::International->new($self->session, "Asset_Thingy"); - return $self->www_editThing($i18n->get("thing must have fields")); - } - + while (my $field = $fields->hashRef) { my $display = $self->session->form->process("display_".$field->{fieldId}) || 0; my $viewScreenTitle = $self->session->form->process("viewScreenTitle_".$field->{fieldId}) || 0; @@ -2274,6 +2272,7 @@ sub www_editField { return $session->privilege->insufficient() unless $self->canEdit; $fieldId = $session->form->process("fieldId"); $thingId = $session->form->process("thingId"); + %properties = $session->db->quickHash("select * from Thingy_fields where thingId=? and fieldId=? and assetId=?", [$thingId,$fieldId,$self->get("assetId")]); if($session->form->process("copy")){ @@ -2314,6 +2313,8 @@ sub www_editFieldSave { if ($fieldType =~ m/^otherThing/){ $defaultValue = $session->form->process("defaultFieldInThing"); } + + $thingId = $self->addThing({ thingId => 'new' },0) if $thingId eq 'new'; $fieldId = $session->form->process("fieldId"); %properties = ( @@ -2378,7 +2379,7 @@ sub www_editFieldSave { # Make sure we send debug information along with the field. $log->preventDebugOutput; - $session->output->print($newFieldId.$listItemHTML); + $session->output->print($thingId.$newFieldId.$listItemHTML); return "chunked"; } diff --git a/www/extras/wobject/Thingy/thingy.js b/www/extras/wobject/Thingy/thingy.js index 2a850a9a8..e42066efb 100644 --- a/www/extras/wobject/Thingy/thingy.js +++ b/www/extras/wobject/Thingy/thingy.js @@ -288,11 +288,17 @@ function initAddFieldDialog() { var handleSuccess = function(o) { var response = o.responseText; - var listItemId = response.slice(0,22); - var newInnerHTML = response.slice(22); + var thingId = response.slice(0,22); + var listItemId = response.slice(22,44); + var newInnerHTML = response.slice(44); var label = addFieldDialog.getData().label; addListItemHTML(listItemId, newInnerHTML,label); - + var idTags = document.getElementsByName( "thingId" ); + for( var index = 0; index < idTags.length; index++ ) { + idTags[index].value = thingId; + window.newThingId = thingId; + } + setCancelButton(); }; var handleFailure = function(o) {