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