PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 8.7.0.1
Jetpack – WP Security, Backup, Speed, & Growth v8.7.0.1
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 / sharedaddy / sharedaddy.php
jetpack / modules / sharedaddy Last commit date
images 5 years ago admin-sharing-rtl.css 7 years ago admin-sharing-rtl.min.css 7 years ago admin-sharing.css 7 years ago admin-sharing.js 6 years ago admin-sharing.min.css 7 years ago amp-sharing.css 5 years ago recaptcha.php 7 years ago sharedaddy.php 5 years ago sharing-service.php 6 years ago sharing-sources.php 5 years ago sharing.css 6 years ago sharing.js 6 years ago sharing.php 6 years ago
sharedaddy.php
290 lines
1 <?php
2 /*
3 Plugin Name: Sharedaddy
4 Description: The most super duper sharing tool on the interwebs.
5 Version: 0.3.1
6 Author: Automattic, Inc.
7 Author URI: https://automattic.com/
8 Plugin URI: https://en.blog.wordpress.com/2010/08/24/more-ways-to-share/
9 */
10
11 require_once plugin_dir_path( __FILE__ ).'sharing.php';
12
13 function sharing_email_send_post( $data ) {
14
15 $content = sharing_email_send_post_content( $data );
16 // Borrowed from wp_mail();
17 $sitename = strtolower( $_SERVER['SERVER_NAME'] );
18 if ( substr( $sitename, 0, 4 ) == 'www.' ) {
19 $sitename = substr( $sitename, 4 );
20 }
21
22 /** This filter is documented in core/src/wp-includes/pluggable.php */
23 $from_email = apply_filters( 'wp_mail_from', 'wordpress@' . $sitename );
24
25 if ( ! empty( $data['name'] ) ) {
26 $s_name = (string) $data['name'];
27 $name_needs_encoding_regex =
28 '/[' .
29 // SpamAssasin's list of characters which "need MIME" encoding
30 '\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff' .
31 // Our list of "unsafe" characters
32 '<\r\n' .
33 ']/';
34
35 $needs_encoding =
36 // If it contains any blocked chars.
37 preg_match( $name_needs_encoding_regex, $s_name ) ||
38 // Or if we can't use `mb_convert_encoding`
39 ! function_exists( 'mb_convert_encoding' ) ||
40 // Or if it's not already ASCII
41 mb_convert_encoding( $data['name'], 'ASCII' ) !== $s_name;
42
43 if ( $needs_encoding ) {
44 $data['name'] = sprintf( '=?UTF-8?B?%s?=', base64_encode( $data['name'] ) );
45 }
46 }
47
48 $headers[] = sprintf( 'From: %1$s <%2$s>', $data['name'], $from_email );
49 $headers[] = sprintf( 'Reply-To: %1$s <%2$s>', $data['name'], $data['source'] );
50
51 // Make sure to pass the title through the normal sharing filters.
52 $title = $data['sharing_source']->get_share_title( $data['post']->ID );
53
54 /**
55 * Filter the Sharing Email Send Post Subject.
56 *
57 * @module sharedaddy
58 *
59 * @since 5.8.0
60 *
61 * @param string $var Sharing Email Send Post Subject. Default is "Shared Post".
62 */
63 $subject = apply_filters( 'wp_sharing_email_send_post_subject', '[' . __( 'Shared Post', 'jetpack' ) . '] ' . $title );
64
65 wp_mail( $data['target'], $subject, $content, $headers );
66 }
67
68
69 /* Checks for spam using akismet if available. */
70 /* Return $data as it if email about to be send out is not spam. */
71 function sharing_email_check_for_spam_via_akismet( $data ) {
72
73 if ( ! Jetpack::is_akismet_active() )
74 return $data;
75
76 // Prepare the body_request for akismet
77 $body_request = array(
78 'blog' => get_option( 'home' ),
79 'permalink' => $data['sharing_source']->get_share_url( $data['post']->ID ),
80 'comment_type' => 'share',
81 'comment_author' => $data['name'],
82 'comment_author_email' => $data['source'],
83 'comment_content' => sharing_email_send_post_content( $data ),
84 'user_agent' => ( isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : null ),
85 );
86
87 if ( method_exists( 'Akismet', 'http_post' ) ) {
88 $body_request['user_ip'] = Akismet::get_ip_address();
89 $response = Akismet::http_post( build_query( $body_request ), 'comment-check' );
90 } else {
91 global $akismet_api_host, $akismet_api_port;
92 $body_request['user_ip'] = ( isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : null );
93 $response = akismet_http_post( build_query( $body_request ), $akismet_api_host, '/1.1/comment-check', $akismet_api_port );
94 }
95
96 // The Response is spam lets not send the email.
97 if ( ! empty( $response ) && isset( $response[1] ) && 'true' == trim( $response[1] ) ) { // 'true' is spam
98 return false; // don't send the email
99 }
100 return $data;
101 }
102
103 function sharing_email_send_post_content( $data ) {
104 /* translators: included in email when post is shared via email. First item is sender's name. Second is sender's email address. */
105 $content = sprintf( __( '%1$s (%2$s) thinks you may be interested in the following post:', 'jetpack' ), $data['name'], $data['source'] );
106 $content .= "\n\n";
107 // Make sure to pass the title and URL through the normal sharing filters.
108 $content .= $data['sharing_source']->get_share_title( $data['post']->ID ) . "\n";
109 $content .= $data['sharing_source']->get_share_url( $data['post']->ID ) . "\n";
110 return $content;
111 }
112
113 function sharing_add_meta_box() {
114 global $post;
115 if ( empty( $post ) ) { // If a current post is not defined, such as when editing a comment.
116 return;
117 }
118
119 /**
120 * Filter whether to display the Sharing Meta Box or not.
121 *
122 * @module sharedaddy
123 *
124 * @since 3.8.0
125 *
126 * @param bool true Display Sharing Meta Box.
127 * @param $post Post.
128 */
129 if ( ! apply_filters( 'sharing_meta_box_show', true, $post ) ) {
130 return;
131 }
132
133 $post_types = get_post_types( array( 'public' => true ) );
134 /**
135 * Filter the Sharing Meta Box title.
136 *
137 * @module sharedaddy
138 *
139 * @since 2.2.0
140 *
141 * @param string $var Sharing Meta Box title. Default is "Sharing".
142 */
143 $title = apply_filters( 'sharing_meta_box_title', __( 'Sharing', 'jetpack' ) );
144 if ( $post->ID !== get_option( 'page_for_posts' ) ) {
145 foreach( $post_types as $post_type ) {
146 add_meta_box( 'sharing_meta', $title, 'sharing_meta_box_content', $post_type, 'side', 'default', array( '__back_compat_meta_box' => true ) );
147 }
148 }
149 }
150
151
152 function sharing_meta_box_content( $post ) {
153 /**
154 * Fires before the sharing meta box content.
155 *
156 * @module sharedaddy
157 *
158 * @since 2.2.0
159 *
160 * @param WP_Post $post The post to share.
161 */
162 do_action( 'start_sharing_meta_box_content', $post );
163
164 $disabled = get_post_meta( $post->ID, 'sharing_disabled', true ); ?>
165
166 <p>
167 <label for="enable_post_sharing">
168 <input type="checkbox" name="enable_post_sharing" id="enable_post_sharing" value="1" <?php checked( !$disabled ); ?>>
169 <?php _e( 'Show sharing buttons.' , 'jetpack'); ?>
170 </label>
171 <input type="hidden" name="sharing_status_hidden" value="1" />
172 </p>
173
174 <?php
175 /**
176 * Fires after the sharing meta box content.
177 *
178 * @module sharedaddy
179 *
180 * @since 2.2.0
181 *
182 * @param WP_Post $post The post to share.
183 */
184 do_action( 'end_sharing_meta_box_content', $post );
185 }
186
187 function sharing_meta_box_save( $post_id ) {
188 if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
189 return $post_id;
190
191 // Record sharing disable
192 if ( isset( $_POST['post_type'] ) && ( $post_type_object = get_post_type_object( $_POST['post_type'] ) ) && $post_type_object->public ) {
193 if ( current_user_can( 'edit_post', $post_id ) ) {
194 if ( isset( $_POST['sharing_status_hidden'] ) ) {
195 if ( !isset( $_POST['enable_post_sharing'] ) ) {
196 update_post_meta( $post_id, 'sharing_disabled', 1 );
197 } else {
198 delete_post_meta( $post_id, 'sharing_disabled' );
199 }
200 }
201 }
202 }
203
204 return $post_id;
205 }
206
207 function sharing_meta_box_protected( $protected, $meta_key ) {
208 if ( 'sharing_disabled' == $meta_key )
209 $protected = true;
210
211 return $protected;
212 }
213
214 add_filter( 'is_protected_meta', 'sharing_meta_box_protected', 10, 2 );
215
216 function sharing_plugin_settings( $links ) {
217 $settings_link = '<a href="options-general.php?page=sharing.php">'.__( 'Settings', 'jetpack' ).'</a>';
218 array_unshift( $links, $settings_link );
219 return $links;
220 }
221
222 function sharing_add_plugin_settings($links, $file) {
223 if ( $file == basename( dirname( __FILE__ ) ).'/'.basename( __FILE__ ) ) {
224 $links[] = '<a href="options-general.php?page=sharing.php">' . __( 'Settings', 'jetpack' ) . '</a>';
225 $links[] = '<a href="https://support.wordpress.com/sharing/" rel="noopener noreferrer" target="_blank">' . __( 'Support', 'jetpack' ) . '</a>';
226 }
227
228 return $links;
229 }
230
231 function sharing_init() {
232 if ( Jetpack_Options::get_option_and_ensure_autoload( 'sharedaddy_disable_resources', '0' ) ) {
233 add_filter( 'sharing_js', 'sharing_disable_js' );
234 remove_action( 'wp_head', 'sharing_add_header', 1 );
235 }
236 }
237
238 function sharing_disable_js() {
239 return false;
240 }
241
242 function sharing_global_resources() {
243 $disable = get_option( 'sharedaddy_disable_resources' );
244 ?>
245 <tr valign="top">
246 <th scope="row"><label for="disable_css"><?php _e( 'Disable CSS and JS', 'jetpack' ); ?></label></th>
247 <td>
248 <input id="disable_css" type="checkbox" name="disable_resources" <?php if ( $disable == 1 ) echo ' checked="checked"'; ?>/> <small><em><?php _e( 'Advanced. If this option is checked, you must include these files in your theme manually for the sharing links to work.', 'jetpack' ); ?></em></small>
249 </td>
250 </tr>
251 <?php
252 }
253
254 function sharing_global_resources_save() {
255 update_option( 'sharedaddy_disable_resources', isset( $_POST['disable_resources'] ) ? 1 : 0 );
256 }
257
258 function sharing_email_dialog() {
259 require_once plugin_dir_path( __FILE__ ) . 'recaptcha.php';
260
261 $recaptcha = new Jetpack_ReCaptcha( RECAPTCHA_PUBLIC_KEY, RECAPTCHA_PRIVATE_KEY );
262 echo $recaptcha->get_recaptcha_html(); // xss ok
263 }
264
265 function sharing_email_check( $true, $post, $data ) {
266 require_once plugin_dir_path( __FILE__ ) . 'recaptcha.php';
267
268 $recaptcha = new Jetpack_ReCaptcha( RECAPTCHA_PUBLIC_KEY, RECAPTCHA_PRIVATE_KEY );
269 $response = ! empty( $_POST['g-recaptcha-response'] ) ? $_POST['g-recaptcha-response'] : '';
270 $result = $recaptcha->verify( $response, $_SERVER['REMOTE_ADDR'] );
271
272 return ( true === $result );
273 }
274
275 add_action( 'init', 'sharing_init' );
276 add_action( 'add_meta_boxes', 'sharing_add_meta_box' );
277 add_action( 'save_post', 'sharing_meta_box_save' );
278 add_action( 'edit_attachment', 'sharing_meta_box_save' );
279 add_action( 'sharing_email_send_post', 'sharing_email_send_post' );
280 add_filter( 'sharing_email_can_send', 'sharing_email_check_for_spam_via_akismet' );
281 add_action( 'sharing_global_options', 'sharing_global_resources', 30 );
282 add_action( 'sharing_admin_update', 'sharing_global_resources_save' );
283 add_action( 'plugin_action_links_'.basename( dirname( __FILE__ ) ).'/'.basename( __FILE__ ), 'sharing_plugin_settings', 10, 4 );
284 add_filter( 'plugin_row_meta', 'sharing_add_plugin_settings', 10, 2 );
285
286 if ( defined( 'RECAPTCHA_PUBLIC_KEY' ) && defined( 'RECAPTCHA_PRIVATE_KEY' ) ) {
287 add_action( 'sharing_email_dialog', 'sharing_email_dialog' );
288 add_filter( 'sharing_email_check', 'sharing_email_check', 10, 3 );
289 }
290