Index: branches/5.1.x/core/units/forms/forms/forms_eh.php =================================================================== diff -u -N -r13390 -r13824 --- branches/5.1.x/core/units/forms/forms/forms_eh.php (.../forms_eh.php) (revision 13390) +++ branches/5.1.x/core/units/forms/forms/forms_eh.php (.../forms_eh.php) (revision 13824) @@ -1,6 +1,6 @@ $recipient_email, 'bounce_mode' => $bounce_mode, + 'form_info' => $form_info, ) ); } @@ -459,6 +460,63 @@ if (!preg_match('/^(.*) #verify(.*)$/', $fields_hash['Subject'], $regs)) { // incorrect subject, no verification code + $form_info = $params['form_info']; + + if ($form_info['ProcessUnmatchedEmails'] && ($fields_hash['FromEmail'] != $params['recipient_email'])) { + // it's requested to convert unmatched emails to new submissions + $form_id = $form_info['FormId']; + $this->Application->SetVar('form_id', $form_id); + + $sql = 'SELECT ' . $this->Application->getUnitOption('formsubs', 'IDField') . ' + FROM ' . $this->Application->getUnitOption('formsubs', 'TableName') . ' + WHERE MessageId = ' . $this->Conn->qstr($fields_hash['MessageId']); + $found = $this->Conn->GetOne($sql); + + if ($found) { + // don't process same message twice + return false; + } + + $sql = 'SELECT * + FROM ' . TABLE_PREFIX . 'FormFields + WHERE (FormId = ' . $form_info['FormId'] . ') AND (EmailCommunicationRole > 0)'; + $form_fields = $this->Conn->Query($sql, 'EmailCommunicationRole'); + + // what roles are filled from what fields + $role_mapping = Array ( + EMAIL_COMMUNICATION_ROLE_EMAIL => 'FromEmail', + EMAIL_COMMUNICATION_ROLE_NAME => 'FromName', + EMAIL_COMMUNICATION_ROLE_SUBJECT => 'Subject', + EMAIL_COMMUNICATION_ROLE_BODY => 'Message', + ); + + $submission_fields = Array (); + + foreach ($role_mapping as $role => $email_field) { + if (array_key_exists($role, $form_fields)) { + $submission_fields[ 'fld_' . $form_fields[$role]['FormFieldId'] ] = $fields_hash[$email_field]; + } + } + + if ($submission_fields) { + // remove object, because it's linked to single form upon creation forever + $this->Application->removeObject('formsubs.-item'); + + $form_submission =& $this->Application->recallObject('formsubs.-item', null, Array ('skip_autoload' => true)); + /* @var $form_submission kDBItem */ + + // in case that other non-role mapped fields are required + $form_submission->IgnoreValidation = true; + $form_submission->SetDBFieldsFromHash($submission_fields); + $form_submission->SetDBField('FormId', $form_id); + $form_submission->SetDBField('MessageId', $fields_hash['MessageId']); + $form_submission->SetDBField('SubmissionTime_date', adodb_mktime()); + $form_submission->SetDBField('SubmissionTime_time', adodb_mktime()); + $form_submission->SetDBField('ReferrerURL', $this->Application->Phrase('la_Text_Email')); + return $form_submission->Create(); + } + } + return false; }