/**
  * 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;
 }
/**
 * Checks to see if the required products are in the cart
 *
 * @since 1.5
 * @param int $code_id Discount ID
 * @return bool $ret Are required products in the cart?
 */
function edd_discount_product_reqs_met($code_id = null)
{
    $product_reqs = edd_get_discount_product_reqs($code_id);
    $condition = edd_get_discount_product_condition($code_id);
    $excluded_ps = edd_get_discount_excluded_products($code_id);
    $cart_items = edd_get_cart_contents();
    $cart_ids = $cart_items ? wp_list_pluck($cart_items, 'id') : null;
    $ret = false;
    if (empty($product_reqs) && empty($excluded_ps)) {
        $ret = true;
    }
    // Normalize our data for product requiremetns, exlusions and cart data
    // First absint the items, then sort, and reset the array keys
    $product_reqs = array_map('absint', $product_reqs);
    asort($product_reqs);
    $product_reqs = array_values($product_reqs);
    $excluded_ps = array_map('absint', $excluded_ps);
    asort($excluded_ps);
    $excluded_ps = array_values($excluded_ps);
    $cart_ids = array_map('absint', $cart_ids);
    asort($cart_ids);
    $cart_ids = array_values($cart_ids);
    // Ensure we have requirements before proceeding
    if (!$ret && !empty($product_reqs)) {
        switch ($condition) {
            case 'all':
                // Default back to true
                $ret = true;
                foreach ($product_reqs as $download_id) {
                    if (!edd_item_in_cart($download_id)) {
                        edd_set_error('edd-discount-error', __('The product requirements for this discount are not met.', 'edd'));
                        $ret = false;
                        break;
                    }
                }
                break;
            default:
                // Any
                foreach ($product_reqs as $download_id) {
                    if (edd_item_in_cart($download_id)) {
                        $ret = true;
                        break;
                    }
                }
                if (!$ret) {
                    edd_set_error('edd-discount-error', __('The product requirements for this discount are not met.', 'edd'));
                }
                break;
        }
    } else {
        $ret = true;
    }
    if (!empty($excluded_ps)) {
        // Check that there are products other than excluded ones in the cart
        if ($cart_ids == $excluded_ps) {
            edd_set_error('edd-discount-error', __('This discount is not valid for the cart contents.', 'edd'));
            $ret = false;
        }
    }
    return (bool) apply_filters('edd_is_discount_products_req_met', $ret, $code_id, $condition);
}
/**
 * Retrieves the total discounted amount on the cart
 *
 * @since 1.4.1
 * @param array $discounts Discount codes
 * @return float $discounted_amount Total discounted amount
 */
function edd_get_cart_discounted_amount($discounts = false)
{
    if (empty($discounts)) {
        $discounts = edd_get_cart_discounts();
    }
    // Setup the array of discounts
    if (!empty($_POST['edd-discount']) && empty($discounts)) {
        // Check for a posted discount
        $posted_discount = isset($_POST['edd-discount']) ? trim($_POST['edd-discount']) : false;
        if ($posted_discount) {
            $discounts = array();
            $discounts[] = $posted_discount;
        }
    }
    // Return 0.00 if no discounts present
    if (empty($discounts)) {
        return 0.0;
    }
    $subtotal = edd_get_cart_subtotal($tax = false);
    $amounts = array();
    $discounted_items = array();
    foreach ($discounts as $discount) {
        $code_id = edd_get_discount_id_by_code($discount);
        $reqs = edd_get_discount_product_reqs($code_id);
        // Make sure requirements are set and that this discount shouldn't apply to the whole cart
        if (!empty($reqs) && edd_is_discount_not_global($code_id)) {
            // This is a product(s) specific discount
            $condition = edd_get_discount_product_condition($code_id);
            $cart_items = edd_get_cart_contents();
            foreach ($reqs as $download_id) {
                if (edd_item_in_cart($download_id)) {
                    $cart_key = edd_get_item_position_in_cart($download_id);
                    $price = edd_get_cart_item_price($download_id, $cart_items[$cart_key]['options']);
                    $amount = edd_get_discounted_amount($discount, $price);
                    $discounted_items[] = $price - $amount;
                }
            }
        } else {
            // This is a global cart discount
            $subtotal = edd_get_cart_subtotal();
            $amount = edd_get_discounted_amount($discount, $subtotal);
            $amounts[] = $subtotal - $amount;
        }
    }
    // Add up the total amount
    $discounted_amount = 0.0;
    $item_discount = array_sum($discounted_items);
    $global_discount = array_sum($amounts);
    $discounted_amount += $item_discount;
    $discounted_amount += $global_discount;
    return apply_filters('edd_get_cart_discounted_amount', edd_sanitize_amount($discounted_amount));
}
 * @copyright   Copyright (c) 2014, Pippin Williamson
 * @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>
/**
 * Checks to see if the required products are in the cart
 *
 * @since 1.5
 * @param int $code_id Discount ID
 * @return bool $ret Are required products in the cart?
 */
function edd_discount_product_reqs_met($code_id = null)
{
    $product_reqs = edd_get_discount_product_reqs($code_id);
    $condition = edd_get_discount_product_condition($code_id);
    $excluded_ps = edd_get_discount_excluded_products($code_id);
    $cart_items = edd_get_cart_contents();
    $cart_ids = $cart_items ? wp_list_pluck($cart_items, 'id') : null;
    $ret = false;
    if (empty($product_reqs)) {
        $ret = true;
    }
    // Ensure we have requirements before proceeding
    if (!$ret) {
        switch ($condition) {
            case 'all':
                // Default back to true
                $ret = true;
                foreach ($product_reqs as $download_id) {
                    if (!edd_item_in_cart($download_id)) {
                        edd_set_error('edd-discount-error', __('The product requirements for this discount are not met.', 'edd'));
                        $ret = false;
                        break;
                    }
                }
                break;
            default:
                // Any
                foreach ($product_reqs as $download_id) {
                    if (edd_item_in_cart($download_id)) {
                        $ret = true;
                        break;
                    }
                }
                if (!$ret) {
                    edd_set_error('edd-discount-error', __('The product requirements for this discount are not met.', 'edd'));
                }
                break;
        }
    }
    if ($excluded_ps) {
        // Check that there are products other than excluded ones in the cart
        if ($cart_ids == $excluded_ps) {
            edd_set_error('edd-discount-error', __('This discount is not valid for the cart contents.', 'edd'));
            $ret = false;
        }
    }
    return (bool) apply_filters('edd_is_discount_products_req_met', $ret, $code_id, $condition);
}