Automattic /
jetpack
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | /** |
||
| 3 | * Module Name: Comment Likes |
||
| 4 | * Module Description: Increase visitor engagement by adding a Like button to comments. |
||
| 5 | * Sort Order: 39 |
||
| 6 | * Recommendation Order: 17 |
||
| 7 | * First Introduced: 5.1 |
||
| 8 | * Requires Connection: Yes |
||
| 9 | * Auto Activate: No |
||
| 10 | * Module Tags: Social |
||
| 11 | * Additional Search Queries: like widget, like button, like, likes |
||
| 12 | */ |
||
| 13 | |||
| 14 | Jetpack::dns_prefetch( array( |
||
| 15 | '//widgets.wp.com', |
||
| 16 | '//s0.wp.com', |
||
| 17 | '//s1.wp.com', |
||
| 18 | '//s2.wp.com', |
||
| 19 | '//0.gravatar.com', |
||
| 20 | '//1.gravatar.com', |
||
| 21 | '//2.gravatar.com', |
||
| 22 | ) ); |
||
| 23 | |||
| 24 | require_once dirname( __FILE__ ) . '/likes/jetpack-likes-master-iframe.php'; |
||
| 25 | require_once dirname( __FILE__ ) . '/likes/jetpack-likes-settings.php'; |
||
| 26 | |||
| 27 | class Jetpack_Comment_Likes { |
||
| 28 | public static function init() { |
||
| 29 | static $instance = NULL; |
||
| 30 | |||
| 31 | if ( ! $instance ) { |
||
| 32 | $instance = new Jetpack_Comment_Likes; |
||
| 33 | } |
||
| 34 | |||
| 35 | return $instance; |
||
| 36 | } |
||
| 37 | |||
| 38 | private function __construct() { |
||
| 39 | $this->settings = new Jetpack_Likes_Settings(); |
||
| 40 | $this->blog_id = Jetpack_Options::get_option( 'id' ); |
||
|
0 ignored issues
–
show
|
|||
| 41 | $this->url = home_url(); |
||
|
0 ignored issues
–
show
The property
url 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...
|
|||
| 42 | $this->url_parts = parse_url( $this->url ); |
||
|
0 ignored issues
–
show
The property
url_parts 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...
|
|||
| 43 | $this->domain = $this->url_parts['host']; |
||
|
0 ignored issues
–
show
The property
domain 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...
|
|||
| 44 | |||
| 45 | add_action( 'init', array( $this, 'frontend_init' ) ); |
||
| 46 | add_action( 'admin_init', array( $this, 'admin_init' ) ); |
||
| 47 | |||
| 48 | if ( ! Jetpack::is_module_active( 'likes' ) ) { |
||
| 49 | $active = Jetpack::get_active_modules(); |
||
| 50 | |||
| 51 | View Code Duplication | if ( ! in_array( 'sharedaddy', $active ) && ! in_array( 'publicize', $active ) ) { |
|
| 52 | // we don't have a sharing page yet |
||
| 53 | add_action( 'admin_menu', array( $this->settings, 'sharing_menu' ) ); |
||
| 54 | } |
||
| 55 | |||
| 56 | View Code Duplication | if ( in_array( 'publicize', $active ) && ! in_array( 'sharedaddy', $active ) ) { |
|
| 57 | // we have a sharing page but not the global options area |
||
| 58 | add_action( 'pre_admin_screen_sharing', array( $this->settings, 'sharing_block' ), 20 ); |
||
| 59 | add_action( 'pre_admin_screen_sharing', array( $this->settings, 'updated_message' ), -10 ); |
||
| 60 | } |
||
| 61 | |||
| 62 | View Code Duplication | if( ! in_array( 'sharedaddy', $active ) ) { |
|
| 63 | add_action( 'admin_init', array( $this->settings, 'process_update_requests_if_sharedaddy_not_loaded' ) ); |
||
| 64 | add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_showbuttonon_init' ), 19 ); |
||
| 65 | add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_showbuttonon_callback' ), 19 ); |
||
| 66 | add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) ); |
||
| 67 | } else { |
||
| 68 | add_filter( 'sharing_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) ); |
||
| 69 | add_action( 'start_sharing_meta_box_content', array( $this->settings, 'meta_box_content' ) ); |
||
| 70 | } |
||
| 71 | |||
| 72 | add_action( 'save_post', array( $this->settings, 'meta_box_save' ) ); |
||
| 73 | add_action( 'edit_attachment', array( $this->settings, 'meta_box_save' ) ); |
||
| 74 | add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_init' ), 20 ); |
||
| 75 | add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_callback' ), 20 ); |
||
| 76 | } |
||
| 77 | } |
||
| 78 | |||
| 79 | public function admin_init() { |
||
| 80 | add_filter( 'manage_edit-comments_columns', array( $this, 'add_like_count_column' ) ); |
||
| 81 | add_action( 'manage_comments_custom_column', array( $this, 'comment_likes_edit_column' ), 10, 2 ); |
||
| 82 | add_action( 'admin_print_styles-edit-comments.php', array( $this, 'enqueue_admin_styles_scripts' ) ); |
||
| 83 | } |
||
| 84 | |||
| 85 | public function comment_likes_edit_column( $column_name, $comment_id ) { |
||
| 86 | if ( 'comment_likes' !== $column_name ) { |
||
| 87 | return; |
||
| 88 | } |
||
| 89 | |||
| 90 | $permalink = get_permalink( get_the_ID() ); |
||
| 91 | ?> |
||
| 92 | <a |
||
| 93 | data-comment-id="<?php echo absint( $comment_id ); ?>" |
||
| 94 | data-blog-id="<?php echo absint( $this->blog_id ); ?>" |
||
| 95 | class="comment-like-count" |
||
| 96 | id="comment-like-count-<?php echo absint( $comment_id ); ?>" |
||
| 97 | href="<?php echo esc_url( $permalink ); ?>#comment-<?php echo absint( $comment_id ); ?>" |
||
| 98 | > |
||
| 99 | <span class="like-count">0</span> |
||
| 100 | </a> |
||
| 101 | <?php |
||
| 102 | } |
||
| 103 | |||
| 104 | function enqueue_admin_styles_scripts() { |
||
| 105 | wp_enqueue_style( 'comment-like-count', plugins_url( 'comment-likes/admin-style.css', __FILE__ ), array(), JETPACK__VERSION ); |
||
| 106 | wp_enqueue_script( 'comment-like-count', plugins_url( 'comment-likes/comment-like-count.js', __FILE__ ), array( 'jquery' ), JETPACK__VERSION ); |
||
| 107 | } |
||
| 108 | |||
| 109 | public function add_like_count_column( $columns ) { |
||
| 110 | $columns['comment_likes'] = '<span class="vers"></span>'; |
||
| 111 | |||
| 112 | return $columns; |
||
| 113 | } |
||
| 114 | |||
| 115 | public function frontend_init() { |
||
| 116 | if ( is_admin() ) { |
||
| 117 | return; |
||
| 118 | } |
||
| 119 | |||
| 120 | add_action( 'wp_enqueue_scripts', array( $this, 'load_styles_register_scripts' ) ); |
||
| 121 | add_filter( 'comment_text', array( $this, 'comment_likes' ), 10, 2 ); |
||
| 122 | } |
||
| 123 | |||
| 124 | public function load_styles_register_scripts() { |
||
| 125 | if ( ! wp_style_is( 'open-sans', 'registered' ) ) { |
||
| 126 | wp_register_style( 'open-sans', 'https://fonts.googleapis.com/css?family=Open+Sans', array(), JETPACK__VERSION ); |
||
| 127 | } |
||
| 128 | wp_enqueue_style( 'jetpack_likes', plugins_url( 'likes/style.css', __FILE__ ), array( 'open-sans' ), JETPACK__VERSION ); |
||
| 129 | wp_enqueue_script( 'postmessage', plugins_url( '_inc/postmessage.js', JETPACK__PLUGIN_DIR ), array( 'jquery' ), JETPACK__VERSION, false ); |
||
| 130 | wp_enqueue_script( 'jetpack_resize', plugins_url( '_inc/jquery.jetpack-resize.js' , JETPACK__PLUGIN_DIR ), array( 'jquery' ), JETPACK__VERSION, false ); |
||
| 131 | wp_enqueue_script( 'jetpack_likes_queuehandler', plugins_url( 'likes/queuehandler.js' , __FILE__ ), array( 'jquery', 'postmessage', 'jetpack_resize' ), JETPACK__VERSION, true ); |
||
| 132 | } |
||
| 133 | |||
| 134 | public function comment_likes( $content, $comment = null ) { |
||
| 135 | if ( empty( $comment ) ) { |
||
| 136 | return $content; |
||
| 137 | } |
||
| 138 | |||
| 139 | if ( ! $this->settings->is_likes_visible() ) { |
||
| 140 | return $content; |
||
| 141 | } |
||
| 142 | |||
| 143 | $comment_id = get_comment_ID(); |
||
| 144 | if ( empty( $comment_id ) && ! empty( $comment->comment_ID ) ) { |
||
| 145 | $comment_id = $comment->comment_ID; |
||
| 146 | } |
||
| 147 | |||
| 148 | if ( empty( $content ) || empty( $comment_id ) ) { |
||
| 149 | return $content; |
||
| 150 | } |
||
| 151 | |||
| 152 | // In case master iframe hasn't been loaded. This could be the case when Post Likes module is disabled, |
||
| 153 | // or on pages on which we have comments but post likes are disabled. |
||
| 154 | if ( false === has_action( 'wp_footer', 'jetpack_likes_master_iframe' ) ) { |
||
| 155 | add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 ); |
||
| 156 | } |
||
| 157 | |||
| 158 | $uniqid = uniqid(); |
||
| 159 | |||
| 160 | $src = sprintf( 'https://widgets.wp.com/likes/#blog_id=%1$d&comment_id=%2$d&origin=%3$s&obj_id=%1$d-%2$d-%4$s', $this->blog_id, $comment_id, $this->domain, $uniqid ); |
||
| 161 | $name = sprintf( 'like-comment-frame-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid ); |
||
| 162 | $wrapper = sprintf( 'like-comment-wrapper-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid ); |
||
| 163 | |||
| 164 | $html = ''; |
||
| 165 | $html .= "<div class='jetpack-comment-likes-widget-wrapper jetpack-likes-widget-unloaded' id='$wrapper' data-src='$src' data-name='$name'>"; |
||
| 166 | $html .= "<div class='likes-widget-placeholder comment-likes-widget-placeholder comment-likes'><span class='loading'>" . esc_html__( 'Loading...', 'jetpack' ) . "</span></div>"; |
||
| 167 | $html .= "<div class='comment-likes-widget jetpack-likes-widget comment-likes'><span class='comment-like-feedback'></span>"; |
||
| 168 | $html .= "<span class='sd-text-color'></span><a class='sd-link-color'></a>"; |
||
| 169 | $html .= '</div></div>'; |
||
| 170 | |||
| 171 | /** |
||
| 172 | * Filters the Comment Likes button content. |
||
| 173 | * |
||
| 174 | * @module comment-likes |
||
| 175 | * |
||
| 176 | * @since 5.1.0 |
||
| 177 | * |
||
| 178 | * @param string $html Comment Likes button content. |
||
| 179 | */ |
||
| 180 | $like_button = apply_filters( 'comment_like_button', $html ); |
||
| 181 | |||
| 182 | return $content . $like_button; |
||
| 183 | } |
||
| 184 | } |
||
| 185 | |||
| 186 | Jetpack_Comment_Likes::init(); |
||
| 187 |
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: