Files
hub-insurance/wp-content/plugins/gravityforms/includes/bulk-actions/class-gf-entry-bulk-action-processor.php
T
2026-07-02 15:54:39 -06:00

168 lines
4.6 KiB
PHP

<?php
/**
* Background processor for bulk entry actions.
*
* @package Gravity_Forms\Gravity_Forms\Bulk_Actions
* @since 2.10.3
*/
namespace Gravity_Forms\Gravity_Forms\Bulk_Actions;
use Gravity_Forms\Gravity_Forms\Async\GF_Background_Process;
use GFCommon;
use GFFormsModel;
if ( ! class_exists( 'GFForms' ) ) {
die();
}
if ( ! class_exists( 'Gravity_Forms\Gravity_Forms\Async\GF_Background_Process' ) ) {
require_once GF_PLUGIN_DIR_PATH . 'includes/async/class-gf-background-process.php';
}
/**
* Class GF_Entry_Bulk_Action_Processor
*
* Handles background processing of bulk entry actions.
*
* @since 2.10.2
*/
class GF_Entry_Bulk_Action_Processor extends GF_Background_Process {
protected $action = 'gf_entry_bulk_action';
private static $instance = null;
public static function get_instance() {
if ( self::$instance === null ) {
self::$instance = new self();
}
return self::$instance;
}
protected function task( $item ) {
$entry_id = rgar( $item, 'entry_id' );
$form_id = rgar( $item, 'form_id' );
$bulk_action = rgar( $item, 'bulk_action' );
if ( empty( $bulk_action ) ) {
GFCommon::log_debug( __METHOD__ . '(): Skipping task with missing bulk_action.' );
$this->increment_processed();
return false;
}
if ( $bulk_action === 'delete_form' ) {
return $this->process_delete_form( $form_id );
}
if ( empty( $entry_id ) ) {
GFCommon::log_debug( __METHOD__ . '(): Skipping task with missing entry_id.' );
$this->increment_processed();
return false;
}
$entry = \GFAPI::get_entry( $entry_id );
if ( is_wp_error( $entry ) ) {
GFCommon::log_debug( __METHOD__ . sprintf( '(): Entry #%d not found, skipping.', $entry_id ) );
$this->increment_processed();
return false;
}
switch ( $bulk_action ) {
case 'delete':
GFFormsModel::delete_entry( $entry_id );
GFCommon::log_debug( __METHOD__ . sprintf( '(): Deleted entry #%d.', $entry_id ) );
break;
case 'trash':
\GFAPI::update_entry_property( $entry_id, 'status', 'trash' );
GFCommon::log_debug( __METHOD__ . sprintf( '(): Trashed entry #%d.', $entry_id ) );
break;
case 'restore':
\GFAPI::update_entry_property( $entry_id, 'status', 'active' );
GFCommon::log_debug( __METHOD__ . sprintf( '(): Restored entry #%d.', $entry_id ) );
break;
case 'spam':
\GFAPI::update_entry_property( $entry_id, 'status', 'spam' );
GFCommon::log_debug( __METHOD__ . sprintf( '(): Marked entry #%d as spam.', $entry_id ) );
break;
case 'unspam':
\GFAPI::update_entry_property( $entry_id, 'status', 'active' );
GFCommon::log_debug( __METHOD__ . sprintf( '(): Unmarked entry #%d as spam.', $entry_id ) );
break;
case 'mark_read':
\GFAPI::update_entry_property( $entry_id, 'is_read', 1 );
GFCommon::log_debug( __METHOD__ . sprintf( '(): Marked entry #%d as read.', $entry_id ) );
break;
case 'mark_unread':
\GFAPI::update_entry_property( $entry_id, 'is_read', 0 );
GFCommon::log_debug( __METHOD__ . sprintf( '(): Marked entry #%d as unread.', $entry_id ) );
break;
default:
GFCommon::log_debug( __METHOD__ . sprintf( '(): Unknown action "%s" for entry #%d.', $bulk_action, $entry_id ) );
break;
}
$this->increment_processed();
return false;
}
private function process_delete_form( $form_id ) {
if ( empty( $form_id ) ) {
GFCommon::log_debug( __METHOD__ . '(): Skipping task with missing form_id.' );
$this->increment_processed();
return false;
}
$form = \GFAPI::get_form( $form_id );
if ( ! $form ) {
GFCommon::log_debug( __METHOD__ . sprintf( '(): Form #%d not found, skipping.', $form_id ) );
$this->increment_processed();
return false;
}
GFFormsModel::delete_form( $form_id );
GFCommon::log_debug( __METHOD__ . sprintf( '(): Permanently deleted form #%d.', $form_id ) );
$this->increment_processed();
return false;
}
private function increment_processed() {
$status = get_option( 'gf_bulk_action_status', array() );
if ( ! empty( $status ) && rgar( $status, 'status' ) === 'processing' ) {
$status['processed'] = rgar( $status, 'processed', 0 ) + 1;
update_option( 'gf_bulk_action_status', $status );
}
}
protected function complete() {
parent::complete();
$status = get_option( 'gf_bulk_action_status', array() );
if ( ! empty( $status ) ) {
$status['status'] = 'completed';
$status['completed_at'] = time();
update_option( 'gf_bulk_action_status', $status );
}
GFCommon::log_debug( __METHOD__ . '(): Bulk action process completed.' );
}
protected function get_action_for_log() {
return ' for bulk entry action';
}
}