/**
  * Process Get Discounts API Request
  *
  * @access public
  * @since 1.6
  * @global object $wpdb Used to query the database using the WordPress
  *   Database API
  * @param int $discount Discount ID
  * @return array $discounts Multidimensional array of the discounts
  */
 public function get_discounts($discount = null)
 {
     $discount_list = array();
     if (!user_can($this->user_id, 'manage_shop_discounts') && !$this->override) {
         return $discount_list;
     }
     $error = array();
     if (empty($discount)) {
         global $wpdb;
         $paged = $this->get_paged();
         $per_page = $this->per_page();
         $discounts = edd_get_discounts(array('posts_per_page' => $per_page, 'paged' => $paged));
         $count = 0;
         if (empty($discounts)) {
             $error['error'] = __('No discounts found!', 'easy-digital-downloads');
             return $error;
         }
         foreach ($discounts as $discount) {
             $discount_list['discounts'][$count]['ID'] = $discount->ID;
             $discount_list['discounts'][$count]['name'] = $discount->post_title;
             $discount_list['discounts'][$count]['code'] = edd_get_discount_code($discount->ID);
             $discount_list['discounts'][$count]['amount'] = edd_get_discount_amount($discount->ID);
             $discount_list['discounts'][$count]['min_price'] = edd_get_discount_min_price($discount->ID);
             $discount_list['discounts'][$count]['type'] = edd_get_discount_type($discount->ID);
             $discount_list['discounts'][$count]['uses'] = edd_get_discount_uses($discount->ID);
             $discount_list['discounts'][$count]['max_uses'] = edd_get_discount_max_uses($discount->ID);
             $discount_list['discounts'][$count]['start_date'] = edd_get_discount_start_date($discount->ID);
             $discount_list['discounts'][$count]['exp_date'] = edd_get_discount_expiration($discount->ID);
             $discount_list['discounts'][$count]['status'] = $discount->post_status;
             $discount_list['discounts'][$count]['product_requirements'] = edd_get_discount_product_reqs($discount->ID);
             $discount_list['discounts'][$count]['requirement_condition'] = edd_get_discount_product_condition($discount->ID);
             $discount_list['discounts'][$count]['global_discount'] = edd_is_discount_not_global($discount->ID);
             $discount_list['discounts'][$count]['single_use'] = edd_discount_is_single_use($discount->ID);
             $count++;
         }
     } else {
         if (is_numeric($discount) && get_post($discount)) {
             $discount_list['discounts'][0]['ID'] = $discount;
             $discount_list['discounts'][0]['name'] = get_post_field('post_title', $discount);
             $discount_list['discounts'][0]['code'] = edd_get_discount_code($discount);
             $discount_list['discounts'][0]['amount'] = edd_get_discount_amount($discount);
             $discount_list['discounts'][0]['min_price'] = edd_get_discount_min_price($discount);
             $discount_list['discounts'][0]['type'] = edd_get_discount_type($discount);
             $discount_list['discounts'][0]['uses'] = edd_get_discount_uses($discount);
             $discount_list['discounts'][0]['max_uses'] = edd_get_discount_max_uses($discount);
             $discount_list['discounts'][0]['start_date'] = edd_get_discount_start_date($discount);
             $discount_list['discounts'][0]['exp_date'] = edd_get_discount_expiration($discount);
             $discount_list['discounts'][0]['status'] = get_post_field('post_status', $discount);
             $discount_list['discounts'][0]['product_requirements'] = edd_get_discount_product_reqs($discount);
             $discount_list['discounts'][0]['requirement_condition'] = edd_get_discount_product_condition($discount);
             $discount_list['discounts'][0]['global_discount'] = edd_is_discount_not_global($discount);
             $discount_list['discounts'][0]['single_use'] = edd_discount_is_single_use($discount);
         } else {
             $error['error'] = sprintf(__('Discount %s not found!', 'easy-digital-downloads'), $discount);
             return $error;
         }
     }
     return $discount_list;
 }
/**
 * Is Discount Used
 *
 * Checks to see if a user has already used a discount.
 *
 * @since 1.1.5
 *
 * @param string $code
 * @param string $user
 * @param int $code_id (since 1.5) ID of the discount code to check
 *
 * @return bool $return
 */
function edd_is_discount_used($code = null, $user = '', $code_id = 0)
{
    $return = false;
    if (empty($code_id)) {
        $code_id = edd_get_discount_id_by_code($code);
        if (empty($code_id)) {
            return false;
            // No discount was found
        }
    }
    if (edd_discount_is_single_use($code_id)) {
        $payments = array();
        if (EDD()->customers->installed()) {
            $by_user_id = is_email($user) ? false : true;
            $customer = new EDD_Customer($user, $by_user_id);
            $payments = explode(',', $customer->payment_ids);
        } else {
            $user_found = false;
            if (is_email($user)) {
                $user_found = true;
                // All we need is the email
                $key = '_edd_payment_user_email';
                $value = $user;
            } else {
                $user_data = get_user_by('login', $user);
                if ($user_data) {
                    $user_found = true;
                    $key = '_edd_payment_user_id';
                    $value = $user_data->ID;
                }
            }
            if ($user_found) {
                $query_args = array('post_type' => 'edd_payment', 'meta_query' => array(array('key' => $key, 'value' => $value, 'compare' => '=')), 'fields' => 'ids');
                $payments = get_posts($query_args);
                // Get all payments with matching email
            }
        }
        if ($payments) {
            foreach ($payments as $payment) {
                // Check all matching payments for discount code.
                $payment_meta = edd_get_payment_meta($payment);
                $user_info = maybe_unserialize($payment_meta['user_info']);
                if ($user_info['discount'] == $code) {
                    edd_set_error('edd-discount-error', __('This discount has already been redeemed.', 'edd'));
                    $return = true;
                }
            }
        }
    }
    return apply_filters('edd_is_discount_used', $return, $code, $user);
}
/**
 * Is Discount Used
 *
 * Checks to see if a user has already used a discount.
 *
 * @since 1.1.5
 *
 * @param string $code
 * @param string $user
 * @param int $code_id (since 1.5) ID of the discount code to check
 * @param bool $set_error Whether an error message be set in session
 *
 * @return bool $return
 */
