/**
 * Saves an edited discount
 *
 * @since 1.0
 * @param array $data Discount code data
 * @return void
 */
function edd_edit_discount($data)
{
    if (isset($data['edd-discount-nonce']) && wp_verify_nonce($data['edd-discount-nonce'], 'edd_discount_nonce')) {
        // Setup the discount code details
        $discount = array();
        foreach ($data as $key => $value) {
            if ($key != 'edd-discount-nonce' && $key != 'edd-action' && $key != 'discount-id' && $key != 'edd-redirect') {
                if (is_string($value) || is_int($value)) {
                    $discount[$key] = strip_tags(addslashes($value));
                } elseif (is_array($value)) {
                    $discount[$key] = array_map('absint', $value);
                }
            }
        }
        $old_discount = edd_get_discount_by('code', $data['code']);
        $discount['uses'] = edd_get_discount_uses($old_discount->ID);
        if (edd_store_discount($discount, $data['discount-id'])) {
            wp_redirect(add_query_arg('edd-message', 'discount_updated', $data['edd-redirect']));
            edd_die();
        } else {
            wp_redirect(add_query_arg('edd-message', 'discount_update_failed', $data['edd-redirect']));
            edd_die();
        }
    }
}
/**
 * Saves an edited receipt
 *
 * @since 1.0
 * @param array $data Receipt data
 * @return void
 */
function edd_ppe_edit_receipt($data)
{
    if (isset($data['edd-receipt-nonce']) && wp_verify_nonce($data['edd-receipt-nonce'], 'edd_receipt_nonce')) {
        // Setup the receipt details
        $receipt = array();
        foreach ($data as $key => $value) {
            if ($key != 'edd-receipt-nonce' && $key != 'edd-action' && $key != 'receipt-id' && $key != 'edd-receipt') {
                if ('email' == $key) {
                    $receipt[$key] = $value;
                } elseif (is_string($value) || is_int($value)) {
                    $receipt[$key] = strip_tags(addslashes($value));
                } elseif (is_array($value)) {
                    $receipt[$key] = array_map('absint', $value);
                }
            }
        }
        if (edd_ppe_store_receipt($receipt, $data['receipt-id'])) {
            wp_redirect(add_query_arg('edd-message', 'receipt_updated', $data['edd-receipt']));
            edd_die();
        } else {
            wp_redirect(add_query_arg('edd-message', 'receipt_update_failed', $data['edd-receipt']));
            edd_die();
        }
    }
}
/**
 * Check for download price variations
 *
 * @since       2.0
 * @return      void
 */
function edd_cr_check_for_download_price_variations()
{
    if (!current_user_can('edit_products')) {
        die('-1');
    }
    $download_id = absint($_POST['download_id']);
    $key = isset($_POST['key']) ? absint($_POST['key']) : 0;
    $download = get_post($download_id);
    if ('download' != $download->post_type) {
        die('-2');
    }
    if (edd_has_variable_prices($download_id)) {
        $variable_prices = edd_get_variable_prices($download_id);
        if ($variable_prices) {
            $ajax_response = '<select class="edd_price_options_select edd-select edd-select edd_cr_download" name="edd_cr_download[' . $key . '][price_id]">';
            $ajax_response .= '<option value="all">' . esc_html(__('All prices', 'edd-cr')) . '</option>';
            foreach ($variable_prices as $price_id => $price) {
                $ajax_response .= '<option value="' . esc_attr($price_id) . '">' . esc_html($price['name']) . '</option>';
            }
            $ajax_response .= '</select>';
            echo $ajax_response;
        }
    }
    edd_die();
}
/**
 * Sharing message
*/
function affwp_share_thanks()
{
    // check nonce
    check_ajax_referer('affwp_ajax_nonce', 'nonce');
    //	EDD()->session->set( 'affwp_shared', true );
    $return = array('msg' => 'valid', 'success_title' => 'Thanks for sharing!');
    echo json_encode($return);
    edd_die();
}
/**
 * Sets up and saves a product update email when added or edited.
 *
 * @since 0.9.3
 * @param array $data email data
 * @return void
 */
function edd_pup_create_email($data)
{
    if (isset($data['edd_pup_nonce']) && wp_verify_nonce($data['edd_pup_nonce'], 'edd_pup_nonce')) {
        $post = edd_pup_sanitize_save($data);
        if (0 != $post) {
            if ($data['edd-action'] == 'add_pup_email') {
                wp_redirect(esc_url_raw(add_query_arg(array('view' => 'edit_pup_email', 'id' => $post, 'edd_pup_notice' => 2))));
            } else {
                wp_redirect(esc_url_raw(add_query_arg('edd_pup_notice', 1)));
            }
            edd_die();
        } else {
            wp_redirect(esc_url_raw(add_query_arg('edd_pup_notice', 3)));
            edd_die();
        }
    }
}
Exemple #6
0
/**
 * Performs redirect actions
 *
 * @since  	1.0
 * @uses  	edd_wl_is_private_list()
 * @uses 	edd_wl_get_wish_list_uri()
 * @return 	void
 */
