147 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Recount all cutomer stats
 | |
|  *
 | |
|  * This class handles batch processing of recounting a single customer's stats
 | |
|  *
 | |
|  * @subpackage  Admin/Tools/EDD_Tools_Recount_Customer_Stats
 | |
|  * @copyright   Copyright (c) 2015, Chris Klosowski
 | |
|  * @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_Stats Class
 | |
|  *
 | |
|  * @since 2.5
 | |
|  */
 | |
| class EDD_Tools_Recount_Single_Customer_Stats extends EDD_Batch_Export {
 | |
| 
 | |
| 	/**
 | |
| 	 * 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 = 10;
 | |
| 
 | |
| 	/**
 | |
| 	 * Get the Export Data
 | |
| 	 *
 | |
| 	 * @since 2.5
 | |
| 	 * @global object $wpdb Used to query the database using the WordPress
 | |
| 	 *   Database API
 | |
| 	 * @return bool True if data was found, false if not.
 | |
| 	 */
 | |
| 	public function get_data() {
 | |
| 
 | |
| 		$customer = new EDD_Customer( $this->customer_id );
 | |
| 		if ( $customer ) {
 | |
| 			$customer->recalculate_stats();
 | |
| 			$this->result_data = array(
 | |
| 				'purchase_count' => (int) $customer->purchase_count,
 | |
| 				'purchase_value' => esc_html( edd_currency_filter( edd_format_amount( $customer->purchase_value ) ) ),
 | |
| 			);
 | |
| 			return true;
 | |
| 		}
 | |
| 
 | |
| 		return false;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Return the calculated completion percentage
 | |
| 	 *
 | |
| 	 * @since 2.5
 | |
| 	 * @return int
 | |
| 	 */
 | |
| 	public function get_percentage_complete() {
 | |
| 
 | |
| 		$total = edd_count_orders(
 | |
| 			array(
 | |
| 				'customer_id' => $this->customer_id,
 | |
| 			)
 | |
| 		);
 | |
| 
 | |
| 		$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 payments export
 | |
| 	 *
 | |
| 	 * @since 2.5
 | |
| 	 * @param array $request The Form Data passed into the batch processing
 | |
| 	 */
 | |
| 	public function set_properties( $request ) {
 | |
| 		$this->customer_id = isset( $request['customer_id'] ) ? sanitize_text_field( $request['customer_id'] ) : false;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Process a step
 | |
| 	 *
 | |
| 	 * @since 2.5
 | |
| 	 * @return bool
 | |
| 	 */
 | |
| 	public function process_step() {
 | |
| 
 | |
| 		if ( ! $this->can_export() ) {
 | |
| 			wp_die( esc_html__( 'You do not have permission to modify this 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;
 | |
| 		}
 | |
| 		$this->done    = true;
 | |
| 		$this->message = esc_html__( 'Customer stats successfully recounted.', 'easy-digital-downloads' );
 | |
| 
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	public function headers() {
 | |
| 		edd_set_time_limit();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Perform the export
 | |
| 	 *
 | |
| 	 * @since 2.5
 | |
| 	 * @return void
 | |
| 	 */
 | |
| 	public function export() {
 | |
| 
 | |
| 		// Set headers
 | |
| 		$this->headers();
 | |
| 
 | |
| 		edd_die();
 | |
| 	}
 | |
| }
 |