/**
 * Resend the Email Purchase Receipt. (This can be done from the Payment History page)
 *
 * @since 1.0
 * @param array $data Payment Data
 * @return void
 */
function edd_resend_purchase_receipt($data)
{
    $purchase_id = absint($data['purchase_id']);
    if (empty($purchase_id)) {
        return;
    }
    if (!current_user_can('edit_shop_payments')) {
        wp_die(__('You do not have permission to edit this payment record', 'easy-digital-downloads'), __('Error', 'easy-digital-downloads'), array('response' => 403));
    }
    $email = !empty($_GET['email']) ? sanitize_text_field($_GET['email']) : '';
    if (empty($email)) {
        $customer = new EDD_Customer(edd_get_payment_customer_id($purchase_id));
        $email = $customer->email;
    }
    edd_email_purchase_receipt($purchase_id, false, $email);
    // Grab all downloads of the purchase and update their file download limits, if needed
    // This allows admins to resend purchase receipts to grant additional file downloads
    $downloads = edd_get_payment_meta_cart_details($purchase_id, true);
    if (is_array($downloads)) {
        foreach ($downloads as $download) {
            $limit = edd_get_file_download_limit($download['id']);
            if (!empty($limit)) {
                edd_set_file_download_limit_override($download['id'], $purchase_id);
            }
        }
    }
    wp_redirect(add_query_arg(array('edd-message' => 'email_sent', 'edd-action' => false, 'purchase_id' => false)));
    exit;
}
Beispiel #2
0
 public function send_renewal_reminder($license_id = 0, $notice_id = 0)
 {
     global $edd_options;
     if (empty($license_id)) {
         return;
     }
     $send = true;
     $license = get_post($license_id);
     $send = apply_filters('edd_sl_send_renewal_reminder', $send, $license_id, $notice_id);
     if (!$license || 'edd_license' != $license->post_type || !$send || !empty($license->post_parent)) {
         return;
     }
     $customer = false;
     if (class_exists('EDD_Customer')) {
         $payment_id = get_post_meta($license->ID, '_edd_sl_payment_id', true);
         $customer_id = edd_get_payment_customer_id($payment_id);
         $customer = new EDD_Customer($customer_id);
     }
     if (empty($customer->id)) {
         // Remove the post title to get just the email
         $title = $license->post_title;
         $title_pos = strpos($title, '-') + 1;
         $length = strlen($title);
         $email_to = substr($title, $title_pos, $length);
     }
     $email_to = !empty($customer->id) ? $customer->email : $email_to;
     $notice = edd_sl_get_renewal_notice($notice_id);
     $message = !empty($notice['message']) ? $notice['message'] : __("Hello {name},\n\nYour license key for {product_name} is about to expire.\n\nIf you wish to renew your license, simply click the link below and follow the instructions.\n\nYour license expires on: {expiration}.\n\nYour expiring license key is: {license_key}.\n\nRenew now: {renewal_link}.", "edd_sl");
     $message = $this->filter_reminder_template_tags($message, $license_id);
     $subject = !empty($notice['subject']) ? $notice['subject'] : __('Your License Key is About to Expire', 'edd_sl');
     $subject = $this->filter_reminder_template_tags($subject, $license_id);
     $message = stripslashes($message);
     $subject = stripslashes($subject);
     if (class_exists('EDD_Emails')) {
         $sent = EDD()->emails->send($email_to, $subject, $message);
     } else {
         $from_name = get_bloginfo('name');
         $from_email = get_bloginfo('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";
         $sent = wp_mail($email_to, $subject, $message, $headers);
     }
     if ($sent) {
         $log_id = wp_insert_post(array('post_title' => __('LOG - Renewal Notice Sent', 'edd_sl'), 'post_name' => 'log-notice-sent-' . $license_id . '-' . md5(time()), 'post_type' => 'edd_license_log', 'post_status' => 'publish'));
         add_post_meta($log_id, '_edd_sl_log_license_id', $license_id);
         add_post_meta($log_id, '_edd_sl_renewal_notice_id', (int) $notice_id);
         wp_set_object_terms($log_id, 'renewal_notice', 'edd_log_type', false);
         add_post_meta($license_id, sanitize_key('_edd_sl_renewal_sent_' . $notice['send_period']), time());
         // Prevent renewal notices from being sent more than once
     }
 }
 /**
  * Get the Export Data
  *
  * @access public
  * @since 2.4
  *   Database API
  * @global object $edd_logs EDD Logs Object
  * @return array $data The data for the CSV file
  */
 public function get_data()
 {
     $data = array();
     if (!empty($this->download)) {
         // Export customers of a specific product
         global $edd_logs;
         $args = array('post_parent' => absint($this->download), 'log_type' => 'sale', 'posts_per_page' => 30, 'paged' => $this->step);
         if (null !== $this->price_id) {
             $args['meta_query'] = array(array('key' => '_edd_log_price_id', 'value' => (int) $this->price_id));
         }
         $logs = $edd_logs->get_connected_logs($args);
         if ($logs) {
             foreach ($logs as $log) {
                 $payment_id = get_post_meta($log->ID, '_edd_log_payment_id', true);
                 $customer_id = edd_get_payment_customer_id($payment_id);
                 $customer = new EDD_Customer($customer_id);
                 $data[] = array('id' => $customer->id, 'name' => $customer->name, 'email' => $customer->email, 'purchases' => $customer->purchase_count, 'amount' => edd_format_amount($customer->purchase_value));
             }
         }
     } else {
         // Export all customers
         $offset = 30 * ($this->step - 1);
         $customers = EDD()->customers->get_customers(array('number' => 30, 'offset' => $offset));
         $i = 0;
         foreach ($customers as $customer) {
             $data[$i]['id'] = $customer->id;
             $data[$i]['name'] = $customer->name;
             $data[$i]['email'] = $customer->email;
             $data[$i]['purchases'] = $customer->purchase_count;
             $data[$i]['amount'] = edd_format_amount($customer->purchase_value);
             $i++;
         }
     }
     $data = apply_filters('edd_export_get_data', $data);
     $data = apply_filters('edd_export_get_data_' . $this->export_type, $data);
     return $data;
 }
 /**
  * Render the Customer Column
  *
  * @access public
  * @since 2.4.3
  * @param array $payment Contains all the data of the payment
  * @return string Data shown in the User column
  */
 public function column_customer($payment)
 {
     $customer_id = edd_get_payment_customer_id($payment->ID);
     if (!empty($customer_id)) {
         $customer = new EDD_Customer($customer_id);
         $value = '<a href="' . esc_url(admin_url("edit.php?post_type=download&page=edd-customers&view=overview&id={$customer_id}")) . '">' . $customer->name . '</a>';
     } else {
         $email = edd_get_payment_user_email($payment->ID);
         $value = '<a href="' . esc_url(admin_url("edit.php?post_type=download&page=edd-payment-history&s={$email}")) . '">' . __('(customer missing)', 'easy-digital-downloads') . '</a>';
     }
     return apply_filters('edd_payments_table_column', $value, $payment->ID, 'user');
 }
							<?php 
do_action('edd_view_order_details_billing_before', $payment_id);
?>

							<div id="edd-customer-details" class="postbox">
								<h3 class="hndle">
									<span><?php 
_e('Customer Details', 'edd');
?>
</span>
								</h3>
								<div class="inside edd-clearfix">

									<?php 
$customer = new EDD_Customer(edd_get_payment_customer_id($payment_id));
?>

									<div class="column-container customer-info">
										<div class="column">
											<?php 
echo EDD()->html->customer_dropdown(array('selected' => $customer->id, 'name' => 'customer-id'));
?>
										</div>
										<div class="column">
											<input type="hidden" name="edd-current-customer" value="<?php 
echo $customer->id;
?>
" />
										</div>
										<div class="column">
/**
 * Reduces earnings and sales stats when a purchase is refunded
 *
 * @since 1.8.2
 * @param $data Arguments passed
 * @return void
 */
function edd_undo_purchase_on_refund($payment_id, $new_status, $old_status)
{
    if ('publish' != $old_status && 'revoked' != $old_status) {
        return;
    }
    if ('refunded' != $new_status) {
        return;
    }
    $downloads = edd_get_payment_meta_cart_details($payment_id);
    if ($downloads) {
        foreach ($downloads as $download) {
            edd_undo_purchase($download['id'], $payment_id);
        }
    }
    // Decrease store earnings
    $amount = edd_get_payment_amount($payment_id);
    edd_decrease_total_earnings($amount);
    // Decrement the stats for the customer
    $customer_id = edd_get_payment_customer_id($payment_id);
    if ($customer_id) {
        $customer = new EDD_Customer($customer_id);
        $customer->decrease_value($amount);
        $customer->decrease_purchase_count();
    }
    // Clear the This Month earnings (this_monththis_month is NOT a typo)
    delete_transient(md5('edd_earnings_this_monththis_month'));
}
 /**
  * Updates license details when a payment is updated
  *
  * @param int $payment_id
  * @return void
  */
 public function update_licenses_on_payment_update($payment_id)
 {
     if (version_compare(EDD_VERSION, '2.3', '>=')) {
         $customer_id = edd_get_payment_customer_id($payment_id);
         $customer = new EDD_Customer($customer_id);
         $user_id = $customer->user_id;
         $new_email = $customer->email;
     } else {
         $user_id = intval($_POST['edd-payment-user-id']);
         $new_email = sanitize_text_field($_POST['edd-payment-user-email']);
     }
     $licenses = self::get_licenses_of_purchase($payment_id);
     if ($licenses) {
         foreach ($licenses as $license) {
             // Update our user IDs
             update_post_meta($license->ID, '_edd_sl_user_id', $user_id);
             // Update the email address
             $title = $license->post_title;
             $args = array_map('trim', explode('-', $title));
             $title_pos = strpos($title, '-') + 1;
             $length = strlen($title);
             $email = substr($title, $title_pos, $length);
             if (!$email || $email != $new_email) {
                 $new_title = $args[0] . ' - ' . $new_email;
                 $post_args = array('ID' => $license->ID, 'post_title' => $new_title);
                 wp_update_post($post_args);
             }
         }
     }
 }
 /**
  * Process Get Downloads API Request to retrieve download logs
  *
  * @access public
  * @since 2.5
  * @author Daniel J Griffiths
  *
  * @param  int $customer_id The customer ID you wish to retrieve download logs for
  * @return array            Multidimensional array of the download logs
  */
 public function get_download_logs($customer_id = 0)
 {
     global $edd_logs;
     $downloads = array();
     $errors = array();
     $paged = $this->get_paged();
     $per_page = $this->per_page();
     $offset = $per_page * ($paged - 1);
     $meta_query = array();
     if (!empty($customer_id)) {
         $customer = new EDD_Customer($customer_id);
         $invalid_customer = false;
         if ($customer->id > 0) {
             $meta_query['relation'] = 'OR';
             if ($customer->id > 0) {
                 // Based on customer->user_id
                 $meta_query[] = array('key' => '_edd_log_user_id', 'value' => $customer->user_id);
             }
             // Based on customer->email
             $meta_query[] = array('key' => '_edd_log_user_info', 'value' => $customer->email, 'compare' => 'LIKE');
         } else {
             $invalid_customer = true;
         }
     }
     $query = array('log_type' => 'file_download', 'paged' => $paged, 'meta_query' => $meta_query, 'posts_per_page' => $per_page, 'update_post_meta_cache' => false, 'update_post_term_cache' => false);
     $logs = array();
     if (!$invalid_customer) {
         $logs = $edd_logs->get_connected_logs($query);
     }
     if (empty($logs)) {
         $error['error'] = __('No download logs found!', 'easy-digital-downloads');
         return $error;
     }
     foreach ($logs as $log) {
         $item = array();
         $log_meta = get_post_custom($log->ID);
         $user_info = isset($log_meta['_edd_log_user_info']) ? maybe_unserialize($log_meta['_edd_log_user_info'][0]) : array();
         $payment_id = isset($log_meta['_edd_log_payment_id']) ? $log_meta['_edd_log_payment_id'][0] : false;
         $payment_customer_id = edd_get_payment_customer_id($payment_id);
         $payment_customer = new EDD_Customer($payment_customer_id);
         $user_id = $payment_customer->user_id > 0 ? $payment_customer->user_id : false;
         $ip = $log_meta['_edd_log_ip'][0];
         $files = edd_get_payment_meta_downloads($payment_id);
         $files = edd_get_download_files($files[0]['id']);
         $file_id = (int) $log_meta['_edd_log_file_id'][0];
         $file_id = $file_id !== false ? $file_id : 0;
         $file_name = isset($files[$file_id]['name']) ? $files[$file_id]['name'] : null;
         $item = array('ID' => $log->ID, 'user_id' => $user_id, 'product_id' => $log->post_parent, 'product_name' => get_the_title($log->post_parent), 'customer_id' => $payment_customer_id, 'payment_id' => $payment_id, 'file' => $file_name, 'ip' => $ip, 'date' => $log->post_date);
         $item = apply_filters('edd_api_download_log_item', $item, $log, $log_meta);
         $downloads['download_logs'][] = $item;
     }
     return $downloads;
 }
/**
 * Deletes a Purchase
 *
 * @since 1.0
 * @global $edd_logs
 *
 * @uses EDD_Logging::delete_logs()
 *
 * @param int $payment_id Payment ID (default: 0)
 * @param bool $update_customer If we should update the customer stats (default:true)
 * @param bool $delete_download_logs If we should remove all file download logs associated with the payment (default:false)
 *
 * @return void
 */
function edd_delete_purchase($payment_id = 0, $update_customer = true, $delete_download_logs = false)
{
    global $edd_logs;
    $post = get_post($payment_id);
    if (!$post) {
        return;
    }
    $downloads = edd_get_payment_meta_downloads($payment_id);
    if (is_array($downloads)) {
        // Update sale counts and earnings for all purchased products
        foreach ($downloads as $download) {
            edd_undo_purchase($download['id'], $payment_id);
        }
    }
    $amount = edd_get_payment_amount($payment_id);
    $status = $post->post_status;
    $customer_id = edd_get_payment_customer_id($payment_id);
    $customer = new EDD_Customer($customer_id);
    if ($status == 'revoked' || $status == 'publish') {
        // Only decrease earnings if they haven't already been decreased (or were never increased for this payment)
        edd_decrease_total_earnings($amount);
        // Clear the This Month earnings (this_monththis_month is NOT a typo)
        delete_transient(md5('edd_earnings_this_monththis_month'));
        if ($customer->id && $update_customer) {
            // Decrement the stats for the customer
            $customer->decrease_purchase_count();
            $customer->decrease_value($amount);
        }
    }
    do_action('edd_payment_delete', $payment_id);
    if ($customer->id && $update_customer) {
        // Remove the payment ID from the customer
        $customer->remove_payment($payment_id);
    }
    // Remove the payment
    wp_delete_post($payment_id, true);
    // Remove related sale log entries
    $edd_logs->delete_logs(null, 'sale', array(array('key' => '_edd_log_payment_id', 'value' => $payment_id)));
    if ($delete_download_logs) {
        $edd_logs->delete_logs(null, 'file_download', array(array('key' => '_edd_log_payment_id', 'value' => $payment_id)));
    }
    do_action('edd_payment_deleted', $payment_id);
}
Beispiel #10
0
 public function fire_drip_expired_event($license_id = 0, $period = null)
 {
     // global $edd_options;
     if (empty($license_id) || empty($period) || !class_exists('edd_software_licensing')) {
         return;
     }
     //fetch the license
     $license = get_post($license_id);
     if (!$license || 'edd_license' != $license->post_type || !empty($license->post_parent)) {
         return;
     }
     //error_log(var_export($license,true));
     $customer = false;
     if (class_exists('EDD_Customer')) {
         $payment_id = get_post_meta($license->ID, '_edd_sl_payment_id', true);
         $customer_id = edd_get_payment_customer_id($payment_id);
         $customer = new EDD_Customer($customer_id);
     }
     //error_log(var_export($customer,true));
     //IF the customer ID is empty then use the payment to get the email info
     if (empty($customer->id)) {
         // Remove the post title to get just the email
         $title = $license->post_title;
         $title_pos = strpos($title, '-') + 1;
         $length = strlen($title);
         $email_to = substr($title, $title_pos, $length);
     }
     //Get the email.
     $customer_email = !empty($customer->id) ? $customer->email : $email_to;
     $customer_name = !empty($customer->id) ? $customer->name : null;
     //default to null
     //                $payment_id = get_post_meta( $license_id, '_edd_sl_payment_id', true );
     //                $user_info  = edd_get_payment_meta_user_info( $payment_id );
     //                $user_id    = edd_get_payment_user_id( $payment_id );
     //
     //                // Retrieve the customer name
     //                if ( $user_id ) {
     //                    $user_data     = get_userdata( $user_id );
     //                    $customer_name = $user_data->display_name;
     //                } elseif ( isset( $user_info['first_name'] ) ) {
     //                    $customer_name = $user_info['first_name'];
     //                } else {
     //                    $customer_name = $user_info['email'];
     //                }
     //These are custom fields on customer
     $license_key = edd_software_licensing()->get_license_key($license_id);
     $download_id = get_post_meta($license_id, '_edd_sl_download_id', true);
     $product_name = get_the_title($download_id);
     $expiration = edd_software_licensing()->get_license_expiration($license_id);
     $expiration = date(get_option('date_format'), $expiration);
     $discount_percent = edd_sl_get_renewal_discount_percentage($license_id);
     $renewal_link = apply_filters('edd_sl_renewal_link', edd_get_checkout_uri(array('edd_license_key' => $license_key, 'download_id' => $download_id)));
     //Fire the event
     error_log('FIRE DRIP EVENT:' . $period . '-' . $license_id);
     error_log($customer_name);
     error_log($license_key);
     error_log($product_name);
     error_log($expiration);
     error_log($discount_percent);
     error_log($renewal_link);
     return true;
     $text = str_replace('{name}', $customer_name, $text);
     $text = str_replace('{license_key}', $license_key, $text);
     $text = str_replace('{product_name}', $product_name, $text);
     $text = str_replace('{expiration}', $expiration, $text);
     if (!empty($discount)) {
         $text = str_replace('{renewal_discount}', $discount . '%', $text);
     }
     $text = str_replace('{renewal_link}', $renewal_link, $text);
     return $text;
     return false;
     //            $message    = $this->filter_reminder_template_tags( $message, $license_id );
     //
     //            $subject    = ! empty( $notice['subject'] ) ? $notice['subject'] : __( 'Your License Key is About to Expire', 'edd_sl' );
     //            $subject    = $this->filter_reminder_template_tags( $subject, $license_id );
     if ($sent) {
         $log_id = wp_insert_post(array('post_title' => __('LOG - Renewal Drip Event Fired', 'edd_sl'), 'post_name' => 'log-notice-sent-' . $license_id . '-' . md5(time()), 'post_type' => 'edd_license_log', 'post_status' => 'publish'));
         //'_edd_drip_sl_renewal_sent_
         add_post_meta($log_id, '_edd_sl_log_license_id', $license_id);
         add_post_meta($log_id, '_edd_sl_renewal_notice_id', (int) $notice_id);
         wp_set_object_terms($log_id, 'renewal_notice', 'edd_log_type', false);
         add_post_meta($license_id, sanitize_key('_edd_drip_sl_renewal_sent_' . $notice['send_period']), time());
         // Prevent renewal notices from being sent more than once
     }
 }
 /**
  * Render the Customer Column
  *
  * @access public
  * @since 2.4.3
  * @param array $payment Contains all the data of the payment
  * @return string Data shown in the User column
  */
 public function column_customer($payment)
 {
     $customer_id = edd_get_payment_customer_id($payment->ID);
     $customer = new EDD_Customer($customer_id);
     $value = '<a href="' . esc_url(add_query_arg(array('user' => urlencode($customer->email), 'paged' => false))) . '">' . $customer->name . '</a>';
     return apply_filters('edd_payments_table_column', $value, $payment->ID, 'user');
 }
/**
 * Get the user ID associated with a payment
 *
 * @since 1.5.1
 * @param int $payment_id Payment ID
 * @return string $user_id User ID
 */
function edd_get_payment_user_id($payment_id)
{
    $user_id = -1;
    // check the customer record first
    $customer_id = edd_get_payment_customer_id($payment_id);
    $customer = new EDD_Customer($customer_id);
    if (!empty($customer->user_id) && $customer->user_id > 0) {
        $user_id = $customer->user_id;
    }
    // check the payment meta if we're still not finding a user with the customer record
    if (empty($user_id) || $user_id < 1) {
        $payment_meta_user_id = edd_get_payment_meta($payment_id, '_edd_payment_user_id', true);
        if (!empty($payment_meta_user_id)) {
            $user_id = $payment_meta_user_id;
        }
    }
    // Last ditch effort is to connect payment email with a user in the user table
    if (empty($user_id) || $user_id < 1) {
        $payment_email = edd_get_payment_user_email($payment_id);
        $user = get_user_by('email', $payment_email);
        if (false !== $user) {
            $user_id = $user->ID;
        }
    }
    return apply_filters('edd_payment_user_id', (int) $user_id);
}
 /**
  * Runs once a purchase is completed.
  *
  * If NOD is enabled, store the purchase details into an array we can use during the offer email schedule
  *
  * @hook edd_complete_download_purchase 
  * @params	int		$payment_id			Required: Payment ID
  *
  * @return	void
  */
 public function new_purchase($payment_id)
 {
     // Exit here if the plugin is not enabled
     if (empty(EDD_NOD()->settings) || empty(EDD_NOD()->settings->enable)) {
         return;
     }
     $downloads = edd_get_payment_meta_downloads($payment_id);
     $payment_data = edd_get_payment_meta($payment_id);
     // Check for download and payment data
     if (empty($downloads) || empty($payment_data)) {
         return;
     }
     // If this purchase is not eligible for NOD offers, exit
     if (!edd_nod_download_is_eligible($downloads)) {
         return;
     }
     // If we do not apply offers to free downloads, check here
     $price = get_post_meta($payment_id, '_edd_payment_total', true);
     if (empty(EDD_NOD()->settings->free)) {
         if (empty($price) || $price < '1') {
             return;
         }
     }
     // If there is a minimum spend, check here
     $min = EDD_NOD()->settings->min_spend;
     if (!empty($min) && $min < get_post_meta($payment_id, '_edd_payment_total', true)) {
         return;
     }
     // Check if the customer is eligible for a NOD offer.
     $customer_id = edd_get_payment_customer_id($payment_id);
     if (empty($customer_id)) {
         return;
     }
     $customer = new EDD_Customer($customer_id);
     if (!$customer || !edd_nod_purchase_qualifies($customer->purchase_count)) {
         return;
     }
     // Before adding the new NOD
     do_action('nod_before_register', $payment_id, $customer_id, $downloads);
     // Add this download to our pending offers array
     $valid_from = date('Y-m-d H:i:s', strtotime("+" . EDD_NOD()->settings->send_after));
     $this->add_nod(array('download_id' => $downloads, 'payment_id' => $payment_id, 'customer_id' => $customer_id, 'total_cost' => edd_get_payment_amount($payment_id), 'send_offer' => date('Y-m-d H:i:s', strtotime("+" . EDD_NOD()->settings->send_after))));
     // After adding the new NOD
     do_action('nod_after_register', $payment_id, $customer_id, $downloads);
 }