function edd_wl_redirects()
{
    // Prevent private lists from being viewed. Also only allows users to access edit slugs with own list ID
    if (edd_wl_is_private_list() || !edd_wl_is_users_list(get_query_var('edit')) && get_query_var('edit')) {
        // Don't redirect if we're on single download page.
        // Extra check to fix compatibility with crowdfunding extension or any other extension that uses an edit query var on the single download page
        if (!is_singular('download')) {
            $redirect = apply_filters('edd_wl_private_redirect', edd_wl_get_wish_list_uri());
            wp_redirect($redirect);
            edd_die();
        }
    }
    // redirect if edit or view page is accessed but edit/view query_var does not exist
    if (edd_wl_is_page('view') && !get_query_var('view') || edd_wl_is_page('edit') && !get_query_var('edit')) {
        wp_redirect(edd_wl_get_wish_list_uri());
        edd_die();
    }
}
function edd_wallet_process_incentive()
{
    if ($_REQUEST['gateway'] == 'wallet') {
        EDD()->session->set('wallet_has_incentives', '1');
    } else {
        EDD()->session->set('wallet_has_incentives', null);
    }
    // Refresh the cart
    if (empty($_POST['billing_country'])) {
        $_POST['billing_country'] = edd_get_shop_country();
    }
    ob_start();
    edd_checkout_cart();
    $cart = ob_get_clean();
    $response = array('html' => $cart, 'tax_raw' => edd_get_cart_tax(), 'tax' => html_entity_decode(edd_cart_tax(false), ENT_COMPAT, 'UTF-8'), 'tax_rate_raw' => edd_get_tax_rate(), 'tax_rate' => html_entity_decode(edd_get_formatted_tax_rate(), ENT_COMPAT, 'UTF-8'), 'total' => html_entity_decode(edd_cart_total(false), ENT_COMPAT, 'UTF-8'), 'total_raw' => edd_get_cart_total());
    echo json_encode($response);
    edd_die();
}
/**
 * Process deposit
 *
 * @since       1.0.0
 * @return      void
 */
function edd_wallet_process_deposit()
{
    // Verify the nonce
    if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'edd-wallet-deposit-nonce')) {
        wp_die(__('Nonce verification failed', 'edd-wallet'), __('Error', 'edd-wallet'), array('response' => 403));
    }
    // Make sure the cart is empty
    edd_empty_cart();
    $value = $_POST['edd_wallet_deposit_amount'];
    if ($value == 'custom') {
        $value = $_POST['edd_wallet_custom_deposit'];
    }
    // Setup the fee label
    $label = edd_get_option('edd_wallet_deposit_description', __('Deposit to wallet', 'edd-wallet'));
    $label = str_replace('{val}', edd_currency_filter(edd_format_amount($value)), $label);
    // Setup the fee (product) for the deposit
    $fee = array('amount' => $value, 'label' => $label, 'type' => 'item', 'no_tax' => true, 'id' => 'edd-wallet-deposit');
    EDD()->fees->add_fee($fee);
    // Redirect to checkout
    wp_redirect(edd_get_checkout_uri(), 303);
    edd_die();
}
/**
 * Trigger a Purchase Deletion
 *
 * @since 1.3.4
 * @param $data Arguments passed
 * @return void
 */
function edd_trigger_purchase_delete($data)
{
    if (wp_verify_nonce($data['_wpnonce'], 'edd_payment_nonce')) {
        $payment_id = absint($data['purchase_id']);
        if (!current_user_can('edit_shop_payments', $payment_id)) {
            wp_die(__('You do not have permission to edit this payment record', 'easy-digital-downloads'), __('Error', 'easy-digital-downloads'), array('response' => 403));
        }
        edd_delete_purchase($payment_id);
        wp_redirect(admin_url('/edit.php?post_type=download&page=edd-payment-history&edd-message=payment_deleted'));
        edd_die();
    }
}
/**
 * Processes a remove discount from cart request
 *
 * @since 1.4.1
 * @return void
 */
function edd_remove_cart_discount()
{
    if (!isset($_GET['discount_id']) || !isset($_GET['discount_code'])) {
        return;
    }
    do_action('edd_pre_remove_cart_discount', absint($_GET['discount_id']));
    edd_unset_cart_discount(urldecode($_GET['discount_code']));
    do_action('edd_post_remove_cart_discount', absint($_GET['discount_id']));
    wp_redirect(edd_get_checkout_uri());
    edd_die();
}
/**
 * Check for Download Price Variations via AJAX (this function can only be used
 * in WordPress Admin). This function is used for the Edit Payment screen when downloads
 * are added to the purchase. When each download is chosen, an AJAX call is fired
 * to this function which will check if variable prices exist for that download.
 * If they do, it will output a dropdown of all the variable prices available for
 * that download.
 *
 * @author Sunny Ratilal
 * @since 1.5
 * @return void
 */
