/**
 * Helper Functions
 */
function wc_edd_email_purchase_receipt($payment_id, $download_id)
{
    $payment_data = edd_get_payment_meta($payment_id);
    $download = get_post($download_id);
    $license = edd_software_licensing()->get_license_by_purchase($payment_id, $download_id);
    $from_name = edd_get_option('from_name', wp_specialchars_decode(get_bloginfo('name'), ENT_QUOTES));
    $from_name = apply_filters('edd_purchase_from_name', $from_name, $payment_id, $payment_data);
    $from_email = edd_get_option('from_email', get_bloginfo('admin_email'));
    $from_email = apply_filters('edd_purchase_from_address', $from_email, $payment_id, $payment_data);
    $to_email = edd_get_payment_user_email($payment_id);
    $subject = edd_get_option('purchase_subject', __('New License Key', 'edd'));
    $subject = apply_filters('edd_purchase_subject', wp_strip_all_tags($subject), $payment_id);
    $subject = edd_do_email_tags($subject, $payment_id);
    $message = "Dear " . edd_email_tag_first_name($payment_id) . ",\n\n";
    $message .= "As you have updated " . $download->post_title . ", please use following new license key to continue getting future updates: \n\n";
    $message .= "License Key : " . edd_software_licensing()->get_license_key($license->ID) . "\n\n";
    $message .= "Sorry for inconvenience.";
    $emails = EDD()->emails;
    $emails->__set('from_name', $from_name);
    $emails->__set('from_email', $from_email);
    $emails->__set('heading', __('Purchase Receipt', 'edd'));
    $headers = apply_filters('edd_receipt_headers', $emails->get_headers(), $payment_id, $payment_data);
    $emails->__set('headers', $headers);
    $emails->send($to_email, $subject, $message, array());
    if ($admin_notice && !edd_admin_notices_disabled($payment_id)) {
        do_action('edd_admin_sale_notice', $payment_id, $payment_data);
    }
}
/**
 * Sale Notification Template Body
 *
 * @since 1.7
 * @author Daniel J Griffiths
 * @param int $payment_id Payment ID
 * @param array $payment_data Payment Data
 * @return string $email_body Body of the email
 */
function edd_get_sale_notification_body_content($payment_id = 0, $payment_data = array())
{
    global $edd_options;
    $user_info = maybe_unserialize($payment_data['user_info']);
    $email = edd_get_payment_user_email($payment_id);
    if (isset($user_info['id']) && $user_info['id'] > 0) {
        $user_data = get_userdata($user_info['id']);
        $name = $user_data->display_name;
    } elseif (isset($user_info['first_name']) && isset($user_info['last_name'])) {
        $name = $user_info['first_name'] . ' ' . $user_info['last_name'];
    } else {
        $name = $email;
    }
    $download_list = '';
    $downloads = maybe_unserialize($payment_data['downloads']);
    if (is_array($downloads)) {
        foreach ($downloads as $download) {
            $id = isset($payment_data['cart_details']) ? $download['id'] : $download;
            $title = get_the_title($id);
            if (isset($download['options'])) {
                if (isset($download['options']['price_id'])) {
                    $title .= ' - ' . edd_get_price_option_name($id, $download['options']['price_id'], $payment_id);
                }
            }
            $download_list .= html_entity_decode($title, ENT_COMPAT, 'UTF-8') . "\n";
        }
    }
    $gateway = edd_get_gateway_admin_label(get_post_meta($payment_id, '_edd_payment_gateway', true));
    $default_email_body = __('Hello', 'edd') . "\n\n" . sprintf(__('A %s purchase has been made', 'edd'), edd_get_label_plural()) . ".\n\n";
    $default_email_body .= sprintf(__('%s sold:', 'edd'), edd_get_label_plural()) . "\n\n";
    $default_email_body .= $download_list . "\n\n";
    $default_email_body .= __('Purchased by: ', 'edd') . " " . html_entity_decode($name, ENT_COMPAT, 'UTF-8') . "\n";
    $default_email_body .= __('Amount: ', 'edd') . " " . html_entity_decode(edd_currency_filter(edd_format_amount(edd_get_payment_amount($payment_id))), ENT_COMPAT, 'UTF-8') . "\n";
    $default_email_body .= __('Payment Method: ', 'edd') . " " . $gateway . "\n\n";
    $default_email_body .= __('Thank you', 'edd');
    $email = isset($edd_options['sale_notification']) ? stripslashes($edd_options['sale_notification']) : $default_email_body;
    //$email_body = edd_email_template_tags( $email, $payment_data, $payment_id, true );
    $email_body = edd_do_email_tags($email, $payment_id);
    return apply_filters('edd_sale_notification', wpautop($email_body), $payment_id, $payment_data);
}
/**
 * Sends the Admin Sale Notification Email
 *
 * @since 1.4.2
 * @param int $payment_id Payment ID (default: 0)
 * @param array $payment_data Payment Meta and Data
 * @return void
 */
