PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-sync / src / modules / class-constants.php
jetpack / jetpack_vendor / automattic / jetpack-sync / src / modules Last commit date
class-attachments.php 9 months ago class-callables.php 2 months ago class-comments.php 2 months ago class-constants.php 9 months ago class-full-sync-immediately.php 3 months ago class-full-sync.php 3 months ago class-import.php 9 months ago class-menus.php 2 months ago class-meta.php 2 months ago class-module.php 5 months ago class-network-options.php 9 months ago class-options.php 3 months ago class-plugins.php 3 months ago class-posts.php 2 months ago class-protect.php 9 months ago class-search.php 3 months ago class-stats.php 6 months ago class-term-relationships.php 9 months ago class-terms.php 2 months ago class-themes.php 2 months ago class-updates.php 8 months ago class-users.php 2 months ago class-woocommerce-hpos-orders.php 2 months ago class-woocommerce-products.php 8 months ago class-woocommerce.php 2 months ago class-wp-super-cache.php 9 months ago
class-constants.php
356 lines
1 <?php
2 /**
3 * Constants sync module.
4 *
5 * @package automattic/jetpack-sync
6 */
7
8 namespace Automattic\Jetpack\Sync\Modules;
9
10 use Automattic\Jetpack\Sync\Defaults;
11
12 if ( ! defined( 'ABSPATH' ) ) {
13 exit( 0 );
14 }
15
16 /**
17 * Class to handle sync for constants.
18 */
19 class Constants extends Module {
20 /**
21 * Name of the constants checksum option.
22 *
23 * @var string
24 */
25 const CONSTANTS_CHECKSUM_OPTION_NAME = 'jetpack_constants_sync_checksum';
26
27 /**
28 * Name of the transient for locking constants.
29 *
30 * @var string
31 */
32 const CONSTANTS_AWAIT_TRANSIENT_NAME = 'jetpack_sync_constants_await';
33
34 /**
35 * Constants whitelist array.
36 *
37 * @var array
38 */
39 public $constants_whitelist;
40
41 /**
42 * Sync module name.
43 *
44 * @access public
45 *
46 * @return string
47 */
48 public function name() {
49 return 'constants';
50 }
51
52 /**
53 * Initialize constants action listeners.
54 *
55 * @access public
56 *
57 * @param callable $callable Action handler callable.
58 */
59 public function init_listeners( $callable ) {
60 add_action( 'jetpack_sync_constant', $callable, 10, 2 );
61 }
62
63 /**
64 * Initialize constants action listeners for full sync.
65 *
66 * @access public
67 *
68 * @param callable $callable Action handler callable.
69 */
70 public function init_full_sync_listeners( $callable ) {
71 add_action( 'jetpack_full_sync_constants', $callable );
72 }
73
74 /**
75 * Initialize the module in the sender.
76 *
77 * @access public
78 */
79 public function init_before_send() {
80 add_action( 'jetpack_sync_before_send_queue_sync', array( $this, 'maybe_sync_constants' ) );
81
82 // Full sync.
83 add_filter( 'jetpack_sync_before_send_jetpack_full_sync_constants', array( $this, 'expand_constants' ) );
84 }
85
86 /**
87 * Perform module cleanup.
88 * Deletes any transients and options that this module uses.
89 * Usually triggered when uninstalling the plugin.
90 *
91 * @access public
92 */
93 public function reset_data() {
94 delete_option( self::CONSTANTS_CHECKSUM_OPTION_NAME );
95 delete_transient( self::CONSTANTS_AWAIT_TRANSIENT_NAME );
96 }
97
98 /**
99 * Set the constants whitelist.
100 *
101 * @access public
102 * @todo We don't seem to use this one. Should we remove it?
103 *
104 * @param array $constants The new constants whitelist.
105 */
106 public function set_constants_whitelist( $constants ) {
107 $this->constants_whitelist = $constants;
108 }
109
110 /**
111 * Get the constants whitelist.
112 *
113 * @access public
114 *
115 * @return array The constants whitelist.
116 */
117 public function get_constants_whitelist() {
118 return Defaults::get_constants_whitelist();
119 }
120
121 /**
122 * Enqueue the constants actions for full sync.
123 *
124 * @access public
125 *
126 * @param array $config Full sync configuration for this sync module.
127 * @param int $max_items_to_enqueue Maximum number of items to enqueue.
128 * @param boolean $state True if full sync has finished enqueueing this module, false otherwise.
129 *
130 * @return array Number of actions enqueued, and next module state.
131 */
132 public function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
133 /**
134 * Tells the client to sync all constants to the server
135 *
136 * @param boolean Whether to expand constants (should always be true)
137 *
138 * @since 1.6.3
139 * @since-jetpack 4.2.0
140 */
141 do_action( 'jetpack_full_sync_constants', true );
142
143 // The number of actions enqueued, and next module state (true == done).
144 return array( 1, true );
145 }
146
147 /**
148 * Send the constants actions for full sync.
149 *
150 * @access public
151 *
152 * @param array $config Full sync configuration for this sync module.
153 * @param array $status This module Full Sync status.
154 * @param int $send_until The timestamp until the current request can send.
155 * @param int $started The timestamp when the full sync started.
156 *
157 * @return array This module Full Sync status.
158 */
159 public function send_full_sync_actions( $config, $status, $send_until, $started ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
160 // we call this instead of do_action when sending immediately.
161 $result = $this->send_action( 'jetpack_full_sync_constants', array( true ) );
162
163 if ( is_wp_error( $result ) ) {
164 $status['error'] = true;
165 return $status;
166 }
167 $status['finished'] = true;
168 $status['sent'] = $status['total'];
169 return $status;
170 }
171
172 /**
173 * Retrieve an estimated number of actions that will be enqueued.
174 *
175 * @access public
176 *
177 * @param array $config Full sync configuration for this sync module.
178 *
179 * @return int Number of items yet to be enqueued.
180 */
181 public function estimate_full_sync_actions( $config ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
182 return 1;
183 }
184
185 /**
186 * Retrieve the actions that will be sent for this module during a full sync.
187 *
188 * @access public
189 *
190 * @return array Full sync actions of this module.
191 */
192 public function get_full_sync_actions() {
193 return array( 'jetpack_full_sync_constants' );
194 }
195
196 /**
197 * Sync the constants if we're supposed to.
198 *
199 * @access public
200 */
201 public function maybe_sync_constants() {
202 if ( get_transient( self::CONSTANTS_AWAIT_TRANSIENT_NAME ) ) {
203 return;
204 }
205
206 set_transient( self::CONSTANTS_AWAIT_TRANSIENT_NAME, microtime( true ), Defaults::$default_sync_constants_wait_time );
207
208 $constants = $this->get_all_constants();
209 if ( empty( $constants ) ) {
210 return;
211 }
212
213 $constants_checksums = (array) get_option( self::CONSTANTS_CHECKSUM_OPTION_NAME, array() );
214
215 foreach ( $constants as $name => $value ) {
216 $checksum = $this->get_check_sum( $value );
217 // Explicitly not using Identical comparison as get_option returns a string.
218 if ( ! $this->still_valid_checksum( $constants_checksums, $name, $checksum ) && $value !== null ) {
219 /**
220 * Tells the client to sync a constant to the server
221 *
222 * @param string The name of the constant
223 * @param mixed The value of the constant
224 *
225 * @since 1.6.3
226 * @since-jetpack 4.2.0
227 */
228 do_action( 'jetpack_sync_constant', $name, $value );
229 $constants_checksums[ $name ] = $checksum;
230 } else {
231 $constants_checksums[ $name ] = $checksum;
232 }
233 }
234 update_option( self::CONSTANTS_CHECKSUM_OPTION_NAME, $constants_checksums );
235 }
236
237 /**
238 * Retrieve all constants as per the current constants whitelist.
239 * Public so that we don't have to store an option for each constant.
240 *
241 * @access public
242 *
243 * @return array All constants.
244 */
245 public function get_all_constants() {
246 $constants_whitelist = $this->get_constants_whitelist();
247
248 return array_combine(
249 $constants_whitelist,
250 array_map( array( $this, 'get_constant' ), $constants_whitelist )
251 );
252 }
253
254 /**
255 * Retrieve the value of a constant.
256 * Used as a wrapper to standartize access to constants.
257 *
258 * @access private
259 *
260 * @param string $constant Constant name.
261 *
262 * @return mixed Return value of the constant.
263 */
264 private function get_constant( $constant ) {
265 return ( defined( $constant ) ) ?
266 constant( $constant )
267 : null;
268 }
269
270 /**
271 * Expand the constants within a hook before they are serialized and sent to the server.
272 *
273 * @access public
274 *
275 * @param array $args The hook parameters.
276 *
277 * @return array $args The hook parameters.
278 */
279 public function expand_constants( $args ) {
280 if ( $args[0] ) {
281 $constants = $this->get_all_constants();
282 $constants_checksums = array();
283 foreach ( $constants as $name => $value ) {
284 $constants_checksums[ $name ] = $this->get_check_sum( $value );
285 }
286 update_option( self::CONSTANTS_CHECKSUM_OPTION_NAME, $constants_checksums );
287
288 return $constants;
289 }
290
291 return $args;
292 }
293
294 /**
295 * Return Total number of objects.
296 *
297 * @param array $config Full Sync config.
298 *
299 * @return int total
300 */
301 public function total( $config ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
302 return count( $this->get_constants_whitelist() );
303 }
304
305 /**
306 * Retrieve a set of constants by their IDs.
307 *
308 * @access public
309 *
310 * @param string $object_type Object type.
311 * @param array $ids Object IDs.
312 * @return array Array of objects.
313 */
314 public function get_objects_by_id( $object_type, $ids ) {
315 if ( empty( $ids ) || empty( $object_type ) || 'constant' !== $object_type ) {
316 return array();
317 }
318
319 $objects = array();
320 foreach ( (array) $ids as $id ) {
321 $object = $this->get_object_by_id( $object_type, $id );
322
323 if ( 'all' === $id ) {
324 // If all was requested it contains all options and can simply be returned.
325 return $object;
326 }
327 $objects[ $id ] = $object;
328 }
329
330 return $objects;
331 }
332
333 /**
334 * Retrieve a constant by its name.
335 *
336 * @access public
337 *
338 * @param string $object_type Type of the sync object.
339 * @param string $id ID of the sync object.
340 * @return mixed Value of Constant.
341 */
342 public function get_object_by_id( $object_type, $id ) {
343 if ( 'constant' === $object_type ) {
344
345 // Only whitelisted constants can be returned.
346 if ( in_array( $id, $this->get_constants_whitelist(), true ) ) {
347 return $this->get_constant( $id );
348 } elseif ( 'all' === $id ) {
349 return $this->get_all_constants();
350 }
351 }
352
353 return false;
354 }
355 }
356