Completed
Push — add/double-encode-message ( 8b6530...2d4e84 )
by
unknown
14:26 queued 05:57
created

Jetpack_Likes::is_likes_visible()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Module Name: Likes
4
 * Module Description: Give visitors an easy way to show they appreciate your content.
5
 * First Introduced: 2.2
6
 * Sort Order: 23
7
 * Requires Connection: Yes
8
 * Auto Activate: No
9
 * Module Tags: Social
10
 * Feature: Engagement
11
 * Additional Search Queries: like, likes, wordpress.com
12
 */
13
14
Jetpack::dns_prefetch( array(
15
	'//widgets.wp.com',
16
	'//s0.wp.com',
17
	'//0.gravatar.com',
18
	'//1.gravatar.com',
19
	'//2.gravatar.com',
20
) );
21
22
include_once dirname( __FILE__ ) . '/likes/jetpack-likes-master-iframe.php';
23
include_once dirname( __FILE__ ) . '/likes/jetpack-likes-settings.php';
24
25
class Jetpack_Likes {
26
	public static function init() {
27
		static $instance = NULL;
28
29
		if ( ! $instance ) {
30
			$instance = new Jetpack_Likes;
31
		}
32
33
		return $instance;
34
	}
35
36
	function __construct() {
37
		$this->in_jetpack = ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ? false : true;
0 ignored issues
show
Bug introduced by
The property in_jetpack 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...
38
		$this->settings = new Jetpack_Likes_Settings();
0 ignored issues
show
Bug introduced by
The property settings 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...
39
40
		// We need to run on wp hook rather than init because we check is_amp_endpoint()
41
		// when bootstrapping hooks
42
		add_action( 'wp', array( &$this, 'action_init' ), 99 );
43
44
		add_action( 'admin_init', array( $this, 'admin_init' ) );
45
46
		if ( $this->in_jetpack ) {
47
			add_action( 'jetpack_activate_module_likes',   array( $this, 'set_social_notifications_like' ) );
48
			add_action( 'jetpack_deactivate_module_likes', array( $this, 'delete_social_notifications_like' ) );
49
50
			Jetpack::enable_module_configurable( __FILE__ );
51
			Jetpack::module_configuration_load( __FILE__, array( $this, 'configuration_redirect' ) );
52
			add_filter( 'jetpack_module_configuration_url_likes', array( $this, 'jetpack_likes_configuration_url' ) );
53
54
			add_action( 'admin_print_scripts-settings_page_sharing', array( &$this, 'load_jp_css' ) );
55
			add_filter( 'sharing_show_buttons_on_row_start', array( $this, 'configuration_target_area' ) );
56
57
			$active = Jetpack::get_active_modules();
58
59 View Code Duplication
			if ( ! in_array( 'sharedaddy', $active ) && ! in_array( 'publicize', $active ) ) {
60
				// we don't have a sharing page yet
61
				add_action( 'admin_menu', array( $this->settings, 'sharing_menu' ) );
62
			}
63
64 View Code Duplication
			if ( in_array( 'publicize', $active ) && ! in_array( 'sharedaddy', $active ) ) {
65
				// we have a sharing page but not the global options area
66
				add_action( 'pre_admin_screen_sharing', array( $this->settings, 'sharing_block' ), 20 );
67
				add_action( 'pre_admin_screen_sharing', array( $this->settings, 'updated_message' ), -10 );
68
			}
69
70 View Code Duplication
			if( ! in_array( 'sharedaddy', $active ) ) {
71
				add_action( 'admin_init', array( $this->settings, 'process_update_requests_if_sharedaddy_not_loaded' ) );
72
				add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_showbuttonon_init' ), 19 );
73
				add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_showbuttonon_callback' ), 19 );
74
				add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
75
			} else {
76
				add_filter( 'sharing_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
77
				add_action( 'start_sharing_meta_box_content', array( $this->settings, 'meta_box_content' ) );
78
			}
79
		} else { // wpcom
80
			add_action( 'wpmu_new_blog', array( $this, 'enable_comment_likes' ), 10, 1 );
81
			add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
82
			add_action( 'end_likes_meta_box_content', array( $this->settings, 'sharing_meta_box_content' ) );
83
			add_filter( 'likes_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
84
		}
85
86
		add_action( 'admin_init', array( $this, 'admin_discussion_likes_settings_init' ) ); // Likes notifications
87
88
		add_action( 'admin_bar_menu', array( $this, 'admin_bar_likes' ), 60 );
89
90
		add_action( 'wp_enqueue_scripts', array( $this, 'load_styles_register_scripts' ) );
91
92
		add_action( 'save_post', array( $this->settings, 'meta_box_save' ) );
93
		add_action( 'edit_attachment', array( $this->settings, 'meta_box_save' ) );
94
		add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_init' ), 20 );
95
		add_action( 'sharing_admin_update',   array( $this->settings, 'admin_settings_callback' ), 20 );
96
	}
97
98
	/**
99
	 * Set the social_notifications_like option to `on` when the Likes module is activated.
100
	 *
101
	 * @since 3.7.0
102
	 *
103
	 * @return null
104
	 */
105
	function set_social_notifications_like() {
106
		update_option( 'social_notifications_like', 'on' );
107
	}
108
109
	/**
110
	 * Delete the social_notifications_like option that was set to `on` on module activation.
111
	 *
112
	 * @since 3.7.0
113
	 *
114
	 * @return null
115
	 */
116
	function delete_social_notifications_like() {
117
		delete_option( 'social_notifications_like' );
118
	}
119
120
	/**
121
	 * Redirects to the likes section of the sharing page.
122
	 */
123
	function configuration_redirect() {
124
		wp_safe_redirect( admin_url( 'options-general.php?page=sharing#likes' ) );
125
		die();
126
	}
127
128
	/**
129
	 * Overrides default configuration url
130
	 *
131
	 * @uses admin_url
132
	 * @return string module settings URL
133
	 */
134
	function jetpack_likes_configuration_url() {
135
		return admin_url( 'options-general.php?page=sharing#likes' );
136
	}
137
138
	/**
139
	 * Loads Jetpack's CSS on the sharing page so we can use .jetpack-targetable
140
	 */
141
	function load_jp_css() {
142
		// Do we really need `admin_styles`? With the new admin UI, it's breaking some bits.
143
		// Jetpack::init()->admin_styles();
144
	}
145
146
	/**
147
	 * Load scripts and styles for front end.
148
	 * @return null
149
	 */
150
	function load_styles_register_scripts() {
151
		if ( $this->in_jetpack ) {
152
			wp_enqueue_style( 'jetpack_likes', plugins_url( 'likes/style.css', __FILE__ ), array(), JETPACK__VERSION );
153
			$this->register_scripts();
154
		}
155
	}
156
157
158
	/**
159
     * Stub for is_post_likeable, since some wpcom functions call this directly on the class
160
	 * Are likes enabled for this post?
161
     *
162
     * @param int $post_id
163
     * @return bool
164
	 */
165
	static function is_post_likeable( $post_id = 0 ) {
166
		_deprecated_function( __METHOD__, 'jetpack-5.4', 'Jetpack_Likes_Settings()->is_post_likeable' );
167
		$settings = new Jetpack_Likes_Settings();
168
		return $settings->is_post_likeable();
169
	}
170
171
	/**
172
	 * Stub for is_likes_visible, since some themes were calling it directly from this class
173
	 *
174
	 * @deprecated 5.4
175
	 * @return bool
176
	 */
177
	function is_likes_visible() {
178
		_deprecated_function( __METHOD__, 'jetpack-5.4', 'Jetpack_Likes_Settings()->is_likes_visible' );
179
180
		$settings = new Jetpack_Likes_Settings();
181
		return $settings->is_likes_visible();
182
	}
183
184
	/**
185
	 * Adds in the jetpack-targetable class so when we visit sharing#likes our like settings get highlighted by a yellow box
186
	 * @param  string $html row heading for the sharedaddy "which page" setting
187
	 * @return string       html with the jetpack-targetable class and likes id. tbody gets closed after the like settings
188
	 */
189
	function configuration_target_area( $html = '' ) {
190
		$html = "<tbody id='likes' class='jetpack-targetable'>" . $html;
191
		return $html;
192
	}
193
194
	/**
195
	  * Options to be added to the discussion page (see also admin_settings_init, etc below for Sharing settings page)
196
	  */
197
198 View Code Duplication
	function admin_discussion_likes_settings_init() {
199
		// Add a temporary section, until we can move the setting out of there and with the rest of the email notification settings
200
		add_settings_section( 'likes-notifications', __( 'Likes Notifications', 'jetpack' ), array( $this, 'admin_discussion_likes_settings_section' ), 'discussion' );
201
		add_settings_field( 'social-notifications', __( 'Email me whenever', 'jetpack' ), array( $this, 'admin_discussion_likes_settings_field' ), 'discussion', 'likes-notifications' );
202
		// Register the setting
203
		register_setting( 'discussion', 'social_notifications_like', array( $this, 'admin_discussion_likes_settings_validate' ) );
204
	}
205
206
	function admin_discussion_likes_settings_section() {
207
		// Atypical usage here.  We emit jquery to move likes notification checkbox to be with the rest of the email notification settings
208
?>
209
	<script type="text/javascript">
210
	jQuery( function( $ )  {
211
		var table = $( '#social_notifications_like' ).parents( 'table:first' ),
212
			header = table.prevAll( 'h2:first' ),
213
			newParent = $( '#moderation_notify' ).parent( 'label' ).parent();
214
215
		if ( !table.length || !header.length || !newParent.length ) {
216
			return;
217
		}
218
219
		newParent.append( '<br/>' ).append( table.end().parent( 'label' ).siblings().andSelf() );
220
		header.remove();
221
		table.remove();
222
	} );
223
	</script>
224
<?php
225
	}
226
227
	function admin_likes_get_option( $option ) {
228
		if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
229
			$option_setting = get_blog_option( get_current_blog_id(), $option, 'on' );
230
		} else {
231
			$option_setting = get_option( $option, 'on' );
232
		}
233
234
		return intval( 'on' == $option_setting );
235
	}
236
237
	function admin_discussion_likes_settings_field() {
238
		$like = $this->admin_likes_get_option( 'social_notifications_like' );
239
?>
240
		<label><input type="checkbox" id="social_notifications_like" name="social_notifications_like" value="1" <?php checked( $like ); ?> /> <?php esc_html_e( 'Someone likes one of my posts', 'jetpack' ); ?></label>
241
<?php
242
	}
243
244
	function admin_discussion_likes_settings_validate( $input ) {
245
		// If it's not set (was unchecked during form submission) or was set to off (during option update), return 'off'.
246
		if ( !$input || 'off' == $input )
247
			return 'off';
248
249
		// Otherwise, return 'on'.
250
		return 'on';
251
	}
252
253
	function admin_init() {
254
		add_filter( 'manage_posts_columns', array( $this, 'add_like_count_column' ) );
255
		add_filter( 'manage_pages_columns', array( $this, 'add_like_count_column' ) );
256
		add_action( 'manage_posts_custom_column', array( $this, 'likes_edit_column' ), 10, 2 );
257
		add_action( 'manage_pages_custom_column', array( $this, 'likes_edit_column' ), 10, 2 );
258
		add_action( 'admin_print_styles-edit.php', array( $this, 'load_admin_css' ) );
259
		add_action( "admin_print_scripts-edit.php", array( $this, 'enqueue_admin_scripts' ) );
260
	}
261
262
	function action_init() {
263
		if ( is_admin() ) {
264
			return;
265
		}
266
267
		if ( ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) ||
268
			 ( defined( 'APP_REQUEST' ) && APP_REQUEST ) ||
269
			 ( defined( 'REST_API_REQUEST' ) && REST_API_REQUEST ) ||
270
			 ( defined( 'COOKIE_AUTH_REQUEST' ) && COOKIE_AUTH_REQUEST ) ||
271
			 ( defined( 'JABBER_SERVER' ) && JABBER_SERVER ) ) {
272
			return;
273
		}
274
275
		if ( Jetpack_AMP_Support::is_amp_request() ) {
276
			return;
277
		}
278
279
		if ( $this->in_jetpack ) {
280
			add_filter( 'the_content', array( &$this, 'post_likes' ), 30, 1 );
281
			add_filter( 'the_excerpt', array( &$this, 'post_likes' ), 30, 1 );
282
283
		} else {
284
			add_filter( 'post_flair', array( &$this, 'post_likes' ), 30, 1 );
285
			add_filter( 'post_flair_block_css', array( $this, 'post_flair_service_enabled_like' ) );
286
287
			wp_enqueue_script( 'postmessage', '/wp-content/js/postmessage.js', array( 'jquery' ), JETPACK__VERSION, false );
288
			wp_enqueue_script( 'jetpack_resize', '/wp-content/js/jquery/jquery.jetpack-resize.js', array( 'jquery' ), JETPACK__VERSION, false );
289
			wp_enqueue_script( 'jetpack_likes_queuehandler', plugins_url( 'queuehandler.js' , __FILE__ ), array( 'jquery', 'postmessage', 'jetpack_resize' ), JETPACK__VERSION, true );
290
			wp_enqueue_style( 'jetpack_likes', plugins_url( 'jetpack-likes.css', __FILE__ ), array(), JETPACK__VERSION );
291
		}
292
	}
293
294
	/**
295
	* Register scripts
296
	*/
297
	function register_scripts() {
298
		wp_register_script(
299
			'postmessage',
300
			Jetpack::get_file_url_for_environment( '_inc/build/postmessage.min.js', '_inc/postmessage.js' ),
301
			array( 'jquery' ),
302
			JETPACK__VERSION,
303
			false
304
		);
305
		wp_register_script(
306
			'jetpack_resize',
307
			Jetpack::get_file_url_for_environment(
308
				'_inc/build/jquery.jetpack-resize.min.js',
309
				'_inc/jquery.jetpack-resize.js'
310
			),
311
			array( 'jquery' ),
312
			JETPACK__VERSION,
313
			false
314
		);
315
		wp_register_script(
316
			'jetpack_likes_queuehandler',
317
			Jetpack::get_file_url_for_environment(
318
				'_inc/build/likes/queuehandler.min.js',
319
				'modules/likes/queuehandler.js'
320
			),
321
			array( 'jquery', 'postmessage', 'jetpack_resize' ),
322
			JETPACK__VERSION,
323
			true
324
		);
325
	}
326
327
	/**
328
	* Load the CSS needed for the wp-admin area.
329
	*/
330
	function load_admin_css() {
331
	?>
332
		<style type="text/css">
333
			.vers img { display: none; }
334
			.metabox-prefs .vers img { display: inline; }
335
			.fixed .column-likes { width: 5.5em; padding: 8px 0; text-align: left; }
336
			.fixed .column-stats { width: 5em; }
337
			.fixed .column-likes .post-com-count {
338
				-webkit-box-sizing: border-box;
339
				-moz-box-sizing: border-box;
340
				box-sizing: border-box;
341
				display: inline-block;
342
				padding: 0 8px;
343
				height: 2em;
344
				margin-top: 5px;
345
				-webkit-border-radius: 5px;
346
				border-radius: 5px;
347
				background-color: #72777C;
348
				color: #FFF;
349
				font-size: 11px;
350
				line-height: 21px;
351
			}
352
			.fixed .column-likes .post-com-count::after { border: none !important; }
353
			.fixed .column-likes .post-com-count:hover { background-color: #0073AA; }
354
			.fixed .column-likes .vers:before {
355
				font: normal 20px/1 dashicons;
356
				content: '\f155';
357
				speak: none;
358
				-webkit-font-smoothing: antialiased;
359
				-moz-osx-font-smoothing: grayscale;
360
			}
361
			@media screen and (max-width: 782px) {
362
				.fixed .column-likes {
363
					display: none;
364
				}
365
			}
366
		</style>
367
		<?php
368
	}
369
370
	/**
371
	* Load the JS required for loading the like counts.
372
	*/
373
	function enqueue_admin_scripts() {
374
		if ( empty( $_GET['post_type'] ) || 'post' == $_GET['post_type'] || 'page' == $_GET['post_type'] ) {
375
			if ( $this->in_jetpack ) {
376
				wp_enqueue_script(
377
					'likes-post-count',
378
					Jetpack::get_file_url_for_environment(
379
						'_inc/build/likes/post-count.min.js',
380
						'modules/likes/post-count.js'
381
					),
382
					array( 'jquery' ),
383
					JETPACK__VERSION
384
				);
385
				wp_enqueue_script(
386
					'likes-post-count-jetpack',
387
					Jetpack::get_file_url_for_environment(
388
						'_inc/build/likes/post-count-jetpack.min.js',
389
						'modules/likes/post-count-jetpack.js'
390
					),
391
					array( 'likes-post-count' ),
392
					JETPACK__VERSION
393
				);
394
			} else {
395
				wp_enqueue_script( 'jquery.wpcom-proxy-request', "/wp-content/js/jquery/jquery.wpcom-proxy-request.js", array('jquery'), NULL, true );
396
				wp_enqueue_script( 'likes-post-count', plugins_url( 'likes/post-count.js', dirname( __FILE__ ) ), array( 'jquery' ), JETPACK__VERSION );
397
				wp_enqueue_script( 'likes-post-count-wpcom', plugins_url( 'likes/post-count-wpcom.js', dirname( __FILE__ ) ), array( 'likes-post-count', 'jquery.wpcom-proxy-request' ), JETPACK__VERSION );
398
			}
399
		}
400
	}
401
402
	/**
403
	* Add "Likes" column data to the post edit table in wp-admin.
404
	*
405
	* @param string $column_name
406
	* @param int $post_id
407
	*/
408
	function likes_edit_column( $column_name, $post_id ) {
409
		if ( 'likes' == $column_name ) {
410
411 View Code Duplication
			if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
412
				$blog_id = get_current_blog_id();
413
			} else {
414
				$blog_id = Jetpack_Options::get_option( 'id' );
415
			}
416
417
			$permalink = get_permalink( get_the_ID() ); ?>
418
			<a title="" data-post-id="<?php echo (int) $post_id; ?>" class="post-com-count post-like-count" id="post-like-count-<?php echo (int) $post_id; ?>" data-blog-id="<?php echo (int) $blog_id; ?>" href="<?php echo esc_url( $permalink ); ?>#like-<?php echo (int) $post_id; ?>">
419
				<span class="comment-count">0</span>
420
			</a>
421
			<?php
422
		}
423
	}
424
425
	/**
426
	* Add a "Likes" column header to the post edit table in wp-admin.
427
	*
428
	* @param array $columns
429
	* @return array
430
	*/
431
	function add_like_count_column( $columns ) {
432
		$date = $columns['date'];
433
		unset( $columns['date'] );
434
435
		$columns['likes'] = '<span class="vers"><img title="' . esc_attr__( 'Likes', 'jetpack' ) . '" alt="' . esc_attr__( 'Likes', 'jetpack' ) . '" src="//s0.wordpress.com/i/like-grey-icon.png" /><span class="screen-reader-text">' . __( 'Likes', 'jetpack' ) . '</span></span>';
436
		$columns['date'] = $date;
437
438
		return $columns;
439
	}
440
441
	function post_likes( $content ) {
442
		$post_id = get_the_ID();
443
444
		if ( ! is_numeric( $post_id ) || ! $this->settings->is_likes_visible() )
445
			return $content;
446
447 View Code Duplication
		if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
448
			$blog_id = get_current_blog_id();
449
			$bloginfo = get_blog_details( (int) $blog_id );
450
			$domain = $bloginfo->domain;
451
		} else {
452
			$blog_id = Jetpack_Options::get_option( 'id' );
453
			$url = home_url();
454
			$url_parts = parse_url( $url );
455
			$domain = $url_parts['host'];
456
		}
457
		// make sure to include the scripts before the iframe otherwise weird things happen
458
		add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
459
460
		/**
461
		* if the same post appears more then once on a page the page goes crazy
462
		* we need a slightly more unique id / name for the widget wrapper.
463
		*/
464
		$uniqid = uniqid();
465
466
		$src = sprintf( 'https://widgets.wp.com/likes/#blog_id=%1$d&amp;post_id=%2$d&amp;origin=%3$s&amp;obj_id=%1$d-%2$d-%4$s', $blog_id, $post_id, $domain, $uniqid );
467
		$name = sprintf( 'like-post-frame-%1$d-%2$d-%3$s', $blog_id, $post_id, $uniqid );
468
		$wrapper = sprintf( 'like-post-wrapper-%1$d-%2$d-%3$s', $blog_id, $post_id, $uniqid );
469
		$headline = sprintf(
470
			/** This filter is already documented in modules/sharedaddy/sharing-service.php */
471
			apply_filters( 'jetpack_sharing_headline_html', '<h3 class="sd-title">%s</h3>', esc_html__( 'Like this:', 'jetpack' ), 'likes' ),
472
			esc_html__( 'Like this:', 'jetpack' )
473
		);
474
475
		$html  = "<div class='sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded' id='$wrapper' data-src='$src' data-name='$name'>";
476
		$html .= $headline;
477
		$html .= "<div class='likes-widget-placeholder post-likes-widget-placeholder' style='height: 55px;'><span class='button'><span>" . esc_html__( 'Like', 'jetpack' ) . '</span></span> <span class="loading">' . esc_html__( 'Loading...', 'jetpack' ) . '</span></div>';
478
		$html .= "<span class='sd-text-color'></span><a class='sd-link-color'></a>";
479
		$html .= '</div>';
480
481
		// Let's make sure that the script is enqueued
482
		wp_enqueue_script( 'jetpack_likes_queuehandler' );
483
484
		return $content . $html;
485
	}
486
487
	function post_flair_service_enabled_like( $classes ) {
488
		$classes[] = 'sd-like-enabled';
489
		return $classes;
490
	}
491
492
	function is_admin_bar_button_visible() {
493
		global $wp_admin_bar;
494
495
		if ( ! is_object( $wp_admin_bar ) )
496
			return false;
497
498
		if ( ( ! is_singular( 'post' ) && ! is_attachment() && ! is_page() ) )
499
			return false;
500
501
		if ( ! $this->settings->is_likes_visible() )
502
			return false;
503
504
		if ( ! $this->settings->is_post_likeable() )
505
			return false;
506
507
		/**
508
		 * Filters whether the Like button is enabled in the admin bar.
509
		 *
510
		 * @module likes
511
		 *
512
		 * @since 2.2.0
513
		 *
514
		 * @param bool true Should the Like button be visible in the Admin bar. Default to true.
515
		 */
516
		return (bool) apply_filters( 'jetpack_admin_bar_likes_enabled', true );
517
	}
518
519
	function admin_bar_likes() {
520
		global $wp_admin_bar;
521
522
		$post_id = get_the_ID();
523
524
		if ( ! is_numeric( $post_id ) || ! $this->is_admin_bar_button_visible() ) {
525
			return;
526
		}
527
528
		$protocol = 'http';
529
		if ( is_ssl() )
530
			$protocol = 'https';
531
532 View Code Duplication
		if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
533
			$blog_id = get_current_blog_id();
534
			$bloginfo = get_blog_details( (int) $blog_id );
535
			$domain = $bloginfo->domain;
536
		} else {
537
			$blog_id = Jetpack_Options::get_option( 'id' );
538
			$url = home_url();
539
			$url_parts = parse_url( $url );
540
			$domain = $url_parts['host'];
541
		}
