PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.1
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 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 All 508 releases
← All changes | modules/likes/jetpack-likes-settings.php +240 -49 16.3-a.5 → 16.3-a.1 View file →
@@ -208,60 +208,88 @@
208 208
209 209 /**
210 210 * Should we register the Settings > Sharing screen ourselves?
211 211 *
212 - * @deprecated 16.3 Settings > Sharing is registered by Automattic\Jetpack\Sharing_Likes\Settings\Settings_Page.
212 + * Our settings are displayed on Settings > Sharing, but that screen is registered by
213 + * the Sharing (sharedaddy) module. When that module is off, nothing registers the
214 + * screen and our settings become unreachable.
213 215 *
216 + * WordPress.com Simple sites are excluded: the screen is registered elsewhere there.
217 + *
218 + * @since 16.2
219 + *
214 220 * @param bool $sharedaddy_active Whether the Sharing (sharedaddy) module is active.
215 221 * @return bool
216 222 */
217 - public function needs_own_sharing_menu( $sharedaddy_active ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
218 - _deprecated_function( __METHOD__, 'jetpack-16.3' );
219 - return false;
223 + public function needs_own_sharing_menu( $sharedaddy_active ) {
224 + return ! $sharedaddy_active && $this->in_jetpack;
220 225 }
221 226
222 227 /**
223 228 * Adds the 'sharing' menu to the settings menu.
224 - *
225 - * @deprecated 16.3 Use Automattic\Jetpack\Sharing_Likes\Settings\Settings_Page::register_menu() instead.
226 - *
227 - * @return void
229 + * Only ran when the Sharing (sharedaddy) module is inactive on a Jetpack site,
230 + * since Settings > Sharing is where our settings live. See needs_own_sharing_menu().
228 231 */
229 232 public function sharing_menu() {
230 - _deprecated_function( __METHOD__, 'jetpack-16.3', 'Automattic\Jetpack\Sharing_Likes\Settings\Settings_Page::register_menu' );
233 + add_submenu_page( 'options-general.php', esc_html__( 'Sharing Settings', 'jetpack' ), esc_html__( 'Sharing', 'jetpack' ), 'manage_options', 'sharing', array( $this, 'sharing_page' ) );
231 234 }
232 235
233 236 /**
234 - * Provides a sharing page with the sharing_global_options hook so we can display the setting.
235 - *
236 - * @deprecated 16.3 Use Automattic\Jetpack\Sharing_Likes\Settings\Settings_Page::render() instead.
237 - *
238 - * @return void
237 + * Provides a sharing page with the sharing_global_options hook
238 + * so we can display the setting.
239 + * Only ran when the Sharing (sharedaddy) module is inactive on a Jetpack site,
240 + * since Settings > Sharing is where our settings live. See needs_own_sharing_menu().
239 241 */
240 242 public function sharing_page() {
241 - _deprecated_function( __METHOD__, 'jetpack-16.3', 'Automattic\Jetpack\Sharing_Likes\Settings\Settings_Page::render' );
243 + $this->updated_message();
244 + ?>
245 + <div class="wrap">
246 + <div class="icon32" id="icon-options-general"><br /></div>
247 + <h1><?php esc_html_e( 'Sharing Settings', 'jetpack' ); ?></h1>
248 + <?php
249 + /** This action is documented in modules/sharedaddy/sharing.php */
250 + do_action( 'pre_admin_screen_sharing' );
251 + ?>
252 + <?php $this->sharing_block(); ?>
253 + </div>
254 + <?php
242 255 }
243 256
244 257 /**
245 258 * Returns the settings have been saved message.
246 - *
247 - * @deprecated 16.3 Use Automattic\Jetpack\Sharing_Likes\Settings\Settings_Page::render() instead.
248 - *
249 - * @return void
250 259 */
251 260 public function updated_message() {
252 - _deprecated_function( __METHOD__, 'jetpack-16.3', 'Automattic\Jetpack\Sharing_Likes\Settings\Settings_Page::render' );
261 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- ignoring since we are just displaying that the settings have been saved and not making any other changes to the site.
262 + if ( isset( $_GET['update'] ) && 'saved' === $_GET['update'] ) {
263 + echo '<div class="updated"><p>' . esc_html__( 'Settings have been saved', 'jetpack' ) . '</p></div>';
264 + }
253 265 }
254 266
255 267 /**
256 268 * Returns the Likes options block, so it can be inserted into different sharing page contexts.
257 269 *
258 - * @deprecated 16.3 Use Automattic\Jetpack\Sharing_Likes\Settings\Likes_Section::render() instead.
259 - *
260 - * @return void
270 + * Only rendered when the Sharing (sharedaddy) module is off, which is why the heading
271 + * does not mention sharing buttons: what lands under it is the Likes settings, the
272 + * "Show buttons on" setting that governs where Likes appear, and the Twitter Site Tag.
261 273 */
262 274 public function sharing_block() {
263 - _deprecated_function( __METHOD__, 'jetpack-16.3', 'Automattic\Jetpack\Sharing_Likes\Settings\Likes_Section::render' );
275 + ?>
276 + <h2><?php esc_html_e( 'Likes and Sharing', 'jetpack' ); ?></h2>
277 + <form method="post" action="">
278 + <table class="form-table">
279 + <tbody>
280 + <?php
281 + /** This action is documented in modules/sharedaddy/sharing.php */
282 + do_action( 'sharing_global_options' );
283 + ?>
284 + </tbody>
285 + </table>
286 +
287 + <p class="submit">
288 + <input type="submit" name="submit" class="button-primary" value="<?php esc_attr_e( 'Save Changes', 'jetpack' ); ?>" />
289 + <?php wp_nonce_field( 'sharing-options' ); ?>
290 + </form>
291 + <?php
264 292 }
265 293
266 294 /**
267 295 * Are likes enabled for this post?
@@ -589,15 +617,69 @@
589 617 }
590 618
591 619 /**
592 620 * The actual options block to be inserted into the sharing page.
593 - *
594 - * @deprecated 16.3 Use Automattic\Jetpack\Sharing_Likes\Settings\Likes_Section::render() instead.
595 - *
596 - * @return void
597 621 */
598 622 public function admin_settings_init() {
599 - _deprecated_function( __METHOD__, 'jetpack-16.3', 'Automattic\Jetpack\Sharing_Likes\Settings\Likes_Section::render' );
623 + ?>
624 + <tr>
625 + <th scope="row">
626 + <label><?php esc_html_e( 'WordPress.com Likes are', 'jetpack' ); ?></label>
627 + </th>
628 + <td>
629 + <div>
630 + <label>
631 + <input type="radio" class="code" name="wpl_default" value="on" <?php checked( $this->is_enabled_sitewide(), true ); ?> />
632 + <?php esc_html_e( 'On for all posts', 'jetpack' ); ?>
633 + </label>
634 + </div>
635 + <div>
636 + <label>
637 + <input type="radio" class="code" name="wpl_default" value="off" <?php checked( $this->is_enabled_sitewide(), false ); ?> />
638 + <?php esc_html_e( 'Turned on per post', 'jetpack' ); ?>
639 + </label>
640 + <div>
641 + </td>
642 + </tr>
643 + <?php if ( ! $this->in_jetpack ) : ?>
644 + <tr>
645 + <th scope="row">
646 + <label><?php esc_html_e( 'WordPress.com Reblog Button', 'jetpack' ); ?></label>
647 + </th>
648 + <td>
649 + <div>
650 + <label>
651 + <input type="radio" class="code" name="jetpack_reblogs_enabled" value="on" <?php checked( $this->reblogs_enabled_sitewide(), true ); ?> />
652 + <?php esc_html_e( 'Show the Reblog button on posts', 'jetpack' ); ?>
653 + </label>
654 + </div>
655 + <div>
656 + <label>
657 + <input type="radio" class="code" name="jetpack_reblogs_enabled" value="off" <?php checked( $this->reblogs_enabled_sitewide(), false ); ?> />
658 + <?php esc_html_e( 'Don\'t show the Reblog button on posts', 'jetpack' ); ?>
659 + </label>
660 + </div>
661 + </td>
662 + </tr>
663 + <!-- WPCOM only: Comment Likes -->
664 + <?php if ( ! $this->in_jetpack ) : ?>
665 + <tr>
666 + <th scope="row">
667 + <label><?php esc_html_e( 'Comment Likes are', 'jetpack' ); ?></label>
668 + </th>
669 + <td>
670 + <div>
671 + <label>
672 + <input type="checkbox" class="code" name="jetpack_comment_likes_enabled" value="1" <?php checked( $this->is_comments_enabled(), true ); ?> />
673 + <?php esc_html_e( 'On for all comments', 'jetpack' ); ?>
674 + </label>
675 + </div>
676 + </td>
677 + </tr>
678 + <?php endif; ?>
679 + <?php endif; ?>
680 + </tbody> <?php // closes the tbody attached to sharing_show_buttons_on_row_start... ?>
681 + <?php
600 682 }
601 683
602 684 /**
603 685 * Returns the current state of the "WordPress.com Reblogs are" option.
@@ -639,46 +721,155 @@
639 721 }
640 722
641 723 /**
642 724 * Saves the setting in the database.
643 - *
644 - * @deprecated 16.3 Use Automattic\Jetpack\Sharing_Likes\Settings\Post_Handler::maybe_handle() instead.
645 - *
646 - * @return void
647 725 */
648 726 public function admin_settings_callback() {
649 - _deprecated_function( __METHOD__, 'jetpack-16.3', 'Automattic\Jetpack\Sharing_Likes\Settings\Post_Handler::maybe_handle' );
727 + if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'sharing-options' ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- WordPress core doesn't unslash or verify nonces either.
728 + return;
729 + }
730 +
731 + // We're looking for these, and doing a dance to set some stats and save
732 + // them together in array option.
733 + if ( ! empty( $_POST['wpl_default'] ) ) {
734 + $new_state = sanitize_text_field( wp_unslash( $_POST['wpl_default'] ) );
735 + } else {
736 + $new_state = 'on';
737 + }
738 +
739 + if ( ! empty( $_POST['jetpack_reblogs_enabled'] ) ) {
740 + $reblogs_new_state = sanitize_text_field( wp_unslash( $_POST['jetpack_reblogs_enabled'] ) );
741 + } else {
742 + $reblogs_new_state = 'on';
743 + }
744 +
745 + // Checked (enabled)
746 + switch ( $new_state ) {
747 + case 'off':
748 + update_option( 'disabled_likes', 1 );
749 + break;
750 + case 'on':
751 + default:
752 + delete_option( 'disabled_likes' );
753 + break;
754 + }
755 +
756 + switch ( $reblogs_new_state ) {
757 + case 'off':
758 + update_option( 'disabled_reblogs', 1 );
759 + break;
760 + case 'on':
761 + default:
762 + delete_option( 'disabled_reblogs' );
763 + break;
764 + }
765 +
766 + // WPCOM only: Comment Likes
767 + if ( ! $this->in_jetpack ) {
768 + if ( ! empty( $_POST['jetpack_comment_likes_enabled'] ) ) {
769 + $new_comments_state = sanitize_text_field( wp_unslash( $_POST['jetpack_comment_likes_enabled'] ) );
770 + } else {
771 + $new_comments_state = false;
772 + }
773 + switch ( (bool) $new_comments_state ) {
774 + case true:
775 + update_option( 'jetpack_comment_likes_enabled', 1 );
776 + break;
777 + case false:
778 + default:
779 + update_option( 'jetpack_comment_likes_enabled', 0 );
780 + break;
781 + }
782 + }
650 783 }
651 784
652 785 /**
653 786 * Adds the admin update hook so we can save settings even if Sharedaddy is not enabled.
654 - *
655 - * @deprecated 16.3 Use Automattic\Jetpack\Sharing_Likes\Settings\Post_Handler::maybe_handle() instead.
656 - *
657 - * @return void
658 787 */
659 788 public function process_update_requests_if_sharedaddy_not_loaded() {
660 - _deprecated_function( __METHOD__, 'jetpack-16.3', 'Automattic\Jetpack\Sharing_Likes\Settings\Post_Handler::maybe_handle' );
789 + if ( isset( $_GET['page'] ) && ( $_GET['page'] === 'sharing.php' || $_GET['page'] === 'sharing' ) ) {
790 + if ( isset( $_POST['_wpnonce'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'sharing-options' ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- WordPress core doesn't unslash or verify nonces either.
791 + /** This action is documented in modules/sharedaddy/sharing.php */
792 + do_action( 'sharing_admin_update' );
793 + wp_safe_redirect( admin_url( 'options-general.php?page=sharing&update=saved' ) );
794 + die( 0 );
795 + }
796 + }
661 797 }
662 798
663 799 /**
664 800 * If sharedaddy is not loaded, we don't have the "Show buttons on" yet, so we need to add that since it affects likes too.
665 - *
666 - * @deprecated 16.3 Use Automattic\Jetpack\Sharing_Likes\Settings\Placement_Section::render() instead.
667 - *
668 - * @return void
669 801 */
670 802 public function admin_settings_showbuttonon_init() {
671 - _deprecated_function( __METHOD__, 'jetpack-16.3', 'Automattic\Jetpack\Sharing_Likes\Settings\Placement_Section::render' );
803 + /** This action is documented in modules/sharedaddy/sharing.php */
804 + echo apply_filters( 'sharing_show_buttons_on_row_start', '<tr valign="top">' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
805 + ?>
806 + <th scope="row"><label><?php esc_html_e( 'Show buttons on', 'jetpack' ); ?></label></th>
807 + <td>
808 + <?php
809 + $br = false;
810 + $shows = array_values( get_post_types( array( 'public' => true ) ) );
811 + array_unshift( $shows, 'index' );
812 + $global = $this->get_options();
813 + foreach ( $shows as $show ) :
814 + if ( 'index' === $show ) {
815 + $label = __( 'Front Page, Archive Pages, and Search Results', 'jetpack' );
816 + } else {
817 + $post_type_object = get_post_type_object( $show );
818 + $label = $post_type_object->labels->name;
819 + }
820 +
821 + if ( $br ) {
822 + echo '<br />';
823 + }
824 + ?>
825 + <label><input type="checkbox"<?php checked( in_array( $show, $global['show'], true ) ); ?> name="show[]" value="<?php echo esc_attr( $show ); ?>" /> <?php echo esc_html( $label ); ?></label>
826 + <?php
827 + $br = true;
828 + endforeach;
829 + ?>
830 + </td>
831 + <?php
832 + /** This action is documented in modules/sharedaddy/sharing.php */
833 + echo apply_filters( 'sharing_show_buttons_on_row_end', '</tr>' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
672 834 }
673 835
674 836 /**
675 837 * If sharedaddy is not loaded, we still need to save the the settings of the "Show buttons on" option.
676 - *
677 - * @deprecated 16.3 Use Automattic\Jetpack\Sharing_Likes\Settings\Post_Handler::maybe_handle() instead.
678 - *
679 - * @return void
680 838 */
681 839 public function admin_settings_showbuttonon_callback() {
682 - _deprecated_function( __METHOD__, 'jetpack-16.3', 'Automattic\Jetpack\Sharing_Likes\Settings\Post_Handler::maybe_handle' );
840 + $options = get_option( 'sharing-options' );
841 + if ( ! is_array( $options ) ) {
842 + $options = array();
843 + }
844 +
845 + $shows = array_values( get_post_types( array( 'public' => true ) ) );
846 + $shows[] = 'index';
847 + // phpcs:ignore WordPress.Security.NonceVerification.Missing -- triggered due to the 'sharing_admin_update' action, but the code in sharing.php checks for the nonce before firing the action.
848 + $data = $_POST;
849 +
850 + if ( isset( $data['show'] ) ) {
851 + if ( is_scalar( $data['show'] ) ) {
852 + switch ( $data['show'] ) {
853 + case 'posts':
854 + $data['show'] = array( 'post', 'page' );
855 + break;
856 + case 'index':
857 + $data['show'] = array( 'index' );
858 + break;
859 + case 'posts-index':
860 + $data['show'] = array( 'post', 'page', 'index' );
861 + break;
862 + }
863 + }
864 +
865 + $data['show'] = array_intersect( $data['show'], $shows );
866 + if ( $data['show'] ) {
867 + $options['global']['show'] = $data['show'];
868 + }
869 + } else {
870 + $options['global']['show'] = array();
871 + }
872 +
873 + update_option( 'sharing-options', $options );
683 874 }
684 875 }