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&amp;task=submissions.view.file&amp;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);
 }
示例#2
0
 public function sendEmails($formId, $SubmissionId)
 {
     $directory = $this->getDirectory();
     $this->_db->setQuery("SELECT Lang FROM #__rsform_submissions WHERE FormId='" . $formId . "' AND SubmissionId='" . $SubmissionId . "'");
     $lang = $this->_db->loadResult();
     list($placeholders, $values) = RSFormProHelper::getReplacements($SubmissionId);
     $this->_db->setQuery("SELECT * FROM #__rsform_emails WHERE `type` = 'directory' AND `formId` = " . $formId . " AND `from` != ''");
     if ($emails = $this->_db->loadObjectList()) {
         $etranslations = RSFormProHelper::getTranslations('emails', $formId, $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) {
                 require_once JPATH_ADMINISTRATOR . '/components/com_rsform/helpers/scripting.php';
                 RSFormProScripting::compile($email->message, $placeholders, $values);
             }
             $directoryEmail = 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());
             // additional cc
             if (strpos($directoryEmail['cc'], ',') !== false) {
                 $directoryEmail['cc'] = explode(',', $directoryEmail['cc']);
             }
             // additional bcc
             if (strpos($directoryEmail['bcc'], ',') !== false) {
                 $directoryEmail['bcc'] = explode(',', $directoryEmail['bcc']);
             }
             //Trigger Event - beforeDirectoryEmail
             $this->_app->triggerEvent('rsfp_beforeDirectoryEmail', array(array('directory' => &$directory, 'placeholders' => &$placeholders, 'values' => &$values, 'submissionId' => $SubmissionId, 'directoryEmail' => &$directoryEmail)));
             eval($directory->EmailsScript);
             // mail users
             $recipients = explode(',', $directoryEmail['to']);
             if (!empty($recipients)) {
                 foreach ($recipients as $recipient) {
                     if (!empty($recipient)) {
                         RSFormProHelper::sendMail($directoryEmail['from'], $directoryEmail['fromName'], $recipient, $directoryEmail['subject'], $directoryEmail['text'], $directoryEmail['mode'], !empty($directoryEmail['cc']) ? $directoryEmail['cc'] : null, !empty($directoryEmail['bcc']) ? $directoryEmail['bcc'] : null, $directoryEmail['files'], !empty($directoryEmail['replyto']) ? $directoryEmail['replyto'] : '');
                     }
                 }
             }
         }
     }
 }