2022-11-27 15:03:07 +00:00
< ? php
/**
* Reset store earnings and stats .
*
* This class handles batch processing of resetting store and download sales and earnings stats .
*
* @ package EDD
* @ subpackage Admin\Tools
* @ copyright Copyright ( c ) 2018 , Easy Digital Downloads , LLC
* @ license http :// opensource . org / licenses / gpl - 2.0 . php GNU Public License
* @ since 2.5
*/
// Exit if accessed directly
defined ( 'ABSPATH' ) || exit ;
/**
* EDD_Tools_Reset_Stats class .
*
* @ since 2.5
* @ since 3.0 Updated to work with new query methods .
*/
class EDD_Tools_Reset_Stats extends EDD_Batch_Export {
/**
* Our export type . Used for export - type specific filters / actions .
*
* @ since 2.5
* @ var string
*/
public $export_type = '' ;
/**
* Allows for a non - download batch processing to be run .
*
* @ since 2.5
* @ var bool
*/
public $is_void = true ;
/**
* Sets the number of items to pull on each step .
*
* @ since 2.5
* @ var int
*/
public $per_step = 1 ;
/**
* Retrieve the export data .
*
* @ since 2.5
*
* @ return array | false $data The data for the CSV file , false otherwise .
*/
public function get_data () {
global $wpdb ;
$tables = $this -> get_stored_data ( 'edd_reset_tables_to_truncate' );
if ( ! is_array ( $tables ) ) {
return false ;
}
$offset = ( $this -> step - 1 ) * $this -> per_step ;
$step_items = array_slice ( $tables , $offset , $this -> per_step );
if ( $step_items ) {
$query = " TRUNCATE TABLE { $step_items [ 0 ] } " ;
edd_debug_log ( var_export ( $query , true ), true );
$wpdb -> query ( $query );
return true ;
}
return false ;
}
/**
* Return the percentage completed .
*
* @ since 2.5
*
* @ return float Percentage complete .
*/
public function get_percentage_complete () {
$items = $this -> get_stored_data ( 'edd_reset_tables_to_truncate' );
$total = count ( $items );
$percentage = 100 ;
if ( $total > 0 ) {
$percentage = ( ( $this -> per_step * $this -> step ) / $total ) * 100 ;
}
if ( $percentage > 100 ) {
$percentage = 100 ;
}
return $percentage ;
}
/**
* Set the properties specific to the export .
*
* @ since 2.5
*
* @ param array $request Form data passed into the batch processor .
*/
public function set_properties ( $request ) {}
/**
* Process a step .
*
* @ since 2.5
*
* @ return bool True if more data exists , false otherwise .
*/
public function process_step () {
if ( ! $this -> can_export () ) {
wp_die ( esc_html__ ( 'You do not have permission to export data.' , 'easy-digital-downloads' ), esc_html__ ( 'Error' , 'easy-digital-downloads' ), array ( 'response' => 403 ) );
}
$had_data = $this -> get_data ();
if ( $had_data ) {
$this -> done = false ;
return true ;
} else {
update_option ( 'edd_earnings_total' , 0 , false );
update_option ( 'edd_earnings_total_without_tax' , 0 , false );
delete_transient ( 'edd_earnings_total' );
delete_transient ( 'edd_earnings_total_without_tax' );
delete_transient ( 'edd_estimated_monthly_stats' . true );
delete_transient ( 'edd_estimated_monthly_stats' . false );
$this -> delete_data ( 'edd_reset_tables_to_truncate' );
// Reset the sequential order numbers
if ( edd_get_option ( 'enable_sequential' ) ) {
delete_option ( 'edd_last_payment_number' );
2023-06-28 12:45:44 +00:00
delete_option ( 'edd_next_order_number' );
2022-11-27 15:03:07 +00:00
}
$this -> done = true ;
$this -> message = __ ( 'Your store has been successfully reset.' , 'easy-digital-downloads' );
return false ;
}
}
/**
* Export headers .
*
* @ since 2.5
*/
public function headers () {
edd_set_time_limit ();
}
/**
* Perform the export .
*
* @ since 2.5
*/
public function export () {
// Set headers.
$this -> headers ();
edd_die ();
}
/**
* Fetch data prior to batch processing starting .
*
* @ since 2.5
*/
public function pre_fetch () {
if ( 1 === $this -> step ) {
$this -> delete_data ( 'edd_reset_tables_to_truncate' );
}
$tables = get_option ( 'edd_reset_tables_to_truncate' , false );
if ( false === $tables ) {
$tables = array ();
foreach ( EDD () -> components as $component ) {
/** @var $component EDD\Component */
// Objects
$object = $component -> get_interface ( 'table' );
if ( $object instanceof \EDD\Database\Table && $object -> exists () ) {
if ( 'adjustments' === $object -> name ) {
continue ;
}
$tables [] = $object -> table_name ;
}
// Meta
$meta = $component -> get_interface ( 'meta' );
if ( $meta instanceof \EDD\Database\Table && $meta -> exists () ) {
if ( 'adjustmentmeta' === $meta -> name ) {
continue ;
}
$tables [] = $meta -> table_name ;
}
}
$tables = apply_filters ( 'edd_reset_tables_to_truncate' , $tables );
$this -> store_data ( 'edd_reset_tables_to_truncate' , $tables );
}
}
/**
* Given a key , get the information from the database directly .
*
* @ since 2.5
*
* @ param string $key Option name .
* @ return mixed Returns the data from the database .
*/
private function get_stored_data ( $key ) {
global $wpdb ;
$value = $wpdb -> get_var ( $wpdb -> prepare ( " SELECT option_value FROM { $wpdb -> options } WHERE option_name = %s " , $key ) );
if ( empty ( $value ) ) {
return array ();
}
$maybe_json = json_decode ( $value );
if ( ! is_null ( $maybe_json ) ) {
$value = json_decode ( $value , true );
}
return ( array ) $value ;
}
/**
* Store a value in the wp_options table .
*
* @ since 2.5
*
* @ param string $key Option name .
* @ param mixed $value Option value .
*/
private function store_data ( $key = '' , $value = '' ) {
global $wpdb ;
// Bail if no key was passed.
if ( empty ( $key ) ) {
return ;
}
// Parse value.
$value = is_array ( $value )
? wp_json_encode ( $value )
: esc_attr ( $value );
// Prepare data.
$data = array (
'option_name' => $key ,
'option_value' => $value ,
'autoload' => 'no' ,
);
$formats = array ( '%s' , '%s' , '%s' );
// Update database.
$wpdb -> replace ( $wpdb -> options , $data , $formats );
}
/**
* Delete an option .
*
* @ since 2.5
*
* @ param string $key Option name .
*/
private function delete_data ( $key = '' ) {
global $wpdb ;
// Bail if no key was passed.
if ( empty ( $key ) ) {
return ;
}
// Delete from the database.
$wpdb -> delete ( $wpdb -> options , array ( 'option_name' => $key ) );
}
}