/** * Returns the discounts that are global to the cart * * @return array A list of discounts that are global to the cart. */ function get_global_discounts() { $discounts = edd_get_cart_discounts(); if (empty($discounts)) { $discounts = array(); } $discounts = array_map(function ($discount_code) { $discount_id = edd_get_discount_id_by_code($discount_code); return array('code' => $discount_code, 'id' => $discount_id, 'name' => get_post_meta($discount_id, '_edd_discount_name', true)); }, $discounts); return array_filter($discounts, function ($discount) { return !edd_is_discount_not_global($discount['id']); }); }
/** * Checks whether discounts are still valid when removing items from the cart * * If a discount requires a certain product, and that product is no longer in the cart, the discount is removed * * @since 1.5.2 * * @param int $cart_key */ function edd_maybe_remove_cart_discount($cart_key = 0) { $discounts = edd_get_cart_discounts(); if (!$discounts) { return; } foreach ($discounts as $discount) { if (!edd_is_discount_valid($discount)) { edd_unset_cart_discount($discount); } } }
/** * Get Cart Amount * * @since 1.0 * @deprecated 1.9 * @param bool $add_taxes Whether to apply taxes (if enabled) (default: true) * @param bool $local_override Force the local opt-in param - used for when not reading $_POST (default: false) * @return float Total amount */ function edd_get_cart_amount($add_taxes = true, $local_override = false) { $backtrace = debug_backtrace(); _edd_deprecated_function(__FUNCTION__, '1.9', 'edd_get_cart_subtotal() or edd_get_cart_total()', $backtrace); $amount = edd_get_cart_subtotal(); if (!empty($_POST['edd-discount']) || edd_get_cart_discounts() !== false) { // Retrieve the discount stored in cookies $discounts = edd_get_cart_discounts(); // Check for a posted discount $posted_discount = isset($_POST['edd-discount']) ? trim($_POST['edd-discount']) : ''; if ($posted_discount && !in_array($posted_discount, $discounts)) { // This discount hasn't been applied, so apply it $amount = edd_get_discounted_amount($posted_discount, $amount); } if (!empty($discounts)) { // Apply the discounted amount from discounts already applied $amount -= edd_get_cart_discounted_amount(); } } if (edd_use_taxes() && edd_is_cart_taxed() && $add_taxes) { $tax = edd_get_cart_tax(); $amount += $tax; } if ($amount < 0) { $amount = 0.0; } return apply_filters('edd_get_cart_amount', $amount, $add_taxes, $local_override); }
/** * Purchase Form Validate Discounts * * @access private * @since 1.0.8.1 * @return string */ function edd_purchase_form_validate_discounts() { // Retrieve the discount stored in cookies $discounts = edd_get_cart_discounts(); $user = ''; if (isset($_POST['edd_user_login']) && !empty($_POST['edd_user_login'])) { $user = sanitize_text_field($_POST['edd_user_login']); } else { if (isset($_POST['edd_email']) && !empty($_POST['edd_email'])) { $user = sanitize_text_field($_POST['edd_email']); } else { if (is_user_logged_in()) { $user = wp_get_current_user()->user_email; } } } $error = false; // Check for valid discount(s) is present if (!empty($_POST['edd-discount']) && __('Enter discount', 'easy-digital-downloads') != $_POST['edd-discount']) { // Check for a posted discount $posted_discount = isset($_POST['edd-discount']) ? trim($_POST['edd-discount']) : false; // Add the posted discount to the discounts if ($posted_discount && (empty($discounts) || edd_multiple_discounts_allowed()) && edd_is_discount_valid($posted_discount, $user)) { edd_set_cart_discount($posted_discount); } } // If we have discounts, loop through them if (!empty($discounts)) { foreach ($discounts as $discount) { // Check if valid if (!edd_is_discount_valid($discount, $user)) { // Discount is not valid $error = true; } } } else { // No discounts return 'none'; } if ($error) { edd_set_error('invalid_discount', __('One or more of the discounts you entered is invalid', 'easy-digital-downloads')); } return implode(', ', $discounts); }
/** * Removes a discount code from the cart via ajax * * @since 1.7 * @return void */ function edd_ajax_remove_discount() { if (isset($_POST['code'])) { edd_unset_cart_discount(urldecode($_POST['code'])); $total = edd_get_cart_total(); $return = array('total' => html_entity_decode(edd_currency_filter(edd_format_amount($total)), ENT_COMPAT, 'UTF-8'), 'code' => $_POST['code'], 'discounts' => edd_get_cart_discounts(), 'html' => edd_get_cart_discounts_html()); echo json_encode($return); } edd_die(); }
/** * Sets the discount amount based on the upgrade fee * * @param $discount float The discount amount * @param $item array the cart item array * @return float */ function affwp_cart_item_discounted_amount($discounted_price, $discounts, $item, $price) { if (!function_exists('EDD')) { return $discounted_price; } if (!EDD()->session->get('is_upgrade')) { return $discounted_price; } $price_id = EDD()->session->get('upgrade_price_id'); $upgrade_discount = EDD()->session->get('upgrade_discount'); $cart_discounts = edd_get_cart_discounts(); if ($upgrade_discount && edd_cart_has_discounts()) { $discounted_price = $price - $upgrade_discount; foreach ($cart_discounts as $discount) { $discounted_price = edd_get_discounted_amount($discount, $discounted_price); } } return $discounted_price; }
/** * Discount remove icon */ function pp_edd_get_cart_discounts_html($html, $discounts, $rate, $remove_url) { if (!$discounts) { $discounts = edd_get_cart_discounts(); } if (!$discounts) { return; } $html = ''; foreach ($discounts as $discount) { $discount_id = edd_get_discount_id_by_code($discount); $rate = edd_format_discount_rate(edd_get_discount_type($discount_id), edd_get_discount_amount($discount_id)); $remove_url = add_query_arg(array('edd_action' => 'remove_cart_discount', 'discount_id' => $discount_id, 'discount_code' => $discount), edd_get_checkout_uri()); $svg = '<svg width="16" height="16" viewBox="0 0 16 16"><use xlink:href="' . get_stylesheet_directory_uri() . "/images/svg-defs.svg#icon-remove" . '"></use></svg>'; $html .= "<span class=\"edd_discount\">\n"; $html .= "<span class=\"edd_discount_rate\">{$discount} – {$rate}</span>\n"; $html .= "<a href=\"{$remove_url}\" data-code=\"{$discount}\" class=\"edd_discount_remove\">{$svg}</a>\n"; $html .= "</span>\n"; } return $html; }
function edd_downloads_ajax_apply_discount() { $existing_discount = edd_get_cart_discounts(); $discount_code = $_POST['code']; if (!empty($existing_discount) && in_array($discount_code, $existing_discount)) { $return['msg'] = __('This code has already been applied', 'edd_downloads'); edd_unset_error('edd-discount-error'); // Allow for custom discount code handling $return = apply_filters('edd_ajax_discount_response', $return); echo json_encode($return); } else { edd_ajax_apply_discount(); } edd_die(); }
/** * Get Cart Amount * * @since 1.0 * @param bool $add_taxes Whether to apply taxes (if enabled) (default: true) * @param bool $local_override Force the local opt-in param - used for when not reading $_POST (default: false) * @return float Total amount */ function edd_get_cart_amount($add_taxes = true, $local_override = false) { $amount = edd_get_cart_subtotal(false); if (!empty($_POST['edd-discount']) || edd_get_cart_discounts() !== false) { // Retrieve the discount stored in cookies $discounts = edd_get_cart_discounts(); // Check for a posted discount $posted_discount = isset($_POST['edd-discount']) ? trim($_POST['edd-discount']) : ''; if ($posted_discount && !in_array($posted_discount, $discounts)) { // This discount hasn't been applied, so apply it $amount = edd_get_discounted_amount($posted_discount, $amount); } if (!empty($discounts)) { // Apply the discounted amount from discounts already applied $amount -= edd_get_cart_discounted_amount(); } } if (edd_use_taxes() && $add_taxes) { if (edd_local_taxes_only() && (isset($_POST['edd_tax_opt_in']) || $local_override)) { // Add the tax amount for a local resident $tax = edd_get_cart_tax(); $amount += $tax; } elseif (!edd_local_taxes_only()) { // Add the global tax amount $tax = edd_get_cart_tax(); $amount += $tax; } } return apply_filters('edd_get_cart_amount', $amount, $add_taxes, $local_override); }
/** * Purchase Form Validate Discounts * * @access private * @since 1.0.8.1 * @return string */ function edd_purchase_form_validate_discounts() { // Retrieve the discount stored in cookies $discounts = edd_get_cart_discounts(); // Check for valid discount is present if (!empty($_POST['edd-discount']) || $discounts !== false) { if (empty($discounts)) { $discount = sanitize_text_field($_POST['edd-discount']); } else { // Use the discount stored in the cookies $discount = $discounts[0]; // Note: At some point this will support multiple discounts } $user = isset($_POST['edd_user_login']) ? sanitize_text_field($_POST['edd_user_login']) : sanitize_email($_POST['edd_email']); // Check if validates if (edd_is_discount_valid($discount, $user)) { // Return clean discount return $discount; } else { // Set invalid discount error edd_set_error('invalid_discount', __('The discount you entered is invalid', 'edd')); } } // Return default value return 'none'; }