PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 7.0.3
Jetpack – WP Security, Backup, Speed, & Growth v7.0.3
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 / modules / likes.php
jetpack / modules Last commit date
after-the-deadline 7 years ago calypsoify 7 years ago carousel 5 years ago comment-likes 8 years ago comments 7 years ago contact-form 6 years ago custom-css 7 years ago custom-post-types 7 years ago geo-location 7 years ago google-analytics 7 years ago gplus-authorship 6 years ago infinite-scroll 7 years ago lazy-images 7 years ago likes 7 years ago manage 8 years ago markdown 7 years ago masterbar 7 years ago minileven 7 years ago photon 10 years ago photon-cdn 7 years ago post-by-email 9 years ago protect 7 years ago publicize 7 years ago pwa 8 years ago related-posts 7 years ago search 6 years ago seo-tools 7 years ago sharedaddy 7 years ago shortcodes 6 years ago simple-payments 7 years ago site-icon 6 years ago sitemaps 7 years ago sso 7 years ago subscriptions 7 years ago theme-tools 7 years ago tiled-gallery 7 years ago verification-tools 7 years ago videopress 7 years ago widget-visibility 7 years ago widgets 6 years ago woocommerce-analytics 7 years ago wordads 7 years ago after-the-deadline.php 8 years ago blocks.php 7 years ago carousel.php 9 years ago comment-likes.php 7 years ago comments.php 9 years ago contact-form.php 7 years ago copy-post.php 7 years ago custom-content-types.php 9 years ago custom-css.php 7 years ago debug.php 10 years ago enhanced-distribution.php 9 years ago geo-location.php 7 years ago google-analytics.php 8 years ago gplus-authorship.php 11 years ago gravatar-hovercards.php 8 years ago holiday-snow.php 8 years ago infinite-scroll.php 7 years ago json-api.php 9 years ago latex.php 9 years ago lazy-images.php 7 years ago likes.php 7 years ago manage.php 9 years ago markdown.php 9 years ago masterbar.php 7 years ago minileven.php 8 years ago mobile-push.php 10 years ago module-extras.php 7 years ago module-headings.php 7 years ago module-info.php 7 years ago monitor.php 8 years ago notes.php 9 years ago omnisearch.php 8 years ago photon-cdn.php 7 years ago photon.php 8 years ago post-by-email.php 7 years ago protect.php 7 years ago publicize.php 7 years ago pwa.php 8 years ago random-redirect.php 10 years ago related-posts.php 9 years ago search.php 8 years ago seo-tools.php 7 years ago sharedaddy.php 7 years ago shortcodes.php 7 years ago shortlinks.php 7 years ago site-icon.php 9 years ago sitemaps.php 7 years ago social-links.php 10 years ago sso.php 7 years ago stats.php 7 years ago subscriptions.php 7 years ago theme-tools.php 7 years ago tiled-gallery.php 7 years ago tonesque.php 10 years ago vaultpress.php 9 years ago verification-tools.php 9 years ago videopress.php 8 years ago widget-visibility.php 9 years ago widgets.php 7 years ago wordads.php 8 years ago wpcc.php 10 years ago wpgroho.js 10 years ago
likes.php
581 lines
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;
38 $this->settings = new Jetpack_Likes_Settings();
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 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 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 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 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 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 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 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