function edd_admin_email_notice($payment_id = 0, $payment_data = array())
{
    $from_name = edd_get_option('from_name', wp_specialchars_decode(get_bloginfo('name'), ENT_QUOTES));
    $from_name = apply_filters('edd_purchase_from_name', $from_name, $payment_id, $payment_data);
    $from_email = edd_get_option('from_name', get_bloginfo('admin_email'));
    $from_email = apply_filters('edd_purchase_from_address', $from_email, $payment_id, $payment_data);
    $subject = edd_get_option('sale_notification_subject', sprintf(__('New download purchase - Order #%1$s', 'edd'), $payment_id));
    $subject = apply_filters('edd_admin_sale_notification_subject', wp_strip_all_tags($subject), $payment_id);
    $subject = edd_do_email_tags($subject, $payment_id);
    $headers = "From: " . stripslashes_deep(html_entity_decode($from_name, ENT_COMPAT, 'UTF-8')) . " <{$from_email}>\r\n";
    $headers .= "Reply-To: " . $from_email . "\r\n";
    //$headers  .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=utf-8\r\n";
    $headers = apply_filters('edd_admin_sale_notification_headers', $headers, $payment_id, $payment_data);
    $attachments = apply_filters('edd_admin_sale_notification_attachments', array(), $payment_id, $payment_data);
    $message = edd_get_sale_notification_body_content($payment_id, $payment_data);
    $emails = EDD()->emails;
    $emails->__set('from_name', $from_name);
    $emails->__set('from_email', $from_email);
    $emails->__set('headers', $headers);
    $emails->__set('heading', __('New Sale!', 'edd'));
    $emails->send(edd_get_admin_notice_emails(), $subject, $message, $attachments);
}
 /**
  * Prepare the NOD email content.
  * 
  * @param	arr		$nod			Required: The NOD offer data
  * @param	int		$discount_id	Required: The NOD offer discount ID
  *
  * @return	arr		Array of prepared email data
  */
 public function prepare_email($nod, $discount_id)
 {
     $payment_data = edd_get_payment_meta($nod['payment_id']);
     $from_name = edd_get_option('from_name', wp_specialchars_decode(get_bloginfo('name'), ENT_QUOTES));
     $from_name = apply_filters('nod_offer_from_name', $from_name, $nod['payment_id'], $payment_data);
     $from_email = edd_get_option('from_email', get_bloginfo('admin_email'));
     $from_email = apply_filters('nod_offer_from_address', $from_email, $nod['payment_id'], $payment_data);
     $to_email = edd_get_payment_user_email($nod['payment_id']);
     $subject = EDD_NOD()->settings->email_subject;
     $subject = apply_filters('nod_offer_subject', wp_strip_all_tags($subject), $nod['payment_id']);
     $subject = edd_do_email_tags($subject, $nod['payment_id']);
     $subject = edd_nod_do_email_tags($subject, $discount_id);
     $heading = EDD_NOD()->settings->email_heading;
     $heading = edd_do_email_tags($heading, $nod['payment_id']);
     $heading = edd_nod_do_email_tags($heading, $discount_id);
     $heading = apply_filters('nod_offer_heading', $heading, $nod['payment_id'], $payment_data);
     $attachments = apply_filters('nod_offer_attachments', array(), $nod['payment_id'], $payment_data);
     $message = edd_nod_do_email_tags(edd_nod_get_email_body_content($discount_id, $nod['payment_id'], $payment_data), $discount_id);
     $message = edd_do_email_tags($message, $nod['payment_id']);
     return array('from_name' => $from_name, 'from_email' => $from_email, 'to_email' => $to_email, 'subject' => $subject, 'heading' => $heading, 'attachments' => $attachments, 'message' => $message);
 }
/**
 * Email the product update to the customer in a customizable message
 *
 * @param int $payment_id Payment ID
 * @param int $email_id Email ID for a edd_pup_email post-type
 * @return void
 */
