# defender-security/5.4.0/src/class-actionscheduler-setup.php

Defender Security – Malware Scanner, Login Security &amp; Firewall, version 5.4.0. 101 lines.

- Page: https://pluginprobe.com/plugins/defender-security/5.4.0/code/src/class-actionscheduler-setup.php
- Raw: https://pluginprobe.com/plugins/defender-security/5.4.0/raw/src/class-actionscheduler-setup.php
- Modified: 2025-07-28T08:30:26+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/defender-security/5.4.0/code/src/class-actionscheduler-setup.php#L10-L20`.

```php
<?php
/**
 * Action Scheduler Setup
 *
 * Ensures required Action Scheduler database tables exist for each site.
 * Supports single-site and multisite setups.
 *
 * @package WP_Defender
 */

namespace WP_Defender;

use ActionScheduler_HybridStore;
use ActionScheduler_LoggerSchema;
use ActionScheduler_StoreSchema;
use WP_Site;

/**
 * Class ActionScheduler_Setup
 *
 * Ensures Action Scheduler database tables are created for each site in a multisite network,
 * as well as for single-site setups. Handles scenarios such as
 * admin fallback checks, new subsite creation.
 */
class ActionScheduler_Setup {

	/**
	 * Initialize hooks for setting up Action Scheduler tables.
	 */
	public static function init(): void {
		add_action( 'plugins_loaded', array( __CLASS__, 'maybe_create_tables' ) );
		add_action( 'wp_initialize_site', array( __CLASS__, 'create_tables_for_new_site' ) );
	}

	/**
	 * Ensure tables exist on the current site.
	 * Runs as a fallback during plugin load.
	 */
	public static function maybe_create_tables(): void {
		if ( ! self::tables_exist() ) {
			self::register_tables();
		}
	}

	/**
	 * Set up Action Scheduler tables for a new site in a multisite network.
	 *
	 * @param WP_Site $site The new site object.
	 */
	public static function create_tables_for_new_site( WP_Site $site ): void {
		switch_to_blog( $site->blog_id );
		self::register_tables();
		restore_current_blog();
	}

	/**
	 * Register Action Scheduler tables on the current site.
	 */
	private static function register_tables(): void {
		self::load_dependencies();

		$store = new ActionScheduler_HybridStore();
		add_action( 'action_scheduler/created_table', array( $store, 'set_autoincrement' ), 10, 2 );

		$store_schema  = new ActionScheduler_StoreSchema();
		$logger_schema = new ActionScheduler_LoggerSchema();

		$store_schema->register_tables( true );
		$logger_schema->register_tables( true );

		remove_action( 'action_scheduler/created_table', array( $store, 'set_autoincrement' ), 10 );
	}

	/**
	 * Check if Action Scheduler tables exist.
	 *
	 * @return bool
	 */
	private static function tables_exist(): bool {
		self::load_dependencies();

		$store_schema = new ActionScheduler_StoreSchema();
		return $store_schema->tables_exist();
	}

	/**
	 * Load required Action Scheduler classes if not already loaded.
	 */
	private static function load_dependencies(): void {
		if ( ! class_exists( 'ActionScheduler_HybridStore' ) ) {
			require_once WP_DEFENDER_DIR . 'vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php';
		}
		if ( ! class_exists( 'ActionScheduler_StoreSchema' ) ) {
			require_once WP_DEFENDER_DIR . 'vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php';
		}
		if ( ! class_exists( 'ActionScheduler_LoggerSchema' ) ) {
			require_once WP_DEFENDER_DIR . 'vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_LoggerSchema.php';
		}
	}
}

```
