Completed
Push — add/geo-location-support ( 007f25...6296b5 )
by Brad
29:34 queued 17:46
created

Jetpack_Likes::set_social_notifications_like()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 3
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
		add_action( 'init', array( &$this, 'action_init' ) );
41
		add_action( 'admin_init', array( $this, 'admin_init' ) );
42
43
		if ( $this->in_jetpack ) {
44
			add_action( 'jetpack_activate_module_likes',   array( $this, 'set_social_notifications_like' ) );
45
			add_action( 'jetpack_deactivate_module_likes', array( $this, 'delete_social_notifications_like' ) );
46
47
			Jetpack::enable_module_configurable( __FILE__ );
48
			Jetpack::module_configuration_load( __FILE__, array( $this, 'configuration_redirect' ) );
49
50
			add_action( 'admin_print_scripts-settings_page_sharing', array( &$this, 'load_jp_css' ) );
51
			add_filter( 'sharing_show_buttons_on_row_start', array( $this, 'configuration_target_area' ) );
52
53
			$active = Jetpack::get_active_modules();
54
55 View Code Duplication
			if ( ! in_array( 'sharedaddy', $active ) && ! in_array( 'publicize', $active ) ) {
56
				// we don't have a sharing page yet
57
				add_action( 'admin_menu', array( $this->settings, 'sharing_menu' ) );
58
			}
59
60 View Code Duplication
			if ( in_array( 'publicize', $active ) && ! in_array( 'sharedaddy', $active ) ) {
61
				// we have a sharing page but not the global options area
62
				add_action( 'pre_admin_screen_sharing', array( $this->settings, 'sharing_block' ), 20 );
63
				add_action( 'pre_admin_screen_sharing', array( $this->settings, 'updated_message' ), -10 );
64
			}
65
66 View Code Duplication
			if( ! in_array( 'sharedaddy', $active ) ) {
67
				add_action( 'admin_init', array( $this->settings, 'process_update_requests_if_sharedaddy_not_loaded' ) );
68
				add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_showbuttonon_init' ), 19 );
69
				add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_showbuttonon_callback' ), 19 );
70
				add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
71
			} else {
72
				add_filter( 'sharing_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
73
				add_action( 'start_sharing_meta_box_content', array( $this->settings, 'meta_box_content' ) );
74
			}
75
		} else { // wpcom
76
			add_action( 'wpmu_new_blog', array( $this, 'enable_comment_likes' ), 10, 1 );
77
			add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
78
			add_action( 'end_likes_meta_box_content', array( $this->settings, 'sharing_meta_box_content' ) );
79
			add_filter( 'likes_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
80
		}
81
82
		add_action( 'admin_init', array( $this, 'admin_discussion_likes_settings_init' ) ); // Likes notifications
83
84
		add_action( 'admin_bar_menu', array( $this, 'admin_bar_likes' ), 60 );
85
86
		add_action( 'wp_enqueue_scripts', array( $this, 'load_styles_register_scripts' ) );
87
88
		add_action( 'save_post', array( $this->settings, 'meta_box_save' ) );
89
		add_action( 'edit_attachment', array( $this->settings, 'meta_box_save' ) );
90
		add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_init' ), 20 );
91
		add_action( 'sharing_admin_update',   array( $this->settings, 'admin_settings_callback' ), 20 );
92
	}
93
94
	/**
95
	 * Set the social_notifications_like option to `on` when the Likes module is activated.
96
	 *
97
	 * @since 3.7.0
98
	 *
99
	 * @return null
100
	 */
101
	function set_social_notifications_like() {
102
		update_option( 'social_notifications_like', 'on' );
103
	}
104
105
	/**
106
	 * Delete the social_notifications_like option that was set to `on` on module activation.
107
	 *
108
	 * @since 3.7.0
109
	 *
110
	 * @return null
111
	 */
112
	function delete_social_notifications_like() {
113
		delete_option( 'social_notifications_like' );
114
	}
115
116
	/**
117
	 * Redirects to the likes section of the sharing page.
118
	 */
119
	function configuration_redirect() {
120
		wp_safe_redirect( admin_url( 'options-general.php?page=sharing#likes' ) );
121
		die();
0 ignored issues
show
Coding Style Compatibility introduced by
The method configuration_redirect() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
122
	}
123
124
	/**
125
	 * Loads Jetpack's CSS on the sharing page so we can use .jetpack-targetable
126
	 */
127
	function load_jp_css() {
128
		// Do we really need `admin_styles`? With the new admin UI, it's breaking some bits.
129
		// Jetpack::init()->admin_styles();
130
	}
131
132
	/**
133
	 * Load scripts and styles for front end.
134
	 * @return null
135
	 */
136
	function load_styles_register_scripts() {
137
		if ( $this->in_jetpack ) {
138
			wp_enqueue_style( 'jetpack_likes', plugins_url( 'likes/style.css', __FILE__ ), array(), JETPACK__VERSION );
139
			$this->register_scripts();
140
		}
141
	}
142
143
144
	/**
145
     * Stub for is_post_likeable, since some wpcom functions call this directly on the class
146
	 * Are likes enabled for this post?
147
     *
148
     * @param int $post_id
149
     * @return bool
150
	 */
151
	static function is_post_likeable( $post_id = 0 ) {
152
		_deprecated_function( __METHOD__, 'jetpack-5.4', 'Jetpack_Likes_Settings()->is_post_likeable' );
153
		$settings = new Jetpack_Likes_Settings();
154
		return $settings->is_post_likeable();
155
	}
156
157
	/**
158
	 * Stub for is_likes_visible, since some themes were calling it directly from this class
159
	 *
160
	 * @deprecated 5.4
161
	 * @return bool
162
	 */
163
	function is_likes_visible() {
164
		_deprecated_function( __METHOD__, 'jetpack-5.4', 'Jetpack_Likes_Settings()->is_likes_visible' );
165
166
		$settings = new Jetpack_Likes_Settings();
167
		return $settings->is_likes_visible();
168
	}
169
170
	/**
171
	 * Adds in the jetpack-targetable class so when we visit sharing#likes our like settings get highlighted by a yellow box
172
	 * @param  string $html row heading for the sharedaddy "which page" setting
173
	 * @return string       html with the jetpack-targetable class and likes id. tbody gets closed after the like settings
174
	 */
175
	function configuration_target_area( $html = '' ) {
176
		$html = "<tbody id='likes' class='jetpack-targetable'>" . $html;
177
		return $html;
178
	}
179
180
	/**
181
	  * Options to be added to the discussion page (see also admin_settings_init, etc below for Sharing settings page)
182
	  */
183
184 View Code Duplication
	function admin_discussion_likes_settings_init() {
185
		// Add a temporary section, until we can move the setting out of there and with the rest of the email notification settings
186
		add_settings_section( 'likes-notifications', __( 'Likes Notifications', 'jetpack' ), array( $this, 'admin_discussion_likes_settings_section' ), 'discussion' );
187
		add_settings_field( 'social-notifications', __( 'Email me whenever', 'jetpack' ), array( $this, 'admin_discussion_likes_settings_field' ), 'discussion', 'likes-notifications' );
188
		// Register the setting
189
		register_setting( 'discussion', 'social_notifications_like', array( $this, 'admin_discussion_likes_settings_validate' ) );
190
	}
191
192
	function admin_discussion_likes_settings_section() {
193
		// Atypical usage here.  We emit jquery to move likes notification checkbox to be with the rest of the email notification settings
194
?>
195
	<script type="text/javascript">
196
	jQuery( function( $ )  {
197
		var table = $( '#social_notifications_like' ).parents( 'table:first' ),
198
			header = table.prevAll( 'h2:first' ),
199
			newParent = $( '#moderation_notify' ).parent( 'label' ).parent();
200
201
		if ( !table.length || !header.length || !newParent.length ) {
202
			return;
203
		}
204
205
		newParent.append( '<br/>' ).append( table.end().parent( 'label' ).siblings().andSelf() );
206
		header.remove();
207
		table.remove();
208
	} );
209
	</script>
210
<?php
211
	}
212
213
	function admin_likes_get_option( $option ) {
214
		if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
215
			$option_setting = get_blog_option( get_current_blog_id(), $option, 'on' );
216
		} else {
217
			$option_setting = get_option( $option, 'on' );
218
		}
219
220
		return intval( 'on' == $option_setting );
221
	}