function edd_check_for_download_price_variations()
{
    if (!current_user_can('edit_products')) {
        die('-1');
    }
    $download_id = intval($_POST['download_id']);
    $download = get_post($download_id);
    if ('download' != $download->post_type) {
        die('-2');
    }
    if (edd_has_variable_prices($download_id)) {
        $variable_prices = edd_get_variable_prices($download_id);
        if ($variable_prices) {
            $ajax_response = '<select class="edd_price_options_select edd-select edd-select" name="edd_price_option">';
            if (isset($_POST['all_prices'])) {
                $ajax_response .= '<option value="">' . __('All Prices', 'easy-digital-downloads') . '</option>';
            }
            foreach ($variable_prices as $key => $price) {
                $ajax_response .= '<option value="' . esc_attr($key) . '">' . esc_html($price['name']) . '</option>';
            }
            $ajax_response .= '</select>';
            echo $ajax_response;
        }
    }
    edd_die();
}
 /**
  * Generates the System Info Download File
  *
  * @since 1.4
  * @return void
  */
 function edd_generate_fes_sysinfo_download()
 {
     nocache_headers();
     header("Content-type: text/plain");
     header('Content-Disposition: attachment; filename="fes-system-info.txt"');
     echo wp_strip_all_tags($_POST['fes-sysinfo']);
     edd_die();
 }
/**
 * Share via email
 *
 * @since 1.0
*/
function edd_wl_share_via_email()
{
    check_ajax_referer('edd_wl_ajax_nonce', 'nonce');
    global $edd_options;
    if (!isset($_POST['post_id'])) {
        return;
    }
    // referrer
    $referrer = $_POST['referrer'] ? $_POST['referrer'] : '';
    // sender details
    $sender_name = isset($_POST['from_name']) ? $_POST['from_name'] : '';
    $sender_email = isset($_POST['from_email']) ? $_POST['from_email'] : '';
    $emails = isset($_POST['emails']) ? $_POST['emails'] : '';
    $post_id = isset($_POST['post_id']) ? $_POST['post_id'] : '';
    $from_name = isset($edd_options['from_name']) ? $edd_options['from_name'] : get_bloginfo('name');
    $from_email = isset($edd_options['from_email']) ? $edd_options['from_email'] : get_option('admin_email');
    $message = isset($_POST['message']) ? $_POST['message'] : '';
    // validation
    if (!($sender_name || $sender_email || !edd_wl_validate_share_emails($emails))) {
        $has_error = true;
    }
    if (!isset($has_error)) {
        $shortlink = wp_get_shortlink($post_id);
        // shortlink
        $subject = edd_wl_share_via_email_subject($sender_name, $referrer);
        $message = edd_wl_share_via_email_message($shortlink, $sender_name, $sender_email, $message, $referrer);
        $headers = "From: " . stripslashes_deep(html_entity_decode($from_name, ENT_COMPAT, 'UTF-8')) . " <{$from_email}>\r\n";
        $headers .= "Reply-To: " . $sender_email . "\r\n";
        $headers .= "Content-Type: text/html; charset=utf-8\r\n";
        $headers = apply_filters('edd_wl_share_via_email_headers', $headers);
        // send email
        wp_mail($emails, $subject, $message, $headers);
    }
    $return['success'] = edd_wl_modal_share_via_email_success();
    echo json_encode($return);
    edd_die();
}
 /**
  * Grabs the submitted front end tickets form and adds the products to the cart.
  */
 public function process_front_end_tickets_form()
 {
     // We're only interested in EDD Tickets submissions
     if (!isset($_GET['eddtickets_process']) || empty($_POST['product_id'])) {
         return;
     }
     // Add each ticket product to the cart
     foreach ((array) $_POST['product_id'] as $product_id) {
         $quantity = isset($_POST['quantity_' . $product_id]) ? (int) $_POST['quantity_' . $product_id] : 0;
         if ($quantity > 0) {
             $this->add_ticket_to_cart($product_id, $quantity);
         }
     }
     // To minimize accidental re-submissions, redirect back to self
     wp_redirect(edd_get_checkout_uri());
     edd_die();
 }
 /**
  * Output Query in either JSON/XML. The query data is outputted as JSON
  * by default
  *
  * @author Daniel J Griffiths
  * @since 1.5
  * @global $wp_query
  *
  * @param int $status_code
  */
 public function output($status_code = 200)
 {
     global $wp_query;
     $format = $this->get_output_format();
     status_header($status_code);
     do_action('edd_api_output_before', $this->data, $this, $format);
     switch ($format) {
         case 'xml':
             require_once EDD_PLUGIN_DIR . 'includes/libraries/array2xml.php';
             $xml = Array2XML::createXML('edd', $this->data);
             echo $xml->saveXML();
             break;
         case 'json':
             header('Content-Type: application/json');
             if (!empty($this->pretty_print)) {
                 echo json_encode($this->data, $this->pretty_print);
             } else {
                 echo json_encode($this->data);
             }
             break;
         default:
             // Allow other formats to be added via extensions
             do_action('edd_api_output_' . $format, $this->data, $this);
             break;
     }
     do_action('edd_api_output_after', $this->data, $this, $format);
     edd_die();
 }
