Use version number for cache invalidation (https://github.com/woocommerce/woocommerce-admin/pull/2970)
* Refactor report datastore cache key generation. * Add transient-backed Cache class for Report DataStores. * Bump reports cache version when data changes. * Rollover cache version number after a limit and expire report transients every day. * Use caching strategy like WC core. Store cache version in value, not in key. Increase expiration to 1 week.
This commit is contained in:
parent
c5034567fc
commit
ac9f3f4680
|
@ -0,0 +1,81 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* REST API Reports Cache.
|
||||||
|
*
|
||||||
|
* Handles report data object caching.
|
||||||
|
*
|
||||||
|
* @package WooCommerce Admin/API
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Automattic\WooCommerce\Admin\API\Reports;
|
||||||
|
|
||||||
|
defined( 'ABSPATH' ) || exit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* REST API Reports Cache class.
|
||||||
|
*
|
||||||
|
* @package WooCommerce Admin/API
|
||||||
|
*/
|
||||||
|
class Cache {
|
||||||
|
/**
|
||||||
|
* Cache version. Used to invalidate all cached values.
|
||||||
|
*/
|
||||||
|
const VERSION_OPTION = 'woocommerce_reports';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invalidate cache.
|
||||||
|
*/
|
||||||
|
public static function invalidate() {
|
||||||
|
\WC_Cache_Helper::get_transient_version( self::VERSION_OPTION, true );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get cache version number.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function get_version() {
|
||||||
|
$version = \WC_Cache_Helper::get_transient_version( self::VERSION_OPTION );
|
||||||
|
|
||||||
|
return $version;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get cached value.
|
||||||
|
*
|
||||||
|
* @param string $key Cache key.
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function get( $key ) {
|
||||||
|
$transient_version = self::get_version();
|
||||||
|
$transient_value = get_transient( $key );
|
||||||
|
|
||||||
|
if (
|
||||||
|
isset( $transient_value['value'], $transient_value['version'] ) &&
|
||||||
|
$transient_value['version'] === $transient_version
|
||||||
|
) {
|
||||||
|
return $transient_value['value'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update cached value.
|
||||||
|
*
|
||||||
|
* @param string $key Cache key.
|
||||||
|
* @param mixed $value New value.
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function set( $key, $value ) {
|
||||||
|
$transient_version = self::get_version();
|
||||||
|
$transient_value = array(
|
||||||
|
'version' => $transient_version,
|
||||||
|
'value' => $value,
|
||||||
|
);
|
||||||
|
|
||||||
|
$result = set_transient( $key, $transient_value, WEEK_IN_SECONDS );
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
}
|
|
@ -25,6 +25,13 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
*/
|
*/
|
||||||
const TABLE_NAME = 'wc_order_product_lookup';
|
const TABLE_NAME = 'wc_order_product_lookup';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'categories';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Order by setting used for sorting categories data.
|
* Order by setting used for sorting categories data.
|
||||||
*
|
*
|
||||||
|
@ -246,8 +253,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
|
@ -319,19 +330,9 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
'page_no' => (int) $query_args['page'],
|
'page_no' => (int) $query_args['page'],
|
||||||
);
|
);
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ defined( 'ABSPATH' ) || exit;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\DataStore as ReportsDataStore;
|
use \Automattic\WooCommerce\Admin\API\Reports\DataStore as ReportsDataStore;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\DataStoreInterface;
|
use \Automattic\WooCommerce\Admin\API\Reports\DataStoreInterface;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
|
use \Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
|
||||||
|
use \Automattic\WooCommerce\Admin\API\Reports\Cache as ReportsCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API\Reports\Coupons\DataStore.
|
* API\Reports\Coupons\DataStore.
|
||||||
|
@ -25,6 +26,13 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
*/
|
*/
|
||||||
const TABLE_NAME = 'wc_order_coupon_lookup';
|
const TABLE_NAME = 'wc_order_coupon_lookup';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'coupons';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mapping columns to data type to return correct response types.
|
* Mapping columns to data type to return correct response types.
|
||||||
*
|
*
|
||||||
|
@ -244,8 +252,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
|
@ -336,22 +348,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
'page_no' => (int) $query_args['page'],
|
'page_no' => (int) $query_args['page'],
|
||||||
);
|
);
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create or update an an entry in the wc_order_coupon_lookup table for an order.
|
* Create or update an an entry in the wc_order_coupon_lookup table for an order.
|
||||||
*
|
*
|
||||||
|
@ -440,6 +442,8 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
* @param int $order_id Order ID.
|
* @param int $order_id Order ID.
|
||||||
*/
|
*/
|
||||||
do_action( 'woocommerce_reports_delete_coupon', 0, $order_id );
|
do_action( 'woocommerce_reports_delete_coupon', 0, $order_id );
|
||||||
|
|
||||||
|
ReportsCache::invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -459,6 +463,8 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$wpdb->prefix . self::TABLE_NAME,
|
$wpdb->prefix . self::TABLE_NAME,
|
||||||
array( 'coupon_id' => $post_id )
|
array( 'coupon_id' => $post_id )
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ReportsCache::invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -42,6 +42,13 @@ class DataStore extends CouponsDataStore implements DataStoreInterface {
|
||||||
'orders_count' => 'COUNT(DISTINCT order_id) as orders_count',
|
'orders_count' => 'COUNT(DISTINCT order_id) as orders_count',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'coupons_stats';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
|
@ -114,8 +121,12 @@ class DataStore extends CouponsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
|
@ -220,19 +231,9 @@ class DataStore extends CouponsDataStore implements DataStoreInterface {
|
||||||
$segmenter->add_intervals_segments( $data, $intervals_query, $table_name );
|
$segmenter->add_intervals_segments( $data, $intervals_query, $table_name );
|
||||||
$this->create_interval_subtotals( $data->intervals );
|
$this->create_interval_subtotals( $data->intervals );
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_stats_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ defined( 'ABSPATH' ) || exit;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\DataStore as ReportsDataStore;
|
use \Automattic\WooCommerce\Admin\API\Reports\DataStore as ReportsDataStore;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\DataStoreInterface;
|
use \Automattic\WooCommerce\Admin\API\Reports\DataStoreInterface;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
|
use \Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
|
||||||
|
use \Automattic\WooCommerce\Admin\API\Reports\Cache as ReportsCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Admin\API\Reports\Customers\DataStore.
|
* Admin\API\Reports\Customers\DataStore.
|
||||||
|
@ -25,6 +26,13 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
*/
|
*/
|
||||||
const TABLE_NAME = 'wc_customer_lookup';
|
const TABLE_NAME = 'wc_customer_lookup';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'customers';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mapping columns to data type to return correct response types.
|
* Mapping columns to data type to return correct response types.
|
||||||
*
|
*
|
||||||
|
@ -358,8 +366,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
|
@ -429,7 +441,7 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
'page_no' => (int) $query_args['page'],
|
'page_no' => (int) $query_args['page'],
|
||||||
);
|
);
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
|
@ -676,6 +688,9 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
* @param int $customer_id Customer ID.
|
* @param int $customer_id Customer ID.
|
||||||
*/
|
*/
|
||||||
do_action( 'woocommerce_reports_update_customer', $customer_id );
|
do_action( 'woocommerce_reports_update_customer', $customer_id );
|
||||||
|
|
||||||
|
ReportsCache::invalidate();
|
||||||
|
|
||||||
return $results;
|
return $results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -724,14 +739,4 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
*/
|
*/
|
||||||
do_action( 'woocommerce_reports_delete_customer', $customer_id );
|
do_action( 'woocommerce_reports_delete_customer', $customer_id );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,13 @@ class DataStore extends CustomersDataStore implements DataStoreInterface {
|
||||||
'avg_avg_order_value' => 'AVG( avg_order_value ) as avg_avg_order_value',
|
'avg_avg_order_value' => 'AVG( avg_order_value ) as avg_avg_order_value',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'customers_stats';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
|
@ -69,8 +76,12 @@ class DataStore extends CustomersDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
|
@ -117,19 +128,9 @@ class DataStore extends CustomersDataStore implements DataStoreInterface {
|
||||||
|
|
||||||
$data = (object) $this->cast_numbers( $report_data[0] );
|
$data = (object) $this->cast_numbers( $report_data[0] );
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_stats_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,44 @@ class DataStore {
|
||||||
*/
|
*/
|
||||||
private $order = '';
|
private $order = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns string to be used as cache key for the data.
|
||||||
|
*
|
||||||
|
* @param array $params Query parameters.
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function get_cache_key( $params ) {
|
||||||
|
return implode(
|
||||||
|
'_',
|
||||||
|
array(
|
||||||
|
'wc_report',
|
||||||
|
$this->cache_key,
|
||||||
|
md5( wp_json_encode( $params ) ),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrapper around Cache::get().
|
||||||
|
*
|
||||||
|
* @param string $cache_key Cache key.
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
protected function get_cached_data( $cache_key ) {
|
||||||
|
return Cache::get( $cache_key );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrapper around Cache::set().
|
||||||
|
*
|
||||||
|
* @param string $cache_key Cache key.
|
||||||
|
* @param mixed $value New value.
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function set_cached_data( $cache_key, $value ) {
|
||||||
|
return Cache::set( $cache_key, $value );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compares two report data objects by pre-defined object property and ASC/DESC ordering.
|
* Compares two report data objects by pre-defined object property and ASC/DESC ordering.
|
||||||
*
|
*
|
||||||
|
@ -370,6 +408,7 @@ class DataStore {
|
||||||
$new_start_date->setTimestamp( $new_start_date_timestamp );
|
$new_start_date->setTimestamp( $new_start_date_timestamp );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// @todo - Do this without modifying $query_args?
|
||||||
$query_args['adj_after'] = $new_start_date;
|
$query_args['adj_after'] = $new_start_date;
|
||||||
$query_args['adj_before'] = $new_end_date;
|
$query_args['adj_before'] = $new_end_date;
|
||||||
$adj_after = $new_start_date->format( TimeInterval::$sql_datetime_format );
|
$adj_after = $new_start_date->format( TimeInterval::$sql_datetime_format );
|
||||||
|
@ -391,6 +430,7 @@ class DataStore {
|
||||||
$intervals_query['limit'] = 'LIMIT ' . $offset . ',' . $count;
|
$intervals_query['limit'] = 'LIMIT ' . $offset . ',' . $count;
|
||||||
}
|
}
|
||||||
// Otherwise no change in limit clause.
|
// Otherwise no change in limit clause.
|
||||||
|
// @todo - Do this without modifying $query_args?
|
||||||
$query_args['adj_after'] = $query_args['after'];
|
$query_args['adj_after'] = $query_args['after'];
|
||||||
$query_args['adj_before'] = $query_args['before'];
|
$query_args['adj_before'] = $query_args['before'];
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,13 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
*/
|
*/
|
||||||
const TABLE_NAME = 'wc_download_log';
|
const TABLE_NAME = 'wc_download_log';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'downloads';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mapping columns to data type to return correct response types.
|
* Mapping columns to data type to return correct response types.
|
||||||
*
|
*
|
||||||
|
@ -325,8 +332,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
|
@ -391,22 +402,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
'page_no' => (int) $query_args['page'],
|
'page_no' => (int) $query_args['page'],
|
||||||
);
|
);
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maps ordering specified by the user to columns in the database/fields in the data.
|
* Maps ordering specified by the user to columns in the database/fields in the data.
|
||||||
*
|
*
|
||||||
|
|
|
@ -36,6 +36,13 @@ class DataStore extends DownloadsDataStore implements DataStoreInterface {
|
||||||
'download_count' => 'COUNT(DISTINCT download_log_id) as download_count',
|
'download_count' => 'COUNT(DISTINCT download_log_id) as download_count',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'downloads_stats';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
|
@ -69,8 +76,12 @@ class DataStore extends DownloadsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$selections = $this->selected_columns( $query_args );
|
$selections = $this->selected_columns( $query_args );
|
||||||
|
@ -173,22 +184,12 @@ class DataStore extends DownloadsDataStore implements DataStoreInterface {
|
||||||
}
|
}
|
||||||
$this->create_interval_subtotals( $data->intervals );
|
$this->create_interval_subtotals( $data->intervals );
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_stats_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Normalizes order_by clause to match to SQL query.
|
* Normalizes order_by clause to match to SQL query.
|
||||||
*
|
*
|
||||||
|
|
|
@ -24,6 +24,13 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
*/
|
*/
|
||||||
const TABLE_NAME = 'wc_order_stats';
|
const TABLE_NAME = 'wc_order_stats';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'orders';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mapping columns to data type to return correct response types.
|
* Mapping columns to data type to return correct response types.
|
||||||
*
|
*
|
||||||
|
@ -183,8 +190,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
|
@ -258,7 +269,7 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
'page_no' => (int) $query_args['page'],
|
'page_no' => (int) $query_args['page'],
|
||||||
);
|
);
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
|
@ -422,14 +433,4 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
|
|
||||||
return $coupons;
|
return $coupons;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ defined( 'ABSPATH' ) || exit;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\DataStore as ReportsDataStore;
|
use \Automattic\WooCommerce\Admin\API\Reports\DataStore as ReportsDataStore;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\DataStoreInterface;
|
use \Automattic\WooCommerce\Admin\API\Reports\DataStoreInterface;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
|
use \Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
|
||||||
|
use \Automattic\WooCommerce\Admin\API\Reports\Cache as ReportsCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API\Reports\Orders\Stats\DataStore.
|
* API\Reports\Orders\Stats\DataStore.
|
||||||
|
@ -30,6 +31,13 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
*/
|
*/
|
||||||
const CRON_EVENT = 'wc_order_stats_update';
|
const CRON_EVENT = 'wc_order_stats_update';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'orders_stats';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Type for each column to cast values correctly later.
|
* Type for each column to cast values correctly later.
|
||||||
*
|
*
|
||||||
|
@ -227,8 +235,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
|
@ -359,7 +371,7 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$segmenter->add_intervals_segments( $data, $intervals_query, $table_name );
|
$segmenter->add_intervals_segments( $data, $intervals_query, $table_name );
|
||||||
$this->create_interval_subtotals( $data->intervals );
|
$this->create_interval_subtotals( $data->intervals );
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
|
@ -529,6 +541,8 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
* @param int $order_id Order ID.
|
* @param int $order_id Order ID.
|
||||||
*/
|
*/
|
||||||
do_action( 'woocommerce_reports_delete_order_stats', $order_id );
|
do_action( 'woocommerce_reports_delete_order_stats', $order_id );
|
||||||
|
|
||||||
|
ReportsCache::invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -630,14 +644,4 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_stats_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ defined( 'ABSPATH' ) || exit;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\DataStore as ReportsDataStore;
|
use \Automattic\WooCommerce\Admin\API\Reports\DataStore as ReportsDataStore;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\DataStoreInterface;
|
use \Automattic\WooCommerce\Admin\API\Reports\DataStoreInterface;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
|
use \Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
|
||||||
|
use \Automattic\WooCommerce\Admin\API\Reports\Cache as ReportsCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API\Reports\Products\DataStore.
|
* API\Reports\Products\DataStore.
|
||||||
|
@ -25,6 +26,13 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
*/
|
*/
|
||||||
const TABLE_NAME = 'wc_order_product_lookup';
|
const TABLE_NAME = 'wc_order_product_lookup';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'products';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mapping columns to data type to return correct response types.
|
* Mapping columns to data type to return correct response types.
|
||||||
*
|
*
|
||||||
|
@ -271,8 +279,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
|
@ -367,22 +379,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
'page_no' => (int) $query_args['page'],
|
'page_no' => (int) $query_args['page'],
|
||||||
);
|
);
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create or update an entry in the wc_admin_order_product_lookup table for an order.
|
* Create or update an entry in the wc_admin_order_product_lookup table for an order.
|
||||||
*
|
*
|
||||||
|
@ -499,5 +501,7 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
* @param int $order_id Order ID.
|
* @param int $order_id Order ID.
|
||||||
*/
|
*/
|
||||||
do_action( 'woocommerce_reports_delete_product', 0, $order_id );
|
do_action( 'woocommerce_reports_delete_product', 0, $order_id );
|
||||||
|
|
||||||
|
ReportsCache::invalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,10 +125,14 @@ class DataStore extends ProductsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$product_data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $product_data ) {
|
if ( false === $data ) {
|
||||||
$selections = $this->selected_columns( $query_args );
|
$selections = $this->selected_columns( $query_args );
|
||||||
$totals_query = array();
|
$totals_query = array();
|
||||||
$intervals_query = array();
|
$intervals_query = array();
|
||||||
|
|
|
@ -12,6 +12,7 @@ defined( 'ABSPATH' ) || exit;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\DataStore as ReportsDataStore;
|
use \Automattic\WooCommerce\Admin\API\Reports\DataStore as ReportsDataStore;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\DataStoreInterface;
|
use \Automattic\WooCommerce\Admin\API\Reports\DataStoreInterface;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
|
use \Automattic\WooCommerce\Admin\API\Reports\TimeInterval;
|
||||||
|
use \Automattic\WooCommerce\Admin\API\Reports\Cache as ReportsCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API\Reports\Taxes\DataStore.
|
* API\Reports\Taxes\DataStore.
|
||||||
|
@ -25,6 +26,13 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
*/
|
*/
|
||||||
const TABLE_NAME = 'wc_order_tax_lookup';
|
const TABLE_NAME = 'wc_order_tax_lookup';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'taxes';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mapping columns to data type to return correct response types.
|
* Mapping columns to data type to return correct response types.
|
||||||
*
|
*
|
||||||
|
@ -181,8 +189,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
|
@ -275,22 +287,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
'page_no' => (int) $query_args['page'],
|
'page_no' => (int) $query_args['page'],
|
||||||
);
|
);
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maps ordering specified by the user to columns in the database/fields in the data.
|
* Maps ordering specified by the user to columns in the database/fields in the data.
|
||||||
*
|
*
|
||||||
|
@ -386,5 +388,7 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
* @param int $order_id Order ID.
|
* @param int $order_id Order ID.
|
||||||
*/
|
*/
|
||||||
do_action( 'woocommerce_reports_delete_tax', 0, $order_id );
|
do_action( 'woocommerce_reports_delete_tax', 0, $order_id );
|
||||||
|
|
||||||
|
ReportsCache::invalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,13 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
*/
|
*/
|
||||||
const TABLE_NAME = 'wc_order_tax_lookup';
|
const TABLE_NAME = 'wc_order_tax_lookup';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'taxes_stats';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mapping columns to data type to return correct response types.
|
* Mapping columns to data type to return correct response types.
|
||||||
*
|
*
|
||||||
|
@ -165,8 +172,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
|
@ -279,19 +290,9 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$segmenter->add_intervals_segments( $data, $intervals_query, $table_name );
|
$segmenter->add_intervals_segments( $data, $intervals_query, $table_name );
|
||||||
$this->create_interval_subtotals( $data->intervals );
|
$this->create_interval_subtotals( $data->intervals );
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_stats_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,13 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
*/
|
*/
|
||||||
const TABLE_NAME = 'wc_order_product_lookup';
|
const TABLE_NAME = 'wc_order_product_lookup';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache identifier.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $cache_key = 'variations';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mapping columns to data type to return correct response types.
|
* Mapping columns to data type to return correct response types.
|
||||||
*
|
*
|
||||||
|
@ -248,8 +255,12 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
$query_args = wp_parse_args( $query_args, $defaults );
|
$query_args = wp_parse_args( $query_args, $defaults );
|
||||||
$this->normalize_timezones( $query_args, $defaults );
|
$this->normalize_timezones( $query_args, $defaults );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the cache key here because
|
||||||
|
* parent::update_intervals_sql_params() modifies $query_args.
|
||||||
|
*/
|
||||||
$cache_key = $this->get_cache_key( $query_args );
|
$cache_key = $this->get_cache_key( $query_args );
|
||||||
$data = wp_cache_get( $cache_key, $this->cache_group );
|
$data = $this->get_cached_data( $cache_key );
|
||||||
|
|
||||||
if ( false === $data ) {
|
if ( false === $data ) {
|
||||||
$data = (object) array(
|
$data = (object) array(
|
||||||
|
@ -348,20 +359,9 @@ class DataStore extends ReportsDataStore implements DataStoreInterface {
|
||||||
'page_no' => (int) $query_args['page'],
|
'page_no' => (int) $query_args['page'],
|
||||||
);
|
);
|
||||||
|
|
||||||
wp_cache_set( $cache_key, $data, $this->cache_group );
|
$this->set_cached_data( $cache_key, $data );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns string to be used as cache key for the data.
|
|
||||||
*
|
|
||||||
* @param array $params Query parameters.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function get_cache_key( $params ) {
|
|
||||||
return 'woocommerce_' . self::TABLE_NAME . '_' . md5( wp_json_encode( $params ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ use \Automattic\WooCommerce\Admin\API\Reports\Customers\DataStore as CustomersDa
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\Orders\Stats\DataStore as OrdersStatsDataStore;
|
use \Automattic\WooCommerce\Admin\API\Reports\Orders\Stats\DataStore as OrdersStatsDataStore;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\Products\DataStore as ProductsDataStore;
|
use \Automattic\WooCommerce\Admin\API\Reports\Products\DataStore as ProductsDataStore;
|
||||||
use \Automattic\WooCommerce\Admin\API\Reports\Taxes\DataStore as TaxesDataStore;
|
use \Automattic\WooCommerce\Admin\API\Reports\Taxes\DataStore as TaxesDataStore;
|
||||||
|
use \Automattic\WooCommerce\Admin\API\Reports\Cache as ReportsCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ReportsSync Class.
|
* ReportsSync Class.
|
||||||
|
@ -488,6 +489,8 @@ class ReportsSync {
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ReportsCache::invalidate();
|
||||||
|
|
||||||
// If all updates were either skipped or successful, we're done.
|
// If all updates were either skipped or successful, we're done.
|
||||||
// The update methods return -1 for skip, or a boolean success indicator.
|
// The update methods return -1 for skip, or a boolean success indicator.
|
||||||
if ( 4 === absint( $result ) ) {
|
if ( 4 === absint( $result ) ) {
|
||||||
|
@ -817,6 +820,8 @@ class ReportsSync {
|
||||||
CustomersDataStore::delete_customer( $customer_id );
|
CustomersDataStore::delete_customer( $customer_id );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReportsCache::invalidate();
|
||||||
|
|
||||||
wc_admin_record_tracks_event( 'delete_import_data_job_complete', array( 'type' => 'customer' ) );
|
wc_admin_record_tracks_event( 'delete_import_data_job_complete', array( 'type' => 'customer' ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -859,6 +864,8 @@ class ReportsSync {
|
||||||
OrdersStatsDataStore::delete_order( $order_id );
|
OrdersStatsDataStore::delete_order( $order_id );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReportsCache::invalidate();
|
||||||
|
|
||||||
wc_admin_record_tracks_event( 'delete_import_data_job_complete', array( 'type' => 'order' ) );
|
wc_admin_record_tracks_event( 'delete_import_data_job_complete', array( 'type' => 'order' ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue