PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.7
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.7
16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 All 506 releases
jetpack / modules / videopress / class.videopress-scheduler.php

class.videopress-scheduler.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-a.7, at modules/videopress/class.videopress-scheduler.php

210 lines 5.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php // phpcs:ignore WordPress.Files.FileName
2 /**
3 * VideoPress cron scheduler.
4 *
5 * @package automattic/jetpack
6 */
7
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit( 0 );
10 }
11
12 /**
13 * VideoPress Cron Scheduler.
14 */
15 class VideoPress_Scheduler {
16
17 /**
18 * The name of the function used to run the cleanup cron.
19 */
20 const CLEANUP_CRON_METHOD = 'videopress_cleanup_media_library';
21
22 /**
23 * Singleton instance.
24 *
25 * @var VideoPress_Scheduler $instance A VideoPress_Scheduler singleton instance (default null)
26 **/
27 private static $instance = null;
28
29 /**
30 * A list of all of the crons that are to be activated, along with their interval timings.
31 *
32 * @var array
33 */
34 protected $crons = array(
35 // phpcs:ignore Squiz.PHP.CommentedOutCode.Found
36 // 'cleanup' => array(
37 // 'method' => self::CLEANUP_CRON_METHOD,
38 // 'interval' => 'minutes_30',
39 // ),
40 );
41
42 /**
43 * Private VideoPress_Scheduler constructor.
44 *
45 * Use the VideoPress_Scheduler::init() method to get an instance.
46 */
47 private function __construct() {
48 add_filter( 'cron_schedules', array( $this, 'add_30_minute_cron_interval' ) );
49
50 // Activate the cleanup cron if videopress is enabled, jetpack is activated, or jetpack is updated.
51 add_action( 'jetpack_activate_module_videopress', array( $this, 'activate_all_crons' ) );
52 add_action( 'updating_jetpack_version', array( $this, 'activate_all_crons' ) );
53 add_action( 'activated_plugin', array( $this, 'activate_crons_on_jetpack_activation' ) );
54
55 // Deactivate the cron if either videopress is disabled or Jetpack is disabled.
56 add_action( 'jetpack_deactivate_module_videopress', array( $this, 'deactivate_all_crons' ) );
57 register_deactivation_hook( plugin_basename( JETPACK__PLUGIN_FILE ), array( $this, 'deactivate_all_crons' ) );
58 }
59
60 /**
61 * Initialize the VideoPress_Scheduler and get back a singleton instance.
62 *
63 * @return VideoPress_Scheduler
64 */
65 public static function init() {
66 if ( self::$instance === null ) {
67 self::$instance = new VideoPress_Scheduler();
68 }
69
70 return self::$instance;
71 }
72
73 /**
74 * Adds 30 minute running interval to the cron schedules.
75 *
76 * @param array $current_schedules Currently defined schedules list.
77 *
78 * @return array
79 */
80 public function add_30_minute_cron_interval( $current_schedules ) {
81
82 // Only add the 30 minute interval if it wasn't already set.
83 if ( ! isset( $current_schedules['minutes_30'] ) ) {
84 $current_schedules['minutes_30'] = array(
85 'interval' => 30 * MINUTE_IN_SECONDS,
86 'display' => 'Every 30 minutes',
87 );
88 }
89
90 return $current_schedules;
91 }
92
93 /**
94 * Activate a single cron
95 *
96 * @param string $cron_name The name of the cron to activate.
97 *
98 * @return bool
99 */
100 public function activate_cron( $cron_name ) {
101
102 if ( ! $this->is_cron_valid( $cron_name ) ) {
103 return false;
104 }
105
106 if ( ! $this->check_cron( $cron_name ) ) {
107 wp_schedule_event( time(), $this->crons[ $cron_name ]['interval'], $this->crons[ $cron_name ]['method'] );
108 }
109 }
110
111 /**
112 * Activates widget update cron task.
113 */
114 public function activate_all_crons() {
115
116 if ( ! Jetpack::is_module_active( 'videopress' ) ) {
117 return false;
118 }
119
120 foreach ( $this->crons as $cron_name => $cron ) {
121 if ( ! $this->check_cron( $cron_name ) ) {
122 wp_schedule_event( time(), $cron['interval'], $cron['method'] );
123 }
124 }
125 }
126
127 /**
128 * Only activate the crons if it is Jetpack that was activated.
129 *
130 * @param string $plugin_file_name The name of the plugin that was activated.
131 */
132 public function activate_crons_on_jetpack_activation( $plugin_file_name ) {
133
134 if ( plugin_basename( JETPACK__PLUGIN_FILE ) === $plugin_file_name ) {
135 $this->activate_all_crons();
136 }
137 }
138
139 /**
140 * Deactivates any crons associated with the VideoPress module.
141 *
142 * @param string $cron_name Name of the cron to deactivate.
143 *
144 * @return bool
145 */
146 public function deactivate_cron( $cron_name ) {
147
148 if ( ! $this->is_cron_valid( $cron_name ) ) {
149 return false;
150 }
151
152 $next_scheduled_time = $this->check_cron( $cron_name );
153 wp_unschedule_event( $next_scheduled_time, $this->crons[ $cron_name ]['method'] );
154
155 return true;
156 }
157
158 /**
159 * Deactivates any crons associated with the VideoPress module..
160 */
161 public function deactivate_all_crons() {
162
163 foreach ( $this->crons as $cron_name => $cron ) {
164 $this->deactivate_cron( $cron_name );
165 }
166 }
167
168 /**
169 * Is the given cron job currently active?
170 *
171 * If so, return when it will next run,
172 *
173 * @param string $cron_name Cron job name.
174 *
175 * @return int|bool Timestamp of the next run time OR false.
176 */
177 public function check_cron( $cron_name ) {
178 if ( ! $this->is_cron_valid( $cron_name ) ) {
179 return false;
180 }
181
182 return wp_next_scheduled( $this->crons[ $cron_name ]['method'] );
183 }
184
185 /**
186 * Check that the given cron job name is valid.
187 *
188 * @param string $cron_name Cron job name.
189 *
190 * @return bool
191 */
192 public function is_cron_valid( $cron_name ) {
193
194 if ( ! isset( $this->crons[ $cron_name ]['method'] ) || ! isset( $this->crons[ $cron_name ]['interval'] ) ) {
195 return false;
196 }
197
198 return true;
199 }
200
201 /**
202 * Get a list of all of the crons that are available.
203 *
204 * @return array
205 */
206 public function get_crons() {
207 return $this->crons;
208 }
209 }
210