542
		// make sure to include the scripts before the iframe otherwise weird things happen
543
		add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
544
545
		$src = sprintf( 'https://widgets.wp.com/likes/#blog_id=%2$d&amp;post_id=%3$d&amp;origin=%1$s://%4$s', $protocol, $blog_id, $post_id, $domain );
546
547
		$html = "<iframe class='admin-bar-likes-widget jetpack-likes-widget' scrolling='no' frameBorder='0' name='admin-bar-likes-widget' src='$src'></iframe>";
548
549
		$node = array(
550
				'id'   => 'admin-bar-likes-widget',
551
				'meta' => array(
552
							'html' => $html
553
				)
554
		);
555
556
		$wp_admin_bar->add_node( $node );
557
	}
558
}
559
560
/**
561
 * Add Likes post_meta to the REST API Post response.
562
 *
563
 * @action rest_api_init
564
 * @uses register_meta
565
 */
566
function jetpack_post_likes_register_meta() {
567
	register_meta(
568
		'post', 'switch_like_status',
569
		array(
570
			'type'			=> 'boolean',
571
			'single'		=> true,
572
			'show_in_rest'	=> true,
573
		)
574
	);
575
}
576
577
// Add Likes post_meta to the REST API Post response.
578
add_action( 'rest_api_init', 'jetpack_post_likes_register_meta' );
579
580
Jetpack_Likes::init();
581