/** * 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); }