Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 48
44.44% covered (danger)
44.44%
4 / 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
n/a
0 / 0
n/a
0 / 0
1
sharing_add_plugin_settings
n/a
0 / 0
n/a
0 / 0
1
sharing_init
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
sharing_global_resources
n/a
0 / 0
n/a
0 / 0
1
sharing_global_resources_save
n/a
0 / 0
n/a
0 / 0
1
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 * @deprecated 16.3 Sharing has not shipped as a standalone plugin for years.
157 *
158 * @param array $links An array of plugin action links.
159 *
160 * @return array The unchanged $links.
161 */
162function sharing_plugin_settings( $links ) {
163    _deprecated_function( __FUNCTION__, 'jetpack-16.3' );
164    return $links;
165}
166
167/**
168 * Add links to settings and support in the plugin row.
169 *
170 * @deprecated 16.3 Sharing has not shipped as a standalone plugin for years.
171 *
172 * @param array  $links An array of the plugin's metadata, including the version, author, author URI, and plugin URI.
173 * @param string $file  Path to the plugin file relative to the plugins directory.
174 *
175 * @return array The unchanged $links.
176 */
177function sharing_add_plugin_settings( $links, $file ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
178    _deprecated_function( __FUNCTION__, 'jetpack-16.3' );
179    return $links;
180}
181
182/**
183 * Disable sharing on the frontend if disabled in the admin.
184 *
185 * @return void
186 */
187function sharing_init() {
188    if ( Jetpack_Options::get_option_and_ensure_autoload( 'sharedaddy_disable_resources', '0' ) ) {
189        add_filter( 'sharing_js', '__return_false' );
190        remove_action( 'wp_head', 'sharing_add_header', 1 );
191    }
192}
193
194/**
195 * Add settings to disable CSS and JS normally enqueued by our feature.
196 *
197 * @deprecated 16.3 Settings > Sharing renders the field itself.
198 *
199 * @return void
200 */
201function sharing_global_resources() {
202    _deprecated_function( __FUNCTION__, 'jetpack-16.3', 'Automattic\Jetpack\Sharing_Likes\Settings\Sharing_Resources::render' );
203}
204
205/**
206 * Save settings to disable CSS and JS normally enqueued by our feature.
207 *
208 * @deprecated 16.3 Settings > Sharing saves the field itself.
209 *
210 * @return void
211 */
212function sharing_global_resources_save() {
213    _deprecated_function( __FUNCTION__, 'jetpack-16.3', 'Automattic\Jetpack\Sharing_Likes\Settings\Sharing_Resources::save' );
214}
215
216add_action( 'init', 'sharing_init' );
217add_action( 'add_meta_boxes', 'sharing_add_meta_box' );
218add_action( 'save_post', 'sharing_meta_box_save' );
219add_action( 'edit_attachment', 'sharing_meta_box_save' );