function wppb_check_edd_login_form($auth_cookie, $expire, $expiration, $user_id, $scheme)
{
    $wppb_generalSettings = get_option('wppb_general_settings', 'not_found');
    if ($wppb_generalSettings != 'not_found') {
        if (!empty($wppb_generalSettings['adminApproval']) && $wppb_generalSettings['adminApproval'] == 'yes') {
            if (isset($_REQUEST['edd_login_nonce'])) {
                if (wp_get_object_terms($user_id, 'user_status')) {
                    if (isset($_REQUEST['edd_redirect'])) {
                        wp_redirect($_REQUEST['edd_redirect']);
                        edd_set_error('user_unapproved', __('Your account has to be confirmed by an administrator before you can log in.', 'profile-builder'));
                        edd_get_errors();
                        edd_die();
                    }
                }
            }
        }
    }
}
/**
 * Process Download
 *
 * Handles the file download process.
 *
 * @access      private
 * @since       1.0
 * @return      void
 */
function edd_process_download()
{
    if (!isset($_GET['download_id']) && isset($_GET['download'])) {
        $_GET['download_id'] = $_GET['download'];
    }
    $args = apply_filters('edd_process_download_args', array('download' => isset($_GET['download_id']) ? (int) $_GET['download_id'] : '', 'email' => isset($_GET['email']) ? rawurldecode($_GET['email']) : '', 'expire' => isset($_GET['expire']) ? rawurldecode($_GET['expire']) : '', 'file_key' => isset($_GET['file']) ? (int) $_GET['file'] : '', 'price_id' => isset($_GET['price_id']) ? (int) $_GET['price_id'] : false, 'key' => isset($_GET['download_key']) ? $_GET['download_key'] : '', 'eddfile' => isset($_GET['eddfile']) ? $_GET['eddfile'] : '', 'ttl' => isset($_GET['ttl']) ? $_GET['ttl'] : '', 'token' => isset($_GET['token']) ? $_GET['token'] : ''));
    if (!empty($args['eddfile']) && !empty($args['ttl']) && !empty($args['token'])) {
        // Validate a signed URL that edd_process_signed_download_urlcontains a token
        $args = edd_process_signed_download_url($args);
        // Backfill some legacy super globals for backwards compatibility
        $_GET['download_id'] = $args['download'];
        $_GET['email'] = $args['email'];
        $_GET['expire'] = $args['expire'];
        $_GET['download_key'] = $args['key'];
        $_GET['price_id'] = $args['price_id'];
    } elseif (!empty($args['download']) && !empty($args['key']) && !empty($args['email']) && !empty($args['expire']) && isset($args['file_key'])) {
        // Validate a legacy URL without a token
        $args = edd_process_legacy_download_url($args);
    } else {
        return;
    }
    $args['has_access'] = apply_filters('edd_file_download_has_access', $args['has_access'], $args['payment'], $args);
    //$args['has_access'] = ( edd_logged_in_only() && is_user_logged_in() ) || !edd_logged_in_only() ? true : false;
    if ($args['payment'] && $args['has_access']) {
        do_action('edd_process_verified_download', $args['download'], $args['email'], $args['payment'], $args);
        // Determine the download method set in settings
        $method = edd_get_file_download_method();
        // Payment has been verified, setup the download
        $download_files = edd_get_download_files($args['download']);
        $attachment_id = !empty($download_files[$args['file_key']]['attachment_id']) ? absint($download_files[$args['file_key']]['attachment_id']) : false;
        /*
         * If we have an attachment ID stored, use get_attached_file() to retrieve absolute URL
         * If this fails or returns a relative path, we fail back to our own absolute URL detection
         */
        if ($attachment_id && 'attachment' == get_post_type($attachment_id)) {
            if ('redirect' == $method) {
                $attached_file = wp_get_attachment_url($attachment_id);
            } else {
                $attached_file = get_attached_file($attachment_id, false);
                // Confirm the file exists
                if (!file_exists($attached_file)) {
                    $attached_file = false;
                }
            }
            if ($attached_file) {
                $requested_file = $attached_file;
            }
        }
        // If we didn't find a file from the attachment, grab the given URL
        if (!isset($requested_file)) {
            $requested_file = isset($download_files[$args['file_key']]['file']) ? $download_files[$args['file_key']]['file'] : '';
        }
        // Allow the file to be altered before any headers are sent
        $requested_file = apply_filters('edd_requested_file', $requested_file, $download_files, $args['file_key']);
        if ('x_sendfile' == $method && (!function_exists('apache_get_modules') || !in_array('mod_xsendfile', apache_get_modules()))) {
            // If X-Sendfile is selected but is not supported, fallback to Direct
            $method = 'direct';
        }
        $file_details = parse_url($requested_file);
        $schemes = array('http', 'https');
        // Direct URL schemes
        if ((!isset($file_details['scheme']) || !in_array($file_details['scheme'], $schemes)) && isset($file_details['path']) && file_exists($requested_file)) {
            /**
             * Download method is seto to Redirect in settings but an absolute path was provided
             * We need to switch to a direct download in order for the file to download properly
             */
            $method = 'direct';
        }
        /**
         * Allow extensions to run actions prior to recording the file download log entry
         *
         * @since 2.6.14
         */
        do_action('edd_process_download_pre_record_log', $requested_file, $args, $method);
        // Record this file download in the log
        $user_info = array();
        $user_info['email'] = $args['email'];
        if (is_user_logged_in()) {
            $user_data = get_userdata(get_current_user_id());
            $user_info['id'] = get_current_user_id();
            $user_info['name'] = $user_data->display_name;
        }
        edd_record_download_in_log($args['download'], $args['file_key'], $user_info, edd_get_ip(), $args['payment'], $args['price_id']);
        $file_extension = edd_get_file_extension($requested_file);
        $ctype = edd_get_file_ctype($file_extension);
        if (!edd_is_func_disabled('set_time_limit') && !ini_get('safe_mode')) {
            @set_time_limit(0);
        }
        if (function_exists('get_magic_quotes_runtime') && get_magic_quotes_runtime() && version_compare(phpversion(), '5.4', '<')) {
            set_magic_quotes_runtime(0);
        }
        @session_write_close();
        if (function_exists('apache_setenv')) {
            @apache_setenv('no-gzip', 1);
        }
        @ini_set('zlib.output_compression', 'Off');
        do_action('edd_process_download_headers', $requested_file, $args['download'], $args['email'], $args['payment']);
        nocache_headers();
        header("Robots: none");
        header("Content-Type: " . $ctype . "");
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=\"" . apply_filters('edd_requested_file_name', basename($requested_file)) . "\"");
        header("Content-Transfer-Encoding: binary");
        // If the file isn't locally hosted, process the redirect
        if (filter_var($requested_file, FILTER_VALIDATE_URL) && !edd_is_local_file($requested_file)) {
            edd_deliver_download($requested_file, true);
            exit;
        }
        switch ($method) {
            case 'redirect':
                // Redirect straight to the file
                edd_deliver_download($requested_file, true);
                break;
            case 'direct':
            default:
                $direct = false;
                $file_path = $requested_file;
                if ((!isset($file_details['scheme']) || !in_array($file_details['scheme'], $schemes)) && isset($file_details['path']) && file_exists($requested_file)) {
                    /** This is an absolute path */
                    $direct = true;
                    $file_path = $requested_file;
                } else {
                    if (defined('UPLOADS') && strpos($requested_file, UPLOADS) !== false) {
                        /**
                         * This is a local file given by URL so we need to figure out the path
                         * UPLOADS is always relative to ABSPATH
                         * site_url() is the URL to where WordPress is installed
                         */
                        $file_path = str_replace(site_url(), '', $requested_file);
                        $file_path = realpath(ABSPATH . $file_path);
                        $direct = true;
                    } else {
                        if (strpos($requested_file, content_url()) !== false) {
                            /** This is a local file given by URL so we need to figure out the path */
                            $file_path = str_replace(content_url(), WP_CONTENT_DIR, $requested_file);
                            $file_path = realpath($file_path);
                            $direct = true;
                        } else {
                            if (strpos($requested_file, set_url_scheme(content_url(), 'https')) !== false) {
                                /** This is a local file given by an HTTPS URL so we need to figure out the path */
                                $file_path = str_replace(set_url_scheme(content_url(), 'https'), WP_CONTENT_DIR, $requested_file);
                                $file_path = realpath($file_path);
                                $direct = true;
                            }
                        }
                    }
                }
                // Set the file size header
                header("Content-Length: " . @filesize($file_path));
                // Now deliver the file based on the kind of software the server is running / has enabled
                if (stristr(getenv('SERVER_SOFTWARE'), 'lighttpd')) {
                    header("X-LIGHTTPD-send-file: {$file_path}");
                } elseif ($direct && (stristr(getenv('SERVER_SOFTWARE'), 'nginx') || stristr(getenv('SERVER_SOFTWARE'), 'cherokee'))) {
                    // We need a path relative to the domain
                    $file_path = str_ireplace(realpath($_SERVER['DOCUMENT_ROOT']), '', $file_path);
                    header("X-Accel-Redirect: /{$file_path}");
                }
                if ($direct) {
                    edd_deliver_download($file_path);
                } else {
                    // The file supplied does not have a discoverable absolute path
                    edd_deliver_download($requested_file, true);
                }
                break;
        }
        edd_die();
    } else {
        $error_message = __('You do not have permission to download this file', 'easy-digital-downloads');
        wp_die(apply_filters('edd_deny_download_message', $error_message, __('Purchase Verification Failed', 'easy-digital-downloads')), __('Error', 'easy-digital-downloads'), array('response' => 403));
    }
    exit;
}
/**
 * Saves an edited discount
 *
 * @since 1.0
 * @param array $data Discount code data
 * @return void
 */
