/** * AJAX Validate Discount * * Validates the supplied discount. * * @access private * @since 1.0 * @return string */ function edd_ajax_validate_discount() { if (isset($_POST['code']) && check_ajax_referer('edd_ajax_nonce', 'nonce')) { $user = isset($_POST['user']) ? $_POST['user'] : $_POST['email']; $return = array('msg' => '', 'code' => $_POST['code']); if (edd_is_discount_used($_POST['code'], $user)) { // Called twice if discount is not used (again by edd_is_discount_valid) but allows for beter usr msg and less execution if discount is used. $return['msg'] = __('This discount code has been used already', 'edd'); } else { if (edd_is_discount_valid($_POST['code'], $user)) { $price = edd_get_cart_amount(); $discounted_price = edd_get_discounted_amount($_POST['code'], $price); $return = array('msg' => 'valid', 'amount' => edd_currency_filter(edd_format_amount($discounted_price)), 'code' => $_POST['code']); } else { $return['msg'] = __('The discount you entered is invalid', 'edd'); } } echo json_encode($return); } die; }
/** * Discounts short code * * Displays a list of all active discounts * * @access public * @since 1.0.8.2 * @return string */ function edd_discounts_shortcode($atts, $content = null) { $discounts = edd_get_discounts(); if (!$discounts && edd_has_active_discounts()) { return; } $discounts_list = '<ul id="edd_discounts_list">'; foreach ($discounts as $discount) { if (edd_is_discount_valid($discount['code'])) { $discounts_list .= '<li class="edd_discount">'; $discounts_list .= '<span class="edd_discount_name">' . $discount['name'] . '</span>'; $discounts_list .= '<span class="edd_discount_separator"> - </span>'; $discounts_list .= '<span class="edd_discount_amount">' . edd_format_discount_rate($discount['type'], $discount['amount']) . '</span>'; $discounts_list .= '</li>'; } } $discounts_list .= '</ul>'; return $discounts_list; }
/** * Applies the preset discount, if any. This is separated from edd_listen_for_cart_discount() in order to allow items to be * added to the cart and for it to persist across page loads if necessary * * @return void */ function edd_apply_preset_discount() { $code = sanitize_text_field(EDD()->session->get('preset_discount')); if (!$code) { return; } if (!edd_is_discount_valid($code, '', false)) { return; } $code = apply_filters('edd_apply_preset_discount', $code); edd_set_cart_discount($code); EDD()->session->set('preset_discount', null); }
/** * 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); }
/** * Validates the supplied discount sent via AJAX. * * @since 1.0 * @return void */ function edd_ajax_apply_discount() { if (isset($_POST['code'])) { $discount_code = sanitize_text_field($_POST['code']); $return = array('msg' => '', 'code' => $discount_code); $user = ''; if (is_user_logged_in()) { $user = get_current_user_id(); } else { parse_str($_POST['form'], $form); if (!empty($form['edd_email'])) { $user = urldecode($form['edd_email']); } } if (edd_is_discount_valid($discount_code, $user)) { $discount = edd_get_discount_by_code($discount_code); $amount = edd_format_discount_rate(edd_get_discount_type($discount->ID), edd_get_discount_amount($discount->ID)); $discounts = edd_set_cart_discount($discount_code); $total = edd_get_cart_total($discounts); $return = array('msg' => 'valid', 'amount' => $amount, 'total_plain' => $total, 'total' => html_entity_decode(edd_currency_filter(edd_format_amount($total)), ENT_COMPAT, 'UTF-8'), 'code' => $discount_code, 'html' => edd_get_cart_discounts_html($discounts)); } else { $errors = edd_get_errors(); $return['msg'] = $errors['edd-discount-error']; edd_unset_error('edd-discount-error'); } // Allow for custom discount code handling $return = apply_filters('edd_ajax_discount_response', $return); echo json_encode($return); } edd_die(); }
/** * Validates the supplied discount sent via AJAX. * * @since 1.0 * @return void */ function edd_ajax_apply_discount() { if (isset($_POST['code']) && check_ajax_referer('edd_checkout_nonce', 'nonce')) { $user = isset($_POST['user']) ? $_POST['user'] : $_POST['email']; $return = array('msg' => '', 'code' => $_POST['code']); if (edd_is_discount_used($_POST['code'], $user)) { // Called twice if discount is not used (again by edd_is_discount_valid) but allows for beter usr msg and less execution if discount is used. $return['msg'] = __('This discount code has been used already', 'edd'); } else { if (edd_is_discount_valid($_POST['code'], $user)) { $discount = edd_get_discount_by_code($_POST['code']); $amount = edd_format_discount_rate(edd_get_discount_type($discount->ID), edd_get_discount_amount($discount->ID)); $discounts = edd_set_cart_discount($_POST['code']); $total = edd_get_cart_total($discounts); $return = array('msg' => 'valid', 'amount' => $amount, 'total' => html_entity_decode(edd_currency_filter(edd_format_amount($total)), ENT_COMPAT, 'UTF-8'), 'code' => $_POST['code'], 'html' => edd_get_cart_discounts_html($discounts)); } else { $return['msg'] = __('The discount you entered is invalid', 'edd'); } } echo json_encode($return); } edd_die(); }
/** * Purchase Form Validate Discounts * * @access private * @since 1.0.8.1 * @return string */ function edd_purchase_form_validate_discounts() { // check for valid discount is present if (isset($_POST['edd-discount']) && trim($_POST['edd-discount']) != '') { // clean discount $discount = sanitize_text_field($_POST['edd-discount']); $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; // invalid discount } else { // set invalid discount error edd_set_error('invalid_discount', __('The discount you entered is invalid', 'edd')); } } // return default value return 'none'; }
/** * Validates the supplied discount sent via AJAX. * * @since 1.0 * @return void */ function edd_ajax_apply_discount() { if (isset($_POST['code'])) { $discount_code = $_POST['code']; $return = array('msg' => '', 'code' => $discount_code); if (edd_is_discount_valid($discount_code)) { $discount = edd_get_discount_by_code($discount_code); $amount = edd_format_discount_rate(edd_get_discount_type($discount->ID), edd_get_discount_amount($discount->ID)); $discounts = edd_set_cart_discount($discount_code); $total = edd_get_cart_total($discounts); $return = array('msg' => 'valid', 'amount' => $amount, 'total_plain' => $total, 'total' => html_entity_decode(edd_currency_filter(edd_format_amount($total)), ENT_COMPAT, 'UTF-8'), 'code' => $_POST['code'], 'html' => edd_get_cart_discounts_html($discounts)); } else { $errors = edd_get_errors(); $return['msg'] = $errors['edd-discount-error']; edd_unset_error('edd-discount-error'); } // Allow for custom discount code handling $return = apply_filters('edd_ajax_discount_response', $return); echo json_encode($return); } edd_die(); }
/** * 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 * @return void */ 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); } } }
/** * 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'; }