222
223
	function admin_discussion_likes_settings_field() {
224
		$like = $this->admin_likes_get_option( 'social_notifications_like' );
225
?>
226
		<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>
227
<?php
228
	}
229
230
	function admin_discussion_likes_settings_validate( $input ) {
231
		// If it's not set (was unchecked during form submission) or was set to off (during option update), return 'off'.
232
		if ( !$input || 'off' == $input )
233
			return 'off';
234
235
		// Otherwise, return 'on'.
236
		return 'on';
237
	}
238
239
	function admin_init() {
240
		add_filter( 'manage_posts_columns', array( $this, 'add_like_count_column' ) );
241
		add_filter( 'manage_pages_columns', array( $this, 'add_like_count_column' ) );
242
		add_action( 'manage_posts_custom_column', array( $this, 'likes_edit_column' ), 10, 2 );
243
		add_action( 'manage_pages_custom_column', array( $this, 'likes_edit_column' ), 10, 2 );
244
		add_action( 'admin_print_styles-edit.php', array( $this, 'load_admin_css' ) );
245
		add_action( "admin_print_scripts-edit.php", array( $this, 'enqueue_admin_scripts' ) );
246
	}
247
248
	function action_init() {
249
		if ( is_admin() ) {
250
			return;
251
		}
252
253
		if ( ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) ||
254
			 ( defined( 'APP_REQUEST' ) && APP_REQUEST ) ||
255
			 ( defined( 'REST_API_REQUEST' ) && REST_API_REQUEST ) ||
256
			 ( defined( 'COOKIE_AUTH_REQUEST' ) && COOKIE_AUTH_REQUEST ) ||
257
			 ( defined( 'JABBER_SERVER' ) && JABBER_SERVER ) ) {
258
			return;
259
		}
260
261
		if ( Jetpack_AMP_Support::is_amp_request() ) {
262
			return;
263
		}
264
265
		if ( $this->in_jetpack ) {
266
			add_filter( 'the_content', array( &$this, 'post_likes' ), 30, 1 );
267
			add_filter( 'the_excerpt', array( &$this, 'post_likes' ), 30, 1 );
268
269
		} else {
270
			add_filter( 'post_flair', array( &$this, 'post_likes' ), 30, 1 );
271
			add_filter( 'post_flair_block_css', array( $this, 'post_flair_service_enabled_like' ) );
272
273
			wp_enqueue_script( 'postmessage', '/wp-content/js/postmessage.js', array( 'jquery' ), JETPACK__VERSION, false );
274
			wp_enqueue_script( 'jetpack_resize', '/wp-content/js/jquery/jquery.jetpack-resize.js', array( 'jquery' ), JETPACK__VERSION, false );
275
			wp_enqueue_script( 'jetpack_likes_queuehandler', plugins_url( 'queuehandler.js' , __FILE__ ), array( 'jquery', 'postmessage', 'jetpack_resize' ), JETPACK__VERSION, true );
276
			wp_enqueue_style( 'jetpack_likes', plugins_url( 'jetpack-likes.css', __FILE__ ), array(), JETPACK__VERSION );
277
		}
278
	}
279
280
	/**
281
	* Register scripts
282
	*/
283
	function register_scripts() {
284
		wp_register_script(
285
			'postmessage',
286
			Jetpack::get_file_url_for_environment( '_inc/build/postmessage.min.js', '_inc/postmessage.js' ),
287
			array( 'jquery' ),
288
			JETPACK__VERSION,
289
			false
290
		);
291
		wp_register_script(
292
			'jetpack_resize',
293
			Jetpack::get_file_url_for_environment(
294
				'_inc/build/jquery.jetpack-resize.min.js',
295
				'_inc/jquery.jetpack-resize.js'
296
			),
297
			array( 'jquery' ),
298
			JETPACK__VERSION,
299
			false
300
		);
301
		wp_register_script(
302
			'jetpack_likes_queuehandler',
303
			Jetpack::get_file_url_for_environment(
304
				'_inc/build/likes/queuehandler.min.js',
305
				'modules/likes/queuehandler.js'
306
			),
307
			array( 'jquery', 'postmessage', 'jetpack_resize' ),
308
			JETPACK__VERSION,
309
			true
310
		);
311
	}