function edd_edit_discount($data)
{
    if (!isset($data['edd-discount-nonce']) || !wp_verify_nonce($data['edd-discount-nonce'], 'edd_discount_nonce')) {
        return;
    }
    if (!current_user_can('manage_shop_discounts')) {
        wp_die(__('You do not have permission to edit discount codes', 'easy-digital-downloads'), __('Error', 'easy-digital-downloads'), array('response' => 403));
    }
    // Setup the discount code details
    $discount = array();
    foreach ($data as $key => $value) {
        if ($key != 'edd-discount-nonce' && $key != 'edd-action' && $key != 'discount-id' && $key != 'edd-redirect') {
            if (is_string($value) || is_int($value)) {
                $discount[$key] = strip_tags(addslashes($value));
            } elseif (is_array($value)) {
                $discount[$key] = array_map('absint', $value);
            }
        }
    }
    $old_discount = edd_get_discount_by('code', $data['code']);
    $discount['uses'] = edd_get_discount_uses($old_discount->ID);
    if (edd_store_discount($discount, $data['discount-id'])) {
        wp_redirect(add_query_arg('edd-message', 'discount_updated', $data['edd-redirect']));
        edd_die();
    } else {
        wp_redirect(add_query_arg('edd-message', 'discount_update_failed', $data['edd-redirect']));
        edd_die();
    }
}
/**
 * Generates a System Info download file
 *
 * @since       2.0
 * @return      void
 */
