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 = '
' . __( 'You have already purchased this item, but you may purchase it again.', 'easy-digital-downloads' ) . '
';
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' ) . '
' .
'{download_list} - ' . __('A list of download links for each download purchased','easy-digital-downloads' ) . '
' .
'{file_urls} - ' . __('A plain-text list of download URLs for each download purchased','easy-digital-downloads' ) . '
' .
'{name} - ' . __('The buyer\'s first name','easy-digital-downloads' ) . '
' .
'{fullname} - ' . __('The buyer\'s full name, first and last','easy-digital-downloads' ) . '
' .
'{username} - ' . __('The buyer\'s user name on the site, if they registered an account','easy-digital-downloads' ) . '
' .
'{user_email} - ' . __('The buyer\'s email address','easy-digital-downloads' ) . '
' .
'{billing_address} - ' . __('The buyer\'s billing address','easy-digital-downloads' ) . '
' .
'{date} - ' . __('The date of the purchase','easy-digital-downloads' ) . '
' .
'{subtotal} - ' . __('The price of the purchase before taxes','easy-digital-downloads' ) . '
' .
'{tax} - ' . __('The taxed amount of the purchase','easy-digital-downloads' ) . '
' .
'{price} - ' . __('The total price of the purchase','easy-digital-downloads' ) . '
' .
'{payment_id} - ' . __('The unique ID number for this purchase','easy-digital-downloads' ) . '
' .
'{receipt_id} - ' . __('The unique ID number for this purchase receipt','easy-digital-downloads' ) . '
' .
'{payment_method} - ' . __('The method of payment used for this purchase','easy-digital-downloads' ) . '
' .
'{sitename} - ' . __('Your site name','easy-digital-downloads' ) . '
' .
'{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' ) . '
' .
'{download_list} - ' . __('A list of download links for each download purchased','easy-digital-downloads' ) . '
' .
'{file_urls} - ' . __('A plain-text list of download URLs for each download purchased','easy-digital-downloads' ) . '
' .
'{name} - ' . __('The buyer\'s first name','easy-digital-downloads' ) . '
' .
'{fullname} - ' . __('The buyer\'s full name, first and last','easy-digital-downloads' ) . '
' .
'{username} - ' . __('The buyer\'s user name on the site, if they registered an account','easy-digital-downloads' ) . '
' .
'{user_email} - ' . __('The buyer\'s email address','easy-digital-downloads' ) . '
' .
'{billing_address} - ' . __('The buyer\'s billing address','easy-digital-downloads' ) . '
' .
'{date} - ' . __('The date of the purchase','easy-digital-downloads' ) . '
' .
'{subtotal} - ' . __('The price of the purchase before taxes','easy-digital-downloads' ) . '
' .
'{tax} - ' . __('The taxed amount of the purchase','easy-digital-downloads' ) . '
' .
'{price} - ' . __('The total price of the purchase','easy-digital-downloads' ) . '
' .
'{payment_id} - ' . __('The unique ID number for this purchase','easy-digital-downloads' ) . '
' .
'{receipt_id} - ' . __('The unique ID number for this purchase receipt','easy-digital-downloads' ) . '
' .
'{payment_method} - ' . __('The method of payment used for this purchase','easy-digital-downloads' ) . '
' .
'{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();
?>
'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 = '' . $title . '';
}
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 '';
}
}
/**
* 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 '
';
}
}
/**
* 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', '' . $content . '
' );
}
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 );
?>
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' );
?>
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 ) :
?>
tag, %2$s - tag */
__( '%1$sClick here%2$s to visit your Jilt dashboard', 'easy-digital-downloads' ),
'',
''
)
);
?>
__( '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 )
) {
?>
tag, %2$s - tag, %3$s - tag, %4$s - tag */
__( '%1$sRecover abandoned purchases like this one.%2$s %3$sTry Jilt for free%4$s.', 'easy-digital-downloads' ),
'',
'',
'',
''
)
);
?>
'dismiss_notices',
'edd_notice' => 'try_jilt',
)
)
),
'" type="button" class="notice-dismiss">',
'
',
'
'
)
);
?>
SendWP)
$connected = '';
$connected .= __( 'Access your SendWP account', 'easy-digital-downloads' );
$connected .= '.';
$disconnected = sprintf(
__( 'Note: Email sending is currently disabled. Click here to enable it.', '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 ) :
?>
', '' ); ?>
__( '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 );
?>
'edit-download',
'utm_content' => 'product-reviews',
)
);
?>
Product Reviews extension.', 'easy-digital-downloads' ), $url ) );
?>
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' );
}
}