Completed
Push — add/sync-rest-2 ( 9c3d4f...7be2db )
by
unknown
439:01 queued 429:49
created

Jetpack_Sync_Client::action_handler()   D

Complexity

Conditions 9
Paths 5

Size

Total Lines 33
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 16
Bugs 2 Features 5
Metric Value
c 16
b 2
f 5
dl 0
loc 33
rs 4.909
cc 9
eloc 18
nc 5
nop 0
1
<?php
2
require_once dirname( __FILE__ ) . '/class.jetpack-sync-deflate-codec.php';
3
require_once dirname( __FILE__ ) . '/class.jetpack-sync-queue.php';
4
require_once dirname( __FILE__ ) . '/class.jetpack-sync-functions.php';
5
require_once dirname( __FILE__ ) . '/class.jetpack-sync-full.php';
6
7
class Jetpack_Sync_Client {
8
	static $default_options_whitelist = array( 
0 ignored issues
show
Coding Style introduced by
The visibility should be declared for property $default_options_whitelist.

The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using

class A {
    var $property;
}

the property is implicitly global.

To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.

Loading history...
9
		'stylesheet', 
10
		'/^theme_mods_.*$/',
11
		'blogname',
12
		'home',
13
		'siteurl',
14
		'blogdescription',
15
		'blog_charset',
16
		'permalink_structure',
17
		'category_base',
18
		'tag_base',
19
		'comment_moderation',
20
		'default_comment_status',
21
		'thread_comments',
22
		'thread_comments_depth',
23
		'jetpack_site_icon_url',
24
		'social_notifications_like',
25
		'page_on_front',
26
		'rss_use_excerpt',
27
		'subscription_options',
28
		'stb_enabled',
29
		'stc_enabled',
30
		'comment_registration',
31
		'require_name_email',
32
		'show_avatars',
33
		'avatar_default',
34
		'avatar_rating',
35
		'highlander_comment_form_prompt',
36
		'jetpack_comment_form_color_scheme',
37
		'stats_options',
38
		'gmt_offset',
39
		'timezone_string',
40
		'jetpack_sync_non_public_post_stati',
41
		'jetpack_options',
42
		'site_icon', // (int) - ID of core's Site Icon attachment ID
43
		'default_post_format',
44
		'default_category',
45
		'large_size_w',
46
		'large_size_h',
47
		'thumbnail_size_w',
48
		'thumbnail_size_h',
49
		'medium_size_w',
50
		'medium_size_h',
51
		'thumbnail_crop',
52
		'image_default_link_type',
53
		'site_logo',
54
		'sharing-options',
55
		'sharing-services',
56
		'post_count',
57
		'default_ping_status',
58
		'sticky_posts',
59
		'disabled_likes',
60
		'blog_public',
61
		'default_pingback_flag',
62
		'require_name_email',
63
		'close_comments_for_old_posts',
64
		'close_comments_days_old',
65
		'thread_comments',
66
		'thread_comments_depth',
67
		'page_comments',
68
		'comments_per_page',
69
		'default_comments_page',
70
		'comment_order',
71
		'comments_notify',
72
		'moderation_notify',
73
		'social_notifications_like',
74
		'social_notifications_reblog',
75
		'social_notifications_subscribe',
76
		'comment_whitelist',
77
		'comment_max_links',
78
		'moderation_keys',
79
		'blacklist_keys',
80
		'lang_id',
81
		'wga',
82
		'disabled_likes',
83
		'disabled_reblogs',
84
		'jetpack_comment_likes_enabled',
85
		'twitter_via',
86
		'twitter-cards-site-tag' );
87
88
	static $default_constants_whitelist = array(
0 ignored issues
show
Coding Style introduced by
The visibility should be declared for property $default_constants_whitelist.

The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using

class A {
    var $property;
}

the property is implicitly global.

To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.

Loading history...
89
		'EMPTY_TRASH_DAYS',
90
		'WP_POST_REVISIONS',
91
		'AUTOMATIC_UPDATER_DISABLED',
92
		'ABSPATH',
93
		'WP_CONTENT_DIR',
94
		'FS_METHOD',
95
		'DISALLOW_FILE_EDIT',
96
		'DISALLOW_FILE_MODS',
97
		'WP_AUTO_UPDATE_CORE',
98
		'WP_HTTP_BLOCK_EXTERNAL',
99
		'WP_ACCESSIBLE_HOSTS',
100
		'JETPACK__VERSION'
101
	);
102
103
	static $default_callable_whitelist = array(
0 ignored issues
show
Coding Style introduced by
The visibility should be declared for property $default_callable_whitelist.

The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using

class A {
    var $property;
}

the property is implicitly global.

To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.

Loading history...
104
		'wp_max_upload_size' => 'wp_max_upload_size',
105
		'is_main_network' => array( 'Jetpack', 'is_multi_network' ),
106
		'is_multi_site' => 'is_multisite',
107
		'main_network_site' => 'network_site_url',
108
		'single_user_site' => array( 'Jetpack', 'is_single_user_site' ),
109
		'has_file_system_write_access' => array( 'Jetpack_Sync_Functions', 'file_system_write_access' ),
110
		'is_version_controlled' => array( 'Jetpack_Sync_Functions', 'is_version_controlled' ),
111
		'modules' => array( 'Jetpack_Sync_Functions', 'get_modules' )
112
	);
113
114
	static $default_multisite_callable_whitelist = array(
0 ignored issues
show
Coding Style introduced by
The visibility should be declared for property $default_multisite_callable_whitelist.

The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using

class A {
    var $property;
}

the property is implicitly global.

To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.

Loading history...
115
		'network_name'                        => array( 'Jetpack', 'network_name' ),
116
		'network_allow_new_registrations'     => array( 'Jetpack', 'network_allow_new_registrations' ),
117
		'network_add_new_users'               => array( 'Jetpack', 'network_add_new_users' ),
118
		'network_site_upload_space'           => array( 'Jetpack', 'network_site_upload_space' ),
119
		'network_upload_file_types'           => array( 'Jetpack', 'network_upload_file_types' ),
120
		'network_enable_administration_menus' => array( 'Jetpack', 'network_enable_administration_menus' ),
121
	);
122
123
	// TODO: move this to server? - these are theme support values
0 ignored issues
show
Coding Style Best Practice introduced by
Comments for TODO tasks are often forgotten in the code; it might be better to use a dedicated issue tracker.
Loading history...
124
	// that should be synced as jetpack_current_theme_supports_foo option values
125
	static $default_theme_support_whitelist = array(
0 ignored issues
show
Coding Style introduced by
The visibility should be declared for property $default_theme_support_whitelist.

The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using

class A {
    var $property;
}

the property is implicitly global.

To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.

Loading history...
126
		'post-thumbnails',          
127
		'post-formats',
128
		'custom-header',
129
		'custom-background',
130
		'custom-logo',
131
		'menus',
132
		'automatic-feed-links',
133
		'editor-style',
134
		'widgets',
135
		'html5',
136
		'title-tag',
137
		'jetpack-social-menu',
138
		'jetpack-responsive-videos',
139
		'infinite-scroll',
140
		'site-logo',
141
	);
142
143
	static $default_network_options_whitelist = array( 'site_name' );
0 ignored issues
show
Coding Style introduced by
The visibility should be declared for property $default_network_options_whitelist.

The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using

class A {
    var $property;
}

the property is implicitly global.

To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.

Loading history...
144
	static $constants_checksum_option_name = 'jetpack_constants_sync_checksum';
0 ignored issues
show
Coding Style introduced by
The visibility should be declared for property $constants_checksum_option_name.

The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using

class A {
    var $property;
}

the property is implicitly global.

To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.

Loading history...
145
	static $functions_checksum_option_name = 'jetpack_functions_sync_checksum';
0 ignored issues
show
Coding Style introduced by
The visibility should be declared for property $functions_checksum_option_name.

The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using

class A {
    var $property;
}

the property is implicitly global.

To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.

Loading history...
146
	static $default_send_buffer_size = 20;
0 ignored issues
show
Coding Style introduced by
The visibility should be declared for property $default_send_buffer_size.

The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using

class A {
    var $property;
}

the property is implicitly global.

To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.

Loading history...
147
	static $default_taxonomy_whitelist = array();
0 ignored issues
show
Coding Style introduced by
The visibility should be declared for property $default_taxonomy_whitelist.

The PSR-2 coding standard requires that all properties in a class have their visibility explicitly declared. If you declare a property using

class A {
    var $property;
}

the property is implicitly global.

To learn more about the PSR-2, please see the PHP-FIG site on the PSR-2.

Loading history...
148
149
	private $sync_queue;
150
	private $full_sync_client;
151
	private $codec;
152
	private $options_whitelist;
153
	private $constants_whitelist;
154
	private $meta_types = array( 'post' );
155
	private $callable_whitelist;
156
	private $network_options_whitelist;
157
	private $taxonomy_whitelist;
158
159
	// singleton functions
160
	private static $instance;
161
162
	public static function getInstance() {
163
		if ( null === self::$instance ) {
164
			self::$instance = new self();
165
		}
166
167
		return self::$instance;
168
	}
169
170
	// this is necessary because you can't use "new" when you declare instance properties >:(
171
	protected function __construct() {
172
		$this->set_defaults();
173
		$this->init();
174
	}
175
176
	private function init() {
177
178
		$handler = array( $this, 'action_handler' );
179
180
		// constants
181
		add_action( 'jetpack_sync_current_constants', $handler, 10 );
182
183
		// functions
184
		add_action( 'jetpack_sync_current_callables', $handler, 10 );
185
186
		// posts
187
		add_action( 'wp_insert_post', $handler, 10, 3 );
188
		add_action( 'deleted_post', $handler, 10 );
189
190
		// comments
191
		add_action( 'wp_insert_comment', $handler, 10, 2 );
192
		add_action( 'deleted_comment', $handler, 10 );
193
		add_action( 'trashed_comment', $handler, 10 );
194
		add_action( 'spammed_comment', $handler, 10 );
195
196
		// even though it's messy, we implement these hooks because 
197
		// the edit_comment hook doesn't include the data
198
		// so this saves us a DB read for every comment event
199
		foreach ( array( '', 'trackback', 'pingback' ) as $comment_type ) {
200
			foreach ( array( 'unapproved', 'approved' ) as $comment_status ) {
201
				add_action( "comment_{$comment_status}_{$comment_type}", $handler, 10, 2 );
202
			}
203
		}
204
205
		// options
206
		add_action( 'added_option', $handler, 10, 2 );
207
		add_action( 'updated_option', $handler, 10, 3 );
208
		add_action( 'deleted_option', $handler, 10, 1 );
209
210
		// Sync Core Icon: Detect changes in Core's Site Icon and make it syncable.
211
		add_action( 'add_option_site_icon',    array( $this, 'jetpack_sync_core_icon' ) );
212
		add_action( 'update_option_site_icon', array( $this, 'jetpack_sync_core_icon' ) );
213
		add_action( 'delete_option_site_icon', array( $this, 'jetpack_sync_core_icon' ) );
214
215
		// wordpress version
216
		add_action( 'upgrader_process_complete', array( $this, 'send_wp_version' ), 10, 2 );
217
		add_action( 'jetpack_sync_wp_version', $handler );
218
		// themes
219
		add_action( 'switch_theme', array( $this, 'send_theme_info' ) );
220
		add_action( 'jetpack_sync_current_theme_support', $handler, 10 ); // custom hook, see meta-hooks below
221
222
		// post-meta, and in the future - other meta?
223
		foreach ( $this->meta_types as $meta_type ) {
224
			// we need to make sure we don't commit before we receive these,
225
			// because they're invoked after meta changes are saved to the DB
226
			add_action( "added_{$meta_type}_meta", $handler, 99, 4 );
227
			add_action( "updated_{$meta_type}_meta", $handler, 99, 4 );
228
			add_action( "deleted_{$meta_type}_meta", $handler, 99, 4 );
229
		}
230
231
		// synthetic actions for full sync
232
		add_action( 'jp_full_sync_start', $handler );
233
		add_action( 'jp_full_sync_posts', $handler );
234
		add_action( 'jp_full_sync_comments', $handler );
235
		add_action( 'jp_full_sync_option', $handler, 10, 2 );
236
		add_action( 'jp_full_sync_postmeta', $handler, 10, 2 );
237
238
		/**
239
		 * Other hooks - fire synthetic hooks for all the properties we need to sync,
240
		 * e.g. when a theme changes
241
		 */
242
243
		// themes
244
		add_action( 'set_site_transient_update_plugins', $handler, 10, 1 );
245
		add_action( 'set_site_transient_update_themes', $handler, 10, 1 );
246
		add_action( 'set_site_transient_update_core', $handler, 10, 1 );
247
248
		// multi site network options
249
		if ( $this->is_multisite ) {
0 ignored issues
show
Bug introduced by
The property is_multisite does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
250
			add_action( 'add_site_option', $handler, 10, 2 );
251
			add_action( 'update_site_option', $handler, 10, 3 );
252
			add_action( 'delete_site_option', $handler, 10, 1 );
253
		}
254
255
256
		/**
257
		 * Sync all pending actions with server
258
		 */
259
		add_action( 'jetpack_sync_actions', array( $this, 'do_sync' ) );
260
261
		// terms
262
		add_action( 'created_term', array( $this, 'save_term_handler' ), 10, 3 );
263
		add_action( 'edited_term', array( $this, 'save_term_handler' ), 10, 3 );
264
		add_action( 'jetapack_sync_save_term', $handler, 10, 4 );
265
		add_action( 'delete_term', $handler, 10, 5 );
266
267
		// users
268
		add_action( 'user_register', array( $this, 'save_user_handler' ) );
269
		add_action( 'profile_update', array( $this, 'save_user_handler' ), 10, 2 );
270
		add_action( 'jetapack_sync_save_user', $handler, 10, 2 );
271
		add_action( 'deleted_user', $handler, 10 ,2 );
272
	}
273
274
	// TODO: Refactor to use one set whitelist function, with one is_whitelisted.
0 ignored issues
show
Coding Style Best Practice introduced by
Comments for TODO tasks are often forgotten in the code; it might be better to use a dedicated issue tracker.
Loading history...
275
	function set_options_whitelist( $options ) {
276
		$this->options_whitelist = $options;
277
	}
278
279
	function set_constants_whitelist( $constants ) {
280
		$this->constants_whitelist = $constants;
281
	}
282
283
	function get_callable_whitelist( $functions ) {
0 ignored issues
show
Unused Code introduced by
The parameter $functions is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
284
		return $this->callable_whitelist;
285
	}
286
287
	function set_callable_whitelist( $functions ) {
288
		$this->callable_whitelist = $functions;
289
	}
290
291
	function set_network_options_whitelist( $options ) {
292
		$this->network_options_whitelist = $options;
293
	}
294
295
	function set_send_buffer_size( $size ) {
296
		$this->sync_queue->set_checkout_size( $size );
297
	}
298
299
	function set_taxonomy_whitelist( $taxonomies ) {
300
		$this->taxonomy_whitelist = $taxonomies;
301
	}
302
303
	function is_whitelisted_option( $option ) {
304
		foreach ( $this->options_whitelist as $whitelisted_option ) {
305
			if ( $whitelisted_option[0] === '/' && preg_match( $whitelisted_option, $option ) ) {
306
				return true;
307
			} elseif ( $whitelisted_option === $option ) {
308
				return true;
309
			}
310
		}
311
312
		return false;
313
	}
314
315
	function is_whitelisted_network_option( $option ) {
316
		return $this->is_multisite && in_array( $option, $this->network_options_whitelist );
317
	}
318
319
	function set_codec( iJetpack_Sync_Codec $codec ) {
320
		$this->codec = $codec;
321
	}
322
323
	function set_full_sync_client( $full_sync_client ) {
324
		if ( $this->full_sync_client ) {
325
			remove_action( 'jetpack_sync_full', array( $this->full_sync_client, 'start' ) );
326
		}
327
328
		$this->full_sync_client = $full_sync_client;
329
330
		/**
331
		 * Sync all objects in the database with the server
332
		 */
333
		add_action( 'jetpack_sync_full', array( $this->full_sync_client, 'start' ) );
334
	}
335
336
	function action_handler() {
337
		// TODO: it's really silly to have this function here - it should be
0 ignored issues
show
Coding Style Best Practice introduced by
Comments for TODO tasks are often forgotten in the code; it might be better to use a dedicated issue tracker.
Loading history...
338
		// wherever we initialize the action listeners or we're just wasting cycles
339
		if ( Jetpack::is_development_mode() || Jetpack::is_staging_site() ) {
340
			return false;
341
		}
342
343
		$current_filter = current_filter();
344
		$args           = func_get_args();
345
346
		if ( $current_filter === 'wp_insert_post' && $args[1]->post_type === 'revision' ) {
347
			return;
348
		}
349
350
		if ( in_array( $current_filter, array( 'deleted_option', 'added_option', 'updated_option' ) )
351
		     &&
352
		     ! $this->is_whitelisted_option( $args[0] )
353
		) {
354
			return;
355
		}
356
357
		if ( in_array( $current_filter, array( 'delete_site_option', 'add_site_option', 'update_site_option' ) )
358
		     &&
359
		     ! $this->is_whitelisted_network_option( $args[0] )
360
		) {
361
			return;
362
		}
363
364
		$this->sync_queue->add( array(
365
			$current_filter,
366
			$args
367
		) );
368
	}
369
370
	function send_theme_info() {
371
		global $_wp_theme_features;
372
		do_action( 'jetpack_sync_current_theme_support', $_wp_theme_features );
373
	}
374
375
	function send_wp_version( $update, $meta_data ) {
376
		if ( 'update' === $meta_data['action'] && 'core' === $meta_data['type'] ) {
377
			global $wp_version;
378
			do_action( 'jetpack_sync_wp_version', $wp_version );
379
		}
380
	}
381
382
	function save_term_handler( $term_id, $tt_id, $taxonomy ) {
383
		$term_object = WP_Term::get_instance( $term_id, $taxonomy );
384
		do_action( 'jetapack_sync_save_term', $term_id, $tt_id, $taxonomy, $term_object );
385
	}
386
387
	function save_user_handler( $user_id, $old_user_data = null ) {
388
		$user = get_user_by( 'id', $user_id );
389
		unset( $user->data->user_pass );
390
		if ( $old_user_data !== null ) {
391
			unset( $old_user_data->data->user_pass );
392
			if ( json_encode( $old_user_data->data ) === json_encode( $user->data ) ) {
393
				return;
394
			}
395
		}
396
		do_action( 'jetapack_sync_save_user', $user_id, $user );
397
	}
398
	function do_sync() {
399
		if ( defined( 'WP_IMPORTING' ) && WP_IMPORTING ) {
400
			$this->schedule_sync( "+1 minute" );
401
402
			return false;
403
		}
404
405
		$this->maybe_sync_constants();
406
		$this->maybe_sync_callables();
407
408
		$buffer = $this->sync_queue->checkout();
409
410
		if ( ! $buffer ) {
411
			// buffer has no items
412
			return;
413
		}
414
415
		if ( is_wp_error( $buffer ) ) {
416
			error_log( "Error fetching buffer: " . $buffer->get_error_message() );
0 ignored issues
show
Bug introduced by
The method get_error_message() does not seem to exist on object<Jetpack_Sync_Queue_Buffer>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
417
418
			return;
419
		}
420
421
		$data = $this->codec->encode( $buffer->get_items() );
422
423
		/**
424
		 * Fires when data is ready to send to the server.
425
		 * Return false or WP_Error to abort the sync (e.g. if there's an error)
426
		 * The items will be automatically re-sent later
427
		 *
428
		 * @since 4.1
429
		 *
430
		 * @param array $data The action buffer
431
		 */
432
		$result = apply_filters( 'jetpack_sync_client_send_data', $data );
433
434
		if ( ! $result || is_wp_error( $result ) ) {
435
			$this->sync_queue->checkin( $buffer );
436
			// try again in 1 minute
437
			$this->schedule_sync( "+1 minute" );
438
		} else {
439
			$this->sync_queue->close( $buffer );
440
			// check if there are any more events in the buffer
441
			// if so, schedule a cron job to happen soon
442
			if ( $this->sync_queue->has_any_items() ) {
443
				$this->schedule_sync( "+1 minute" );
444
			}
445
		}
446
	}
447
448
449
	private function schedule_sync( $when ) {
450
		wp_schedule_single_event( strtotime( $when ), 'jetpack_sync_actions' );
451
	}
452
453
	function force_sync_constants() {
454
		delete_option( self::$constants_checksum_option_name );
455
		$this->maybe_sync_constants();
456
	}
457
458 View Code Duplication
	private function maybe_sync_constants() {
459
		$constants = $this->get_all_constants();
460
		if ( empty( $constants ) ) {
461
			return;
462
		}
463
		$constants_check_sum = $this->get_check_sum( $constants );
464
		if ( $constants_check_sum !== get_option( self::$constants_checksum_option_name ) ) {
465
			do_action( 'jetpack_sync_current_constants', $constants );
466
			update_option( self::$constants_checksum_option_name, $constants_check_sum );
467
		}
468
	}
469
470
	private function get_all_constants() {
471
		return array_combine(
472
			$this->constants_whitelist,
473
			array_map( array( $this, 'get_constant' ), $this->constants_whitelist )
474
		);
475
	}
476
477
	private function get_constant( $constant ) {
478
		if ( defined( $constant ) ) {
479
			return constant( $constant );
480
		}
481
482
		return null;
483
	}
484
485
	public function force_sync_callables() {
486
		delete_option( self::$functions_checksum_option_name );
487
		$this->maybe_sync_callables();
488
	}
489
490 View Code Duplication
	private function maybe_sync_callables() {
491
		$callables = $this->get_all_callables();
492
		if ( empty( $callables ) ) {
493
			return;
494
		}
495
		$callables_check_sum = $this->get_check_sum( $callables );
496
497
		if ( $callables_check_sum !== get_option( self::$functions_checksum_option_name ) ) {
498
			do_action( 'jetpack_sync_current_callables', $callables );
499
			update_option( self::$functions_checksum_option_name, $callables_check_sum );
500
		}
501
	}
502
503
	private function get_all_callables() {
504
		return array_combine(
505
			array_keys( $this->callable_whitelist ),
506
			array_map( array( $this, 'get_callable' ), array_values( $this->callable_whitelist ) )
507
		);
508
	}
509
510
	private function get_callable( $callable ) {
511
		return call_user_func( $callable );
512
	}
513
514
	private function get_check_sum( $values ) {
515
		return crc32( serialize( $values ) );
516
	}
517
518
	function jetpack_sync_core_icon() {
519
		error_log("syncing core icon");
520
		if ( function_exists( 'get_site_icon_url' ) ) {
521
			$url = get_site_icon_url();
522
		} else {
523
			return;
524
		}
525
526
		require_once( JETPACK__PLUGIN_DIR . 'modules/site-icon/site-icon-functions.php' );
527
		// If there's a core icon, maybe update the option.  If not, fall back to Jetpack's.
528
		if ( ! empty( $url ) && $url !== jetpack_site_icon_url() ) {
529
			// This is the option that is synced with dotcom
530
			Jetpack_Options::update_option( 'site_icon_url', $url );
531
		} else if ( empty( $url ) && did_action( 'delete_option_site_icon' ) ) {
532
			Jetpack_Options::delete_option( 'site_icon_url' );
533
		}
534
	}
535
536
	function get_sync_queue() {
537
		return $this->sync_queue;
538
	}
539
540
	function reset_sync_queue() {
541
		$this->sync_queue->reset();
542
	}
543
544
	function set_defaults() {
545
		$this->sync_queue = new Jetpack_Sync_Queue( 'sync', self::$default_send_buffer_size );
546
		$this->set_full_sync_client( new Jetpack_Sync_Full( $this->sync_queue ) );
0 ignored issues
show
Unused Code introduced by
The call to Jetpack_Sync_Full::__construct() has too many arguments starting with $this->sync_queue.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
547
		$this->codec                     = new Jetpack_Sync_Deflate_Codec();
548
		$this->constants_whitelist       = self::$default_constants_whitelist;
549
		$this->options_whitelist         = self::$default_options_whitelist;
550
		$this->network_options_whitelist = self::$default_network_options_whitelist;
551
		$this->taxonomy_whitelist        = self::$default_taxonomy_whitelist;
552
		$this->is_multisite              = is_multisite();
553
554
		if ( $this->is_multisite ) {
555
			$this->callable_whitelist = array_merge( self::$default_callable_whitelist, self::$default_multisite_callable_whitelist );
556
		} else {
557
			$this->callable_whitelist = self::$default_callable_whitelist;
558
		}
559
	}
560
561
	function reset_data() {
562
		delete_option( self::$constants_checksum_option_name );
563
		$this->reset_sync_queue();
564
	}
565
}