function edd_tools_sysinfo_download()
{
    nocache_headers();
    header('Content-Type: text/plain');
    header('Content-Disposition: attachment; filename="edd-system-info.txt"');
    echo wp_strip_all_tags($_POST['edd-sysinfo']);
    edd_die();
}
/**
 * Generates a System Info download file
 *
 * @since       2.0
 * @return      void
 */
function edd_tools_sysinfo_download()
{
    if (!current_user_can('manage_shop_settings')) {
        return;
    }
    nocache_headers();
    header('Content-Type: text/plain');
    header('Content-Disposition: attachment; filename="edd-system-info.txt"');
    echo wp_strip_all_tags($_POST['edd-sysinfo']);
    edd_die();
}
/**
 * Process Profile Updater Form
 *
 * Processes the profile updater form by updating the necessary fields
 *
 * @since 1.4
 * @author Sunny Ratilal
 * @param array $data Data sent from the profile editor
 * @return void
 */
function edd_process_profile_editor_updates($data)
{
    // Profile field change request
    if (empty($_POST['edd_profile_editor_submit']) && !is_user_logged_in()) {
        return false;
    }
    // Pending users can't edit their profile
    if (edd_user_pending_verification()) {
        return false;
    }
    // Nonce security
    if (!wp_verify_nonce($data['edd_profile_editor_nonce'], 'edd-profile-editor-nonce')) {
        return false;
    }
    $user_id = get_current_user_id();
    $old_user_data = get_userdata($user_id);
    $display_name = isset($data['edd_display_name']) ? sanitize_text_field($data['edd_display_name']) : $old_user_data->display_name;
    $first_name = isset($data['edd_first_name']) ? sanitize_text_field($data['edd_first_name']) : $old_user_data->first_name;
    $last_name = isset($data['edd_last_name']) ? sanitize_text_field($data['edd_last_name']) : $old_user_data->last_name;
    $email = isset($data['edd_email']) ? sanitize_email($data['edd_email']) : $old_user_data->user_email;
    $line1 = isset($data['edd_address_line1']) ? sanitize_text_field($data['edd_address_line1']) : '';
    $line2 = isset($data['edd_address_line2']) ? sanitize_text_field($data['edd_address_line2']) : '';
    $city = isset($data['edd_address_city']) ? sanitize_text_field($data['edd_address_city']) : '';
    $state = isset($data['edd_address_state']) ? sanitize_text_field($data['edd_address_state']) : '';
    $zip = isset($data['edd_address_zip']) ? sanitize_text_field($data['edd_address_zip']) : '';
    $country = isset($data['edd_address_country']) ? sanitize_text_field($data['edd_address_country']) : '';
    $userdata = array('ID' => $user_id, 'first_name' => $first_name, 'last_name' => $last_name, 'display_name' => $display_name, 'user_email' => $email);
    $address = array('line1' => $line1, 'line2' => $line2, 'city' => $city, 'state' => $state, 'zip' => $zip, 'country' => $country);
    do_action('edd_pre_update_user_profile', $user_id, $userdata);
    // New password
    if (!empty($data['edd_new_user_pass1'])) {
        if ($data['edd_new_user_pass1'] !== $data['edd_new_user_pass2']) {
            edd_set_error('password_mismatch', __('The passwords you entered do not match. Please try again.', 'easy-digital-downloads'));
        } else {
            $userdata['user_pass'] = $data['edd_new_user_pass1'];
        }
    }
    // Make sure the new email doesn't belong to another user
    if ($email != $old_user_data->user_email) {
        // Make sure the new email is valid
        if (!is_email($email)) {
            edd_set_error('email_invalid', __('The email you entered is invalid. Please enter a valid email.', 'easy-digital-downloads'));
        }
        // Make sure the new email doesn't belong to another user
        if (email_exists($email)) {
            edd_set_error('email_exists', __('The email you entered belongs to another user. Please use another.', 'easy-digital-downloads'));
        }
    }
    // Check for errors
    $errors = edd_get_errors();
    if ($errors) {
        // Send back to the profile editor if there are errors
        wp_redirect($data['edd_redirect']);
        edd_die();
    }
    // Update the user
    $meta = update_user_meta($user_id, '_edd_user_address', $address);
    $updated = wp_update_user($userdata);
    if ($updated) {
        do_action('edd_user_profile_updated', $user_id, $userdata);
        wp_redirect(add_query_arg('updated', 'true', $data['edd_redirect']));
        edd_die();
    }
}
 function checkout_check_for_download_price_variations()
 {
     if (!current_user_can('edit_products')) {
         die('-1');
     }
     $download_id = intval($_POST['download_id']);
     $download = get_post($download_id);
     if ('download' != $download->post_type) {
         die('-2');
     }
     if (edd_has_variable_prices($download_id)) {
         $variable_prices = edd_get_variable_prices($download_id);
         $ajax_response = '<select class="checkout_price_options_select" name="' . esc_attr($this->get_field_name('price_variation')) . '">';
         $ajax_response .= '<option value="none">' . __('None', 'checkout') . '</option>';
         if ($variable_prices) {
             foreach ($variable_prices as $key => $price) {
                 $ajax_response .= '<option value="' . esc_attr($key) . '">' . esc_html($price['name']) . '</option>';
             }
             $ajax_response .= '</select>';
             echo $ajax_response;
         }
     }
     edd_die();
 }
