/**
 * 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();
}
예제 #6
0
파일: edd.php 프로젝트: companyjuice/theme
/**
 * 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;
}
예제 #7
0
파일: edd.php 프로젝트: apsolut/theme
/**
 * 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}&nbsp;&ndash;&nbsp;{$rate}</span>\n";
        $html .= "<a href=\"{$remove_url}\" data-code=\"{$discount}\" class=\"edd_discount_remove\">{$svg}</a>\n";
        $html .= "</span>\n";
    }
    return $html;
}
예제 #8
0
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';
}