HEX
Server: LiteSpeed
System: Linux server315.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User: globfdxw (6114)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: /home/globfdxw/www/wp-content/plugins/wpforms-entry-automation/src/Tasks/DeleteTask.php
<?php

namespace WPFormsEntryAutomation\Tasks;

/**
 * Delete entries task implementation.
 *
 * @since 1.0.0
 */
class DeleteTask {

	/**
	 * Execute the delete task.
	 *
	 * @since 1.0.0
	 *
	 * @param array $args Task arguments.
	 *
	 * @return bool True on success, false on failure.
	 */
	public function execute( array $args ): bool {

		// Get entries to delete.
		$entries = $this->get_entries( $args );

		if ( empty( $entries ) ) {
			// No entries to delete.
			return true;
		}

		// Delete entries.
		$delete_result = $this->delete_entries( $entries );

		// Log deletion.
		if ( $delete_result ) {
			$this->log_deletion( $entries, $args );
		} else {
			// Log failure.
			wpforms_log(
				'Entry Automation - Entry Deletion Failed',
				[
					'entry_ids' => wp_list_pluck( $entries, 'entry_id' ),
				],
				[
					'type'    => 'error',
					'form_id' => absint( $args['form_id'] ),
				]
			);
		}

		return $delete_result;
	}

	/**
	 * Get entries to delete.
	 *
	 * @since 1.0.0
	 *
	 * @param array $args Arguments to filter entries.
	 *
	 * @return array Entries to delete.
	 */
	private function get_entries( array $args ): array {

		// Prepare arguments.
		$db_args = [
			'number'      => -1, // Get all entries.
			'offset'      => 0,
			'form_id'     => $args['form_id'],
			'entry_id'    => $args['entry_id'],
			'is_filtered' => ! empty( $args['entry_id'] ),
			'date'        => $args['dates'] ?? [],
			'select'      => 'entry_ids',
			'status'      => $args['status'],
		];

		if ( $args['search']['term'] !== '' ) {
			$db_args['value']         = $args['search']['term'];
			$db_args['value_compare'] = $args['search']['comparison'];
			$db_args['field_id']      = $args['search']['field'];
		}

		// Get entries.
		return wpforms()->obj( 'entry' )->get_entries( $db_args );
	}

	/**
	 * Delete entries.
	 *
	 * @since 1.0.0
	 *
	 * @param array $entries Entries to delete.
	 *
	 * @return bool True on success, false on failure.
	 */
	private function delete_entries( array $entries ): bool {

		$success = true;

		// Delete each entry.
		foreach ( $entries as $entry ) {
			$entry_id = $entry->entry_id;
			$result   = wpforms()->obj( 'entry' )->delete( $entry_id, [ 'cap' => '' ] );

			if ( ! $result ) {
				$success = false;
			}
		}

		return $success;
	}

	/**
	 * Log deletion.
	 *
	 * @since 1.0.0
	 *
	 * @param array $entries Deleted entries.
	 * @param array $args    Task arguments.
	 */
	private function log_deletion( array $entries, array $args ): void {

		// Log deletion.
		wpforms_log(
			'Entry Automation - Entries Deleted',
			[
				'entry_count' => count( $entries ),
				'entry_ids'   => wp_list_pluck( $entries, 'entry_id' ),
			],
			[
				'type'    => 'log',
				'form_id' => absint( $args['form_id'] ),
			]
		);
	}
}