312
313
	/**
314
	* Load the CSS needed for the wp-admin area.
315
	*/
316
	function load_admin_css() {
317
	?>
318
		<style type="text/css">
319
			.vers img { display: none; }
320
			.metabox-prefs .vers img { display: inline; }
321
			.fixed .column-likes { width: 5.5em; padding: 8px 0; text-align: left; }
322
			.fixed .column-stats { width: 5em; }
323
			.fixed .column-likes .post-com-count {
324
				-webkit-box-sizing: border-box;
325
				-moz-box-sizing: border-box;
326
				box-sizing: border-box;
327
				display: inline-block;
328
				padding: 0 8px;
329
				height: 2em;
330
				margin-top: 5px;
331
				-webkit-border-radius: 5px;
332
				border-radius: 5px;
333
				background-color: #72777C;
334
				color: #FFF;
335
				font-size: 11px;
336
				line-height: 21px;
337
			}
338
			.fixed .column-likes .post-com-count::after { border: none !important; }
339
			.fixed .column-likes .post-com-count:hover { background-color: #0073AA; }
340
			.fixed .column-likes .vers:before {
341
				font: normal 20px/1 dashicons;
342
				content: '\f155';
343
				speak: none;
344
				-webkit-font-smoothing: antialiased;
345
				-moz-osx-font-smoothing: grayscale;
346
			}
347
			@media screen and (max-width: 782px) {
348
				.fixed .column-likes {
349
					display: none;
350
				}
351
			}
352
		</style>
353
		<?php
354
	}
355
356
	/**
357
	* Load the JS required for loading the like counts.
358
	*/
359
	function enqueue_admin_scripts() {
360
		if ( empty( $_GET['post_type'] ) || 'post' == $_GET['post_type'] || 'page' == $_GET['post_type'] ) {
361
			if ( $this->in_jetpack ) {
362
				wp_enqueue_script(
363
					'likes-post-count',
364
					Jetpack::get_file_url_for_environment(
365
						'_inc/build/likes/post-count.min.js',
366
						'modules/likes/post-count.js'
367
					),
368
					array( 'jquery' ),
369
					JETPACK__VERSION
370
				);
371
				wp_enqueue_script(
372
					'likes-post-count-jetpack',
373
					Jetpack::get_file_url_for_environment(
374
						'_inc/build/likes/post-count-jetpack.min.js',
375
						'modules/likes/post-count-jetpack.js'
376
					),
377
					array( 'likes-post-count' ),
378
					JETPACK__VERSION
379
				);
380
			} else {
381
				wp_enqueue_script( 'jquery.wpcom-proxy-request', "/wp-content/js/jquery/jquery.wpcom-proxy-request.js", array('jquery'), NULL, true );
382
				wp_enqueue_script( 'likes-post-count', plugins_url( 'likes/post-count.js', dirname( __FILE__ ) ), array( 'jquery' ), JETPACK__VERSION );
383
				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 );
384
			}
385
		}
386
	}
387
388
	/**
389
	* Add "Likes" column data to the post edit table in wp-admin.
390
	*
391
	* @param string $column_name
392
	* @param int $post_id
393
	*/
394
	function likes_edit_column( $column_name, $post_id ) {
395
		if ( 'likes' == $column_name ) {
396
397
			if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
398
				$blog_id = get_current_blog_id();
399
			} else {
400
				$blog_id = Jetpack_Options::get_option( 'id' );
401
			}
402
403
			$permalink = get_permalink( get_the_ID() ); ?>
404
			<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; ?>">
405
				<span class="comment-count">0</span>
406
			</a>
407
			<?php
408
		}
409
	}
410
411
	/**
412
	* Add a "Likes" column header to the post edit table in wp-admin.
413
	*
414
	* @param array $columns
415
	* @return array
416
	*/
417
	function add_like_count_column( $columns ) {
418
		$date = $columns['date'];
419
		unset( $columns['date'] );
420
421
		$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>';
422
		$columns['date'] = $date;
423
424
		return $columns;
425
	}
