function entry_created($entry_id, $form_id) { if (apply_filters('frm_stop_standard_email', false, $entry_id)) { return; } global $frm_entry, $frm_entry_meta; $entry = $frm_entry->getOne($entry_id, true); $frm_form = new FrmForm(); $form = $frm_form->getOne($form_id); $values = $frm_entry_meta->getAll("it.item_id = {$entry_id}", " ORDER BY fi.field_order"); if (isset($form->options['notification'])) { $notification = reset($form->options['notification']); } else { $notification = $form->options; } // Set the from and to email names and addresses $to_email = $notification['email_to']; if (empty($to_email)) { $to_email = '[admin_email]'; } $to_emails = explode(',', $to_email); $reply_to = $reply_to_name = ''; foreach ($values as $value) { $val = apply_filters('frm_email_value', maybe_unserialize($value->meta_value), $value, $entry); if (is_array($val)) { $val = implode(', ', $val); } if (isset($notification['reply_to']) and (int) $notification['reply_to'] == $value->field_id and is_email($val)) { $reply_to = $val; } if (isset($notification['reply_to_name']) and (int) $notification['reply_to_name'] == $value->field_id) { $reply_to_name = $val; } } if (empty($reply_to) && $notification['reply_to'] == 'custom') { $reply_to = $notification['cust_reply_to']; } if (empty($reply_to_name) && $notification['reply_to_name'] == 'custom') { $reply_to_name = $notification['cust_reply_to_name']; } // Set the email message $plain_text = isset($notification['plain_text']) && $notification['plain_text'] ? true : false; $mail_body = isset($notification['email_message']) ? $notification['email_message'] : ''; $mail_body = FrmEntriesHelper::replace_default_message($mail_body, array('id' => $entry->id, 'entry' => $entry, 'plain_text' => $plain_text, 'user_info' => isset($notification['inc_user_info']) ? $notification['inc_user_info'] : false)); // Set the subject $subject = isset($notification['email_subject']) ? $notification['email_subject'] : ''; if (empty($subject)) { $frm_blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); $subject = sprintf(__('%1$s Form submitted on %2$s', 'formidable'), $form->name, $frm_blogname); } // Send the emails now foreach ((array) $to_emails as $to_email) { $this->send_notification_email(trim($to_email), $subject, $mail_body, $reply_to, $reply_to_name, $plain_text); } }
public static function trigger_email($action, $entry, $form) { if (defined('WP_IMPORTING') && WP_IMPORTING) { return; } global $wpdb; $notification = $action->post_content; $email_key = $action->ID; // Set the subject if (empty($notification['email_subject'])) { $notification['email_subject'] = sprintf(__('%1$s Form submitted on %2$s', 'formidable'), $form->name, '[sitename]'); } $plain_text = $notification['plain_text'] ? true : false; //Filter these fields $filter_fields = array('email_to', 'cc', 'bcc', 'reply_to', 'from', 'email_subject', 'email_message'); add_filter('frm_plain_text_email', $plain_text ? '__return_true' : '__return_false'); //Get all values in entry in order to get User ID field ID $values = FrmEntryMeta::getAll(array('it.field_id !' => 0, 'it.item_id' => $entry->id), ' ORDER BY fi.field_order'); $user_id_field = $user_id_key = ''; foreach ($values as $value) { if ($value->field_type == 'user_id') { $user_id_field = $value->field_id; $user_id_key = $value->field_key; break; } unset($value); } //Filter and prepare the email fields foreach ($filter_fields as $f) { //Don't allow empty From if ($f == 'from' && empty($notification[$f])) { $notification[$f] = '[admin_email]'; } else { if (in_array($f, array('email_to', 'cc', 'bcc', 'reply_to', 'from'))) { //Remove brackets //Add a space in case there isn't one $notification[$f] = str_replace('<', ' ', $notification[$f]); $notification[$f] = str_replace(array('"', '>'), '', $notification[$f]); //Switch userID shortcode to email address if (strpos($notification[$f], '[' . $user_id_field . ']') !== false || strpos($notification[$f], '[' . $user_id_key . ']') !== false) { $user_data = get_userdata($entry->metas[$user_id_field]); $user_email = $user_data->user_email; $notification[$f] = str_replace(array('[' . $user_id_field . ']', '[' . $user_id_key . ']'), $user_email, $notification[$f]); } } } $notification[$f] = FrmFieldsHelper::basic_replace_shortcodes($notification[$f], $form, $entry); } //Put recipients, cc, and bcc into an array if they aren't empty $to_emails = self::explode_emails($notification['email_to']); $cc = self::explode_emails($notification['cc']); $bcc = self::explode_emails($notification['bcc']); $to_emails = apply_filters('frm_to_email', $to_emails, $values, $form->id, compact('email_key', 'entry', 'form')); // Stop now if there aren't any recipients if (empty($to_emails) && empty($cc) && empty($bcc)) { return; } $to_emails = array_unique((array) $to_emails); $prev_mail_body = $mail_body = $notification['email_message']; $mail_body = FrmEntriesHelper::replace_default_message($mail_body, array('id' => $entry->id, 'entry' => $entry, 'plain_text' => $plain_text, 'user_info' => isset($notification['inc_user_info']) ? $notification['inc_user_info'] : false)); // Add the user info if it isn't already included if ($notification['inc_user_info'] && $prev_mail_body == $mail_body) { $data = maybe_unserialize($entry->description); $mail_body .= "\r\n\r\n" . __('User Information', 'formidable') . "\r\n"; $mail_body .= __('IP Address', 'formidable') . ': ' . $entry->ip . "\r\n"; $mail_body .= __('User-Agent (Browser/OS)', 'formidable') . ': ' . FrmEntryFormat::get_browser($data['browser']) . "\r\n"; $mail_body .= __('Referrer', 'formidable') . ': ' . $data['referrer'] . "\r\n"; } unset($prev_mail_body); // Add attachments $attachments = apply_filters('frm_notification_attachment', array(), $form, compact('entry', 'email_key')); if (!empty($notification['email_subject'])) { $notification['email_subject'] = apply_filters('frm_email_subject', $notification['email_subject'], compact('form', 'entry', 'email_key')); } // check for a phone number foreach ((array) $to_emails as $email_key => $e) { if ($e != '[admin_email]' && !is_email($e)) { $e = explode(' ', $e); //If to_email has name <*****@*****.**> format if (is_email(end($e))) { continue; } do_action('frm_send_to_not_email', array('e' => $e, 'subject' => $notification['email_subject'], 'mail_body' => $mail_body, 'reply_to' => $notification['reply_to'], 'from' => $notification['from'], 'plain_text' => $plain_text, 'attachments' => $attachments, 'form' => $form, 'email_key' => $email_key)); unset($to_emails[$email_key]); } } // Send the email now $sent_to = self::send_email(array('to_email' => $to_emails, 'subject' => $notification['email_subject'], 'message' => $mail_body, 'from' => $notification['from'], 'plain_text' => $plain_text, 'reply_to' => $notification['reply_to'], 'attachments' => $attachments, 'cc' => $cc, 'bcc' => $bcc)); return $sent_to; }
public static function entry_created($entry_id, $form_id, $create = true) { if (defined('WP_IMPORTING')) { return; } global $frm_field, $frm_entry, $frm_entry_meta, $frmpro_settings; $frm_form = new FrmForm(); $form = $frm_form->getOne($form_id); if (!$form) { return; } $form_options = maybe_unserialize($form->options); $entry = $frm_entry->getOne($entry_id, true); if (!$entry or $entry->form_id != $form_id or $entry->is_draft) { return; } $sent_to = array(); $notifications = isset($form_options['notification']) ? $form_options['notification'] : array(0 => $form_options); $fields = $frm_field->getAll(array('fi.form_id' => $form_id), 'field_order'); $temp_fields = array(); foreach ($fields as $k => $f) { if (!isset($entry->metas[$f->id])) { $f->field_options = maybe_unserialize($f->field_options); if (isset($f->field_options['post_field']) and !empty($f->field_options['post_field'])) { //get value from linked post $entry->metas[$f->id] = FrmProEntryMetaHelper::get_post_or_meta_value($entry, $f, array('links' => false)); if ($entry->metas[$f->id] == '') { //and !include_blank unset($entry->metas[$f->id]); } //}else if(include_blank){ // $entry->metas[$f->id] = ''; } } $temp_fields[$f->id] = $f; unset($fields[$k]); unset($k); unset($f); } $fields = $temp_fields; unset($temp_fields); $frm_notification = new FrmNotification(); foreach ($notifications as $email_key => $notification) { if (isset($notification['update_email'])) { if ($create and $notification['update_email'] == 2) { continue; } if (!$create and empty($notification['update_email'])) { continue; } } //check if conditions are met $stop = self::conditions_met($notification, $entry); if ($stop) { continue; } unset($stop); $to_email = explode(',', $notification['email_to']); $email_fields = isset($notification['also_email_to']) ? (array) $notification['also_email_to'] : array(); $email_fields = array_merge($email_fields, $to_email); $entry_ids = array($entry->id); $exclude_fields = array(); foreach ($email_fields as $key => $email_field) { $email_field = str_replace(array('[', ']'), '', trim($email_field)); if (is_numeric($email_field)) { $email_fields[$key] = (int) $email_field; } if (preg_match('/|/', $email_field)) { $email_opt = explode('|', $email_field); if (isset($email_opt[1])) { if (isset($entry->metas[$email_opt[0]])) { $add_id = $entry->metas[$email_opt[0]]; $add_id = maybe_unserialize($add_id); if (is_array($add_id)) { foreach ($add_id as $add) { $entry_ids[] = $add; } } else { $entry_ids[] = $add_id; } } //skip the data field if it will be fetched through the other form $exclude_fields[] = $email_opt[0]; $email_fields[$key] = (int) $email_opt[1]; } unset($email_opt); } } if (empty($to_email) and empty($email_fields)) { continue; } foreach ($email_fields as $email_field) { if (isset($notification['reply_to_name']) and preg_match('/|/', $email_field)) { $email_opt = explode('|', $notification['reply_to_name']); if (isset($email_opt[1])) { if (isset($entry->metas[$email_opt[0]])) { $entry_ids[] = $entry->metas[$email_opt[0]]; } //skip the data field if it will be fetched through the other form $exclude_fields[] = $email_opt[0]; } unset($email_opt); } } $where = ''; if (!empty($exclude_fields)) { $where = " and it.field_id not in (" . implode(',', $exclude_fields) . ")"; } $values = $frm_entry_meta->getAll("it.field_id != 0 and it.item_id in (" . implode(',', $entry_ids) . ")" . $where, " ORDER BY fi.field_order"); $to_emails = $to_email ? $to_email : array(); $plain_text = (isset($notification['plain_text']) and $notification['plain_text']) ? true : false; $custom_message = false; $mail_body = ''; if (isset($notification['email_message']) and trim($notification['email_message']) != '') { if (isset($notification['ar']) and $notification['ar']) { //don't continue with blank autoresponder message for reverse compatability if ($notification['email_message'] == '') { continue; } $notification['email_message'] = apply_filters('frm_ar_message', $notification['email_message'], array('entry' => $entry, 'form' => $form)); } $custom_message = true; $shortcodes = FrmProAppHelper::get_shortcodes($notification['email_message'], $entry->form_id); $mail_body = FrmProFieldsHelper::replace_shortcodes($notification['email_message'], $entry, $shortcodes); } $reply_to_name = $frm_blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); //default sender name $odd = true; $attachments = array(); foreach ($values as $value) { $field = isset($fields[$value->field_id]) ? $fields[$value->field_id] : false; $prev_val = maybe_unserialize($value->meta_value); if ($value->field_type == 'file') { global $frmdb; if ($field) { $file_options = $field->field_options; } else { $file_options = $frmdb->get_var($frmdb->fields, array('id' => $value->field_id), 'field_options'); } $file_options = maybe_unserialize($file_options); if (isset($file_options['attach']) and $file_options['attach']) { foreach ((array) $prev_val as $m) { $file = get_post_meta($m, '_wp_attached_file', true); if ($file) { if (!isset($uploads) or !isset($uploads['basedir'])) { $uploads = wp_upload_dir(); } $attachments[] = $uploads['basedir'] . "/{$file}"; } unset($m); } } unset($file_options); } $val = apply_filters('frm_email_value', $prev_val, $value, $entry); if ($value->field_type == 'textarea' and !$plain_text) { $val = str_replace(array("\r\n", "\r", "\n"), ' <br/>', $val); } if (is_array($val)) { $val = implode(', ', $val); } if (isset($notification['reply_to']) and (int) $notification['reply_to'] == $value->field_id) { if ($value->field_type == 'user_id') { $user_data = get_userdata($value->meta_value); $reply_to = $user_data->user_email; } else { if (is_email($val)) { $reply_to = $val; } else { if (is_email($prev_val)) { $reply_to = $prev_val; } } } } if (isset($notification['reply_to_name']) and (int) $notification['reply_to_name'] == $value->field_id) { if ($value->field_type == 'user_id') { $user_data = get_userdata($value->meta_value); $reply_to_name = $user_data->display_name; } else { $reply_to_name = $val; } } if (in_array($value->field_id, $email_fields)) { if ($value->field_type == 'user_id') { $user_data = get_userdata($value->meta_value); $to_emails[] = $user_data->user_email; } else { $val = explode(',', $val); $prev_val = explode(',', $prev_val); if (is_array($val) or is_array($prev_val)) { foreach ((array) $val as $v) { $v = trim($v); if (is_email($v)) { $to_emails[] = $v; } unset($v); } foreach ((array) $prev_val as $v) { $v = trim($v); if (is_email($v) and !in_array($v, $to_emails)) { $to_emails[] = $v; } unset($v); } } else { if (is_email($val)) { $to_emails[] = $val; } else { if (is_email($prev_val)) { $to_emails[] = $prev_val; } } } } } } unset($prev_val); $attachments = apply_filters('frm_notification_attachment', $attachments, $form, array('entry' => $entry, 'email_key' => $email_key)); if (isset($notification['ar']) and $notification['ar']) { $attachments = apply_filters('frm_autoresponder_attachment', array(), $form); } if (!isset($reply_to)) { $reply_to = '[admin_email]'; } if ($notification['reply_to'] == 'custom') { $reply_to = isset($notification['cust_reply_to']) ? $notification['cust_reply_to'] : $reply_to; } if (empty($reply_to)) { $reply_to = '[admin_email]'; //global $frm_settings; //$reply_to = $frm_settings->email_to; } if ($notification['reply_to_name'] == 'custom') { $reply_to_name = isset($notification['cust_reply_to_name']) ? $notification['cust_reply_to_name'] : $reply_to_name; $reply_to_name = apply_filters('frm_content', $reply_to_name, $form, $entry_id); } $prev_mail_body = $mail_body; $mail_body = FrmEntriesHelper::replace_default_message($mail_body, array('id' => $entry->id, 'entry' => $entry, 'plain_text' => $plain_text, 'fields' => $fields, 'user_info' => isset($notification['inc_user_info']) ? $notification['inc_user_info'] : false)); if (isset($notification['inc_user_info']) && $notification['inc_user_info'] && $prev_mail_body == $mail_body) { $data = maybe_unserialize($entry->description); $mail_body .= "\r\n\r\n" . __('User Information', 'formidable') . "\r\n"; $mail_body .= __('IP Address', 'formidable') . ": " . $entry->ip . "\r\n"; $mail_body .= __('User-Agent (Browser/OS)', 'formidable') . ": " . $data['browser'] . "\r\n"; $mail_body .= __('Referrer', 'formidable') . ": " . $data['referrer'] . "\r\n"; } unset($prev_mail_body); if (isset($notification['email_subject']) and $notification['email_subject'] != '') { $shortcodes = FrmProAppHelper::get_shortcodes($notification['email_subject'], $entry->form_id); $subject = FrmProFieldsHelper::replace_shortcodes($notification['email_subject'], $entry, $shortcodes); $subject = apply_filters('frm_email_subject', $subject, compact('form', 'entry', 'email_key')); if (isset($notification['ar']) and $notification['ar']) { $subject = apply_filters('frm_ar_subject', $subject, $form); } } else { //set default subject $subject = sprintf(__('%1$s Form submitted on %2$s', 'formidable'), $form->name, $frm_blogname); } $to_emails = apply_filters('frm_to_email', $to_emails, $values, $form_id, compact('email_key', 'entry')); $to_emails = array_unique((array) $to_emails); $sent = array(); foreach ((array) $to_emails as $to_email) { $to_email = apply_filters('frm_content', $to_email, $form, $entry_id); $to_email = do_shortcode($to_email); if (strpos($to_email, ',')) { $to_email = explode(',', $to_email); } foreach ((array) $to_email as $e) { $e = trim($e); if (($e == '[admin_email]' or is_email($e)) and !in_array($e, $sent)) { $sent_to[] = $sent[] = $e; $frm_notification->send_notification_email($e, $subject, $mail_body, $reply_to, $reply_to_name, $plain_text, $attachments); } else { if (!in_array($e, $sent)) { do_action('frm_send_to_not_email', compact('e', 'subject', 'mail_body', 'reply_to', 'reply_to_name', 'plain_text', 'attachments', 'form', 'email_key')); } } unset($e); } unset($to_email); } unset($sent, $to_emails, $notification, $subject, $mail_body); unset($reply_to, $reply_to_name, $plain_text, $attachments); } return $sent_to; }