2138 lines
		
	
	
		
			58 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			2138 lines
		
	
	
		
			58 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Deprecated Functions
 | |
|  *
 | |
|  * All functions that have been deprecated.
 | |
|  *
 | |
|  * @package     EDD
 | |
|  * @subpackage  Deprecated
 | |
|  * @copyright   Copyright (c) 2018, Easy Digital Downloads, LLC
 | |
|  * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 | |
|  * @since       1.0
 | |
|  */
 | |
| 
 | |
| use EDD\Reports;
 | |
| 
 | |
| // Exit if accessed directly
 | |
| defined( 'ABSPATH' ) || exit;
 | |
| 
 | |
| /**
 | |
|  * Get Download Sales Log
 | |
|  *
 | |
|  * Returns an array of sales and sale info for a download.
 | |
|  *
 | |
|  * @since       1.0
 | |
|  * @deprecated  1.3.4
 | |
|  *
 | |
|  * @param int $download_id ID number of the download to retrieve a log for
 | |
|  * @param bool $paginate Whether to paginate the results or not
 | |
|  * @param int $number Number of results to return
 | |
|  * @param int $offset Number of items to skip
 | |
|  *
 | |
|  * @return mixed array|bool
 | |
| */
 | |
| function edd_get_download_sales_log( $download_id, $paginate = false, $number = 10, $offset = 0 ) {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '1.3.4', null, $backtrace );
 | |
| 
 | |
| 	$sales_log = get_post_meta( $download_id, '_edd_sales_log', true );
 | |
| 
 | |
| 	if ( $sales_log ) {
 | |
| 		$sales_log = array_reverse( $sales_log );
 | |
| 		$log = array();
 | |
| 		$log['number'] = count( $sales_log );
 | |
| 		$log['sales'] = $sales_log;
 | |
| 
 | |
| 		if ( $paginate ) {
 | |
| 			$log['sales'] = array_slice( $sales_log, $offset, $number );
 | |
| 		}
 | |
| 
 | |
| 		return $log;
 | |
| 	}
 | |
| 
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get Downloads Of Purchase
 | |
|  *
 | |
|  * Retrieves an array of all files purchased.
 | |
|  *
 | |
|  * @since 1.0
 | |
|  * @deprecated 1.4
 | |
|  *
 | |
|  * @param int  $payment_id ID number of the purchase
 | |
|  * @param null $payment_meta
 | |
|  * @return bool|mixed
 | |
|  */
 | |
| function edd_get_downloads_of_purchase( $payment_id, $payment_meta = null ) {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '1.4', 'edd_get_payment_meta_downloads', $backtrace );
 | |
| 
 | |
| 	if ( is_null( $payment_meta ) ) {
 | |
| 		$payment_meta = edd_get_payment_meta( $payment_id );
 | |
| 	}
 | |
| 
 | |
| 	$downloads = maybe_unserialize( $payment_meta['downloads'] );
 | |
| 
 | |
| 	if ( $downloads ) {
 | |
| 		return $downloads;
 | |
| 	}
 | |
| 
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get Menu Access Level
 | |
|  *
 | |
|  * Returns the access level required to access the downloads menu. Currently not
 | |
|  * changeable, but here for a future update.
 | |
|  *
 | |
|  * @since 1.0
 | |
|  * @deprecated 1.4.4
 | |
|  * @return string
 | |
| */
 | |
| function edd_get_menu_access_level() {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '1.4.4', 'current_user_can(\'manage_shop_settings\')', $backtrace );
 | |
| 
 | |
| 	return apply_filters( 'edd_menu_access_level', 'manage_options' );
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Check if only local taxes are enabled meaning users must opt in by using the
 | |
|  * option set from the EDD Settings.
 | |
|  *
 | |
|  * @since 1.3.3
 | |
|  * @deprecated 1.6
 | |
|  * @global $edd_options
 | |
|  * @return bool $local_only
 | |
|  */
 | |
| function edd_local_taxes_only() {
 | |
| 
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '1.6', 'no alternatives', $backtrace );
 | |
| 
 | |
| 	global $edd_options;
 | |
| 
 | |
| 	$local_only = isset( $edd_options['tax_condition'] ) && $edd_options['tax_condition'] == 'local';
 | |
| 
 | |
| 	return apply_filters( 'edd_local_taxes_only', $local_only );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Checks if a customer has opted into local taxes
 | |
|  *
 | |
|  * @since 1.4.1
 | |
|  * @deprecated 1.6
 | |
|  * @uses EDD_Session::get()
 | |
|  * @return bool
 | |
|  */
 | |
| function edd_local_tax_opted_in() {
 | |
| 
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '1.6', 'no alternatives', $backtrace );
 | |
| 
 | |
| 	$opted_in = EDD()->session->get( 'edd_local_tax_opt_in' );
 | |
| 	return ! empty( $opted_in );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Show taxes on individual prices?
 | |
|  *
 | |
|  * @since 1.4
 | |
|  * @deprecated 1.9
 | |
|  * @global $edd_options
 | |
|  * @return bool Whether or not to show taxes on prices
 | |
|  */
 | |
| function edd_taxes_on_prices() {
 | |
| 	global $edd_options;
 | |
| 
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '1.9', 'no alternatives', $backtrace );
 | |
| 
 | |
| 	return apply_filters( 'edd_taxes_on_prices', isset( $edd_options['taxes_on_prices'] ) );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Show Has Purchased Item Message
 | |
|  *
 | |
|  * Prints a notice when user has already purchased the item.
 | |
|  *
 | |
|  * @since 1.0
 | |
|  * @deprecated 1.8
 | |
|  * @global $user_ID
 | |
|  */
 | |
| function edd_show_has_purchased_item_message() {
 | |
| 
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '1.8', 'no alternatives', $backtrace );
 | |
| 
 | |
| 	global $user_ID, $post;
 | |
| 
 | |