function edd_is_discount_used($code = null, $user = '', $code_id = 0, $set_error = true)
{
    $return = false;
    if (empty($code_id)) {
        $code_id = edd_get_discount_id_by_code($code);
        if (empty($code_id)) {
            return false;
            // No discount was found
        }
    }
    if (edd_discount_is_single_use($code_id)) {
        $payments = array();
        if (EDD()->customers->installed()) {
            $by_user_id = is_email($user) ? false : true;
            $customer = new EDD_Customer($user, $by_user_id);
            $payments = explode(',', $customer->payment_ids);
        } else {
            $user_found = false;
            if (is_email($user)) {
                $user_found = true;
                // All we need is the email
                $key = '_edd_payment_user_email';
                $value = $user;
            } else {
                $user_data = get_user_by('login', $user);
                if ($user_data) {
                    $user_found = true;
                    $key = '_edd_payment_user_id';
                    $value = $user_data->ID;
                }
            }
            if ($user_found) {
                $query_args = array('post_type' => 'edd_payment', 'meta_query' => array(array('key' => $key, 'value' => $value, 'compare' => '=')), 'fields' => 'ids');
                $payments = get_posts($query_args);
                // Get all payments with matching email
            }
        }
        if ($payments) {
            foreach ($payments as $payment) {
                $payment = new EDD_Payment($payment);
                if (empty($payment->discounts)) {
                    continue;
                }
                if (in_array($payment->status, array('abandoned', 'failed'))) {
                    continue;
                }
                $discounts = explode(',', $payment->discounts);
                if (is_array($discounts)) {
                    if (in_array(strtolower($code), $discounts)) {
                        if ($set_error) {
                            edd_set_error('edd-discount-error', __('This discount has already been redeemed.', 'easy-digital-downloads'));
                        }
                        $return = true;
                        break;
                    }
                }
            }
        }
    }
    return apply_filters('edd_is_discount_used', $return, $code, $user);
}
 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 * @since       1.0
 */
// Exit if accessed directly
if (!defined('ABSPATH')) {
    exit;
}
if (!isset($_GET['discount']) || !is_numeric($_GET['discount'])) {
    wp_die(__('Something went wrong.', 'edd'), __('Error', 'edd'));
}
$discount_id = absint($_GET['discount']);
$discount = edd_get_discount($discount_id);
$product_reqs = edd_get_discount_product_reqs($discount_id);
$excluded_products = edd_get_discount_excluded_products($discount_id);
$condition = edd_get_discount_product_condition($discount_id);
$single_use = edd_discount_is_single_use($discount_id);
$flat_display = edd_get_discount_type($discount_id) == 'flat' ? '' : ' style="display:none;"';
$percent_display = edd_get_discount_type($discount_id) == 'percent' ? '' : ' style="display:none;"';
$condition_display = empty($product_reqs) ? ' style="display:none;"' : '';
?>
<h2><?php 
_e('Edit Discount', 'edd');
?>
 - <a href="<?php 
echo admin_url('edit.php?post_type=download&page=edd-discounts');
?>
" class="button-secondary"><?php 
_e('Go Back', 'edd');
?>
</a></h2>
<form id="edd-edit-discount" action="" method="post">
/**
 * Is Discount Used
 *
 * Checks to see if a user has already used a discount.
 *
 * @since 1.1.5
 *
 * @param string $code
 * @param string $user
 * @param int $code_id (since 1.5) ID of the discount code to check
 *
 * @return bool $return
 */
function edd_is_discount_used($code = null, $user = '', $code_id = 0)
{
    $return = false;
    $user_found = true;
    if (empty($code_id)) {
        $code_id = edd_get_discount_id_by_code($code);
    }
    if (edd_discount_is_single_use($code_id)) {
        if (is_email($user)) {
            $user_found = true;
            // All we need is the email
            $key = '_edd_payment_user_email';
            $value = $user;
        } else {
            $user_data = get_user_by('login', $user);
            if ($user_data) {
                $key = '_edd_payment_user_id';
                $value = $user_data->ID;
            } else {
                $user_found = false;
                // Bail, no user found
            }
        }
        if ($user_found) {
            $query_args = array('post_type' => 'edd_payment', 'meta_query' => array(array('key' => $key, 'value' => $value, 'compare' => '=')), 'fields' => 'ids');
            $payments = get_posts($query_args);
            // Get all payments with matching email
            if ($payments) {
                foreach ($payments as $payment) {
                    // Check all matching payments for discount code.
                    $payment_meta = edd_get_payment_meta($payment);
                    $user_info = maybe_unserialize($payment_meta['user_info']);
                    if ($user_info['discount'] == $code) {
                        $return = true;
                    }
                }
            }
        }
    }
    return apply_filters('edd_is_discount_used', $return, $code, $user);
}