426
427
	function post_likes( $content ) {
428
		$post_id = get_the_ID();
429
430
		if ( ! is_numeric( $post_id ) || ! $this->settings->is_likes_visible() )
431
			return $content;
432
433 View Code Duplication
		if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
434
			$blog_id = get_current_blog_id();
435
			$bloginfo = get_blog_details( (int) $blog_id );
436
			$domain = $bloginfo->domain;
437
		} else {
438
			$blog_id = Jetpack_Options::get_option( 'id' );
439
			$url = home_url();
440
			$url_parts = parse_url( $url );
441
			$domain = $url_parts['host'];
442
		}
443
		// make sure to include the scripts before the iframe otherwise weird things happen
444
		add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
445
446
		/**
447
		* if the same post appears more then once on a page the page goes crazy
448
		* we need a slightly more unique id / name for the widget wrapper.
449
		*/
450
		$uniqid = uniqid();
451
452
		$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 );
453
		$name = sprintf( 'like-post-frame-%1$d-%2$d-%3$s', $blog_id, $post_id, $uniqid );
454
		$wrapper = sprintf( 'like-post-wrapper-%1$d-%2$d-%3$s', $blog_id, $post_id, $uniqid );
455
		$headline = sprintf(
456
			/** This filter is already documented in modules/sharedaddy/sharing-service.php */
457
			apply_filters( 'jetpack_sharing_headline_html', '<h3 class="sd-title">%s</h3>', esc_html__( 'Like this:', 'jetpack' ), 'likes' ),
458
			esc_html__( 'Like this:', 'jetpack' )
459
		);
460
461
		$html  = "<div class='sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded' id='$wrapper' data-src='$src' data-name='$name'>";
462
		$html .= $headline;
463
		$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>';
464
		$html .= "<span class='sd-text-color'></span><a class='sd-link-color'></a>";
465
		$html .= '</div>';
466
467
		// Let's make sure that the script is enqueued
468
		wp_enqueue_script( 'jetpack_likes_queuehandler' );
469
470
		return $content . $html;
471
	}
472
473
	function post_flair_service_enabled_like( $classes ) {
474
		$classes[] = 'sd-like-enabled';
475
		return $classes;
476
	}
477
478
	function is_admin_bar_button_visible() {
479
		global $wp_admin_bar;
480
481
		if ( ! is_object( $wp_admin_bar ) )
482
			return false;
483
484
		if ( ( ! is_singular( 'post' ) && ! is_attachment() && ! is_page() ) )
485
			return false;
486
487
		if ( ! $this->settings->is_likes_visible() )
488
			return false;
489
490
		if ( ! $this->settings->is_post_likeable() )
491
			return false;
492
493
		/**
494
		 * Filters whether the Like button is enabled in the admin bar.
495
		 *
496
		 * @module likes
497
		 *
498
		 * @since 2.2.0
499
		 *
500
		 * @param bool true Should the Like button be visible in the Admin bar. Default to true.
501
		 */
502
		return (bool) apply_filters( 'jetpack_admin_bar_likes_enabled', true );
503
	}
504
505
	function admin_bar_likes() {
506
		global $wp_admin_bar;
507
508
		$post_id = get_the_ID();
509
510
		if ( ! is_numeric( $post_id ) || ! $this->is_admin_bar_button_visible() ) {
511
			return;
512
		}
513
514
		$protocol = 'http';
515
		if ( is_ssl() )
516
			$protocol = 'https';
517
518 View Code Duplication
		if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
519
			$blog_id = get_current_blog_id();
520
			$bloginfo = get_blog_details( (int) $blog_id );
521
			$domain = $bloginfo->domain;
522
		} else {
523
			$blog_id = Jetpack_Options::get_option( 'id' );
524
			$url = home_url();
525
			$url_parts = parse_url( $url );
526
			$domain = $url_parts['host'];
527
		}
528
		// make sure to include the scripts before the iframe otherwise weird things happen
529
		add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
530
531
		$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 );
532
533
		$html = "<iframe class='admin-bar-likes-widget jetpack-likes-widget' scrolling='no' frameBorder='0' name='admin-bar-likes-widget' src='$src'></iframe>";
534
535
		$node = array(
536
				'id'   => 'admin-bar-likes-widget',
537
				'meta' => array(
538
							'html' => $html
539
				)
540
		);
541
542
		$wp_admin_bar->add_node( $node );
543
	}
544
}
545
546
Jetpack_Likes::init();
547