installed plugin Easy Digital Downloads
version 3.1.0.3
This commit is contained in:
@ -0,0 +1,237 @@
|
||||
<?php
|
||||
/**
|
||||
* Migrate File Download Logs
|
||||
*
|
||||
* Removes some PII from the log meta, and adds the customer ID of the payment to allow more accurate
|
||||
* file download counts for a customer.
|
||||
*
|
||||
* @subpackage Admin/Classes/EDD_SL_License_Log_Migration
|
||||
* @copyright Copyright (c) 2018, Easy Digital Downloads, LLC
|
||||
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
||||
* @since 2.9.2
|
||||
*/
|
||||
|
||||
// Exit if accessed directly
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* EDD_File_Download_Log_Migration Class
|
||||
*
|
||||
* @since 2.9.2
|
||||
*/
|
||||
class EDD_File_Download_Log_Migration extends EDD_Batch_Export {
|
||||
|
||||
/**
|
||||
* Our export type. Used for export-type specific filters/actions
|
||||
* @var string
|
||||
* @since 2.9.2
|
||||
*/
|
||||
public $export_type = '';
|
||||
|
||||
/**
|
||||
* Allows for a non-download batch processing to be run.
|
||||
* @since 2.9.2
|
||||
* @var boolean
|
||||
*/
|
||||
public $is_void = true;
|
||||
|
||||
/**
|
||||
* Sets the number of items to pull on each step
|
||||
* @since 2.9.2
|
||||
* @var integer
|
||||
*/
|
||||
public $per_step = 50;
|
||||
|
||||
/**
|
||||
* Get the Export Data
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9.2
|
||||
* @return array $data The data for the CSV file
|
||||
*/
|
||||
public function get_data() {
|
||||
$step_items = $this->get_log_ids_for_current_step();
|
||||
|
||||
if ( ! is_array( $step_items ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( empty( $step_items ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ( $step_items as $log_id ) {
|
||||
$log_id = (int) $log_id;
|
||||
$sanitized_log_id = absint( $log_id );
|
||||
|
||||
if ( $sanitized_log_id !== $log_id ) {
|
||||
edd_debug_log( "Log ID mismatch, skipping log ID {$log_id}" );
|
||||
continue;
|
||||
}
|
||||
|
||||
$has_customer_id = (int) get_post_meta( $log_id, '_edd_log_customer_id', true );
|
||||
if ( ! empty( $has_customer_id ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$payment_id = (int) get_post_meta( $log_id, '_edd_log_payment_id', true );
|
||||
if ( ! empty( $payment_id ) ) {
|
||||
$customer_id = edd_get_payment_customer_id( $payment_id );
|
||||
|
||||
if ( $customer_id < 0 ) {
|
||||
$customer_id = 0;
|
||||
}
|
||||
|
||||
update_post_meta( $log_id, '_edd_log_customer_id', $customer_id );
|
||||
delete_post_meta( $log_id, '_edd_log_user_info' );
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the calculated completion percentage
|
||||
*
|
||||
* @since 2.9.2
|
||||
* @return int
|
||||
*/
|
||||
public function get_percentage_complete() {
|
||||
$total = (int) get_option( 'edd_fdlm_total_logs', 0 );
|
||||
|
||||
$percentage = 100;
|
||||
|
||||
if( $total > 0 ) {
|
||||
$percentage = ( ( $this->step * $this->per_step ) / $total ) * 100;
|
||||
}
|
||||
|
||||
if( $percentage > 100 ) {
|
||||
$percentage = 100;
|
||||
}
|
||||
|
||||
return $percentage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the properties specific to the payments export
|
||||
*
|
||||
* @since 2.9.2
|
||||
* @param array $request The Form Data passed into the batch processing
|
||||
*/
|
||||
public function set_properties( $request ) {}
|
||||
|
||||
/**
|
||||
* Process a step
|
||||
*
|
||||
* @since 2.9.2
|
||||
* @return bool
|
||||
*/
|
||||
public function process_step() {
|
||||
|
||||
if ( ! $this->can_export() ) {
|
||||
wp_die(
|
||||
__( 'You do not have permission to run this upgrade.', 'easy-digital-downloads' ),
|
||||
__( 'Error', 'easy-digital-downloads' ),
|
||||
array( 'response' => 403 ) );
|
||||
}
|
||||
|
||||
$had_data = $this->get_data();
|
||||
|
||||
if( $had_data ) {
|
||||
$this->done = false;
|
||||
return true;
|
||||
} else {
|
||||
$this->done = true;
|
||||
delete_option( 'edd_fdlm_total_logs' );
|
||||
delete_option( 'edd_fdlm_term_tax_id' );
|
||||
$this->message = __( 'File download logs updated successfully.', 'easy-digital-downloads' );
|
||||
edd_set_upgrade_complete( 'update_file_download_log_data' );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function headers() {
|
||||
edd_set_time_limit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform the export
|
||||
*
|
||||
* @access public
|
||||
* @since 2.9.2
|
||||
* @return void
|
||||
*/
|
||||
public function export() {
|
||||
|
||||
// Set headers
|
||||
$this->headers();
|
||||
|
||||
edd_die();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch total number of log IDs needing migration
|
||||
*
|
||||
* @since 2.9.5
|
||||
*
|
||||
* @global object $wpdb
|
||||
*/
|
||||
public function pre_fetch() {
|
||||
global $wpdb;
|
||||
|
||||
// Default count (assume no entries)
|
||||
$log_id_count = 0;
|
||||
|
||||
// Query for a term ID (make sure log items exist)
|
||||
$term_id = $wpdb->get_var( "SELECT term_id FROM {$wpdb->terms} WHERE name = 'file_download' LIMIT 1" );
|
||||
|
||||
// Log items exist...
|
||||
if ( ! empty( $term_id ) ) {
|
||||
|
||||
// Query for possible entries...
|
||||
$term_tax_id = $wpdb->get_var( $wpdb->prepare( "SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id = %d AND taxonomy = 'edd_log_type' LIMIT 1", $term_id ) );
|
||||
|
||||
// Entries exist...
|
||||
if ( ! empty( $term_tax_id ) ) {
|
||||
|
||||
// Cache the term taxonomy ID
|
||||
update_option( 'edd_fdlm_term_tax_id', $term_tax_id );
|
||||
|
||||
// Count the number of entries!
|
||||
$log_id_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = %d", $term_tax_id ) );
|
||||
}
|
||||
}
|
||||
|
||||
// Temporarily save the number of rows
|
||||
update_option( 'edd_fdlm_total_logs', (int) $log_id_count );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the log IDs (50 based on this->per_step) for the current step
|
||||
*
|
||||
* @since 2.9.5
|
||||
*
|
||||
* @global object $wpdb
|
||||
* @return array
|
||||
*/
|
||||
private function get_log_ids_for_current_step() {
|
||||
global $wpdb;
|
||||
|
||||
// Default values
|
||||
$log_ids = array();
|
||||
$offset = ( $this->step * $this->per_step ) - $this->per_step;
|
||||
|
||||
// Count the number of entries!
|
||||
$term_tax_id = (int) get_option( 'edd_fdlm_term_tax_id', 0 );
|
||||
|
||||
// Only query if term taxonomy ID was prefetched
|
||||
if ( ! empty( $term_tax_id ) ) {
|
||||
$log_ids = $wpdb->get_col( $wpdb->prepare( "SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = %d LIMIT %d, %d", $term_tax_id, $offset, $this->per_step ) );
|
||||
}
|
||||
|
||||
// Always return an array
|
||||
return ! is_wp_error( $log_ids )
|
||||
? (array) $log_ids
|
||||
: array();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user