function edd_pup_ajax_send_email($payment_id, $email_id, $test_mode = null)
{
    $userid = get_current_user_id();
    $emailpost = get_post($email_id);
    $emailmeta = get_post_custom($email_id);
    $payment_data = edd_get_payment_meta($payment_id);
    $email = edd_get_payment_user_email($payment_id);
    $from_name = $emailmeta['_edd_pup_from_name'][0];
    $from_email = $emailmeta['_edd_pup_from_email'][0];
    $attachments = apply_filters('edd_pup_attachments', array(), $payment_id, $payment_data);
    $lognotes = edd_get_option('edd_pup_log_notes');
    add_filter('edd_email_template', 'edd_pup_template');
    /* If subject doesn't use tags (and thus is the same for each customer)
     * then store it in a transient for quick access on subsequent loops. */
    $subject = get_transient('edd_pup_subject_' . $userid);
    if (false === $subject || $emailmeta['_edd_pup_subject'][0] != $subject) {
        if (empty($emailmeta['_edd_pup_subject'][0])) {
            $subject = '(no subject)';
            wp_update_post(array('ID' => $email_id, 'post_excerpt' => $subject));
            update_post_meta($email_id, '_edd_pup_subject', $subject);
            set_transient('edd_pup_subject_' . $userid, $subject, 60 * 60);
        } else {
            $subject = edd_do_email_tags($emailmeta['_edd_pup_subject'][0], $payment_id);
            if ($subject == $emailmeta['_edd_pup_subject'][0]) {
                set_transient('edd_pup_subject_' . $userid, $subject, 60 * 60);
            }
        }
    }
    if (version_compare(get_option('edd_version'), '2.1') >= 0) {
        $edd_emails = new EDD_emails();
        $message = edd_do_email_tags($emailpost->post_content, $payment_id);
        $edd_emails->__set('from_name', $from_name);
        $edd_emails->__set('from_address', $from_email);
        $mailresult = isset($test_mode) ? true : $edd_emails->send($email, $subject, $message, $attachments);
    } else {
        $email_body_header = get_transient('edd_pup_email_body_header_' . $userid);
        if (false === $email_body_header) {
            $email_body_header = edd_get_email_body_header();
            set_transient('edd_pup_email_body_header_' . $userid, $email_body_header, 60 * 60);
        }
        $email_body_footer = get_transient('edd_pup_email_body_footer_' . $userid);
        if (false === $email_body_footer) {
            $email_body_footer = edd_get_email_body_footer();
            set_transient('edd_pup_email_body_footer_' . $userid, $email_body_footer, 60 * 60);
        }
        $headers = "From: " . stripslashes_deep(html_entity_decode($from_name, ENT_COMPAT, 'UTF-8')) . " <{$from_email}>\r\n";
        $headers .= "Reply-To: " . $from_email . "\r\n";
        $headers .= "Content-Type: text/html; charset=utf-8\r\n";
        $message = $email_body_header;
        $message .= apply_filters('edd_pup_message', edd_email_template_tags($emailpost->post_content, $payment_data, $payment_id), $payment_id, $payment_data);
        $message .= $email_body_footer;
        $mailresult = isset($test_mode) ? true : wp_mail($email, $subject, $message, $headers, $attachments);
    }
    // Update payment notes to log this email being sent
    if (!isset($lognotes['sent'])) {
        edd_insert_payment_note($payment_id, 'Sent product update email "' . $subject . '" <a href="' . admin_url('edit.php?post_type=download&page=edd-prod-updates&view=view_pup_email&id=' . $email_id) . '">View Email</a>');
    }
    return $mailresult;
}
/**
 * Send test email
 * 
 * @todo remove edd_email_preview_templage_tags() function check when EDD supports it
 * @since 1.0
*/
function edd_ppe_test_purchase_receipt($receipt_id = 0)
{
    global $pagenow, $typenow;
    $receipt = edd_ppe_get_receipt($receipt_id);
    // default email subject
    $default_email_subject = __("Thanks for purchasing {download_name}", "edd-ppe");
    // default email body
    $default_email_body = __("Dear", "edd-ppe") . " {name},\n\n";
    $default_email_body .= __("Thank you for purchasing {download_name}. Please click on the link(s) below to download your files.", "edd-ppe") . "\n\n";
    $default_email_body .= "{download_list}\n\n";
    $default_email_body .= "{sitename}";
    // use new EDD 2.1 Email class
    if (class_exists('EDD_Emails')) {
        // we're on the main screen of edd receipts, get relevant subject and body for test email
        if (isset($_GET['page']) && 'edd-receipts' == $_GET['page'] && 'download' == $typenow && in_array($pagenow, array('edit.php'))) {
            $subject = $receipt->post_excerpt ? $receipt->post_excerpt : $default_email_subject;
            $body = $receipt->post_content ? $receipt->post_content : $default_email_body;
        }
        // run subject through email_preview_subject_template_tags() function
        $subject = apply_filters('edd_ppe_purchase_receipt_subject', edd_ppe_email_preview_subject_template_tags($subject, $receipt_id), 0, array());
        // run subject through the standard EDD email tag function
        $subject = edd_do_email_tags($subject, 0);
        // message
        $message = apply_filters('edd_ppe_purchase_body', $receipt->post_content ? $receipt->post_content : $default_email_body);
        $message = edd_email_preview_template_tags($body, 0);
        // add download name as email heading. Off by default
        // will introduce a checkbox in admin to turn all headings on rather than turn them on now which may mess up emails
        if (apply_filters('edd_ppe_email_heading', false)) {
            EDD()->emails->__set('heading', get_the_title($product_id));
        }
        EDD()->emails->send(edd_get_admin_notice_emails(), $subject, $message);
    } else {
        // we're on the main screen of edd receipts, get relevant subject and body for test email
        if (isset($_GET['page']) && 'edd-receipts' == $_GET['page'] && 'download' == $typenow && in_array($pagenow, array('edit.php'))) {
            $subject = $receipt->post_excerpt ? $receipt->post_excerpt : $default_email_subject;
            $body = $receipt->post_content ? $receipt->post_content : $default_email_body;
        }
        // run subject through email_preview_subject_template_tags() function
        $subject = apply_filters('edd_ppe_purchase_receipt_subject', edd_ppe_email_preview_subject_template_tags($subject, $receipt_id), 0, array());
        $message = edd_get_email_body_header();
        // will remove the edd_email_preview_templage_tags() function when new EDD version is released
        $message .= apply_filters('edd_purchase_receipt', function_exists('edd_email_preview_template_tags') ? edd_email_preview_template_tags($body) : edd_email_preview_templage_tags($body), null, null);
        $message .= edd_get_email_body_footer();
        $from_name = isset($edd_options['from_name']) ? $edd_options['from_name'] : get_bloginfo('name');
        $from_email = isset($edd_options['from_email']) ? $edd_options['from_email'] : get_option('admin_email');
        $headers = "From: " . stripslashes_deep(html_entity_decode($from_name, ENT_COMPAT, 'UTF-8')) . " <{$from_email}>\r\n";
        $headers .= "Reply-To: " . $from_email . "\r\n";
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/html; charset=utf-8\r\n";
        $headers = apply_filters('edd_test_purchase_headers', $headers);
        wp_mail(edd_get_admin_notice_emails(), $subject, $message, $headers);
    }
}
/**
 * Default pre-approval email body for admin
 *
 * @since 1.0
 */
