Sindbad~EG File Manager
<?php
namespace FluentForm\App\Services\FormBuilder\Notifications;
use FluentForm\Framework\Helpers\ArrayHelper;
use FluentForm\Framework\Foundation\Application;
use FluentForm\App\Modules\Form\FormFieldsParser;
use FluentForm\App\Services\Emogrifier\Emogrifier;
class EmailNotification
{
/**
* FluentForm\Framework\Foundation\Application
*
* @var $app
*/
protected $app = null;
/**
* Biuld the instance of this class
*
* @param \FluentForm\Framework\Foundation\Application $app
*
* @return $this
*/
public function __construct(Application $app)
{
$this->app = $app;
}
/**
* Send the email notification
*
* @param array $notification [Notification settings from form meta]
* @param array $submittedData [User submitted form data]
* @param \StdClass $form [The form object from database]
*
* @return bool
*/
public function notify($notification, $submittedData, $form, $entryId = false)
{
$isSendAsPlain = 'yes' == ArrayHelper::get($notification, 'asPlainText');
$isSendAsPlain= apply_filters_deprecated(
'fluentform_send_plain_html_email',
[
$isSendAsPlain,
$form,
$notification
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/send_plain_html_email',
'Use fluentform/send_plain_html_email instead of fluentform_send_plain_html_email.'
);
$isSendAsPlain = apply_filters('fluentform/send_plain_html_email', $isSendAsPlain, $form, $notification);
$emailBody = $notification['message'];
$emailBody = apply_filters_deprecated(
'fluentform_submission_message_parse',
[
$emailBody,
$entryId,
$submittedData,
$form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/submission_message_parse',
'Use fluentform/submission_message_parse instead of fluentform_submission_message_parse.'
);
$emailBody = apply_filters('fluentform/submission_message_parse', $emailBody, $entryId, $submittedData, $form);
$notification['parsed_message'] = $emailBody;
if (! $isSendAsPlain) {
$emailBody = $this->getEmailWithTemplate($emailBody, $form, $notification);
}
$sendAddresses = $this->getSendAddresses($notification, $submittedData);
$notification['subject'] = apply_filters_deprecated(
'fluentform_email_subject',
[
$notification['subject'],
$notification,
$submittedData,
$form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/email_subject',
'Use fluentform/email_subject instead of fluentform_email_subject.'
);
$subject = apply_filters('fluentform/email_subject', $notification['subject'], $notification, $submittedData, $form);
if (! $sendAddresses || ! $subject) {
if ($entryId) {
do_action('fluentform/log_data', [
'parent_source_id' => $form->id,
'source_type' => 'submission_item',
'source_id' => $entryId,
'component' => 'EmailNotification',
'status' => 'error',
'title' => 'Email sending skipped',
'description' => "Email skipped to send because email/subject may not valid.<br />Subject: {$notification['subject']}. <br/>Email: " . implode(', ', $sendAddresses),
]);
}
return null;
}
$headers = $this->getHeaders($notification, $isSendAsPlain);
$notificationAttachments = isset($notification['attachments']) ? $notification['attachments'] : [];
$notificationAttachments = apply_filters_deprecated(
'fluentform_filter_email_attachments',
[
$notificationAttachments,
$notification,
$form,
$submittedData
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/filter_email_attachments',
'Use fluentform/filter_email_attachments instead of fluentform_filter_email_attachments.'
);
$attachments = $this->app->applyFilters(
'fluentform/filter_email_attachments',
$notificationAttachments,
$notification,
$form,
$submittedData
);
$emailBody = apply_filters_deprecated(
'fluentform_email_body',
[
$emailBody,
$notification,
$submittedData,
$form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/email_body',
'Use fluentform/email_body instead of fluentform_email_body.'
);
$emailBody = apply_filters('fluentform/email_body', $emailBody, $notification, $submittedData, $form);
if ($entryId) {
/*
* Inline email logger. It will work fine hopefully
*/
add_action('wp_mail_failed', function ($error) use ($notification, $form, $entryId) {
$failedMailSubject = ArrayHelper::get($error->error_data, 'wp_mail_failed.subject');
if ($failedMailSubject == $notification['subject']) {
$reason = $error->get_error_message();
do_action('fluentform/log_data', [
'parent_source_id' => $form->id,
'source_type' => 'submission_item',
'source_id' => $entryId,
'component' => 'EmailNotification',
'status' => 'failed',
'title' => 'Email sending failed',
'description' => "Email Notification failed to sent.<br />Subject: {$notification['subject']}. <br/>Reason: " . $reason,
]);
}
}, 10, 1);
}
$result = false;
foreach ($sendAddresses as $address) {
do_action('fluentform/log_data', [
'parent_source_id' => $form->id,
'source_type' => 'submission_item',
'source_id' => $entryId,
'component' => 'EmailNotification',
'status' => 'info',
'title' => 'Email sending initiated',
'description' => 'Email Notification broadcasted to ' . $address . ".<br />Subject: {$subject}",
]);
$address = apply_filters_deprecated(
'fluentform_email_to',
[
$address,
$notification,
$submittedData,
$form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/email_to',
'Use fluentform/email_to instead of fluentform_email_to.'
);
$emailTo = apply_filters('fluentform/email_to', $address, $notification, $submittedData, $form);
$result = $this->broadCast([
'email' => $emailTo,
'subject' => $subject,
'body' => $emailBody,
'headers' => $headers,
'attachments' => $attachments,
]);
}
return $result;
}
private function broadCast($data)
{
$sendEmail = explode(',', $data['email']);
if (count($sendEmail) > 1) {
$data['email'] = $sendEmail;
}
return wp_mail(
$data['email'],
$data['subject'],
$data['body'],
$data['headers'],
$data['attachments']
);
}
private function getSendAddresses($notification, $submittedData)
{
$sendAddresses = [
ArrayHelper::get($notification, 'sendTo.email'),
];
if ('field' == ArrayHelper::get($notification, 'sendTo.type') && ! empty($notification['sendTo']['field'])) {
$sendAddresses = [
ArrayHelper::get($submittedData, $notification['sendTo']['field']),
];
$sendAddresses = array_filter($sendAddresses, 'is_email');
}
if ('routing' != ArrayHelper::get($notification, 'sendTo.type')) {
return $sendAddresses;
}
$routings = ArrayHelper::get($notification, 'sendTo.routing');
$validAddresses = [];
foreach ($routings as $routing) {
$inputValue = ArrayHelper::get($routing, 'input_value');
if (! $inputValue || ! is_email($inputValue)) {
continue;
}
$condition = [
'conditionals' => [
'status' => true,
'type' => 'any',
'conditions' => [
$routing,
],
],
];
if (\FluentForm\App\Services\ConditionAssesor::evaluate($condition, $submittedData)) {
$validAddresses[] = $inputValue;
}
}
return $validAddresses;
}
/**
* @param $formId
*
* @return array
*
* @todo: Implement Caching mechanism so we don't have to parse these things for every request
*/
private function getFormInputsAndLabels($form)
{
$formInputs = FormFieldsParser::getInputs($form);
$inputLabels = FormFieldsParser::getAdminLabels($form, $formInputs);
return [
'inputs' => $formInputs,
'labels' => $inputLabels,
];
}
public function getEmailWithTemplate($emailBody, $form, $notification)
{
$originalEmailBody = $emailBody;
$emailHeader = "";
$emailHeader = apply_filters_deprecated(
'fluentform_email_header',
[
$emailHeader,
$form,
$notification
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/email_header',
'Use fluentform/email_header instead of fluentform_email_header.'
);
$emailHeader = apply_filters('fluentform/email_header', $emailHeader, $form, $notification);
$emailFooter = '';
$emailFooter = apply_filters_deprecated(
'fluentform_email_footer',
[
$emailFooter,
$form,
$notification
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/email_footer',
'Use fluentform/email_footer instead of fluentform_email_footer.'
);
$emailFooter = apply_filters('fluentform/email_footer', $emailFooter, $form, $notification);
if (empty($emailHeader)) {
$emailHeader = wpFluentForm('view')->make('email.template.header', [
'form' => $form,
'notification' => $notification,
]);
}
if (empty($emailFooter)) {
$emailFooter = wpFluentForm('view')->make('email.template.footer', [
'form' => $form,
'notification' => $notification,
'footerText' => $this->getFooterText($form, $notification),
]);
}
$css = wpFluentForm('view')->make('email.template.styles');
$css = apply_filters_deprecated(
'fluentform_email_styles',
[
$css,
$form,
$notification
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/email_styles',
'Use fluentform/email_styles instead of fluentform_email_styles.'
);
$css = apply_filters('fluentform/email_styles', $css, $form, $notification);
$emailBody = $emailHeader . $emailBody . $emailFooter;
ob_start();
try {
// apply CSS styles inline for picky email clients
$emogrifier = new Emogrifier($emailBody, $css);
$emailBody = $emogrifier->emogrify();
} catch (\Exception $e) {
}
$maybeError = ob_get_clean();
if ($maybeError) {
return $originalEmailBody;
}
return $emailBody;
}
private function getFooterText($form, $notification)
{
$option = get_option('_fluentform_global_form_settings');
if ($option && ! empty($option['misc']['email_footer_text'])) {
$footerText = $option['misc']['email_footer_text'];
} else {
$footerText = '© ' . get_bloginfo('name', 'display') . '.';
}
$footerText = apply_filters_deprecated(
'fluentform_email_template_footer_text',
[
$footerText,
$form,
$notification
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/email_template_footer_text',
'Use fluentform/email_template_footer_text instead of fluentform_email_header.'
);
return apply_filters('fluentform/email_template_footer_text', $footerText, $form, $notification);
}
public function getHeaders($notification, $isSendAsPlain = false)
{
$headers = [
'Content-Type: text/html; charset=utf-8',
];
$fromEmail = $notification['fromEmail'];
if (! is_email($fromEmail)) {
$fromEmail = false;
}
if ($notification['fromName'] && $fromEmail) {
$headers[] = "From: {$notification['fromName']} <{$fromEmail}>";
} elseif ($fromEmail) {
$headers[] = "From: <{$fromEmail}>";
}
if (! empty($notification['bcc'])) {
$bccEmail = $notification['bcc'];
$headers[] = 'bcc: ' . $bccEmail;
}
if (! empty($notification['cc'])) {
$ccEmail = $notification['cc'];
$headers[] = 'cc: ' . $ccEmail;
}
if ($notification['replyTo'] && is_email($notification['replyTo'])) {
$headers[] = 'Reply-To: <' . $notification['replyTo'] . '>';
}
$headers = apply_filters_deprecated(
'fluenttform_email_header',
[
$headers,
$notification
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/email_template_header',
'Use fluentform/email_template_header instead of fluenttform_email_header.'
);
$headers = $this->app->applyFilters(
'fluentform/email_template_header',
$headers,
$notification
);
return $headers;
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists