2119 lines
58 KiB
PHP
2119 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' );
|
||
|
}
|
||
|
}
|