示例#1
0
 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;
 }
示例#3
0
 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;
 }