web/wp-content/plugins/mozilla-scheduled-tasks/src/JobManager.php (43 lines of code) (raw):

<?php /** * Manages the scheduled tasks. * * @package MozillaNewProductsScheduledTasks */ namespace MozillaNewProducts\ScheduledTasks; use DirectoryIterator; class JobManager { private $job_classes = []; public function __construct() { $this->load_job_classes(); } public function register_jobs() { foreach ($this->job_classes as $class) { if (property_exists($class, 'hook') && method_exists($class, 'run')) { add_action($class::$hook, array($class, 'run')); } } foreach ($this->job_classes as $class) { if (property_exists($class, 'hook') && property_exists($class, 'interval') && !wp_next_scheduled($class::$hook)) { wp_schedule_event(time(), $class::$interval, $class::$hook); } } } public function deactivate_plugin() { $this->unschedule_jobs(); } private function load_job_classes() { $dir = new DirectoryIterator(__DIR__ . '/Jobs'); foreach ($dir as $fileinfo) { if (!$fileinfo->isDot() && $fileinfo->isFile() && $fileinfo->getExtension() === 'php') { $class_name = '\\MozillaNewProducts\\ScheduledTasks\\Jobs\\' . $fileinfo->getBasename('.php'); if (class_exists($class_name)) { $this->job_classes[] = $class_name; } } } } private function unschedule_jobs() { foreach ($this->job_classes as $class) { $timestamp = wp_next_scheduled($class::$hook ?? null); if ($timestamp) { wp_unschedule_event($timestamp, $class::$hook); } } } }