| 	if ( !isset( $post->ID ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	if ( edd_has_user_purchased( $user_ID, $post->ID ) ) {
 | |
| 		$alert = '<p class="edd_has_purchased">' . __( 'You have already purchased this item, but you may purchase it again.', 'easy-digital-downloads' ) . '</p>';
 | |
| 		echo apply_filters( 'edd_show_has_purchased_item_message', $alert );
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Flushes the total earning cache when a new payment is created
 | |
|  *
 | |
|  * @since 1.2
 | |
|  * @deprecated 1.8.4
 | |
|  * @param int $payment Payment ID
 | |
|  * @param array $payment_data Payment Data
 | |
|  * @return void
 | |
|  */
 | |
| function edd_clear_earnings_cache( $payment, $payment_data ) {
 | |
| 
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '1.8.4', 'no alternatives', $backtrace );
 | |
| 
 | |
| 	delete_transient( 'edd_total_earnings' );
 | |
| }
 | |
| //add_action( 'edd_insert_payment', 'edd_clear_earnings_cache', 10, 2 );
 | |
| 
 | |
| /**
 | |
|  * 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.00;
 | |
| 	}
 | |
| 
 | |
| 	return apply_filters( 'edd_get_cart_amount', $amount, $add_taxes, $local_override );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get Purchase Receipt Template Tags
 | |
|  *
 | |
|  * Displays all available template tags for the purchase receipt.
 | |
|  *
 | |
|  * @since 1.6
 | |
|  * @deprecated 1.9
 | |
|  * @author Daniel J Griffiths
 | |
|  * @return string $tags
 | |
|  */
 | |
| function edd_get_purchase_receipt_template_tags() {
 | |
| 	$tags = __('Enter the email that is sent to users after completing a successful purchase. HTML is accepted. Available template tags:','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{download_list} - ' . __('A list of download links for each download purchased','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{file_urls} - ' . __('A plain-text list of download URLs for each download purchased','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{name} - ' . __('The buyer\'s first name','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{fullname} - ' . __('The buyer\'s full name, first and last','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{username} - ' . __('The buyer\'s user name on the site, if they registered an account','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{user_email} - ' . __('The buyer\'s email address','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{billing_address} - ' . __('The buyer\'s billing address','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{date} - ' . __('The date of the purchase','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{subtotal} - ' . __('The price of the purchase before taxes','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{tax} - ' . __('The taxed amount of the purchase','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{price} - ' . __('The total price of the purchase','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{payment_id} - ' . __('The unique ID number for this purchase','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{receipt_id} - ' . __('The unique ID number for this purchase receipt','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{payment_method} - ' . __('The method of payment used for this purchase','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{sitename} - ' . __('Your site name','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{receipt_link} - ' . __( 'Adds a link so users can view their receipt directly on your website if they are unable to view it in the browser correctly.', 'easy-digital-downloads' );
 | |
| 
 | |
| 	return apply_filters( 'edd_purchase_receipt_template_tags_description', $tags );
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Get Sale Notification Template Tags
 | |
|  *
 | |
|  * Displays all available template tags for the sale notification email
 | |
|  *
 | |
|  * @since 1.7
 | |
|  * @deprecated 1.9
 | |
|  * @author Daniel J Griffiths
 | |
|  * @return string $tags
 | |
|  */
 | |
| function edd_get_sale_notification_template_tags() {
 | |
| 	$tags = __( 'Enter the email that is sent to sale notification emails after completion of a purchase. HTML is accepted. Available template tags:', 'easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{download_list} - ' . __('A list of download links for each download purchased','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{file_urls} - ' . __('A plain-text list of download URLs for each download purchased','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{name} - ' . __('The buyer\'s first name','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{fullname} - ' . __('The buyer\'s full name, first and last','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{username} - ' . __('The buyer\'s user name on the site, if they registered an account','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{user_email} - ' . __('The buyer\'s email address','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{billing_address} - ' . __('The buyer\'s billing address','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{date} - ' . __('The date of the purchase','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{subtotal} - ' . __('The price of the purchase before taxes','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{tax} - ' . __('The taxed amount of the purchase','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{price} - ' . __('The total price of the purchase','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{payment_id} - ' . __('The unique ID number for this purchase','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{receipt_id} - ' . __('The unique ID number for this purchase receipt','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{payment_method} - ' . __('The method of payment used for this purchase','easy-digital-downloads' ) . '<br/>' .
 | |
| 			'{sitename} - ' . __('Your site name','easy-digital-downloads' );
 | |
| 
 | |
| 	return apply_filters( 'edd_sale_notification_template_tags_description', $tags );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Email Template Header
 | |
|  *
 | |
|  * @access private
 | |
|  * @since 1.0.8.2
 | |
|  * @deprecated 2.0
 | |
|  * @return string Email template header
 | |
|  */
 | |
| function edd_get_email_body_header() {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.0', '', $backtrace );
 | |
| 
 | |
| 	ob_start();
 | |
| 	?>
 | |
| 	<html>
 | |
| 	<head>
 | |
| 		<style type="text/css">#outlook a { padding: 0; }</style>
 | |
| 	</head>
 | |
| 	<body dir="<?php echo is_rtl() ? 'rtl' : 'ltr'; ?>">
 | |
| 	<?php
 | |
| 	do_action( 'edd_email_body_header' );
 | |
| 	return ob_get_clean();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Email Template Footer
 | |
|  *
 | |
|  * @since 1.0.8.2
 | |
|  * @deprecated 2.0
 | |
|  * @return string Email template footer
 | |
|  */
 | |
| function edd_get_email_body_footer() {
 | |
| 
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.0', '', $backtrace );
 | |
| 
 | |
| 	ob_start();
 | |
| 	do_action( 'edd_email_body_footer' );
 | |
| 	?>
 | |
| 	</body>
 | |
| 	</html>
 | |
| 	<?php
 | |
| 	return ob_get_clean();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Applies the Chosen Email Template
 | |
|  *
 | |
|  * @since 1.0.8.2
 | |
|  * @deprecated 2.0
 | |
|  * @param string $body The contents of the receipt email
 | |
|  * @param int $payment_id The ID of the payment we are sending a receipt for
 | |
|  * @param array $payment_data An array of meta information for the payment
 | |
|  * @return string $email Formatted email with the template applied
 | |
|  */
 | |
| function edd_apply_email_template( $body, $payment_id, $payment_data = array() ) {
 | |
| 	global $edd_options;
 | |
| 
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.0', '', $backtrace );
 | |
| 
 | |
| 	$template_name = isset( $edd_options['email_template'] ) ? $edd_options['email_template'] : 'default';
 | |
| 	$template_name = apply_filters( 'edd_email_template', $template_name, $payment_id );
 | |
| 
 | |
| 	if ( $template_name == 'none' ) {
 | |
| 		if ( is_admin() ) {
 | |
| 			$body = edd_email_preview_template_tags( $body );
 | |
| 		}
 | |
| 
 | |
| 		// Return the plain email with no template
 | |
| 		return $body;
 | |
| 	}
 | |
| 
 | |
| 	ob_start();
 | |
| 
 | |
| 	do_action( 'edd_email_template_' . $template_name );
 | |
| 
 | |
| 	$template = ob_get_clean();
 | |
| 
 | |
| 	if ( is_admin() ) {
 | |
| 		$body = edd_email_preview_template_tags( $body );
 | |
| 	}
 | |
| 
 | |
| 	$body = apply_filters( 'edd_purchase_receipt_' . $template_name, $body );
 | |
| 
 | |
| 	$email = str_replace( '{email}', $body, $template );
 | |
| 
 | |
| 	return $email;
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Checks if the user has enabled the option to calculate taxes after discounts
 | |
|  * have been entered
 | |
|  *
 | |
|  * @since 1.4.1
 | |
|  * @deprecated 2.1
 | |
|  * @global $edd_options
 | |
|  * @return bool Whether or not taxes are calculated after discount
 | |
|  */
 | |
| function edd_taxes_after_discounts() {
 | |
| 
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.1', 'none', $backtrace );
 | |
| 
 | |
| 	global $edd_options;
 | |
| 	$ret = isset( $edd_options['taxes_after_discounts'] ) && edd_use_taxes();
 | |
| 	return apply_filters( 'edd_taxes_after_discounts', $ret );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Verifies a download purchase using a purchase key and email.
 | |
|  *
 | |
|  * @deprecated Please avoid usage of this function in favor of the tokenized urls with edd_validate_url_token()
 | |
|  * introduced in EDD 2.3
 | |
|  *
 | |
|  * @since 1.0
 | |
|  *
 | |
|  * @param int    $download_id
 | |
|  * @param string $key
 | |
|  * @param string $email
 | |
|  * @param string $expire
 | |
|  * @param int    $file_key
 | |
|  *
 | |
|  * @return bool True if payment and link was verified, false otherwise
 | |
|  */
 | |
| function edd_verify_download_link( $download_id = 0, $key = '', $email = '', $expire = '', $file_key = 0 ) {
 | |
| 
 | |
| 	$meta_query = array(
 | |
| 		'relation'  => 'AND',
 | |
| 		array(
 | |
| 			'key'   => '_edd_payment_purchase_key',
 | |
| 			'value' => $key
 | |
| 		),
 | |
| 		array(
 | |
| 			'key'   => '_edd_payment_user_email',
 | |
| 			'value' => $email
 | |
| 		)
 | |
| 	);
 | |
| 
 | |
| 	$accepted_stati = apply_filters( 'edd_allowed_download_stati', array( 'publish', 'complete' ) );
 | |
| 
 | |
| 	$payments = get_posts( array( 'meta_query' => $meta_query, 'post_type' => 'edd_payment', 'post_status' => $accepted_stati ) );
 | |
| 
 | |
| 	if ( $payments ) {
 | |
| 		foreach ( $payments as $payment ) {
 | |
| 
 | |
| 			$cart_details = edd_get_payment_meta_cart_details( $payment->ID, true );
 | |
| 
 | |
| 			if ( ! empty( $cart_details ) ) {
 | |
| 				foreach ( $cart_details as $cart_key => $cart_item ) {
 | |
| 
 | |
| 					if ( $cart_item['id'] != $download_id ) {
 | |
| 						continue;
 | |
| 					}
 | |
| 
 | |
| 					$price_options 	= isset( $cart_item['item_number']['options'] ) ? $cart_item['item_number']['options'] : false;
 | |
| 					$price_id 		= isset( $price_options['price_id'] ) ? $price_options['price_id'] : false;
 | |
| 
 | |
| 					$file_condition = edd_get_file_price_condition( $cart_item['id'], $file_key );
 | |
| 
 | |
| 					// Check to see if the file download limit has been reached
 | |
| 					if ( edd_is_file_at_download_limit( $cart_item['id'], $payment->ID, $file_key, $price_id ) ) {
 | |
| 						wp_die( apply_filters( 'edd_download_limit_reached_text', __( 'Sorry but you have hit your download limit for this file.', 'easy-digital-downloads' ) ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
 | |
| 					}
 | |
| 
 | |
| 					// If this download has variable prices, we have to confirm that this file was included in their purchase
 | |
| 					if ( ! empty( $price_options ) && $file_condition != 'all' && edd_has_variable_prices( $cart_item['id'] ) ) {
 | |
| 						if ( $file_condition == $price_options['price_id'] ) {
 | |
| 							return $payment->ID;
 | |
| 						}
 | |
| 					}
 | |
| 
 | |
| 					// Make sure the link hasn't expired
 | |
| 
 | |
| 					if ( base64_encode( base64_decode( $expire, true ) ) === $expire ) {
 | |
| 						$expire = base64_decode( $expire ); // If it is a base64 string, decode it. Old expiration dates were in base64
 | |
| 					}
 | |
| 
 | |
| 					if ( current_time( 'timestamp' ) > $expire ) {
 | |
| 						wp_die( apply_filters( 'edd_download_link_expired_text', __( 'Sorry but your download link has expired.', 'easy-digital-downloads' ) ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
 | |
| 					}
 | |
| 					return $payment->ID; // Payment has been verified and link is still valid
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 	} else {
 | |
| 		wp_die( __( 'No payments matching your request were found.', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
 | |
| 	}
 | |
| 	// Payment not verified
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get Success Page URL
 | |
|  *
 | |
|  * @param string $query_string
 | |
|  * @since       1.0
 | |
|  * @deprecated  2.6 Please avoid usage of this function in favor of edd_get_success_page_uri()
 | |
|  * @return      string
 | |
| */
 | |
| function edd_get_success_page_url( $query_string = null ) {
 | |
| 
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.6', 'edd_get_success_page_uri()', $backtrace );
 | |
| 
 | |
| 	return apply_filters( 'edd_success_page_url', edd_get_success_page_uri( $query_string ) );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Reduces earnings and sales stats when a purchase is refunded
 | |
|  *
 | |
|  * @since 1.8.2
 | |
|  * @param int $payment_id the ID number of the payment
 | |
|  * @param string $new_status the status of the payment, probably "publish"
 | |
|  * @param string $old_status the status of the payment prior to being marked as "complete", probably "pending"
 | |
|  * @deprecated  2.5.7 Please avoid usage of this function in favor of refund() in EDD_Payment
 | |
|  * @internal param Arguments $data passed
 | |
|  */
 | |
| function edd_undo_purchase_on_refund( $payment_id, $new_status, $old_status ) {
 | |
| 
 | |
| 	$backtrace = debug_backtrace();
 | |
| 	_edd_deprecated_function( 'edd_undo_purchase_on_refund', '2.5.7', 'EDD_Payment->refund()', $backtrace );
 | |
| 
 | |
| 	$payment = new EDD_Payment( $payment_id );
 | |
| 	$payment->refund();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get Earnings By Date
 | |
|  *
 | |
|  * @since 1.0
 | |
|  * @deprecated 2.7
 | |
|  * @param int $day Day number
 | |
|  * @param int $month_num Month number
 | |
|  * @param int $year Year
 | |
|  * @param int $hour Hour
 | |
|  * @return int $earnings Earnings
 | |
|  */
 | |
| function edd_get_earnings_by_date( $day, $month_num = null, $year = null, $hour = null, $include_taxes = true ) {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.7', 'EDD_Payment_Stats()->get_earnings()', $backtrace );
 | |
| 
 | |
| 	global $wpdb;
 | |
| 
 | |
| 	$args = array(
 | |
| 		'post_type'      => 'edd_payment',
 | |
| 		'nopaging'       => true,
 | |
| 		'year'           => $year,
 | |
| 		'monthnum'       => $month_num,
 | |
| 		'post_status'    => array( 'publish', 'revoked' ),
 | |
| 		'fields'         => 'ids',
 | |
| 		'include_taxes'  => $include_taxes,
 | |
| 		'update_post_term_cache' => false,
 | |
| 	);
 | |
| 
 | |
| 	if ( ! empty( $day ) ) {
 | |
| 		$args['day'] = $day;
 | |
| 	}
 | |
| 
 | |
| 	if ( ! empty( $hour ) || $hour == 0 ) {
 | |
| 		$args['hour'] = $hour;
 | |
| 	}
 | |
| 
 | |
| 	$args   = apply_filters( 'edd_get_earnings_by_date_args', $args );
 | |
| 	$cached = get_transient( 'edd_stats_earnings' );
 | |
| 	$key    = md5( json_encode( $args ) );
 | |
| 
 | |
| 	if ( ! isset( $cached[ $key ] ) ) {
 | |
| 		$sales = get_posts( $args );
 | |
| 		$earnings = 0;
 | |
| 		if ( $sales ) {
 | |
| 			$sales = implode( ',', $sales );
 | |
| 
 | |
| 			$total_earnings = $wpdb->get_var( "SELECT SUM(meta_value) FROM $wpdb->postmeta WHERE meta_key = '_edd_payment_total' AND post_id IN ({$sales})" );
 | |
| 			$total_tax      = 0;
 | |
| 
 | |
| 			if ( ! $include_taxes ) {
 | |
| 				$total_tax = $wpdb->get_var( "SELECT SUM(meta_value) FROM $wpdb->postmeta WHERE meta_key = '_edd_payment_tax' AND post_id IN ({$sales})" );
 | |
| 			}
 | |
| 
 | |
| 			$earnings += ( $total_earnings - $total_tax );
 | |
| 		}
 | |
| 		// Cache the results for one hour
 | |
| 		$cached[ $key ] = $earnings;
 | |
| 		set_transient( 'edd_stats_earnings', $cached, HOUR_IN_SECONDS );
 | |
| 	}
 | |
| 
 | |
| 	$result = $cached[ $key ];
 | |
| 
 | |
| 	return round( $result, 2 );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Get Sales By Date
 | |
|  *
 | |
|  * @since 1.1.4.0
 | |
|  * @deprecated 2.7
 | |
|  * @author Sunny Ratilal
 | |
|  * @param int $day Day number
 | |
|  * @param int $month_num Month number
 | |
|  * @param int $year Year
 | |
|  * @param int $hour Hour
 | |
|  * @return int $count Sales
 | |
|  */
 | |
| function edd_get_sales_by_date( $day = null, $month_num = null, $year = null, $hour = null ) {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.7', 'EDD_Payment_Stats()->get_sales()', $backtrace );
 | |
| 
 | |
| 	$args = array(
 | |
| 		'post_type'      => 'edd_payment',
 | |
| 		'nopaging'       => true,
 | |
| 		'year'           => $year,
 | |
| 		'fields'         => 'ids',
 | |
| 		'post_status'    => array( 'publish', 'revoked' ),
 | |
| 		'update_post_meta_cache' => false,
 | |
| 		'update_post_term_cache' => false
 | |
| 	);
 | |
| 
 | |
| 	$show_free = apply_filters( 'edd_sales_by_date_show_free', true, $args );
 | |
| 
 | |
| 	if ( false === $show_free ) {
 | |
| 		$args['meta_query'] = array(
 | |
| 			array(
 | |
| 				'key' => '_edd_payment_total',
 | |
| 				'value' => 0,
 | |
| 				'compare' => '>',
 | |
| 				'type' => 'NUMERIC',
 | |
| 			),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	if ( ! empty( $month_num ) ) {
 | |
| 		$args['monthnum'] = $month_num;
 | |
| 	}
 | |
| 
 | |
| 	if ( ! empty( $day ) ) {
 | |
| 		$args['day'] = $day;
 | |
| 	}
 | |
| 
 | |
| 	if ( ! empty( $hour ) ) {
 | |
| 		$args['hour'] = $hour;
 | |
| 	}
 | |
| 
 | |
| 	$args = apply_filters( 'edd_get_sales_by_date_args', $args  );
 | |
| 
 | |
| 	$cached = get_transient( 'edd_stats_sales' );
 | |
| 	$key    = md5( json_encode( $args ) );
 | |
| 
 | |
| 	if ( ! isset( $cached[ $key ] ) ) {
 | |
| 		$sales = new WP_Query( $args );
 | |
| 		$count = (int) $sales->post_count;
 | |
| 
 | |
| 		// Cache the results for one hour
 | |
| 		$cached[ $key ] = $count;
 | |
| 		set_transient( 'edd_stats_sales', $cached, HOUR_IN_SECONDS );
 | |
| 	}
 | |
| 
 | |
| 	$result = $cached[ $key ];
 | |
| 
 | |
| 	return $result;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Set the Page Style for PayPal Purchase page
 | |
|  *
 | |
|  * @since 1.4.1
 | |
|  * @deprecated 2.8
 | |
|  * @return string
 | |
|  */
 | |
| function edd_get_paypal_page_style() {
 | |
| 
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.8', 'edd_get_paypal_image_url', $backtrace );
 | |
| 
 | |
| 	$page_style = trim( edd_get_option( 'paypal_page_style', 'PayPal' ) );
 | |
| 	return apply_filters( 'edd_paypal_page_style', $page_style );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Should we add schema.org microdata?
 | |
|  *
 | |
|  * @since 1.7
 | |
|  * @since 3.0 - Deprecated as the switch was made to JSON-LD.
 | |
|  * @see https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5240
 | |
|  *
 | |
|  * @return bool
 | |
|  */
 | |
| function edd_add_schema_microdata() {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', 'EDD_Structured_Data', $backtrace );
 | |
| 
 | |
| 	// Don't modify anything until after wp_head() is called
 | |
| 	$ret = (bool)did_action( 'wp_head' );
 | |
| 	return apply_filters( 'edd_add_schema_microdata', $ret );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Add Microdata to download titles
 | |
|  *
 | |
|  * @since 1.5
 | |
|  * @since 3.0 - Deprecated as the switch was made to JSON-LD.
 | |
|  * @see https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5240
 | |
|  *
 | |
|  * @param string $title Post Title
 | |
|  * @param int $id Post ID
 | |
|  * @return string $title New title
 | |
|  */
 | |
| function edd_microdata_title( $title, $id = 0 ) {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', 'EDD_Structured_Data', $backtrace );
 | |
| 
 | |
| 	global $post;
 | |
| 
 | |
| 	if ( ! edd_add_schema_microdata() || ! is_object( $post ) ) {
 | |
| 		return $title;
 | |
| 	}
 | |
| 
 | |
| 	if ( $post->ID == $id && is_singular( 'download' ) && 'download' == get_post_type( intval( $id ) ) ) {
 | |
| 		$title = '<span itemprop="name">' . $title . '</span>';
 | |
| 	}
 | |
| 
 | |
| 	return $title;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Start Microdata to wrapper download
 | |
|  *
 | |
|  * @since 2.3
 | |
|  * @since 3.0 - Deprecated as the switch was made to JSON-LD.
 | |
|  * @see https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5240
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| function edd_microdata_wrapper_open( $query ) {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', 'EDD_Structured_Data', $backtrace );
 | |
| 
 | |
| 	static $microdata_open = NULL;
 | |
| 
 | |
| 	if ( ! edd_add_schema_microdata() || true === $microdata_open || ! is_object( $query ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	if ( $query && ! empty( $query->query['post_type'] ) && $query->query['post_type'] == 'download' && is_singular( 'download' ) && $query->is_main_query() ) {
 | |
| 		$microdata_open = true;
 | |
| 		echo '<div itemscope itemtype="http://schema.org/Product">';
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * End Microdata to wrapper download
 | |
|  *
 | |
|  * @since 2.3
 | |
|  * @since 3.0 - Deprecated as the switch was made to JSON-LD.
 | |
|  * @see https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5240
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| function edd_microdata_wrapper_close() {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', 'EDD_Structured_Data', $backtrace );
 | |
| 
 | |
| 	global $post;
 | |
| 
 | |
| 	static $microdata_close = NULL;
 | |
| 
 | |
| 	if ( ! edd_add_schema_microdata() || true === $microdata_close || ! is_object( $post ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	if ( $post && $post->post_type == 'download' && is_singular( 'download' ) && is_main_query() ) {
 | |
| 		$microdata_close = true;
 | |
| 		echo '</div>';
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Add Microdata to download description
 | |
|  *
 | |
|  * @since 1.5
 | |
|  * @since 3.0 - Deprecated as the switch was made to JSON-LD.
 | |
|  * @see https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5240
 | |
|  *
 | |
|  * @param $content
 | |
|  * @return mixed|void New title
 | |
|  */
 | |
| function edd_microdata_description( $content ) {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', 'EDD_Structured_Data', $backtrace );
 | |
| 
 | |
| 	global $post;
 | |
| 
 | |
| 	static $microdata_description = NULL;
 | |
| 
 | |
| 	if ( ! edd_add_schema_microdata() || true === $microdata_description || ! is_object( $post ) ) {
 | |
| 		return $content;
 | |
| 	}
 | |
| 
 | |
| 	if ( $post && $post->post_type == 'download' && is_singular( 'download' ) && is_main_query() ) {
 | |
| 		$microdata_description = true;
 | |
| 		$content = apply_filters( 'edd_microdata_wrapper', '<div itemprop="description">' . $content . '</div>' );
 | |
| 	}
 | |
| 	return $content;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Output schema markup for single price products.
 | |
|  *
 | |
|  * @since  2.6.14
 | |
|  * @since 3.0 - Deprecated as the switch was made to JSON-LD.
 | |
|  * @see https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5240
 | |
|  *
 | |
|  * @param  int $download_id The download being output.
 | |
|  * @return void
 | |
|  */
 | |
| function edd_purchase_link_single_pricing_schema( $download_id = 0, $args = array() ) {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', 'EDD_Structured_Data', $backtrace );
 | |
| 
 | |
| 	// Bail if the product has variable pricing, or if we aren't showing schema data.
 | |
| 	if ( edd_has_variable_prices( $download_id ) || ! edd_add_schema_microdata() ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	// Grab the information we need.
 | |
| 	$download = new EDD_Download( $download_id );
 | |
| 	?>
 | |
|     <span itemprop="offers" itemscope itemtype="http://schema.org/Offer">
 | |
| 		<meta itemprop="price" content="<?php echo esc_attr( $download->price ); ?>" />
 | |
| 		<meta itemprop="priceCurrency" content="<?php echo esc_attr( edd_get_currency() ); ?>" />
 | |
| 	</span>
 | |
| 	<?php
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Renders the Logs tab in the Reports screen.
 | |
|  *
 | |
|  * @since 1.3
 | |
|  * @deprecated 3.0 Use edd_tools_tab_logs() instead.
 | |
|  * @see edd_tools_tab_logs()
 | |
|  * @return void
 | |
|  */
 | |
| function edd_reports_tab_logs() {
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', 'edd_tools_tab_logs' );
 | |
| 
 | |
| 	if ( ! function_exists( 'edd_tools_tab_logs' ) ) {
 | |
| 		require_once EDD_PLUGIN_DIR . 'includes/admin/tools/logs.php';
 | |
| 	}
 | |
| 
 | |
| 	edd_tools_tab_logs();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Defines views for the legacy 'Reports' tab.
 | |
|  *
 | |
|  * @since 1.4
 | |
|  * @deprecated 3.0 Use \EDD\Reports\get_reports()
 | |
|  * @see \EDD\Reports\get_reports()
 | |
|  *
 | |
|  * @return array $views Report Views
 | |
|  */
 | |
| function edd_reports_default_views() {
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', '\EDD\Reports\get_reports' );
 | |
| 
 | |
| 	return Reports\get_reports();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Renders the Reports page
 | |
|  *
 | |
|  * @since 1.3
 | |
|  * @deprecated 3.0 Unused.
 | |
|  */
 | |
| function edd_reports_tab_reports() {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0' );
 | |
| 
 | |
| 	if ( ! current_user_can( 'view_shop_reports' ) ) {
 | |
| 		wp_die( __( 'You do not have permission to access this report', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
 | |
| 	}
 | |
| 
 | |
| 	$current_view = 'earnings';
 | |
| 	$views        = edd_reports_default_views();
 | |
| 
 | |
| 	if ( isset( $_GET['view'] ) && array_key_exists( $_GET['view'], $views ) ) {
 | |
| 		$current_view = $_GET['view'];
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Legacy: fired inside the old global 'Reports' tab.
 | |
| 	 *
 | |
| 	 * The dynamic portion of the hook name, `$current_view`, represented the parsed value of
 | |
| 	 * the 'view' query variable.
 | |
| 	 *
 | |
| 	 * @since 1.3
 | |
| 	 * @deprecated 3.0 Unused.
 | |
| 	 */
 | |
| 	edd_do_action_deprecated( 'edd_reports_view_' . $current_view, array(), '3.0' );
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Default Report Views
 | |
|  *
 | |
|  * Checks the $_GET['view'] parameter to ensure it exists within the default allowed views.
 | |
|  *
 | |
|  * @param string $default Default view to use.
 | |
|  *
 | |
|  * @since 1.9.6
 | |
|  * @deprecated 3.0 Unused.
 | |
|  *
 | |
|  * @return string $view Report View
 | |
|  */
 | |
| function edd_get_reporting_view( $default = 'earnings' ) {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0' );
 | |
| 
 | |
| 	if ( ! isset( $_GET['view'] ) || ! in_array( $_GET['view'], array_keys( edd_reports_default_views() ) ) ) {
 | |
| 		$view = $default;
 | |
| 	} else {
 | |
| 		$view = $_GET['view'];
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Legacy: filters the current reporting view (now implemented solely via the 'tab' var).
 | |
| 	 *
 | |
| 	 * @since 1.9.6
 | |
| 	 * @deprecated 3.0 Unused.
 | |
| 	 *
 | |
| 	 * @param string $view View slug.
 | |
| 	 */
 | |
| 	return edd_apply_filters_deprecated( 'edd_get_reporting_view', array( $view ), '3.0' );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Renders the Reports Page Views Drop Downs
 | |
|  *
 | |
|  * @since 1.3
 | |
|  * @deprecated 3.0 Unused.
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| function edd_report_views() {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0' );
 | |
| 
 | |
| 	/**
 | |
| 	 * Legacy: fired before the view actions drop-down was output.
 | |
| 	 *
 | |
| 	 * @since 1.3
 | |
| 	 * @deprecated 3.0 Unused.
 | |
| 	 */
 | |
| 	edd_do_action_deprecated( 'edd_report_view_actions', array(), '3.0' );
 | |
| 
 | |
| 	/**
 | |
| 	 * Legacy: fired after the view actions drop-down was output.
 | |
| 	 *
 | |
| 	 * @since 1.3
 | |
| 	 * @deprecated 3.0 Unused.
 | |
| 	 */
 | |
| 	edd_do_action_deprecated( 'edd_report_view_actions_after', array(), '3.0' );
 | |
| 
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Show report graph date filters.
 | |
|  *
 | |
|  * @since 1.3
 | |
|  * @deprecated 3.0 Unused.
 | |
|  */
 | |
| function edd_reports_graph_controls() {
 | |
| 	_edd_deprecated_function( __FUNCTION__, 'EDD 3.0' );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Sets up the dates used to filter graph data
 | |
|  *
 | |
|  * Date sent via $_GET is read first and then modified (if needed) to match the
 | |
|  * selected date-range (if any)
 | |
|  *
 | |
|  * @since 1.3
 | |
|  * @deprecated 3.0 Use \EDD\Reports\get_dates_filter() instead
 | |
|  * @see \EDD\Reports\get_dates_filter()
 | |
|  *
 | |
|  * @param string $timezone Optional. Timezone to force for report filter dates calculations.
 | |
|  *                         Default is the WP timezone.
 | |
|  * @return array Array of report filter dates.
 | |
|  */
 | |
| function edd_get_report_dates( $timezone = null ) {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', '\EDD\Reports\get_dates_filter' );
 | |
| 
 | |
| 	Reports\Init::bootstrap();
 | |
| 
 | |
| 	add_filter( 'edd_get_dates_filter_range', '\EDD\Reports\compat_filter_date_range' );
 | |
| 
 | |
| 	$filter_dates = Reports\get_dates_filter( 'objects', $timezone );
 | |
| 	$range        = Reports\get_dates_filter_range();
 | |
| 
 | |
| 	remove_filter( 'edd_get_report_dates_default_range', '\EDD\Reports\compat_filter_date_range' );
 | |
| 
 | |
| 	$dates = array(
 | |
| 		'range'    => $range,
 | |
| 		'day'      => $filter_dates['start']->format( 'd' ),
 | |
| 		'day_end'  => $filter_dates['end']->format( 'd' ),
 | |
| 		'm_start'  => $filter_dates['start']->month,
 | |
| 		'm_end'    => $filter_dates['end']->month,
 | |
| 		'year'     => $filter_dates['start']->year,
 | |
| 		'year_end' => $filter_dates['end']->year,
 | |
| 	);
 | |
| 
 | |
| 	/**
 | |
| 	 * Filters the legacy list of parsed report dates for use in the Reports API.
 | |
| 	 *
 | |
| 	 * @since 1.3
 | |
| 	 * @deprecated 3.0
 | |
| 	 *
 | |
| 	 * @param array $dates Array of legacy date parts.
 | |
| 	 */
 | |
| 	return edd_apply_filters_deprecated( 'edd_report_dates', array( $dates ), '3.0' );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Intercept default Edit post links for EDD orders and rewrite them to the View Order Details screen.
 | |
|  *
 | |
|  * @since 1.8.3
 | |
|  * @deprecated 3.0 No alternative present as get_post() does not work with orders.
 | |
|  *
 | |
|  * @param $url
 | |
|  * @param $post_id
 | |
|  * @param $context
 | |
|  *
 | |
|  * @return string
 | |
|  */
 | |
| function edd_override_edit_post_for_payment_link( $url = '', $post_id = 0, $context = '') {
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', '' );
 | |
| 
 | |
| 	$post = get_post( $post_id );
 | |
| 
 | |
| 	if ( empty( $post ) ) {
 | |
| 		return $url;
 | |
| 	}
 | |
| 
 | |
| 	if ( 'edd_payment' !== $post->post_type ) {
 | |
| 		return $url;
 | |
| 	}
 | |
| 
 | |
| 	return edd_get_admin_url( array(
 | |
| 		'page' => 'edd-payment-history',
 | |
| 		'view' => 'view-order-details',
 | |
| 		'id'   => absint( $post_id ),
 | |
| 	) );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Record sale as a log.
 | |
|  *
 | |
|  * Stores log information for a download sale.
 | |
|  *
 | |
|  * @since 1.0
 | |
|  * @deprecated 3.0 Sales logs are no longed stored.
 | |
|  *
 | |
|  * @param int    $download_id Download ID
 | |
|  * @param int    $payment_id  Payment ID.
 | |
|  * @param int    $price_id    Optional. Price ID.
 | |
|  * @param string $sale_date   Optional. Date of the sale.
 | |
|  */
 | |
| function edd_record_sale_in_log( $download_id, $payment_id, $price_id = false, $sale_date = null ) {
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0' );
 | |
| 
 | |
| 	$edd_logs = EDD()->debug_log;
 | |
| 
 | |
| 	$log_data = array(
 | |
| 		'post_parent'   => $download_id,
 | |
| 		'log_type'      => 'sale',
 | |
| 		'post_date'     => ! empty( $sale_date ) ? $sale_date : null,
 | |
| 		'post_date_gmt' => ! empty( $sale_date ) ? get_gmt_from_date( $sale_date ) : null,
 | |
| 	);
 | |
| 
 | |
| 	$log_meta = array(
 | |
| 		'payment_id' => $payment_id,
 | |
| 		'price_id'   => (int) $price_id,
 | |
| 	);
 | |
| 
 | |
| 	$edd_logs->insert_log( $log_data, $log_meta );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Outputs the JavaScript code for the Agree to Terms section to toggle
 | |
|  * the T&Cs text
 | |
|  *
 | |
|  * @since 1.0
 | |
|  * @deprecated 3.0 Moved to external scripts in assets/js/frontend/checkout/components/agree-to-terms
 | |
|  */
 | |
| function edd_agree_to_terms_js() {
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0' );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Record payment status change
 | |
|  *
 | |
|  * @since 1.4.3
 | |
|  * @deprecated since 3.0
 | |
|  * @param int    $payment_id the ID number of the payment.
 | |
|  * @param string $new_status the status of the payment, probably "publish".
 | |
|  * @param string $old_status the status of the payment prior to being marked as "complete", probably "pending".
 | |
|  * @return void
 | |
|  */
 | |
| function edd_record_status_change( $payment_id, $new_status, $old_status ) {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', 'edd_record_order_status_change', $backtrace );
 | |
| 
 | |
| 	// Get the list of statuses so that status in the payment note can be translated
 | |
| 	$stati      = edd_get_payment_statuses();
 | |
| 	$old_status = isset( $stati[ $old_status ] ) ? $stati[ $old_status ] : $old_status;
 | |
| 	$new_status = isset( $stati[ $new_status ] ) ? $stati[ $new_status ] : $new_status;
 | |
| 
 | |
| 	$status_change = sprintf( __( 'Status changed from %s to %s', 'easy-digital-downloads' ), $old_status, $new_status );
 | |
| 
 | |
| 	edd_insert_payment_note( $payment_id, $status_change );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Shows checkbox to automatically refund payments made in PayPal.
 | |
|  *
 | |
|  * @deprecated 3.0 In favour of `edd_paypal_refund_checkbox()`
 | |
|  * @see edd_paypal_refund_checkbox()
 | |
|  *
 | |
|  * @since  2.6.0
 | |
|  *
 | |
|  * @param int $payment_id The current payment ID.
 | |
|  * @return void
 | |
|  */
 | |
| function edd_paypal_refund_admin_js( $payment_id = 0 ) {
 | |
| 
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', 'edd_paypal_refund_checkbox', $backtrace );
 | |
| 
 | |
| 	// If not the proper gateway, return early.
 | |
| 	if ( 'paypal' !== edd_get_payment_gateway( $payment_id ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	// If our credentials are not set, return early.
 | |
| 	$key       = edd_get_payment_meta( $payment_id, '_edd_payment_mode', true );
 | |
| 	$username  = edd_get_option( 'paypal_' . $key . '_api_username' );
 | |
| 	$password  = edd_get_option( 'paypal_' . $key . '_api_password' );
 | |
| 	$signature = edd_get_option( 'paypal_' . $key . '_api_signature' );
 | |
| 
 | |
| 	if ( empty( $username ) || empty( $password ) || empty( $signature ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	// Localize the refund checkbox label.
 | |
| 	$label = __( 'Refund Payment in PayPal', 'easy-digital-downloads' );
 | |
| 
 | |
| 	?>
 | |
| 	<script type="text/javascript">
 | |
| 		jQuery(document).ready(function($) {
 | |
| 			$('select[name=edd-payment-status]').change(function() {
 | |
| 				if ( 'refunded' === $(this).val() ) {
 | |
| 					$(this).parent().parent().append('<input type="checkbox" id="edd-paypal-refund" name="edd-paypal-refund" value="1" style="margin-top:0">');
 | |
| 					$(this).parent().parent().append('<label for="edd-paypal-refund"><?php echo $label; ?></label>');
 | |
| 				} else {
 | |
| 					$('#edd-paypal-refund').remove();
 | |
| 					$('label[for="edd-paypal-refund"]').remove();
 | |
| 				}
 | |
| 			});
 | |
| 		});
 | |
| 	</script>
 | |
| 	<?php
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Possibly refunds a payment made with PayPal Standard or PayPal Express.
 | |
|  *
 | |
|  * @deprecated 3.0 In favour of `edd_paypal_maybe_refund_transaction()`
 | |
|  * @see edd_paypal_maybe_refund_transaction()
 | |
|  *
 | |
|  * @since  2.6.0
 | |
|  *
 | |
|  * @param object|EDD_Payment $payment The current payment ID.
 | |
|  * @return void
 | |
|  */
 | |
| function edd_maybe_refund_paypal_purchase( EDD_Payment $payment ) {
 | |
| 	$backtrace = debug_backtrace();
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0', 'edd_paypal_maybe_refund_transaction', $backtrace );
 | |
| 
 | |
| 	if ( ! current_user_can( 'edit_shop_payments', $payment->ID ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	if ( empty( $_POST['edd-paypal-refund'] ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	$processed = $payment->get_meta( '_edd_paypal_refunded', true );
 | |
| 
 | |
| 	// If the status is not set to "refunded", return early.
 | |
| 	if ( 'complete' !== $payment->old_status && 'revoked' !== $payment->old_status ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	// If not PayPal/PayPal Express, return early.
 | |
| 	if ( 'paypal' !== $payment->gateway ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	// If the payment has already been refunded in the past, return early.
 | |
| 	if ( $processed ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	// Process the refund in PayPal.
 | |
| 	edd_refund_paypal_purchase( $payment );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Jilt Callback
 | |
|  *
 | |
|  * Renders Jilt Settings
 | |
|  *
 | |
|  * @deprecated 2.10.2
 | |
|  *
 | |
|  * @param array $args arguments passed by the setting.
 | |
|  * @return void
 | |
|  */
 | |
| function edd_jilt_callback( $args ) {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.10.2' );
 | |
| 
 | |
| 	$activated   = is_callable( 'edd_jilt' );
 | |
| 	$connected   = $activated && edd_jilt()->get_integration()->is_jilt_connected();
 | |
| 	$connect_url = $activated ? edd_jilt()->get_connect_url() : '';
 | |
| 	$account_url = $connected ? edd_jilt()->get_integration()->get_jilt_app_url() : '';
 | |
| 
 | |
| 	echo wp_kses_post( $args['desc'] );
 | |
| 
 | |
| 	if ( $activated ) :
 | |
| 		?>
 | |
| 
 | |
| 		<?php if ( $connected ) : ?>
 | |
| 
 | |
| 		<p>
 | |
| 			<button id="edd-jilt-disconnect" class="button"><?php esc_html_e( 'Disconnect Jilt', 'easy-digital-downloads' ); ?></button>
 | |
| 		</p>
 | |
| 
 | |
| 		<p>
 | |
| 			<?php
 | |
| 			wp_kses_post(
 | |
| 				sprintf(
 | |
| 				/* Translators: %1$s - <a> tag, %2$s - </a> tag */
 | |
| 					__( '%1$sClick here%2$s to visit your Jilt dashboard', 'easy-digital-downloads' ),
 | |
| 					'<a href="' . esc_url( $account_url ) . '" target="_blank">',
 | |
| 					'</a>'
 | |
| 				)
 | |
| 			);
 | |
| 			?>
 | |
| 		</p>
 | |
| 
 | |
| 	<?php else : ?>
 | |
| 
 | |
| 		<p>
 | |
| 			<a id="edd-jilt-connect" class="button button-primary" href="<?php echo esc_url( $connect_url ); ?>">
 | |
| 				<?php esc_html_e( 'Connect to Jilt', 'easy-digital-downloads' ); ?>
 | |
| 			</a>
 | |
| 		</p>
 | |
| 
 | |
| 	<?php endif; ?>
 | |
| 
 | |
| 	<?php elseif( current_user_can( 'install_plugins' ) ) : ?>
 | |
| 
 | |
| 		<p>
 | |
| 			<button id="edd-jilt-connect" class="button button-primary">
 | |
| 				<?php esc_html_e( 'Install Jilt', 'easy-digital-downloads' ); ?>
 | |
| 			</button>
 | |
| 		</p>
 | |
| 
 | |
| 	<?php
 | |
| 	endif;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Handle installation and activation for Jilt via AJAX
 | |
|  *
 | |
|  * @deprecated 2.10.2
 | |
|  * @since n.n.n
 | |
|  */
 | |
| function edd_jilt_remote_install_handler() {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.10.2' );
 | |
| 
 | |
| 	if ( ! current_user_can( 'manage_shop_settings' ) || ! current_user_can( 'install_plugins' ) ) {
 | |
| 		wp_send_json_error(
 | |
| 			array(
 | |
| 				'error' => __( 'You do not have permission to do this.', 'easy-digital-downloads' ),
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
 | |
| 	include_once ABSPATH . 'wp-admin/includes/file.php';
 | |
| 	include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
 | |
| 
 | |
| 	$plugins = get_plugins();
 | |
| 
 | |
| 	if ( ! array_key_exists( 'jilt-for-edd/jilt-for-edd.php', $plugins ) ) {
 | |
| 		/*
 | |
| 		* Use the WordPress Plugins API to get the plugin download link.
 | |
| 		*/
 | |
| 		$api = plugins_api(
 | |
| 			'plugin_information',
 | |
| 			array(
 | |
| 				'slug' => 'jilt-for-edd',
 | |
| 			)
 | |
| 		);
 | |
| 
 | |
| 		if ( is_wp_error( $api ) ) {
 | |
| 			wp_send_json_error(
 | |
| 				array(
 | |
| 					'error' => $api->get_error_message(),
 | |
| 					'debug' => $api,
 | |
| 				)
 | |
| 			);
 | |
| 		}
 | |
| 
 | |
| 		/*
 | |
| 		* Use the AJAX Upgrader skin to quietly install the plugin.
 | |
| 		*/
 | |
| 		$upgrader = new Plugin_Upgrader( new WP_Ajax_Upgrader_Skin() );
 | |
| 		$install  = $upgrader->install( $api->download_link );
 | |
| 		if ( is_wp_error( $install ) ) {
 | |
| 			wp_send_json_error(
 | |
| 				array(
 | |
| 					'error' => $install->get_error_message(),
 | |
| 					'debug' => $api,
 | |
| 				)
 | |
| 			);
 | |
| 		}
 | |
| 
 | |
| 		activate_plugin( $upgrader->plugin_info() );
 | |
| 
 | |
| 	} else {
 | |
| 
 | |
| 		activate_plugin( 'jilt-for-edd/jilt-for-edd.php' );
 | |
| 	}
 | |
| 
 | |
| 	/*
 | |
| 	* Final check to see if Jilt is available.
 | |
| 	*/
 | |
| 	if ( ! class_exists( 'EDD_Jilt_Loader' ) ) {
 | |
| 		wp_send_json_error(
 | |
| 			array(
 | |
| 				'error' => __( 'Something went wrong. Jilt was not installed correctly.', 'easy-digital-downloads' ),
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	wp_send_json_success();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Handle connection for Jilt via AJAX
 | |
|  *
 | |
|  * @deprecated 2.10.2
 | |
|  * @since n.n.n
 | |
|  */
 | |
| function edd_jilt_connect_handler() {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.10.2' );
 | |
| 
 | |
| 	if ( ! current_user_can( 'manage_shop_settings' ) ) {
 | |
| 		wp_send_json_error(
 | |
| 			array(
 | |
| 				'error' => __( 'You do not have permission to do this.', 'easy-digital-downloads' ),
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	if ( ! is_callable( 'edd_jilt' ) ) {
 | |
| 		wp_send_json_error(
 | |
| 			array(
 | |
| 				'error' => __( 'Something went wrong. Jilt was not installed correctly.', 'easy-digital-downloads' ),
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	wp_send_json_success( array( 'connect_url' => edd_jilt()->get_connect_url() ) );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Handle disconnection and deactivation for Jilt via AJAX
 | |
|  *
 | |
|  * @deprecated 2.10.2
 | |
|  * @since n.n.n
 | |
|  */
 | |
| function edd_jilt_disconnect_handler() {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.10.2' );
 | |
| 
 | |
| 	if ( ! current_user_can( 'manage_shop_settings' ) ) {
 | |
| 		wp_send_json_error(
 | |
| 			array(
 | |
| 				'error' => __( 'You do not have permission to do this.', 'easy-digital-downloads' ),
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	if ( is_callable( 'edd_jilt' ) ) {
 | |
| 
 | |
| 		edd_jilt()->get_integration()->unlink_shop();
 | |
| 		edd_jilt()->get_integration()->revoke_authorization();
 | |
| 		edd_jilt()->get_integration()->clear_connection_data();
 | |
| 	}
 | |
| 
 | |
| 	deactivate_plugins( 'jilt-for-edd/jilt-for-edd.php' );
 | |
| 
 | |
| 	wp_send_json_success();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Maybe adds a notice to abandoned payments if Jilt isn't installed.
 | |
|  *
 | |
|  * @deprecated 2.10.2
 | |
|  * @since n.n.n
 | |
|  *
 | |
|  * @param int $payment_id The ID of the abandoned payment, for which a jilt notice is being thrown.
 | |
|  */
 | |
| function maybe_add_jilt_notice_to_abandoned_payment( $payment_id ) {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.10.2' );
 | |
| 
 | |
| 	if ( ! is_callable( 'edd_jilt' )
 | |
| 		&& ! is_plugin_active( 'recapture-for-edd/recapture.php' )
 | |
| 		&& 'abandoned' === edd_get_payment_status( $payment_id )
 | |
| 		&& ! get_user_meta( get_current_user_id(), '_edd_try_jilt_dismissed', true )
 | |
| 	) {
 | |
| 		?>
 | |
| 		<div class="notice notice-warning jilt-notice">
 | |
| 			<p>
 | |
| 				<?php
 | |
| 				echo wp_kses_post(
 | |
| 					sprintf(
 | |
| 						/* Translators: %1$s - <strong> tag, %2$s - </strong> tag, %3$s - <a> tag, %4$s - </a> tag */
 | |
| 						__( '%1$sRecover abandoned purchases like this one.%2$s %3$sTry Jilt for free%4$s.', 'easy-digital-downloads' ),
 | |
| 						'<strong>',
 | |
| 						'</strong>',
 | |
| 						'<a href="https://easydigitaldownloads.com/downloads/jilt" target="_blank">',
 | |
| 						'</a>'
 | |
| 					)
 | |
| 				);
 | |
| 				?>
 | |
| 			</p>
 | |
| 			<?php
 | |
| 			echo wp_kses_post(
 | |
| 				sprintf(
 | |
| 					/* Translators: %1$s - Opening anchor tag, %2$s - The url to dismiss the ajax notice, %3$s - Complete the opening of the anchor tag, %4$s - Open span tag, %4$s - Close span tag */
 | |
| 					__( '%1$s %2$s %3$s %4$s Dismiss this notice. %5$s', 'easy-digital-downloads' ),
 | |
| 					'<a href="',
 | |
| 					esc_url(
 | |
| 						add_query_arg(
 | |
| 							array(
 | |
| 								'edd_action' => 'dismiss_notices',
 | |
| 								'edd_notice' => 'try_jilt',
 | |
| 							)
 | |
| 						)
 | |
| 					),
 | |
| 					'" type="button" class="notice-dismiss">',
 | |
| 					'<span class="screen-reader-text">',
 | |
| 					'</span>
 | |
| 				</a>'
 | |
| 				)
 | |
| 			);
 | |
| 			?>
 | |
| 		</div>
 | |
| 		<?php
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * SendWP Callback
 | |
|  *
 | |
|  * Renders SendWP Settings
 | |
|  *
 | |
|  * @since 2.9.15
 | |
|  * @param array $args Arguments passed by the setting
 | |
|  * @return void
 | |
|  */
 | |
| function edd_sendwp_callback( $args ) {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.11.4' );
 | |
| 
 | |
| 	// Connection status partial label based on the state of the SendWP email sending setting (Tools -> SendWP)
 | |
| 	$connected  = '<a href="https://app.sendwp.com/dashboard" target="_blank" rel="noopener noreferrer">';
 | |
| 	$connected .= __( 'Access your SendWP account', 'easy-digital-downloads' );
 | |
| 	$connected .= '</a>.';
 | |
| 
 | |
| 	$disconnected = sprintf(
 | |
| 		__( '<em><strong>Note:</strong> Email sending is currently disabled. <a href="' . esc_url( admin_url( 'tools.php?page=sendwp' ) ) . '">Click here</a> to enable it.</em>', 'easy-digital-downloads' )
 | |
| 	);
 | |
| 
 | |
| 	// Checks if SendWP is connected
 | |
| 	$client_connected = function_exists( 'sendwp_client_connected' ) && sendwp_client_connected() ? true : false;
 | |
| 
 | |
| 	// Checks if email sending is enabled in SendWP
 | |
| 	$forwarding_enabled = function_exists( 'sendwp_forwarding_enabled' ) && sendwp_forwarding_enabled() ? true : false;
 | |
| 
 | |
| 	ob_start();
 | |
| 
 | |
| 	echo $args['desc'];
 | |
| 
 | |
| 	// Output the appropriate button and label based on connection status
 | |
| 	if( $client_connected ) :
 | |
| 		?>
 | |
| 		<div class="inline notice notice-success">
 | |
| 			<p><?php _e( 'SendWP plugin activated.', 'easy-digital-downloads' ); ?> <?php echo $forwarding_enabled ? $connected : $disconnected ; ?></p>
 | |
| 
 | |
| 			<p>
 | |
| 				<button id="edd-sendwp-disconnect" class="button"><?php _e( 'Disconnect SendWP', 'easy-digital-downloads' ); ?></button>
 | |
| 			</p>
 | |
| 		</div>
 | |
| 		<?php
 | |
| 	else :
 | |
| 		?>
 | |
| 		<p>
 | |
| 			<?php _e( 'We recommend SendWP to ensure quick and reliable delivery of all emails sent from your store, such as purchase receipts, subscription renewal reminders, password resets, and more.', 'easy-digital-downloads' ); ?> <?php printf( __( '%sLearn more%s', 'easy-digital-downloads' ), '<a href="https://sendwp.com/" target="_blank" rel="noopener noreferrer">', '</a>' ); ?>
 | |
| 		</p>
 | |
| 		<p>
 | |
| 			<button type="button" id="edd-sendwp-connect" class="button button-primary"><?php esc_html_e( 'Connect with SendWP', 'easy-digital-downloads' ); ?>
 | |
| 			</button>
 | |
| 		</p>
 | |
| 
 | |
| 		<?php
 | |
| 	endif;
 | |
| 
 | |
| 	echo ob_get_clean();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Handle installation and connection for SendWP via ajax
 | |
|  *
 | |
|  * @since 2.9.15
 | |
|  */
 | |
| function edd_sendwp_remote_install_handler () {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.11.4' );
 | |
| 
 | |
| 	if ( ! current_user_can( 'manage_shop_settings' ) ) {
 | |
| 		wp_send_json_error( array(
 | |
| 			'error' => __( 'You do not have permission to do this.', 'easy-digital-downloads' )
 | |
| 		) );
 | |
| 	}
 | |
| 
 | |
| 	include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
 | |
| 	include_once ABSPATH . 'wp-admin/includes/file.php';
 | |
| 	include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
 | |
| 
 | |
| 	$plugins = get_plugins();
 | |
| 
 | |
| 	if( ! array_key_exists( 'sendwp/sendwp.php', $plugins ) ) {
 | |
| 
 | |
| 		/*
 | |
| 		* Use the WordPress Plugins API to get the plugin download link.
 | |
| 		*/
 | |
| 		$api = plugins_api( 'plugin_information', array(
 | |
| 			'slug' => 'sendwp',
 | |
| 		) );
 | |
| 
 | |
| 		if ( is_wp_error( $api ) ) {
 | |
| 			wp_send_json_error( array(
 | |
| 				'error' => $api->get_error_message(),
 | |
| 				'debug' => $api
 | |
| 			) );
 | |
| 		}
 | |
| 
 | |
| 		/*
 | |
| 		* Use the AJAX Upgrader skin to quietly install the plugin.
 | |
| 		*/
 | |
| 		$upgrader = new Plugin_Upgrader( new WP_Ajax_Upgrader_Skin() );
 | |
| 		$install = $upgrader->install( $api->download_link );
 | |
| 		if ( is_wp_error( $install ) ) {
 | |
| 			wp_send_json_error( array(
 | |
| 				'error' => $install->get_error_message(),
 | |
| 				'debug' => $api
 | |
| 			) );
 | |
| 		}
 | |
| 
 | |
| 		$activated = activate_plugin( $upgrader->plugin_info() );
 | |
| 
 | |
| 	} else {
 | |
| 
 | |
| 		$activated = activate_plugin( 'sendwp/sendwp.php' );
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/*
 | |
| 	* Final check to see if SendWP is available.
 | |
| 	*/
 | |
| 	if( ! function_exists('sendwp_get_server_url') ) {
 | |
| 		wp_send_json_error( array(
 | |
| 			'error' => __( 'Something went wrong. SendWP was not installed correctly.', 'easy-digital-downloads' )
 | |
| 		) );
 | |
| 	}
 | |
| 
 | |
| 	wp_send_json_success( array(
 | |
| 		'partner_id'      => 81,
 | |
| 		'register_url'    => sendwp_get_server_url() . '_/signup',
 | |
| 		'client_name'     => sendwp_get_client_name(),
 | |
| 		'client_secret'   => sendwp_get_client_secret(),
 | |
| 		'client_redirect' => admin_url( 'edit.php?post_type=download&page=edd-settings&tab=emails&edd-message=sendwp-connected' ),
 | |
| 	) );
 | |
| }
 | |
| add_action( 'wp_ajax_edd_sendwp_remote_install', 'edd_sendwp_remote_install_handler' );
 | |
| 
 | |
| /**
 | |
|  * Handle deactivation of SendWP via ajax
 | |
|  *
 | |
|  * @since 2.9.15
 | |
|  */
 | |
| function edd_sendwp_disconnect () {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.11.4' );
 | |
| 
 | |
| 	if ( ! current_user_can( 'manage_shop_settings' ) ) {
 | |
| 		wp_send_json_error( array(
 | |
| 			'error' => __( 'You do not have permission to do this.', 'easy-digital-downloads' )
 | |
| 		) );
 | |
| 	}
 | |
| 
 | |
| 	sendwp_disconnect_client();
 | |
| 
 | |
| 	deactivate_plugins( 'sendwp/sendwp.php' );
 | |
| 
 | |
| 	wp_send_json_success();
 | |
| }
 | |
| add_action( 'wp_ajax_edd_sendwp_disconnect', 'edd_sendwp_disconnect' );
 | |
| 
 | |
| /**
 | |
|  * Reverts to the original download URL validation.
 | |
|  *
 | |
|  * @since 2.11.4
 | |
|  * @todo  Remove this function in 3.0.
 | |
|  *
 | |
|  * @param bool   $ret
 | |
|  * @param string $url
 | |
|  * @param array  $query_args
 | |
|  * @param string $original_url
 | |
|  */
 | |
| add_filter( 'edd_validate_url_token', function( $ret, $url, $query_args, $original_url ) {
 | |
| 	// If the URL is already validated, we don't need to validate it again.
 | |
| 	if ( $ret ) {
 | |
| 		return $ret;
 | |
| 	}
 | |
| 	$allowed = edd_get_url_token_parameters();
 | |
| 	$remove  = array();
 | |
| 	foreach ( $query_args as $key => $value ) {
 | |
| 		if ( ! in_array( $key, $allowed, true ) ) {
 | |
| 			$remove[] = $key;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if ( ! empty( $remove ) ) {
 | |
| 		$original_url = remove_query_arg( $remove, $original_url );
 | |
| 	}
 | |
| 
 | |
| 	return isset( $query_args['token'] ) && hash_equals( $query_args['token'], edd_get_download_token( $original_url ) );
 | |
| }, 10, 4 );
 | |
| 
 | |
| /**
 | |
|  * Get the path of the Product Reviews plugin
 | |
|  *
 | |
|  * @since 2.9.20
 | |
|  *
 | |
|  * @return mixed|string
 | |
|  */
 | |
| function edd_reviews_location() {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.11.4' );
 | |
| 
 | |
| 	$possible_locations = array( 'edd-reviews/edd-reviews.php', 'EDD-Reviews/edd-reviews.php' );
 | |
| 	$reviews_location   = '';
 | |
| 
 | |
| 	foreach ( $possible_locations as $location ) {
 | |
| 
 | |
| 		if ( 0 !== validate_plugin( $location ) ) {
 | |
| 			continue;
 | |
| 		}
 | |
| 		$reviews_location = $location;
 | |
| 	}
 | |
| 
 | |
| 	return $reviews_location;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Outputs a metabox for the Product Reviews extension to show or activate it.
 | |
|  *
 | |
|  * @since 2.8
 | |
|  * @return void
 | |
|  */
 | |
| function edd_render_review_status_metabox() {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '2.11.4' );
 | |
| 
 | |
| 	$reviews_location = edd_reviews_location();
 | |
| 
 | |
| 	ob_start();
 | |
| 
 | |
| 	if ( ! empty( $reviews_location ) ) {
 | |
| 		$review_path  = '';
 | |
| 		$base_url     = wp_nonce_url( admin_url( 'plugins.php' ), 'activate-plugin_' . sanitize_key( $reviews_location ) );
 | |
| 		$args         = array(
 | |
| 			'action'        => 'activate',
 | |
| 			'plugin'        => sanitize_text_field( $reviews_location ),
 | |
| 			'plugin_status' => 'all',
 | |
| 		);
 | |
| 		$activate_url = add_query_arg( $args, $base_url );
 | |
| 		?><p style="text-align: center;"><a href="<?php echo esc_url( $activate_url ); ?>" class="button-secondary"><?php _e( 'Activate Reviews', 'easy-digital-downloads' ); ?></a></p><?php
 | |
| 
 | |
| 	} else {
 | |
| 		$url = edd_link_helper(
 | |
| 			'https://easydigitaldownloads.com/downloads/product-reviews/',
 | |
| 			array(
 | |
| 				'utm_medium'  => 'edit-download',
 | |
| 				'utm_content' => 'product-reviews',
 | |
| 			)
 | |
| 		);
 | |
| 		?>
 | |
| 		<p>
 | |
| 			<?php
 | |
| 			// Translators: The %s represents the link to the Product Reviews extension.
 | |
| 			echo wp_kses_post( sprintf( __( 'Would you like to enable reviews for this product? Check out our <a target="_blank" href="%s">Product Reviews</a> extension.', 'easy-digital-downloads' ), $url ) );
 | |
| 			?>
 | |
| 		</p>
 | |
| 		<?php
 | |
| 	}
 | |
| 
 | |
| 	$rendered = ob_get_contents();
 | |
| 	ob_end_clean();
 | |
| 
 | |
| 	echo wp_kses_post( $rendered );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  *
 | |
|  * Increases the sale count of a download.
 | |
|  *
 | |
|  * @since 1.0
 | |
|  *
 | |
|  * @param int $download_id Download ID.
 | |
|  * @param int $quantity    Quantity to increase purchase count by.
 | |
|  *
 | |
|  * @return bool|int Updated sale count, false if download does not exist.
 | |
|  */
 | |
| function edd_increase_purchase_count( $download_id = 0, $quantity = 1 ) {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0' );
 | |
| 
 | |
| 	// Bail if no download ID was passed.
 | |
| 	if ( empty( $download_id ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	$download = edd_get_download( $download_id );
 | |
| 	if ( ! $download ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	return $download->get_sales();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Decreases the sale count of a download. Primarily for when a purchase is
 | |
|  * refunded.
 | |
|  *
 | |
|  * @since 1.0.8.1
 | |
|  *
 | |
|  * @param int $download_id Download ID.
 | |
|  * @param int $quantity    Optional. Quantity to decrease by. Default 1.
 | |
|  *
 | |
|  * @return bool|int Updated sale count, false if download does not exist.
 | |
|  */
 | |
| function edd_decrease_purchase_count( $download_id = 0, $quantity = 1 ) {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0' );
 | |
| 
 | |
| 	// Bail if no download ID was passed.
 | |
| 	if ( empty( $download_id ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	$download = edd_get_download( $download_id );
 | |
| 	if ( ! $download ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	return $download->get_sales();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Increases the total earnings of a download.
 | |
|  *
 | |
|  * @since 1.0
 | |
|  *
 | |
|  * @param int   $download_id Download ID.
 | |
|  * @param float $amount      Earnings to increase by.
 | |
|  *
 | |
|  * @return float|false Updated earnings, false if invalid data passed.
 | |
|  */
 | |
| function edd_increase_earnings( $download_id = 0, $amount = 0.00 ) {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0' );
 | |
| 
 | |
| 	// Bail if no download ID or amount was passed.
 | |
| 	if ( empty( $download_id ) || empty( $amount ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	$download = edd_get_download( $download_id );
 | |
| 	if ( ! $download ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	return $download->get_earnings();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Decreases the total earnings of a download. Primarily for when a purchase
 | |
|  * is refunded.
 | |
|  *
 | |
|  * @since 1.0.8.1
 | |
|  *
 | |
|  * @param int   $download_id Download ID.
 | |
|  * @param float $amount      Earnings to decrease by.
 | |
|  *
 | |
|  * @return float|false Updated earnings, false if invalid data passed.
 | |
|  */
 | |
| function edd_decrease_earnings( $download_id = 0, $amount = 0.00 ) {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.0' );
 | |
| 
 | |
| 	// Bail if no download ID or amount was passed.
 | |
| 	if ( empty( $download_id ) || empty( $amount ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	$download = edd_get_download( $download_id );
 | |
| 	if ( ! $download ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	return $download->get_earnings();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Check to see if we should be displaying promotional content
 | |
|  *
 | |
|  * In various parts of the plugin, we may choose to promote something like a sale for a limited time only. This
 | |
|  * function should be used to set the conditions under which the promotions will display.
 | |
|  *
 | |
|  * @since 2.9.20
 | |
|  * @deprecated 3.1
 | |
|  *
 | |
|  * @return bool
 | |
|  */
 | |
| function edd_is_promo_active() {
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.1' );
 | |
| 
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Outputs a metabox for promotional content.
 | |
|  *
 | |
|  * @since 2.9.20
 | |
|  * @deprecated 3.1
 | |
|  *
 | |
|  * @return void
 | |
|  */
 | |
| function edd_render_promo_metabox() {
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.1' );
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Plugin row meta links
 | |
|  *
 | |
|  * @since 1.8
 | |
|  * @deprecated 3.1
 | |
|  * @param  array  $links already defined meta links.
 | |
|  * @param  string $file  plugin file path and name being processed.
 | |
|  * @return array  $input
 | |
|  */
 | |
| function edd_plugin_row_meta( $links = array(), $file = '' ) {
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.1' );
 | |
| 	return $links;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Listens to the updated_postmeta hook for our backwards compatible payment_meta updates, and runs through them
 | |
|  *
 | |
|  * Previously hooked into: updated_postmeta
 | |
|  *
 | |
|  * @since  2.3
 | |
|  * @deprecated 3.1.0.3
 | |
|  * @param  int $meta_id    The Meta ID that was updated
 | |
|  * @param  int $object_id  The Object ID that was updated (post ID)
 | |
|  * @param  string $meta_key   The Meta key that was updated
 | |
|  * @param  string|int|float $meta_value The Value being updated
 | |
|  * @return bool|int             If successful the number of rows updated, if it fails, false
 | |
|  */
 | |
| function edd_update_payment_backwards_compat( $meta_id, $object_id, $meta_key, $meta_value ) {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.1.0.3' );
 | |
| 
 | |
| 	$meta_keys = array( '_edd_payment_meta', '_edd_payment_tax' );
 | |
| 
 | |
| 	if ( ! in_array( $meta_key, $meta_keys ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	global $wpdb;
 | |
| 	switch( $meta_key ) {
 | |
| 
 | |
| 		case '_edd_payment_meta':
 | |
| 			$meta_value   = maybe_unserialize( $meta_value );
 | |
| 
 | |
| 			if( ! isset( $meta_value['tax'] ) ){
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			$tax_value    = $meta_value['tax'];
 | |
| 
 | |
| 			$data         = array( 'meta_value' => $tax_value );
 | |
| 			$where        = array( 'post_id'  => $object_id, 'meta_key' => '_edd_payment_tax' );
 | |
| 			$data_format  = array( '%f' );
 | |
| 			$where_format = array( '%d', '%s' );
 | |
| 			break;
 | |
| 
 | |
| 		case '_edd_payment_tax':
 | |
| 			$tax_value    = ! empty( $meta_value ) ? $meta_value : 0;
 | |
| 			$current_meta = edd_get_payment_meta( $object_id, '_edd_payment_meta', true );
 | |
| 
 | |
| 			$current_meta['tax'] = $tax_value;
 | |
| 			$new_meta            = maybe_serialize( $current_meta );
 | |
| 
 | |
| 			$data         = array( 'meta_value' => $new_meta );
 | |
| 			$where        = array( 'post_id' => $object_id, 'meta_key' => '_edd_payment_meta' );
 | |
| 			$data_format  = array( '%s' );
 | |
| 			$where_format = array( '%d', '%s' );
 | |
| 
 | |
| 			break;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	$updated = $wpdb->update( $wpdb->postmeta, $data, $where, $data_format, $where_format );
 | |
| 
 | |
| 	if ( ! empty( $updated ) ) {
 | |
| 		// Since we did a direct DB query, clear the postmeta cache.
 | |
| 		wp_cache_delete( $object_id, 'post_meta' );
 | |
| 	}
 | |
| 
 | |
| 	return $updated;
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Deletes edd_stats_ transients that have expired to prevent database clogs
 | |
|  *
 | |
|  * Previously hooked into: edd_daily_scheduled_events
 | |
|  *
 | |
|  * @since 2.6.7
 | |
|  * @deprecated 3.1.0.3
 | |
|  * @return void
 | |
| */
 | |
| function edd_cleanup_stats_transients() {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.1.0.3' );
 | |
| 
 | |
| 	global $wpdb;
 | |
| 
 | |
| 	if ( defined( 'WP_SETUP_CONFIG' ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	if ( defined( 'WP_INSTALLING' ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	$now        = current_time( 'timestamp' );
 | |
| 	$transients = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options WHERE option_name LIKE '%\_transient_timeout\_edd\_stats\_%' AND option_value+0 < $now LIMIT 0, 200;" );
 | |
| 	$to_delete  = array();
 | |
| 
 | |
| 	if( ! empty( $transients ) ) {
 | |
| 
 | |
| 		foreach( $transients as $transient ) {
 | |
| 
 | |
| 			$to_delete[] = $transient->option_name;
 | |
| 			$to_delete[] = str_replace( '_timeout', '', $transient->option_name );
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	if ( ! empty( $to_delete ) ) {
 | |
| 
 | |
| 		$option_names = implode( "','", $to_delete );
 | |
| 		$wpdb->query( "DELETE FROM $wpdb->options WHERE option_name IN ('$option_names')"  );
 | |
| 
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Updates all old payments, prior to 1.2, with new
 | |
|  * meta for the total purchase amount
 | |
|  *
 | |
|  * This is so that payments can be queried by their totals
 | |
|  *
 | |
|  * Prevsiouly hooked into: edd_upgrade_payments
 | |
|  *
 | |
|  * @since 1.2
 | |
|  * @deprecated 3.1.0.3
 | |
|  * @param array $data Arguments passed
 | |
|  * @return void
 | |
| */
 | |
| function edd_update_old_payments_with_totals( $data ) {
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.1.0.3' );
 | |
| 
 | |
| 	if ( ! wp_verify_nonce( $data['_wpnonce'], 'edd_upgrade_payments_nonce' ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	if ( get_option( 'edd_payment_totals_upgraded' ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	$payments = edd_get_payments( array(
 | |
| 		'offset' => 0,
 | |
| 		'number' => 9999999,
 | |
| 		'mode'   => 'all',
 | |
| 	) );
 | |
| 
 | |
| 	if ( $payments ) {
 | |
| 		foreach ( $payments as $payment ) {
 | |
| 
 | |
| 			$payment = new EDD_Payment( $payment->ID );
 | |
| 			$meta    = $payment->get_meta();
 | |
| 
 | |
| 			$payment->total = $meta['amount'];
 | |
| 			$payment->save();
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	add_option( 'edd_payment_totals_upgraded', 1 );
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Flushes the current user's purchase history transient when a payment status
 | |
|  * is updated
 | |
|  *
 | |
|  * Previously hooked into: edd_update_payment_status
 | |
|  *
 | |
|  * @since 1.2.2
 | |
|  * @deprecated 3.1.0.3
 | |
|  * @param int $payment_id the ID number of the payment
 | |
|  * @param string $new_status the status of the payment, probably "publish"
 | |
|  * @param string $old_status the status of the payment prior to being marked as "complete", probably "pending"
 | |
|  */
 | |
| function edd_clear_user_history_cache( $payment_id, $new_status, $old_status ) {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.1.0.3' );
 | |
| 
 | |
| 	$payment = new EDD_Payment( $payment_id );
 | |
| 
 | |
| 	if( ! empty( $payment->user_id ) ) {
 | |
| 		delete_transient( 'edd_user_' . $payment->user_id . '_purchases' );
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Filters the WHERE SQL query for the edd_download_search.
 | |
|  * This searches the download titles only, not the excerpt/content.
 | |
|  *
 | |
|  * @since 3.1.0.2
 | |
|  * @deprecated 3.1.0.5
 | |
|  * @param string $where
 | |
|  * @param WP_Query $wp_query
 | |
|  * @return string
 | |
|  */
 | |
| function edd_ajax_filter_download_where( $where, $wp_query ) {
 | |
| 
 | |
| 	_edd_deprecated_function( __FUNCTION__, '3.1.0.5' );
 | |
| 
 | |
| 	$search  = new EDD\Downloads\Search();
 | |
| 
 | |
| 	return $search->filter_where( $where, $wp_query );
 | |
| }
 |