PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 14.9
Jetpack – WP Security, Backup, Speed, & Growth v14.9
16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 All 501 releases
jetpack / modules / sharedaddy / sharedaddy.php

sharedaddy.php in Jetpack – WP Security, Backup, Speed, & Growth 14.9, at modules/sharedaddy/sharedaddy.php

230 lines 6.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Jetpack's Sharing feature, nee Sharedaddy.
4 * The most super duper sharing tool on the interwebs.
5 *
6 * @package automattic/jetpack
7 */
8
9 // Set up Sharing in wp-admin.
10 require_once plugin_dir_path( __FILE__ ) . 'sharing.php';
11
12 /**
13 * Add a meta box to the post editing screen for sharing.
14 *
15 * @return void
16 */
17 function sharing_add_meta_box() {
18 global $post;
19 if ( empty( $post ) ) { // If a current post is not defined, such as when editing a comment.
20 return;
21 }
22
23 /**
24 * Filter whether to display the Sharing Meta Box or not.
25 *
26 * @module sharedaddy
27 *
28 * @since 3.8.0
29 *
30 * @param bool true Display Sharing Meta Box.
31 * @param $post Post.
32 */
33 if ( ! apply_filters( 'sharing_meta_box_show', true, $post ) ) {
34 return;
35 }
36
37 $post_types = get_post_types( array( 'public' => true ) );
38 /**
39 * Filter the Sharing Meta Box title.
40 *
41 * @module sharedaddy
42 *
43 * @since 2.2.0
44 *
45 * @param string $var Sharing Meta Box title. Default is "Sharing".
46 */
47 $title = apply_filters( 'sharing_meta_box_title', __( 'Sharing', 'jetpack' ) );
48 if ( $post->ID !== get_option( 'page_for_posts' ) ) {
49 foreach ( $post_types as $post_type ) {
50 add_meta_box( 'sharing_meta', $title, 'sharing_meta_box_content', $post_type, 'side', 'default', array( '__back_compat_meta_box' => true ) );
51 }
52 }
53 }
54
55 /**
56 * Content of the meta box.
57 *
58 * @param WP_Post $post The post to share.
59 *
60 * @return void
61 */
62 function sharing_meta_box_content( $post ) {
63 /**
64 * Fires before the sharing meta box content.
65 *
66 * @module sharedaddy
67 *
68 * @since 2.2.0
69 *
70 * @param WP_Post $post The post to share.
71 */
72 do_action( 'start_sharing_meta_box_content', $post );
73
74 $disabled = get_post_meta( $post->ID, 'sharing_disabled', true ); ?>
75
76 <p>
77 <label for="enable_post_sharing">
78 <input type="checkbox" name="enable_post_sharing" id="enable_post_sharing" value="1" <?php checked( ! $disabled ); ?>>
79 <?php esc_html_e( 'Show sharing buttons.', 'jetpack' ); ?>
80 </label>
81 <input type="hidden" name="sharing_status_hidden" value="1" />
82 </p>
83
84 <?php
85 /**
86 * Fires after the sharing meta box content.
87 *
88 * @module sharedaddy
89 *
90 * @since 2.2.0
91 *
92 * @param WP_Post $post The post to share.
93 */
94 do_action( 'end_sharing_meta_box_content', $post );
95 }
96
97 /**
98 * Save new sharing status in post meta in the meta box.
99 *
100 * @param int $post_id Post ID.
101 *
102 * @return int
103 */
104 function sharing_meta_box_save( $post_id ) {
105 if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
106 return $post_id;
107 }
108
109 if ( ! isset( $_POST['post_type'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Core takes care of the validation.
110 return $post_id;
111 }
112
113 $post_type_object = get_post_type_object( sanitize_key( $_POST['post_type'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Core takes care of the validation.
114
115 // Record sharing disable.
116 if (
117 $post_type_object->public
118 && current_user_can( 'edit_post', $post_id )
119 && isset( $_POST['sharing_status_hidden'] ) // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Core takes care of the validation.
120 ) {
121 if ( ! isset( $_POST['enable_post_sharing'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Core takes care of the validation.
122 update_post_meta( $post_id, 'sharing_disabled', 1 );
123 } else {
124 delete_post_meta( $post_id, 'sharing_disabled' );
125 }
126 }
127
128 return $post_id;
129 }
130
131 /**
132 * If Sharing is disabled, disable the meta box.
133 *
134 * @param bool $protected Whether the key is considered protected.
135 * @param string $meta_key Metadata key.
136 *
137 * @return bool
138 */
139 function sharing_meta_box_protected( $protected, $meta_key ) {
140 if ( 'sharing_disabled' === $meta_key ) {
141 $protected = true;
142 }
143
144 return $protected;
145 }
146 add_filter( 'is_protected_meta', 'sharing_meta_box_protected', 10, 2 );
147
148 /**
149 * Add link to sharing settings in the Plugins screen.
150 *
151 * @param array $links An array of plugin action links.
152 *
153 * @return array
154 */
155 function sharing_plugin_settings( $links ) {
156 $settings_link = '<a href="options-general.php?page=sharing.php">' . __( 'Settings', 'jetpack' ) . '</a>';
157 array_unshift( $links, $settings_link );
158 return $links;
159 }
160
161 /**
162 * Add links to settings and support in the plugin row.
163 *
164 * @param array $links An array of the plugin's metadata, including the version, author, author URI, and plugin URI.
165 * @param string $file Path to the plugin file relative to the plugins directory.
166 *
167 * @return array
168 */
169 function sharing_add_plugin_settings( $links, $file ) {
170 if ( $file === basename( __DIR__ ) . '/' . basename( __FILE__ ) ) {
171 $links[] = '<a href="options-general.php?page=sharing.php">' . __( 'Settings', 'jetpack' ) . '</a>';
172 $links[] = '<a href="https://support.wordpress.com/sharing/" rel="noopener noreferrer" target="_blank">' . __( 'Support', 'jetpack' ) . '</a>';
173 }
174
175 return $links;
176 }
177
178 /**
179 * Disable sharing on the frontend if disabled in the admin.
180 *
181 * @return void
182 */
183 function sharing_init() {
184 if ( Jetpack_Options::get_option_and_ensure_autoload( 'sharedaddy_disable_resources', '0' ) ) {
185 add_filter( 'sharing_js', '__return_false' );
186 remove_action( 'wp_head', 'sharing_add_header', 1 );
187 }
188 }
189
190 /**
191 * Add settings to disable CSS and JS normally enqueued by our feature.
192 *
193 * @return void
194 */
195 function sharing_global_resources() {
196 $disable = get_option( 'sharedaddy_disable_resources' );
197 ?>
198 <tr valign="top">
199 <th scope="row"><label for="disable_css"><?php esc_html_e( 'Disable CSS and JS', 'jetpack' ); ?></label></th>
200 <td>
201 <?php
202 printf(
203 '<input id="disable_css" type="checkbox" name="disable_resources"%1$s /> <small><em>%2$s</em></small>',
204 ( 1 == $disable ) ? ' checked="checked"' : '', // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual
205 esc_html__( 'Advanced. If this option is checked, you must include these files in your theme manually for the sharing links to work.', 'jetpack' )
206 );
207 ?>
208 </td>
209 </tr>
210 <?php
211 }
212
213 /**
214 * Save settings to disable CSS and JS normally enqueued by our feature.
215 *
216 * @return void
217 */
218 function sharing_global_resources_save() {
219 update_option( 'sharedaddy_disable_resources', isset( $_POST['disable_resources'] ) ? 1 : 0 ); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- nonce handling is handled for all elements at once.
220 }
221
222 add_action( 'init', 'sharing_init' );
223 add_action( 'add_meta_boxes', 'sharing_add_meta_box' );
224 add_action( 'save_post', 'sharing_meta_box_save' );
225 add_action( 'edit_attachment', 'sharing_meta_box_save' );
226 add_action( 'sharing_global_options', 'sharing_global_resources', 30 );
227 add_action( 'sharing_admin_update', 'sharing_global_resources_save' );
228 add_action( 'plugin_action_links_' . basename( __DIR__ ) . '/' . basename( __FILE__ ), 'sharing_plugin_settings', 10, 4 );
229 add_filter( 'plugin_row_meta', 'sharing_add_plugin_settings', 10, 2 );
230