function edd_pre_approval_emails_get_admin_email_body($payment_id = 0, $payment_data = array())
{
    global $edd_options;
    $user_info = maybe_unserialize($payment_data['user_info']);
    $email = edd_get_payment_user_email($payment_id);
    if (isset($user_info['id']) && $user_info['id'] > 0) {
        $user_data = get_userdata($user_info['id']);
        $name = $user_data->display_name;
    } elseif (isset($user_info['first_name']) && isset($user_info['last_name'])) {
        $name = $user_info['first_name'] . ' ' . $user_info['last_name'];
    } else {
        $name = $email;
    }
    $gateway = edd_get_gateway_admin_label(get_post_meta($payment_id, '_edd_payment_gateway', true));
    $email_body = __('Hello', 'edd-pre-approval-emails') . "\n\n" . __('A new pledge has been made', 'edd-pre-approval-emails') . ".\n\n";
    $email_body .= sprintf(__('%s pledged:', 'edd-pre-approval-emails'), edd_get_label_plural()) . "\n\n";
    $email_body .= edd_pre_approval_emails_get_download_list($payment_data) . "\n\n";
    $email_body .= __('Pledged by: ', 'edd-pre-approval-emails') . " " . html_entity_decode($name, ENT_COMPAT, 'UTF-8') . "\n";
    $email_body .= __('Amount: ', 'edd-pre-approval-emails') . " " . html_entity_decode(edd_currency_filter(edd_format_amount(edd_get_payment_amount($payment_id))), ENT_COMPAT, 'UTF-8') . "\n";
    $email_body .= __('Payment Method: ', 'edd-pre-approval-emails') . " " . $gateway . "\n\n";
    $email_body = edd_do_email_tags($email_body, $payment_id);
    return apply_filters('edd_pledge_notification', wpautop($email_body), $payment_id, $payment_data);
}