|
Server : LiteSpeed System : Linux srv526460274 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : kerao9884 ( 1082) PHP Version : 8.0.30 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /home/beb188.com/public_html/wp-content/plugins/amp/src/BackgroundTask/ |
Upload File : |
<?php
/**
* Abstract class RecurringBackgroundTask.
*
* @package AmpProject\AmpWP
*/
namespace AmpProject\AmpWP\BackgroundTask;
/**
* Abstract base class for using cron to execute a background task that runs on a schedule.
*
* @package AmpProject\AmpWP
* @since 2.1
* @internal
*/
abstract class RecurringBackgroundTask extends CronBasedBackgroundTask {
/**
* Register the service with the system.
*/
public function register() {
parent::register();
add_action( 'admin_init', [ $this, 'schedule_event' ], 10, 0 );
add_action( $this->get_event_name(), [ $this, 'process' ] );
}
/**
* Schedule the event.
*
* @param mixed[] ...$args Arguments passed to the function from the action hook, which here is empty always since add_action().
*/
final public function schedule_event( ...$args ) {
if ( ! is_user_logged_in() ) {
return;
}
$event_name = $this->get_event_name();
$recurrence = $this->get_interval();
$scheduled_event = $this->get_scheduled_event( $event_name, $args );
// Unschedule any existing event which had a differing recurrence.
if ( $scheduled_event && $scheduled_event->schedule !== $recurrence ) {
wp_unschedule_event( $scheduled_event->timestamp, $event_name, $args );
$scheduled_event = null;
}
if ( ! $scheduled_event ) {
wp_schedule_event( time(), $recurrence, $event_name, $args );
}
}
/**
* Retrieve a scheduled event.
*
* This uses a copied implementation from WordPress core if `wp_get_scheduled_event()` does not exist, as it was
* introduced in WordPress 5.1.
*
* @link https://github.com/WordPress/wordpress-develop/blob/ba943e113d3b31b121f7/src/wp-includes/cron.php#L753-L793
* @see \wp_get_scheduled_event()
* @codeCoverageIgnore
*
* @param string $hook Action hook of the event.
* @param array $args Optional. Array containing each separate argument to pass to the hook's callback function.
* Although not passed to a callback, these arguments are used to uniquely identify the
* event, so they should be the same as those used when originally scheduling the event.
* Default empty array.
* @param mixed $timestamp Optional. Unix timestamp (UTC) of the event. If not specified, the next scheduled event
* is returned. Default null.
* @return object|false The event object. False if the event does not exist.
*/
final public function get_scheduled_event( $hook, $args = [], $timestamp = null ) {
if ( function_exists( 'wp_get_scheduled_event' ) ) {
return wp_get_scheduled_event( $hook, $args, $timestamp );
}
if ( null !== $timestamp && ! is_numeric( $timestamp ) ) {
return false;
}
$crons = _get_cron_array();
if ( empty( $crons ) ) {
return false;
}
$key = md5( serialize( $args ) ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize -- This is copied from WP core.
if ( ! $timestamp ) {
// Get next event.
$next = false;
foreach ( $crons as $timestamp => $cron ) {
if ( isset( $cron[ $hook ][ $key ] ) ) {
$next = $timestamp;
break;
}
}
if ( ! $next ) {
return false;
}
$timestamp = $next;
} elseif ( ! isset( $crons[ $timestamp ][ $hook ][ $key ] ) ) {
return false;
}
$event = (object) [
'hook' => $hook,
'timestamp' => $timestamp,
'schedule' => $crons[ $timestamp ][ $hook ][ $key ]['schedule'],
'args' => $args,
];
if ( isset( $crons[ $timestamp ][ $hook ][ $key ]['interval'] ) ) {
$event->interval = $crons[ $timestamp ][ $hook ][ $key ]['interval'];
}
return $event;
}
/**
* Get the interval to use for the event.
*
* @return string An existing interval name. Valid values are 'hourly', 'twicedaily' or 'daily'.
*/
abstract protected function get_interval();
}