From deaa6c65c00e0c553ad7687cd4bdadbe8efc8fe3 Mon Sep 17 00:00:00 2001 From: Graham Knop Date: Fri, 20 Jun 2008 08:56:57 +0000 Subject: [PATCH] fixed: DataForm doesn't send emails correctly --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/DataForm.pm | 74 +++++++++++++++------------- 2 files changed, 40 insertions(+), 35 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 0bb95590e..1af2195d7 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -1,4 +1,5 @@ 7.5.13 + - fixed: DataForm doesn't send emails correctly - fixed: CS posts don't have correct URLs generated - fixed: Unable to template user profile viewing and editing screens. - fixed: Product Variants not saving SKU diff --git a/lib/WebGUI/Asset/Wobject/DataForm.pm b/lib/WebGUI/Asset/Wobject/DataForm.pm index c846ac37f..78766a63f 100644 --- a/lib/WebGUI/Asset/Wobject/DataForm.pm +++ b/lib/WebGUI/Asset/Wobject/DataForm.pm @@ -440,15 +440,19 @@ sub getTabOrder { #------------------------------------------------------------------- sub deleteAttachedFiles { my $self = shift; - my @fields = shift; - @fields = @{ $self->getFieldOrder } - unless @fields; + my %params = @_; + my $entryData = $params{entryData}; + my $entryId = $params{entryId}; + my $fields = $self->getFieldOrder; my $fieldConfig = $self->getFieldConfig; - my $entries = $self->session->db->buildArrayRef("select entryData from DataForm_entry where assetId=?", [$self->getId]); - foreach my $entry (@$entries) { - my $entryData = decode_json($entry->{entryData}); - for my $field ( @fields ) { + + if ($entryId) { + my $entry = $self->session->db->buildArrayRef("select entryData from DataForm_entry where assetId=? and DataForm_entryId=?", [$self->getId, $entryId]); + $entryData = decode_json($entry->{entryData}); + } + if ($entryData) { + for my $field ( @$fields ) { my $form = $self->_createForm($fieldConfig->{$field}, $entryData->{$field}); if ($form->can('getStorageLocation')) { my $storage = $form->getStorageLocation; @@ -456,14 +460,26 @@ sub deleteAttachedFiles { } } } + else { + my $entries = $self->session->db->buildArrayRef("select entryData from DataForm_entry where assetId=?", [$self->getId]); + foreach my $entry (@$entries) { + my $entryData = decode_json($entry->{entryData}); + $self->deleteEntryFiles($entryData); + for my $field ( @$fields ) { + my $form = $self->_createForm($fieldConfig->{$field}, $entryData->{$field}); + if ($form->can('getStorageLocation')) { + my $storage = $form->getStorageLocation; + $storage->delete; + } + } + } + } } #------------------------------------------------------------------- sub getAttachedFiles { my $self = shift; - my $entryId = shift; - my $entry = $self->getCollateral('DataForm_entry', 'DataForm_entryId', $entryId); - my $entryData = decode_json($entry->{entryData}); + my $entryData = shift; my $fieldConfig = $self->getFieldConfig; my @paths; for my $field ( values %{$fieldConfig} ) { @@ -641,7 +657,7 @@ sub getRecordTemplateVars { } my $hidden = ($field->{status} eq 'hidden' && !$self->session->var->isAdminOn) || ($field->{isMailField} && !$self->get('mailData')); my $form = $self->_createForm($field, $value); - my $value = $form->getValueAsHtml; + $value = $form->getValueAsHtml; my %fieldProperties = ( "form" => $form->toHtml, "name" => $field->{name}, @@ -773,28 +789,16 @@ sub purge { sub sendEmail { my $self = shift; my $var = shift; - my ($to, $subject, $from, $bcc, $cc); - foreach my $row (@{$var->{field_loop}}) { - if ($row->{"field.name"} eq "to") { - $to = $row->{"field.value"}; - } elsif ($row->{"field.name"} eq "from") { - $from = $row->{"field.value"}; - } elsif ($row->{"field.name"} eq "cc") { - $cc = $row->{"field.value"}; - } elsif ($row->{"field.name"} eq "bcc") { - $bcc = $row->{"field.value"}; - } elsif ($row->{"field.name"} eq "subject") { - $subject = $row->{"field.value"}; - } elsif ($row->{"field.type"} eq "textArea") { - $row->{"field.value"} =~ s/\n//; - } elsif ($row->{"field.type"} eq "textarea") { - $row->{"field.value"} = WebGUI::HTML::format($row->{"field.value"},'mixed'); - } - } + my $entryData = shift; + my $to = $entryData->{to}; + my $subject = $entryData->{subject}; + my $from = $entryData->{from}; + my $bcc = $entryData->{bcc}; + my $cc = $entryData->{cc}; my $message = $self->processTemplate($var,$self->get("emailTemplateId")); - WebGUI::Macro::process($self->session,\$message); - my @attachments = $self->get('mailAttachments') ? - @{$self->getAttachedFiles($var->{entryId})} + WebGUI::Macro::process($self->session,\$message); + my @attachments = $self->get('mailAttachments') + ? @{ $self->getAttachedFiles($entryData) } : (); if ($to =~ /\@/) { my $mail = WebGUI::Mail::Send->create($self->session,{ @@ -923,7 +927,7 @@ sub www_deleteEntry { my $self = shift; return $self->session->privilege->insufficient() unless $self->canEdit; my $entryId = $self->session->form->process("entryId"); - $self->deleteAttachedFiles($entryId); + $self->deleteAttachedFiles(entryId => $entryId); $self->deleteCollateral("DataForm_entry","DataForm_entryId",$entryId); $self->session->stow->set("mode","list"); return $self->www_view; @@ -1386,13 +1390,13 @@ sub www_process { } $var->{error_loop} = \@errors; - $var = $self->getRecordTemplateVars($var); + $var = $self->getRecordTemplateVars($var, $entryData); if (@errors) { $self->prepareView($var); return $self->processStyle($self->view); } if ($self->get("mailData") && !$entryId) { - $self->sendEmail($var); + $self->sendEmail($var, $entryData); } if ($self->get('storeData')) { my $entryJSON = encode_json($entryData);