File: /var/www/html/ielts-store/wp-content/plugins/automatewoo/includes/Tools/Guest_Eraser.php
<?php
// phpcs:ignoreFile
namespace AutomateWoo;
if ( ! defined( 'ABSPATH' ) ) exit;
/**
 * @class Guest_Eraser
 * @since 4.0
 */
class Guest_Eraser extends Tool_Background_Processed_Abstract {
	public $id = 'guest_eraser';
	function __construct() {
		parent::__construct();
		$this->title = __( 'Guest Eraser', 'automatewoo' );
		$this->description = __( "Erase stored data for guests that have not placed an order. Orders that are failed or cancelled are not included.", 'automatewoo' );
	}
	/**
	 * @return array
	 */
	function get_form_fields() {
		$fields = [];
		$type = new Fields\Select();
		$type->set_name('type');
		$type->set_name_base('args');
		return $fields;
	}
	/**
	 * @param array $args
	 * @return bool|\WP_Error
	 */
	function process( $args ) {
		$query = new Guest_Query();
		$query->where('most_recent_order', 0 );
		$guests = $query->get_results();
		$tasks = [];
		foreach ( $guests as $guest ) {
			$tasks[] = [
				'tool_id' => $this->get_id(),
				'guest_email' => $guest->get_email(),
			];
		}
		return $this->start_background_job( $tasks );
	}
	/**
	 * Do validation in the validate_process() method not here
	 *
	 * @param $args
	 */
	function display_confirmation_screen( $args ) {
		$query = new Guest_Query();
		$query->where('most_recent_order', 0 );
		$count = $query->get_count();
		$text = __( 'Are you sure you want to permanently delete the guests who have not placed an order? Any workflow logs for deleted guests will be anonymized.', 'automatewoo' );
		$number_string = sprintf( _n( '%s guest will be deleted.', '%s guests will be deleted.', $count, 'automatewoo' ), $count );
		echo '<p>' . $text . ' ' . $number_string . '</p>';
	}
	/**
	 * @param array $task
	 */
	function handle_background_task( $task ) {
		$email = isset( $task['guest_email'] ) ? Clean::email( $task['guest_email'] ) : false;
		if ( ! $email ) {
			return;
		}
		$customer = Customer_Factory::get_by_email( $email );
		if ( ! $customer ) {
			return;
		}
		// anonymize the guest logs
		$query = new Log_Query();
		$query->where_customer_or_legacy_user( $customer, true );
		$results = $query->get_results();
		foreach( $results as $log ) {
			Privacy_Erasers::anonymize_personal_log_data( $log, $email );
		}
		// delete queued items
		$query = new Queue_Query();
		$query->where_customer_or_legacy_user( $customer, true );
		$results = $query->get_results();
		foreach( $results as $result ) {
			$result->delete();
		}
		if ( $guest = Guest_Factory::get_by_email( $email ) ) {
			$guest->delete(); // delete the guest, cart and customer
		}
	}
}