137 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Recount download earnings and stats AND store earnings
 | |
|  *
 | |
|  * This class handles batch processing of recounting earnings and stats for all downloads and store totals
 | |
|  *
 | |
|  * @subpackage  Admin/Tools/EDD_Tools_Recount_All_Stats
 | |
|  * @copyright   Copyright (c) 2021, Sandhills Development, 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_Recount_All_Stats Class
 | |
|  *
 | |
|  * @since 2.5
 | |
|  */
 | |
| class EDD_Tools_Recount_All_Stats extends EDD_Batch_Export {
 | |
| 
 | |
| 	/**
 | |
| 	 * @var int[]
 | |
| 	 */
 | |
| 	private $download_ids;
 | |
| 
 | |
| 	/**
 | |
| 	 * Our export type. Used for export-type specific filters/actions
 | |
| 	 * @var string
 | |
| 	 * @since 2.5
 | |
| 	 */
 | |
| 	public $export_type = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * Allows for a non-download batch processing to be run.
 | |
| 	 * @since  2.5
 | |
| 	 * @var boolean
 | |
| 	 */
 | |
| 	public $is_void = true;
 | |
| 
 | |
| 	/**
 | |
| 	 * Sets the number of items to pull on each step
 | |
| 	 * @since  2.5
 | |
| 	 * @var integer
 | |
| 	 */
 | |
| 	public $per_step = 30;
 | |
| 
 | |
| 	/**
 | |
| 	 * Return the calculated completion percentage
 | |
| 	 *
 | |
| 	 * @since 2.5
 | |
| 	 * @return int
 | |
| 	 */
 | |
| 	public function get_percentage_complete() {
 | |
| 		$percentage = 100;
 | |
| 		$total      = array_sum( (array) wp_count_posts( 'download' ) );
 | |
| 
 | |
| 		if ( $total > 0 ) {
 | |
| 			$percentage = ( ( $this->per_step * $this->step ) / $total ) * 100;
 | |
| 		}
 | |
| 
 | |
| 		if ( $percentage > 100 ) {
 | |
| 			$percentage = 100;
 | |
| 		}
 | |
| 
 | |
| 		return $percentage;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Process a step
 | |
| 	 *
 | |
| 	 * @since 2.5
 | |
| 	 * @return bool
 | |
| 	 */
 | |
| 	public function process_step() {
 | |
| 		if ( ! $this->can_export() ) {
 | |
| 			wp_die( __( 'You do not have permission to perform this action.', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
 | |
| 		}
 | |
| 
 | |
| 		$download_ids = $this->get_download_ids();
 | |
| 
 | |
| 		if ( ! empty( $download_ids ) && is_array( $download_ids ) ) {
 | |
| 			foreach ( $this->get_download_ids() as $download_id ) {
 | |
| 				edd_recalculate_download_sales_earnings( $download_id );
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if ( ! empty( $download_ids ) ) {
 | |
| 			$this->done = false;
 | |
| 			return true;
 | |
| 		} else {
 | |
| 			$this->delete_data( 'edd_recount_all_total' );
 | |
| 			$this->delete_data( 'edd_temp_recount_all_stats' );
 | |
| 			$this->delete_data( 'edd_temp_payment_items' );
 | |
| 			$this->delete_data( 'edd_temp_download_ids' );
 | |
| 			$this->delete_data( 'edd_temp_processed_payments' );
 | |
| 			$this->done    = true;
 | |
| 			$this->message = __( 'Earnings and sales stats successfully recounted.', 'easy-digital-downloads' );
 | |
| 			return false;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Returns the download IDs to process during this step.
 | |
| 	 *
 | |
| 	 * @since 3.0
 | |
| 	 *
 | |
| 	 * @return int[]
 | |
| 	 */
 | |
| 	private function get_download_ids() {
 | |
| 		if ( null === $this->download_ids ) {
 | |
| 			$this->download_ids = get_posts( array(
 | |
| 				'post_status'    => 'any',
 | |
| 				'post_type'      => 'download',
 | |
| 				'posts_per_page' => $this->per_step,
 | |
| 				'offset'         => ( $this->step - 1 ) * $this->per_step,
 | |
| 				'fields'         => 'ids',
 | |
| 			) );
 | |
| 		}
 | |
| 
 | |
| 		return $this->download_ids;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Delete an option
 | |
| 	 *
 | |
| 	 * @since  2.5
 | |
| 	 * @param  string $key The option_name to delete
 | |
| 	 * @return void
 | |
| 	 */
 | |
| 	protected function delete_data( $key ) {
 | |
| 		global $wpdb;
 | |
| 		$wpdb->delete( $wpdb->options, array( 'option_name' => $key ) );
 | |
| 	}
 | |
| }
 |