public static function sendSubmissionEmails($SubmissionId, $only_return_replacements = false, $skip_globals = false) { $db = JFactory::getDBO(); $u = JUri::getInstance(); $config = JFactory::getConfig(); $SubmissionId = (int) $SubmissionId; $mainframe = JFactory::getApplication(); $Itemid = JRequest::getInt('Itemid'); $Itemid = $Itemid ? '&Itemid=' . $Itemid : ''; $db->setQuery("SELECT * FROM #__rsform_submissions WHERE SubmissionId='" . $SubmissionId . "'"); $submission = $db->loadObject(); $submission->values = array(); $db->setQuery("SELECT FieldName, FieldValue FROM #__rsform_submission_values WHERE SubmissionId='" . $SubmissionId . "'"); $fields = $db->loadObjectList(); foreach ($fields as $field) { $submission->values[$field->FieldName] = $field->FieldValue; } unset($fields); $formId = $submission->FormId; $db->setQuery("SELECT * FROM #__rsform_forms WHERE FormId='" . $formId . "'"); $form = $db->loadObject(); $form->MultipleSeparator = str_replace(array('\\n', '\\r', '\\t'), array("\n", "\r", "\t"), $form->MultipleSeparator); if (empty($submission->Lang)) { if (!empty($form->Lang)) { $submission->Lang = $form->Lang; } else { $lang = JFactory::getLanguage(); $language = $lang->getDefault(); $submission->Lang = $language; } $db->setQuery("UPDATE #__rsform_submissions SET Lang='" . $db->escape($submission->Lang) . "' WHERE SubmissionId='" . $submission->SubmissionId . "'"); $db->execute(); } $translations = RSFormProHelper::getTranslations('forms', $form->FormId, $submission->Lang); if ($translations) { foreach ($translations as $field => $value) { if (isset($form->{$field})) { $form->{$field} = $value; } } } $placeholders = array(); $values = array(); $db->setQuery("SELECT c.ComponentTypeId, p.ComponentId, p.PropertyName, p.PropertyValue FROM #__rsform_components c LEFT JOIN #__rsform_properties p ON (c.ComponentId=p.ComponentId) WHERE c.FormId='" . $formId . "' AND c.Published='1' AND p.PropertyName IN ('NAME', 'DESCRIPTION', 'CAPTION', 'EMAILATTACH', 'WYSIWYG', 'ITEMS')"); $components = $db->loadObjectList(); $properties = array(); $uploadFields = array(); $multipleFields = array(); $textareaFields = array(); $userEmailUploads = array(); $adminEmailUploads = array(); $additionalEmailUploads = array(); $additionalEmailUploadsIds = array(); foreach ($components as $component) { // Upload fields - grab by NAME so that we can use it later on when checking $_FILES if ($component->ComponentTypeId == 9) { if ($component->PropertyName == 'EMAILATTACH') { $emailsvalues = $component->PropertyValue; $emailsvalues = trim($emailsvalues) != '' ? explode(',', $emailsvalues) : array(); if (!empty($emailsvalues)) { foreach ($emailsvalues as $emailvalue) { if ($emailvalue == 'useremail' || $emailvalue == 'adminemail') { continue; } $additionalEmailUploadsIds[] = $emailvalue; } } $additionalEmailUploadsIds = array_unique($additionalEmailUploadsIds); if (!empty($additionalEmailUploadsIds)) { foreach ($additionalEmailUploadsIds as $additionalEmailUploadsId) { if (in_array($additionalEmailUploadsId, $emailsvalues)) { $additionalEmailUploads[$additionalEmailUploadsId][] = $component->ComponentId; } } } } if ($component->PropertyName == 'NAME') { $uploadFields[] = $component->PropertyValue; } if ($component->PropertyName == 'EMAILATTACH' && !empty($component->PropertyValue)) { $emailvalues = explode(',', $component->PropertyValue); if (in_array('useremail', $emailvalues)) { $userEmailUploads[] = $component->ComponentId; //continue; } if (in_array('adminemail', $emailvalues)) { $adminEmailUploads[] = $component->ComponentId; //continue; } } } elseif (in_array($component->ComponentTypeId, array(3, 4))) { if ($component->PropertyName == 'NAME') { $multipleFields[] = $component->ComponentId; } } elseif ($component->ComponentTypeId == 2) { if ($component->PropertyName == 'WYSIWYG' && $component->PropertyValue == 'NO') { $textareaFields[] = $component->ComponentId; } } $properties[$component->ComponentId][$component->PropertyName] = $component->PropertyValue; } // language $translations = RSFormProHelper::getTranslations('properties', $formId, $submission->Lang); foreach ($properties as $componentId => $componentProperties) { foreach ($componentProperties as $property => $value) { $reference_id = $componentId . '.' . $property; if (isset($translations[$reference_id])) { $componentProperties[$property] = $translations[$reference_id]; } } $properties[$componentId] = $componentProperties; } $secret = $config->get('secret'); foreach ($properties as $ComponentId => $property) { // {component:caption} $placeholders[] = '{' . $property['NAME'] . ':caption}'; $values[] = isset($property['CAPTION']) ? $property['CAPTION'] : ''; // {component:description} $placeholders[] = '{' . $property['NAME'] . ':description}'; $values[] = isset($property['DESCRIPTION']) ? $property['DESCRIPTION'] : ''; // {component:name} $placeholders[] = '{' . $property['NAME'] . ':name}'; $values[] = $property['NAME']; // {component:price} $placeholders[] = '{' . $property['NAME'] . ':price}'; $values[] = RSFormProHelper::getComponentPrice($property, $submission); // {component:value} $placeholders[] = '{' . $property['NAME'] . ':value}'; $value = ''; if (isset($submission->values[$property['NAME']])) { $value = $submission->values[$property['NAME']]; // Check if this is an upload field if (in_array($property['NAME'], $uploadFields)) { $value = '<a href="' . JURI::root() . 'index.php?option=com_rsform&task=submissions.view.file&hash=' . md5($submission->SubmissionId . $secret . $property['NAME']) . $Itemid . '">' . basename($submission->values[$property['NAME']]) . '</a>'; } elseif (in_array($ComponentId, $multipleFields)) { $value = str_replace("\n", $form->MultipleSeparator, $value); } elseif ($form->TextareaNewLines && in_array($ComponentId, $textareaFields)) { $value = nl2br($value); } } $values[] = $value; if (isset($property['ITEMS'])) { $placeholders[] = '{' . $property['NAME'] . ':text}'; if (isset($submission->values[$property['NAME']])) { $value = $submission->values[$property['NAME']]; $all_values = explode("\n", $value); $all_texts = array(); $items = RSFormProHelper::explode(RSFormProHelper::isCode($property['ITEMS'])); $special = array('[c]', '[g]', '[d]'); foreach ($all_values as $v => $value) { $all_texts[$v] = $value; foreach ($items as $item) { $item = str_replace($special, '', $item); @(list($item_val, $item_text) = explode("|", $item, 2)); if ($item_text && $item_val == $value) { $all_texts[$v] = $item_text; break; } } } if ($all_texts) { $values[] = implode($form->MultipleSeparator, $all_texts); } else { $values[] = $value; } } else { $values[] = ''; } } // {component:path} // {component:localpath} // {component:filename} if (in_array($property['NAME'], $uploadFields)) { $placeholders[] = '{' . $property['NAME'] . ':path}'; $placeholders[] = '{' . $property['NAME'] . ':localpath}'; $placeholders[] = '{' . $property['NAME'] . ':filename}'; if (isset($submission->values[$property['NAME']])) { $filepath = $submission->values[$property['NAME']]; $filepath = substr_replace($filepath, JURI::root(), 0, strlen(JPATH_SITE) + 1); $filepath = str_replace(array('\\', '\\/', '//\\'), '/', $filepath); $values[] = $filepath; $values[] = $submission->values[$property['NAME']]; $values[] = basename($submission->values[$property['NAME']]); } else { $values[] = ''; $values[] = ''; $values[] = ''; } } } $placeholders[] = '{_STATUS:value}'; $values[] = isset($submission->values['_STATUS']) ? JText::_('RSFP_PAYPAL_STATUS_' . $submission->values['_STATUS']) : ''; $placeholders[] = '{_ANZ_STATUS:value}'; $values[] = isset($submission->values['_ANZ_STATUS']) ? JText::_('RSFP_ANZ_STATUS_' . $submission->values['_ANZ_STATUS']) : ''; $user = JFactory::getUser($submission->UserId); if (empty($user->id)) { $user = JFactory::getUser(0); } $root = $mainframe->isAdmin() ? JURI::root() : $u->toString(array('scheme', 'host', 'port')); $confirmation_hash = md5($submission->SubmissionId . $formId . $submission->DateSubmitted); $hash_link = 'index.php?option=com_rsform&task=confirm&hash=' . $confirmation_hash; $confirmation = $root . ($mainframe->isAdmin() ? $hash_link : JRoute::_($hash_link)); if (!$skip_globals) { array_push($placeholders, '{global:username}', '{global:userid}', '{global:useremail}', '{global:fullname}', '{global:userip}', '{global:date_added}', '{global:sitename}', '{global:siteurl}', '{global:confirmation}', '{global:submissionid}', '{global:submission_id}'); array_push($values, $user->username, $user->id, $user->email, $user->name, $submission->UserIp, RSFormProHelper::getDate($submission->DateSubmitted), $config->get('sitename'), JURI::root(), $confirmation, $submission->SubmissionId, $submission->SubmissionId); } $mainframe->triggerEvent('rsfp_onAfterCreatePlaceholders', array(array('form' => &$form, 'placeholders' => &$placeholders, 'values' => &$values, 'submission' => $submission))); if ($only_return_replacements) { return array($placeholders, $values); } // RSForm! Pro Scripting - User Email Text // performance check if (strpos($form->UserEmailText, '{if ') !== false && strpos($form->UserEmailText, '{/if}') !== false) { require_once dirname(__FILE__) . '/scripting.php'; RSFormProScripting::compile($form->UserEmailText, $placeholders, $values); } $userEmail = array('to' => str_replace($placeholders, $values, $form->UserEmailTo), 'cc' => str_replace($placeholders, $values, $form->UserEmailCC), 'bcc' => str_replace($placeholders, $values, $form->UserEmailBCC), 'from' => str_replace($placeholders, $values, $form->UserEmailFrom), 'replyto' => str_replace($placeholders, $values, $form->UserEmailReplyTo), 'fromName' => str_replace($placeholders, $values, $form->UserEmailFromName), 'text' => str_replace($placeholders, $values, $form->UserEmailText), 'subject' => str_replace($placeholders, $values, $form->UserEmailSubject), 'mode' => $form->UserEmailMode, 'files' => array()); // user cc if (strpos($userEmail['cc'], ',') !== false) { $userEmail['cc'] = explode(',', $userEmail['cc']); } // user bcc if (strpos($userEmail['bcc'], ',') !== false) { $userEmail['bcc'] = explode(',', $userEmail['bcc']); } jimport('joomla.filesystem.file'); $file = str_replace($placeholders, $values, $form->UserEmailAttachFile); if ($form->UserEmailAttach && JFile::exists($file)) { $userEmail['files'][] = $file; } // Need to attach files // User Email foreach ($userEmailUploads as $componentId) { $name = $properties[$componentId]['NAME']; if (!empty($submission->values[$name])) { $userEmail['files'][] = $submission->values[$name]; } } // RSForm! Pro Scripting - Admin Email Text // performance check if (strpos($form->AdminEmailText, '{if ') !== false && strpos($form->AdminEmailText, '{/if}') !== false) { require_once dirname(__FILE__) . '/scripting.php'; RSFormProScripting::compile($form->AdminEmailText, $placeholders, $values); } $adminEmail = array('to' => str_replace($placeholders, $values, $form->AdminEmailTo), 'cc' => str_replace($placeholders, $values, $form->AdminEmailCC), 'bcc' => str_replace($placeholders, $values, $form->AdminEmailBCC), 'from' => str_replace($placeholders, $values, $form->AdminEmailFrom), 'replyto' => str_replace($placeholders, $values, $form->AdminEmailReplyTo), 'fromName' => str_replace($placeholders, $values, $form->AdminEmailFromName), 'text' => str_replace($placeholders, $values, $form->AdminEmailText), 'subject' => str_replace($placeholders, $values, $form->AdminEmailSubject), 'mode' => $form->AdminEmailMode, 'files' => array()); // admin cc if (strpos($adminEmail['cc'], ',') !== false) { $adminEmail['cc'] = explode(',', $adminEmail['cc']); } // admin bcc if (strpos($adminEmail['bcc'], ',') !== false) { $adminEmail['bcc'] = explode(',', $adminEmail['bcc']); } // Admin Email foreach ($adminEmailUploads as $componentId) { $name = $properties[$componentId]['NAME']; if (!empty($submission->values[$name])) { $adminEmail['files'][] = $submission->values[$name]; } } $mainframe->triggerEvent('rsfp_beforeUserEmail', array(array('form' => &$form, 'placeholders' => &$placeholders, 'values' => &$values, 'submissionId' => $SubmissionId, 'userEmail' => &$userEmail))); // Script called before the User Email is sent. eval($form->UserEmailScript); // mail users if ($userEmail['to']) { $recipients = explode(',', $userEmail['to']); RSFormProHelper::sendMail($userEmail['from'], $userEmail['fromName'], $recipients, $userEmail['subject'], $userEmail['text'], $userEmail['mode'], !empty($userEmail['cc']) ? $userEmail['cc'] : null, !empty($userEmail['bcc']) ? $userEmail['bcc'] : null, $userEmail['files'], !empty($userEmail['replyto']) ? $userEmail['replyto'] : ''); } $mainframe->triggerEvent('rsfp_beforeAdminEmail', array(array('form' => &$form, 'placeholders' => &$placeholders, 'values' => &$values, 'submissionId' => $SubmissionId, 'adminEmail' => &$adminEmail))); // Script called before the Admin Email is sent. eval($form->AdminEmailScript); //mail admins if ($adminEmail['to']) { $recipients = explode(',', $adminEmail['to']); RSFormProHelper::sendMail($adminEmail['from'], $adminEmail['fromName'], $recipients, $adminEmail['subject'], $adminEmail['text'], $adminEmail['mode'], !empty($adminEmail['cc']) ? $adminEmail['cc'] : null, !empty($adminEmail['bcc']) ? $adminEmail['bcc'] : null, $adminEmail['files'], !empty($adminEmail['replyto']) ? $adminEmail['replyto'] : ''); } //additional emails $db->setQuery("SELECT * FROM #__rsform_emails WHERE `type` = 'additional' AND `formId` = " . $formId . " AND `from` != ''"); if ($emails = $db->loadObjectList()) { $etranslations = RSFormProHelper::getTranslations('emails', $formId, $submission->Lang); foreach ($emails as $email) { if (isset($etranslations[$email->id . '.fromname'])) { $email->fromname = $etranslations[$email->id . '.fromname']; } if (isset($etranslations[$email->id . '.subject'])) { $email->subject = $etranslations[$email->id . '.subject']; } if (isset($etranslations[$email->id . '.message'])) { $email->message = $etranslations[$email->id . '.message']; } if (empty($email->fromname) || empty($email->subject) || empty($email->message)) { continue; } // RSForm! Pro Scripting - Additional Email Text // performance check if (strpos($email->message, '{if ') !== false && strpos($email->message, '{/if}') !== false) { require_once dirname(__FILE__) . '/scripting.php'; RSFormProScripting::compile($email->message, $placeholders, $values); } $additionalEmail = array('to' => str_replace($placeholders, $values, $email->to), 'cc' => str_replace($placeholders, $values, $email->cc), 'bcc' => str_replace($placeholders, $values, $email->bcc), 'from' => str_replace($placeholders, $values, $email->from), 'replyto' => str_replace($placeholders, $values, $email->replyto), 'fromName' => str_replace($placeholders, $values, $email->fromname), 'text' => str_replace($placeholders, $values, $email->message), 'subject' => str_replace($placeholders, $values, $email->subject), 'mode' => $email->mode, 'files' => array()); if (!empty($additionalEmailUploads)) { foreach ($additionalEmailUploads as $additionalEmailId => $additionalEmailUpload) { if ($additionalEmailId == $email->id) { foreach ($additionalEmailUpload as $componentId) { $name = $properties[$componentId]['NAME']; if (!empty($submission->values[$name])) { $additionalEmail['files'][] = $submission->values[$name]; } } } } } // additional cc if (strpos($additionalEmail['cc'], ',') !== false) { $additionalEmail['cc'] = explode(',', $additionalEmail['cc']); } // additional bcc if (strpos($additionalEmail['bcc'], ',') !== false) { $additionalEmail['bcc'] = explode(',', $additionalEmail['bcc']); } $mainframe->triggerEvent('rsfp_beforeAdditionalEmail', array(array('form' => &$form, 'placeholders' => &$placeholders, 'values' => &$values, 'submissionId' => $SubmissionId, 'additionalEmail' => &$additionalEmail))); eval($form->AdditionalEmailsScript); // mail users if ($additionalEmail['to']) { $recipients = explode(',', $additionalEmail['to']); RSFormProHelper::sendMail($additionalEmail['from'], $additionalEmail['fromName'], $recipients, $additionalEmail['subject'], $additionalEmail['text'], $additionalEmail['mode'], !empty($additionalEmail['cc']) ? $additionalEmail['cc'] : null, !empty($additionalEmail['bcc']) ? $additionalEmail['bcc'] : null, $additionalEmail['files'], !empty($additionalEmail['replyto']) ? $additionalEmail['replyto'] : ''); } } } return array($placeholders, $values); }