345 lines
9.9 KiB
PHP
345 lines
9.9 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Backwards Compatibility Handler for Logs.
|
||
|
*
|
||
|
* @package EDD
|
||
|
* @subpackage Compat
|
||
|
* @copyright Copyright (c) 2018, Easy Digital Downloads, LLC
|
||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||
|
* @since 3.0
|
||
|
*/
|
||
|
namespace EDD\Compat;
|
||
|
|
||
|
// Exit if accessed directly
|
||
|
defined( 'ABSPATH' ) || exit;
|
||
|
|
||
|
/**
|
||
|
* Log Class.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
*/
|
||
|
class Log extends Base {
|
||
|
|
||
|
/**
|
||
|
* Holds the component for which we are handling back-compat. There is a chance that two methods have the same name
|
||
|
* and need to be dispatched to completely other methods. When a new instance of Back_Compat is created, a component
|
||
|
* can be passed to the constructor which will allow __call() to dispatch to the correct methods.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @access protected
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $component = 'payment';
|
||
|
|
||
|
/**
|
||
|
* Backwards compatibility hooks for logs.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
* @access protected
|
||
|
*/
|
||
|
protected function hooks() {
|
||
|
|
||
|
/* Filters ************************************************************/
|
||
|
|
||
|
add_filter( 'get_post_metadata', array( $this, 'api_request_log_get_post_meta' ), 99, 4 );
|
||
|
add_filter( 'update_post_metadata', array( $this, 'api_request_log_update_post_meta' ), 99, 5 );
|
||
|
add_filter( 'add_post_metadata', array( $this, 'api_request_log_update_post_meta' ), 99, 5 );
|
||
|
|
||
|
add_filter( 'get_post_metadata', array( $this, 'file_download_log_get_post_meta' ), 99, 4 );
|
||
|
add_filter( 'update_post_metadata', array( $this, 'file_download_log_update_post_meta' ), 99, 5 );
|
||
|
add_filter( 'add_post_metadata', array( $this, 'file_download_log_update_post_meta' ), 99, 5 );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Backwards compatibility filters for get_post_meta() calls on API request logs.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
*
|
||
|
* @param mixed $value The value get_post_meta would return if we don't filter.
|
||
|
* @param int $object_id The object ID post meta was requested for.
|
||
|
* @param string $meta_key The meta key requested.
|
||
|
* @param bool $single If a single value or an array of the value is requested.
|
||
|
*
|
||
|
* @return mixed The value to return.
|
||
|
*/
|
||
|
public function api_request_log_get_post_meta( $value, $object_id, $meta_key, $single ) {
|
||
|
if ( 'get_post_metadata' !== current_filter() ) {
|
||
|
$message = __( 'This function is not meant to be called directly. It is only here for backwards compatibility purposes.', 'easy-digital-downloads' );
|
||
|
_doing_it_wrong( __FUNCTION__, $message, 'EDD 3.0' );
|
||
|
}
|
||
|
|
||
|
$meta_keys = array(
|
||
|
'_edd_log_request_ip',
|
||
|
'_edd_log_user',
|
||
|
'_edd_log_key',
|
||
|
'_edd_log_token',
|
||
|
'_edd_log_time',
|
||
|
'_edd_log_version',
|
||
|
);
|
||
|
|
||
|
if ( ! in_array( $meta_key, $meta_keys, true ) ) {
|
||
|
return $value;
|
||
|
}
|
||
|
|
||
|
$api_request_log = edd_get_api_request_log( $object_id );
|
||
|
|
||
|
if ( ! $api_request_log ) {
|
||
|
return $value;
|
||
|
}
|
||
|
|
||
|
switch ( $meta_key ) {
|
||
|
case '_edd_log_request_ip':
|
||
|
case '_edd_log_user':
|
||
|
case '_edd_log_key':
|
||
|
case '_edd_log_token':
|
||
|
case '_edd_log_time':
|
||
|
case '_edd_log_version':
|
||
|
$key = str_replace( '_edd_log_', '', $meta_key );
|
||
|
|
||
|
switch ( $key ) {
|
||
|
case 'request_ip':
|
||
|
$key = 'ip';
|
||
|
break;
|
||
|
case 'key':
|
||
|
$key = 'api_key';
|
||
|
break;
|
||
|
case 'user':
|
||
|
$key = 'user_id';
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
$value = $api_request_log->{$key};
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if ( $this->show_notices ) {
|
||
|
_doing_it_wrong( 'get_post_meta()', 'All log postmeta has been <strong>deprecated</strong> since Easy Digital Downloads 3.0! Use <code>edd_get_api_request_log()</code> instead.', 'EDD 3.0' );
|
||
|
|
||
|
if ( $this->show_backtrace ) {
|
||
|
$backtrace = debug_backtrace();
|
||
|
trigger_error( print_r( $backtrace, 1 ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $value;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Listen for calls to update_post_meta for API request logs and see if we need to filter them.
|
||
|
*
|
||
|
* This is here for backwards compatibility purposes with the migration to custom tables in EDD 3.0.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
*
|
||
|
* @param mixed $check Comes in 'null' but if returned not null, WordPress Core will not interact with the
|
||
|
* postmeta table.
|
||
|
* @param int $object_id The object ID post meta was requested for.
|
||
|
* @param string $meta_key The meta key requested.
|
||
|
* @param mixed $meta_value The value get_post_meta would return if we don't filter.
|
||
|
* @param mixed $prev_value The previous value of the meta.
|
||
|
* @return mixed Returns 'null' if no action should be taken and WordPress core can continue, or non-null to avoid postmeta.
|
||
|
*/
|
||
|
public function api_request_log_update_post_meta( $check, $object_id, $meta_key, $meta_value, $prev_value ) {
|
||
|
$meta_keys = array(
|
||
|
'_edd_log_request_ip',
|
||
|
'_edd_log_user',
|
||
|
'_edd_log_key',
|
||
|
'_edd_log_token',
|
||
|
'_edd_log_time',
|
||
|
'_edd_log_version',
|
||
|
);
|
||
|
|
||
|
if ( ! in_array( $meta_key, $meta_keys, true ) ) {
|
||
|
return $check;
|
||
|
}
|
||
|
|
||
|
$api_request_log = edd_get_api_request_log( $object_id );
|
||
|
|
||
|
if ( ! $api_request_log ) {
|
||
|
return $check;
|
||
|
}
|
||
|
|
||
|
switch ( $meta_key ) {
|
||
|
case '_edd_log_request_ip':
|
||
|
case '_edd_log_user':
|
||
|
case '_edd_log_key':
|
||
|
case '_edd_log_token':
|
||
|
case '_edd_log_time':
|
||
|
case '_edd_log_version':
|
||
|
$key = str_replace( '_edd_log_', '', $meta_key );
|
||
|
|
||
|
switch ( $key ) {
|
||
|
case 'request_ip':
|
||
|
$key = 'ip';
|
||
|
break;
|
||
|
case 'key':
|
||
|
$key = 'api_key';
|
||
|
break;
|
||
|
case 'user':
|
||
|
$key = 'user_id';
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
$check = edd_update_api_request_log( $object_id, array(
|
||
|
$key => $meta_value,
|
||
|
) );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if ( $this->show_notices ) {
|
||
|
_doing_it_wrong( 'add_post_meta()/update_post_meta()', 'All log postmeta has been <strong>deprecated</strong> since Easy Digital Downloads 3.0! Use <code>edd_add_order_meta()/edd_update_order_meta()()</code> instead.', 'EDD 3.0' );
|
||
|
|
||
|
if ( $this->show_backtrace ) {
|
||
|
$backtrace = debug_backtrace();
|
||
|
trigger_error( print_r( $backtrace, 1 ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $check;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Backwards compatibility filters for get_post_meta() calls on file download logs.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
*
|
||
|
* @param mixed $value The value get_post_meta would return if we don't filter.
|
||
|
* @param int $object_id The object ID post meta was requested for.
|
||
|
* @param string $meta_key The meta key requested.
|
||
|
* @param bool $single If a single value or an array of the value is requested.
|
||
|
*
|
||
|
* @return mixed The value to return.
|
||
|
*/
|
||
|
public function file_download_log_get_post_meta( $value, $object_id, $meta_key, $single ) {
|
||
|
if ( 'get_post_metadata' !== current_filter() ) {
|
||
|
$message = __( 'This function is not meant to be called directly. It is only here for backwards compatibility purposes.', 'easy-digital-downloads' );
|
||
|
_doing_it_wrong( __FUNCTION__, $message, 'EDD 3.0' );
|
||
|
}
|
||
|
|
||
|
$meta_keys = array(
|
||
|
'_edd_log_user_info',
|
||
|
'_edd_log_user_id',
|
||
|
'_edd_log_file_id',
|
||
|
'_edd_log_ip',
|
||
|
'_edd_log_payment_id',
|
||
|
'_edd_log_price_id',
|
||
|
'_edd_log_customer_id',
|
||
|
);
|
||
|
|
||
|
if ( ! in_array( $meta_key, $meta_keys, true ) ) {
|
||
|
return $value;
|
||
|
}
|
||
|
|
||
|
$file_download_log = edd_get_file_download_log( $object_id );
|
||
|
|
||
|
if ( ! $file_download_log ) {
|
||
|
return $value;
|
||
|
}
|
||
|
|
||
|
switch ( $meta_key ) {
|
||
|
case '_edd_log_user_id':
|
||
|
case '_edd_log_file_id':
|
||
|
case '_edd_log_ip':
|
||
|
case '_edd_log_payment_id':
|
||
|
case '_edd_log_price_id':
|
||
|
case '_edd_log_customer_id':
|
||
|
$key = str_replace( '_edd_log_', '', $meta_key );
|
||
|
|
||
|
switch ( $key ) {
|
||
|
case 'request_ip':
|
||
|
$key = 'ip';
|
||
|
break;
|
||
|
case 'key':
|
||
|
$key = 'api_key';
|
||
|
break;
|
||
|
case 'user':
|
||
|
$key = 'user_id';
|
||
|
break;
|
||
|
case 'payment_id':
|
||
|
$key = 'order_id';
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if ( isset( $file_download_log->{$key} ) ) {
|
||
|
$value = $file_download_log->{$key};
|
||
|
}
|
||
|
|
||
|
if ( 'user_id' === $key ) {
|
||
|
$customer = new \EDD_Customer( $file_download_log->customer_id );
|
||
|
$value = ! empty( $customer->user_id ) ? $customer->user_id : 0;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if ( $this->show_notices ) {
|
||
|
_doing_it_wrong( 'get_post_meta()', __( 'All log postmeta has been <strong>deprecated</strong> since Easy Digital Downloads 3.0! Use <code>edd_get_api_request_log()</code> instead.', 'easy-digital-downloads' ), 'EDD 3.0' );
|
||
|
|
||
|
if ( $this->show_backtrace ) {
|
||
|
$backtrace = debug_backtrace();
|
||
|
trigger_error( print_r( $backtrace, 1 ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $value;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Listen for calls to update_post_meta for file download logs and see if we need to filter them.
|
||
|
*
|
||
|
* This is here for backwards compatibility purposes with the migration to custom tables in EDD 3.0.
|
||
|
*
|
||
|
* @since 3.0
|
||
|
*
|
||
|
* @param mixed $check Comes in 'null' but if returned not null, WordPress Core will not interact with
|
||
|
* the postmeta table.
|
||
|
* @param int $object_id The object ID post meta was requested for.
|
||
|
* @param string $meta_key The meta key requested.
|
||
|
* @param mixed $meta_value The value get_post_meta would return if we don't filter.
|
||
|
* @param mixed $prev_value The previous value of the meta
|
||
|
*
|
||
|
* @return mixed Returns 'null' if no action should be taken and WordPress core can continue, or non-null to avoid postmeta
|
||
|
*/
|
||
|
public function file_download_log_update_post_meta( $check, $object_id, $meta_key, $meta_value, $prev_value ) {
|
||
|
$meta_keys = array(
|
||
|
'_edd_log_user_info',
|
||
|
'_edd_log_user_id',
|
||
|
'_edd_log_file_id',
|
||
|
'_edd_log_ip',
|
||
|
'_edd_log_payment_id',
|
||
|
'_edd_log_price_id',
|
||
|
'_edd_log_customer_id',
|
||
|
);
|
||
|
|
||
|
if ( ! in_array( $meta_key, $meta_keys, true ) ) {
|
||
|
return $check;
|
||
|
}
|
||
|
|
||
|
$file_download_log = edd_get_file_download_log( $object_id );
|
||
|
|
||
|
if ( ! $file_download_log ) {
|
||
|
return $check;
|
||
|
}
|
||
|
|
||
|
switch ( $meta_key ) {
|
||
|
case '_edd_log_user_id':
|
||
|
case '_edd_log_file_id':
|
||
|
case '_edd_key_ip':
|
||
|
case '_edd_log_payment_id':
|
||
|
case '_edd_log_price_id':
|
||
|
case '_edd_log_customer_id':
|
||
|
$key = str_replace( '_edd_log_', '', $meta_key );
|
||
|
|
||
|
if ( 'payment_id' === $key ) {
|
||
|
$key = 'order_id';
|
||
|
}
|
||
|
|
||
|
$check = edd_update_file_download_log( $object_id, array(
|
||
|
$key => $meta_value,
|
||
|
) );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return $check;
|
||
|
}
|
||
|
}
|