Completed
Push — sync/dbtlr/r159298-wpcom-15003... ( bc0eb2...c27aa0 )
by
unknown
12:20
created

Jetpack_Comment_Likes::admin_init()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
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();
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...
40
		$this->blog_id   = Jetpack_Options::get_option( 'id' );
0 ignored issues
show
Bug introduced by
The property blog_id 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...
41
		$this->url       = home_url();
0 ignored issues
show
Bug introduced by
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
Bug introduced by
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
Bug introduced by
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&amp;comment_id=%2$d&amp;origin=%3$s&amp;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