/**
 * Process the Collection Purchase request
 *
 * @since 1.0
 *
 * @param $data
 */
function edd_process_collection_purchase($data)
{
    $taxonomy = urldecode($data['taxonomy']);
    $terms = urldecode($data['terms']);
    $cart_items = edd_add_collection_to_cart($taxonomy, $terms);
    wp_redirect(add_query_arg('added', '1', remove_query_arg(array('edd_action', 'taxonomy', 'terms'))));
    edd_die();
}
/**
 * Grabs all of the selected date info and then redirects appropriately
 *
 * @since 1.3
 *
 * @param $data
 */
function edd_parse_report_dates($data)
{
    $dates = edd_get_report_dates();
    $view = edd_get_reporting_view();
    $id = isset($_GET['download-id']) ? $_GET['download-id'] : null;
    $exclude_taxes = isset($_GET['exclude_taxes']) ? $_GET['exclude_taxes'] : null;
    wp_redirect(add_query_arg($dates, admin_url('edit.php?post_type=download&page=edd-reports&view=' . esc_attr($view) . '&download-id=' . absint($id) . '&exclude_taxes=' . absint($exclude_taxes))));
    edd_die();
}
/**
 * Process Profile Updater Form
 *
 * Processes the profile updater form by updating the necessary fields
 *
 * @since 1.4
 * @author Sunny Ratilal
 * @param array $data Data sent from the profile editor
 * @return void
 */
function edd_process_profile_editor_updates($data)
{
    // Profile field change request
    if (empty($_POST['edd_profile_editor_submit']) && !is_user_logged_in()) {
        return false;
    }
    // Nonce security
    if (!wp_verify_nonce($data['edd_profile_editor_nonce'], 'edd-profile-editor-nonce')) {
        return false;
    }
    $user_id = get_current_user_id();
    $display_name = sanitize_text_field($data['edd_display_name']);
    $first_name = sanitize_text_field($data['edd_first_name']);
    $last_name = sanitize_text_field($data['edd_last_name']);
    $email = sanitize_email($data['edd_email']);
    $userdata = array('ID' => $user_id, 'first_name' => $first_name, 'last_name' => $last_name, 'display_name' => $display_name, 'user_email' => $email);
    // New password
    if (!empty($data['edd_new_user_pass1'])) {
        if ($data['edd_new_user_pass1'] !== $data['edd_new_user_pass2']) {
            edd_set_error('password_mismatch', __('The passwords you entered do not match. Please try again.', 'edd'));
        } else {
            $userdata['user_pass'] = $data['edd_new_user_pass1'];
        }
    }
    // Update the user
    $updated = wp_update_user($userdata);
    if ($updated) {
        do_action('edd_user_profile_updated', $user_id, $userdata);
        wp_redirect(add_query_arg('updated', 'true', $data['edd_redirect']));
        edd_die();
    }
}
/**
 * Process the checkout login form
 *
 * @access      private
 * @since       1.8
 * @return      void
 */
function edd_process_purchase_login()
{
    $is_ajax = isset($_POST['edd_ajax']);
    $user_data = edd_purchase_form_validate_user_login();
    if (edd_get_errors() || $user_data['user_id'] < 1) {
        if ($is_ajax) {
            do_action('edd_ajax_checkout_errors');
            edd_die();
        } else {
            wp_redirect($_SERVER['HTTP_REFERER']);
            exit;
        }
    }
    edd_log_user_in($user_data['user_id'], $user_data['user_login'], $user_data['user_pass']);
    if ($is_ajax) {
        echo 'success';
        edd_die();
    } else {
        wp_redirect(edd_get_checkout_uri($_SERVER['QUERY_STRING']));
    }
}
/**
 * Process Register Form
 *
 * @since 2.0
 * @param array $data Data sent from the register form
 * @return void
*/
function edd_process_register_form($data)
{
    if (is_user_logged_in()) {
        return;
    }
    if (empty($_POST['edd_register_submit'])) {
        return;
    }
    do_action('edd_pre_process_register_form');
    if (empty($data['edd_user_login'])) {
        edd_set_error('empty_username', __('Invalid username', 'edd'));
    }
    if (username_exists($data['edd_user_login'])) {
        edd_set_error('username_unavailable', __('Username already taken', 'edd'));
    }
    if (!validate_username($data['edd_user_login'])) {
        edd_set_error('username_invalid', __('Invalid username', 'edd'));
    }
    if (email_exists($data['edd_user_email'])) {
        edd_set_error('email_unavailable', __('Email address already taken', 'edd'));
    }
    if (empty($data['edd_user_email']) || !is_email($data['edd_user_email'])) {
        edd_set_error('email_invalid', __('Invalid email', 'edd'));
    }
    if (!empty($data['edd_payment_email']) && $data['edd_payment_email'] != $data['edd_user_email'] && !is_email($data['edd_payment_email'])) {
        edd_set_error('payment_email_invalid', __('Invalid payment email', 'edd'));
    }
    if (empty($_POST['edd_user_pass'])) {
        edd_set_error('empty_password', __('Please enter a password', 'edd'));
    }
    if (!empty($_POST['edd_user_pass']) && empty($_POST['edd_user_pass2']) || $_POST['edd_user_pass'] !== $_POST['edd_user_pass2']) {
        edd_set_error('password_mismatch', __('Passwords do not match', 'edd'));
    }
    do_action('edd_process_register_form');
    // Check for errors and redirect if none present
    $errors = edd_get_errors();
    if (empty($errors)) {
        $redirect = apply_filters('edd_register_redirect', $data['edd_redirect']);
        edd_register_and_login_new_user(array('user_login' => $data['edd_user_login'], 'user_pass' => $data['edd_user_pass'], 'user_email' => $data['edd_user_email'], 'user_registered' => date('Y-m-d H:i:s'), 'role' => get_option('default_role')));
        wp_redirect($redirect);
        edd_die();
    }
}
/**
 * Trigger a Purchase Deletion
 *
 * @since 1.3.4
 * @param $data Arguments passed
 * @return void
 */
function edd_trigger_purchase_delete($data)
{
    if (wp_verify_nonce($data['_wpnonce'], 'edd_payment_nonce')) {
        $payment_id = absint($data['purchase_id']);
        edd_delete_purchase($payment_id);
        wp_redirect(admin_url('/edit.php?post_type=download&page=edd-payment-history&edd-message=payment_deleted'));
        edd_die();
    }
}
 /**
  * Perform the export
  *
  * @access public
  * @since 2.5
  * @return void
  */
 public function export()
 {
     // Set headers
     $this->headers();
     edd_die();
 }
/**
 * Check for Download Price Variations via AJAX (this function can only be used
 * in WordPress Admin). This function isused for the Edit Payment screen when downloads
 * are added to the purchase. When each download is chosen, an AJAX call is fired
 * to this function which will check if variable prices exist for that download.
 * If they do, it will output a dropdown of all the variable prices available for
 * that download.
 *
 * @author Sunny Ratilal
 * @since 1.5
 * @return void
 */
function edd_check_for_download_price_variations()
{
    if (!check_ajax_referer('edd_add_downloads_to_purchase_nonce', 'nonce')) {
        return false;
    }
    $download_id = intval($_POST['download_id']);
    if (edd_has_variable_prices($download_id)) {
        $variable_prices = get_post_meta($download_id, 'edd_variable_prices', true);
        if ($variable_prices) {
            $ajax_response = '<select name="downloads[' . intval($_POST['array_key']) . '][options][price_id]" class="edd-variable-prices-select">';
            foreach ($variable_prices as $key => $price) {
                $ajax_response .= '<option value="' . $key . '">' . $price['name'] . '</option>';
            }
            $ajax_response .= '</select>';
        }
        echo $ajax_response;
    }
    edd_die();
}