2022-06-16 14:01:47 +02:00
< ? php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2019-11-15 23:26:29 +01:00
use Automattic\Jetpack\Sync\Settings ;
2022-06-16 14:01:47 +02:00
/**
* Jetpack likes settings class .
*/
2019-11-15 23:26:29 +01:00
class Jetpack_Likes_Settings {
2022-06-16 14:01:47 +02:00
/**
* Constructor function .
*/
public function __construct () {
2019-11-15 23:26:29 +01:00
$this -> in_jetpack = ! ( defined ( 'IS_WPCOM' ) && IS_WPCOM );
}
/**
* Replaces the " Sharing " title for the post screen metabox with " Likes and Shares "
*/
public function add_likes_to_sharing_meta_box_title () {
return __ ( 'Likes and Shares' , 'jetpack' );
}
/**
* Adds a metabox to the post screen if the sharing one doesn ' t currently exist .
*/
public function add_meta_box () {
if (
/**
* Allow disabling of the Likes metabox on the post editor screen .
*
* @ module likes
*
* @ since 2.2 . 0
*
* @ param bool false Should the Likes metabox be disabled ? Default to false .
*/
apply_filters ( 'post_flair_disable' , false )
) {
return ;
}
$post_types = get_post_types ( array ( 'public' => true ) );
/**
* Filters the Likes metabox title .
*
* @ module likes
*
* @ since 2.2 . 0
*
* @ param string Likes metabox title . Default to " Likes " .
*/
$title = apply_filters ( 'likes_meta_box_title' , __ ( 'Likes' , 'jetpack' ) );
2022-04-02 10:26:41 +02:00
foreach ( $post_types as $post_type ) {
2019-11-15 23:26:29 +01:00
add_meta_box ( 'likes_meta' , $title , array ( $this , 'meta_box_content' ), $post_type , 'side' , 'default' , array ( '__back_compat_meta_box' => true ) );
}
}
/**
* Shows the likes option in the post screen metabox .
2022-06-16 14:01:47 +02:00
*
* @ param object $post - the post object .
2019-11-15 23:26:29 +01:00
*/
public function meta_box_content ( $post ) {
2022-04-02 10:26:41 +02:00
$post_id = ! empty ( $post -> ID ) ? ( int ) $post -> ID : get_the_ID ();
2019-11-15 23:26:29 +01:00
$checked = true ;
$disabled = ! $this -> is_enabled_sitewide ();
$switched_status = get_post_meta ( $post_id , 'switch_like_status' , true );
if ( $disabled && empty ( $switched_status ) || ! $disabled && $switched_status === '0' ) {
$checked = false ;
}
/**
* Fires before the Likes meta box content in the post editor .
*
* @ module likes
*
* @ since 2.2 . 0
*
* @ param WP_Post | array | null $post Post data .
*/
do_action ( 'start_likes_meta_box_content' , $post );
?>
< p >
< label for = " wpl_enable_post_likes " >
< input type = " checkbox " name = " wpl_enable_post_likes " id = " wpl_enable_post_likes " value = " 1 " < ? php checked ( $checked ); ?> >
< ? php esc_html_e ( 'Show likes.' , 'jetpack' ); ?>
</ label >
< input type = " hidden " name = " wpl_like_status_hidden " value = " 1 " />
2022-06-16 14:01:47 +02:00
< ? php wp_nonce_field ( 'likes-and-shares' , '_likesharenonce' ); ?>
2022-04-02 10:26:41 +02:00
</ p >
< ? php
2019-11-15 23:26:29 +01:00
/**
* Fires after the Likes meta box content in the post editor .
*
* @ module likes
*
* @ since 2.2 . 0
*
* @ param WP_Post | array | null $post Post data .
*/
do_action ( 'end_likes_meta_box_content' , $post );
}
/**
* Returns the current state of the " WordPress.com Likes are " option .
2022-04-02 10:26:41 +02:00
*
2019-11-15 23:26:29 +01:00
* @ return boolean true if enabled sitewide , false if not
*/
public function is_enabled_sitewide () {
/**
* Filters whether Likes are enabled by default on all posts .
* true if enabled sitewide , false if not .
*
* @ module likes
*
* @ since 2.2 . 0
*
* @ param bool $option Are Likes enabled sitewide .
*/
return ( bool ) apply_filters ( 'wpl_is_enabled_sitewide' , ! Jetpack_Options :: get_option_and_ensure_autoload ( 'disabled_likes' , 0 ) );
}
2022-06-16 14:01:47 +02:00
/**
* Handle meta box saving .
*
* @ param int $post_id - the post ID .
*/
2019-11-15 23:26:29 +01:00
public function meta_box_save ( $post_id ) {
2022-04-02 10:26:41 +02:00
if ( defined ( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
2019-11-15 23:26:29 +01:00
return $post_id ;
}
2022-06-16 14:01:47 +02:00
if ( empty ( $_POST [ 'wpl_like_status_hidden' ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- we're not changing anything on the site.
return $post_id ;
}
if ( ! isset ( $_POST [ '_likesharenonce' ] ) || ! wp_verify_nonce ( $_POST [ '_likesharenonce' ], 'likes-and-shares' ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- WordPress core doesn't unslash or verify nonces either.
2019-11-15 23:26:29 +01:00
return $post_id ;
}
2022-04-02 10:26:41 +02:00
// Record sharing disable. Only needs to be done for WPCOM.
2019-11-15 23:26:29 +01:00
if ( ! $this -> in_jetpack ) {
2022-06-16 14:01:47 +02:00
if ( isset ( $_POST [ 'post_type' ] ) && in_array ( $_POST [ 'post_type' ], get_post_types ( array ( 'public' => true ) ), true ) ) {
2019-11-15 23:26:29 +01:00
if ( ! isset ( $_POST [ 'wpl_enable_post_sharing' ] ) ) {
update_post_meta ( $post_id , 'sharing_disabled' , 1 );
} else {
delete_post_meta ( $post_id , 'sharing_disabled' );
}
}
}
2022-06-16 14:01:47 +02:00
if ( 'post' === $_POST [ 'post_type' ] ) {
2022-04-02 10:26:41 +02:00
if ( ! current_user_can ( 'edit_post' , $post_id ) ) {
2019-11-15 23:26:29 +01:00
return $post_id ;
}
}
// Record a change in like status for this post - only if it contradicts the
// site like setting. If it doesn't contradict, then we delete the new individual status.
if ( ! $this -> is_enabled_sitewide () && ! empty ( $_POST [ 'wpl_enable_post_likes' ] ) ) {
2022-04-02 10:26:41 +02:00
// Likes turned on for individual posts. User wants to add the button to a single post.
2019-11-15 23:26:29 +01:00
update_post_meta ( $post_id , 'switch_like_status' , 1 );
2022-04-02 10:26:41 +02:00
} elseif ( $this -> is_enabled_sitewide () && empty ( $_POST [ 'wpl_enable_post_likes' ] ) ) {
// Likes turned on for all posts. User wants to remove the button from a single post.
2019-11-15 23:26:29 +01:00
update_post_meta ( $post_id , 'switch_like_status' , 0 );
2022-04-02 10:26:41 +02:00
} elseif (
( ! $this -> is_enabled_sitewide () && empty ( $_POST [ 'wpl_enable_post_likes' ] ) ) ||
( $this -> is_enabled_sitewide () && ! empty ( $_POST [ 'wpl_enable_post_likes' ] ) )
2019-11-15 23:26:29 +01:00
) {
// User wants to update the likes button status for an individual post, but the new status
// is the same as if they're asking for the default behavior according to the current Likes setting.
// So we delete the meta.
delete_post_meta ( $post_id , 'switch_like_status' );
}
return $post_id ;
}
/**
2022-06-16 14:01:47 +02:00
* WordPress . com : Metabox option for sharing ( sharedaddy will handle this on the JP blog ) .
*
* @ param object $post - the post object .
2019-11-15 23:26:29 +01:00
*/
public function sharing_meta_box_content ( $post ) {
2022-04-02 10:26:41 +02:00
$post_id = ! empty ( $post -> ID ) ? ( int ) $post -> ID : get_the_ID ();
$disabled = get_post_meta ( $post_id , 'sharing_disabled' , true );
?>
2019-11-15 23:26:29 +01:00
< p >
< label for = " wpl_enable_post_sharing " >
< input type = " checkbox " name = " wpl_enable_post_sharing " id = " wpl_enable_post_sharing " value = " 1 " < ? php checked ( ! $disabled ); ?> >
2022-06-16 14:01:47 +02:00
< ? php esc_html_e ( 'Show sharing buttons.' , 'jetpack' ); ?>
2019-11-15 23:26:29 +01:00
</ label >
< input type = " hidden " name = " wpl_sharing_status_hidden " value = " 1 " />
2022-04-02 10:26:41 +02:00
</ p >
< ? php
2019-11-15 23:26:29 +01:00
}
/**
* Adds the 'sharing' menu to the settings menu .
* Only ran if sharedaddy and publicize are not already active .
*/
2022-04-02 10:26:41 +02:00
public function sharing_menu () {
2019-11-15 23:26:29 +01:00
add_submenu_page ( 'options-general.php' , esc_html__ ( 'Sharing Settings' , 'jetpack' ), esc_html__ ( 'Sharing' , 'jetpack' ), 'manage_options' , 'sharing' , array ( $this , 'sharing_page' ) );
}
/**
* Provides a sharing page with the sharing_global_options hook
* so we can display the setting .
* Only ran if sharedaddy and publicize are not already active .
*/
2022-04-02 10:26:41 +02:00
public function sharing_page () {
$this -> updated_message ();
?>
2019-11-15 23:26:29 +01:00
< div class = " wrap " >
< div class = " icon32 " id = " icon-options-general " >< br /></ div >
< h1 >< ? php esc_html_e ( 'Sharing Settings' , 'jetpack' ); ?> </h1>
< ? php
/** This action is documented in modules/sharedaddy/sharing.php */
do_action ( 'pre_admin_screen_sharing' );
?>
< ? php $this -> sharing_block (); ?>
2022-04-02 10:26:41 +02:00
</ div >
< ? php
2019-11-15 23:26:29 +01:00
}
/**
* Returns the settings have been saved message .
*/
2022-04-02 10:26:41 +02:00
public function updated_message () {
// 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.
if ( isset ( $_GET [ 'update' ] ) && 'saved' === $_GET [ 'update' ] ) {
2019-11-15 23:26:29 +01:00
echo '<div class="updated"><p>' . esc_html__ ( 'Settings have been saved' , 'jetpack' ) . '</p></div>' ;
}
}
/**
* Returns just the " sharing buttons " w / like option block , so it can be inserted into different sharing page contexts
*/
2022-04-02 10:26:41 +02:00
public function sharing_block () {
?>
2019-11-15 23:26:29 +01:00
< h2 >< ? php esc_html_e ( 'Sharing Buttons' , 'jetpack' ); ?> </h2>
< form method = " post " action = " " >
< table class = " form-table " >
< tbody >
< ? php
/** This action is documented in modules/sharedaddy/sharing.php */
do_action ( 'sharing_global_options' );
?>
</ tbody >
</ table >
< p class = " submit " >
2022-04-02 10:26:41 +02:00
< input type = " submit " name = " submit " class = " button-primary " value = " <?php esc_attr_e( 'Save Changes', 'jetpack' ); ?> " />
< ? php wp_nonce_field ( 'sharing-options' ); ?>
</ form >
< ? php
2019-11-15 23:26:29 +01:00
}
/**
* Are likes enabled for this post ?
*
2022-06-16 14:01:47 +02:00
* @ param int $post_id - the post ID .
2019-11-15 23:26:29 +01:00
* @ return bool
*/
2022-06-16 14:01:47 +02:00
public function is_post_likeable ( $post_id = 0 ) {
2019-11-15 23:26:29 +01:00
$post = get_post ( $post_id );
if ( ! $post || is_wp_error ( $post ) ) {
return false ;
}
$sitewide_likes_enabled = ( bool ) $this -> is_enabled_sitewide ();
$post_likes_switched = get_post_meta ( $post -> ID , 'switch_like_status' , true );
2022-04-02 10:26:41 +02:00
/*
* On WPCOM , headstart was inserting bad data for post_likes_switched .
* it was wrapping the boolean value in an array . The array is always truthy regardless of its contents .
* There was another bug where truthy values were ignored if the global like setting was false .
* So in effect , the values for headstart never had an inpact .
* Delete the $post_likes_switched flag in this case in order to keep the behaviour as it was .
*/
if ( is_array ( $post_likes_switched ) ) {
$post_likes_switched = null ;
}
/*
* on WPCOM , we need to look at post edit date so we don ' t break old posts
* if post edit date predates this code , stick with the former ( buggy ) behavior
* see : p7DVsv - 64 H - p2
*/
2019-11-15 23:26:29 +01:00
$last_modified_time = strtotime ( $post -> post_modified_gmt );
2022-04-02 10:26:41 +02:00
$behavior_was_changed_at = strtotime ( '2019-02-22 00:40:42' );
2019-11-15 23:26:29 +01:00
if ( $this -> in_jetpack || $last_modified_time > $behavior_was_changed_at ) {
2022-04-02 10:26:41 +02:00
/*
* the new and improved behavior on Jetpack and recent WPCOM posts :
* $post_likes_switched is empty to follow site setting ,
* 0 if we want likes disabled , 1 if we want likes enabled .
*/
2019-11-15 23:26:29 +01:00
return $post_likes_switched || ( $sitewide_likes_enabled && $post_likes_switched !== '0' );
}
2022-04-02 10:26:41 +02:00
// implicit else (old behavior): $post_likes_switched simply inverts the global setting.
2019-11-15 23:26:29 +01:00
return ( ( bool ) $post_likes_switched ) xor $sitewide_likes_enabled ;
}
2022-04-02 10:26:41 +02:00
/**
* Is the like button itself visible ( as opposed to the reblog button )
*
* If called from within The Loop or if called with a $post_id set , then the post will be checked .
* Otherwise the sitewide setting will be used .
*
* @ param int $post_id The ID of the post being rendered . Defaults to the current post if called from within The Loop .
* @ return bool
*/
public function is_likes_button_visible ( $post_id = 0 ) {
if ( in_the_loop () || $post_id ) {
// If in The Loop, is_post_likeable will check the current post.
return $this -> is_post_likeable ( $post_id );
} else {
// Otherwise, check and see if likes are enabled sitewide.
return $this -> is_enabled_sitewide ();
}
}
2019-11-15 23:26:29 +01:00
/**
* Are likes visible in this context ?
*
* Some of this code was taken and modified from sharing_display () to ensure
* similar logic and filters apply here , too .
*/
2022-06-16 14:01:47 +02:00
public function is_likes_visible () {
2019-11-15 23:26:29 +01:00
if ( Settings :: is_syncing () ) {
return false ;
}
2022-04-02 10:26:41 +02:00
return $this -> is_likes_button_visible () && $this -> is_likes_module_enabled ();
}
/**
* Apply filters to determine if the likes module itself is enabled
*
* @ return bool
*/
public function is_likes_module_enabled () {
global $wp_current_filter ; // Used to apply 'sharing_show' filter.
2019-11-15 23:26:29 +01:00
2022-04-02 10:26:41 +02:00
$post = get_post ();
$enabled = true ;
2019-11-15 23:26:29 +01:00
2022-04-02 10:26:41 +02:00
// Never show on feeds or previews.
2019-11-15 23:26:29 +01:00
if ( is_feed () || is_preview () ) {
$enabled = false ;
// Not a feed or preview, so what is it?
} else {
2022-04-02 10:26:41 +02:00
if ( post_password_required () ) {
2019-11-15 23:26:29 +01:00
$enabled = false ;
2022-04-02 10:26:41 +02:00
}
2019-11-15 23:26:29 +01:00
2022-06-16 14:01:47 +02:00
if ( in_array ( 'get_the_excerpt' , ( array ) $wp_current_filter , true ) ) {
2019-11-15 23:26:29 +01:00
$enabled = false ;
}
// Sharing Setting Overrides ****************************************
2022-04-02 10:26:41 +02:00
// Single post including custom post types.
2019-11-15 23:26:29 +01:00
if ( is_single () ) {
2020-09-15 14:30:05 +02:00
if ( ! $this -> is_single_post_enabled ( ( $post instanceof WP_Post ) ? $post -> post_type : 'post' ) ) {
2019-11-15 23:26:29 +01:00
$enabled = false ;
}
2022-04-02 10:26:41 +02:00
// Single page.
2019-11-15 23:26:29 +01:00
} elseif ( is_page () && ! is_front_page () ) {
if ( ! $this -> is_single_page_enabled () ) {
$enabled = false ;
}
2022-04-02 10:26:41 +02:00
// Attachment.
2019-11-15 23:26:29 +01:00
} elseif ( is_attachment () ) {
if ( ! $this -> is_attachment_enabled () ) {
$enabled = false ;
}
2022-04-02 10:26:41 +02:00
// All other loops.
2019-11-15 23:26:29 +01:00
} elseif ( ! $this -> is_index_enabled () ) {
$enabled = false ;
}
}
if ( $post instanceof WP_Post ) {
// Check that the post is a public, published post.
2022-06-16 14:01:47 +02:00
if ( 'attachment' === $post -> post_type ) {
2019-11-15 23:26:29 +01:00
$post_status = get_post_status ( $post -> post_parent );
} else {
$post_status = $post -> post_status ;
}
2022-06-16 14:01:47 +02:00
if ( 'publish' !== $post_status ) {
2019-11-15 23:26:29 +01:00
$enabled = false ;
}
}
2022-04-02 10:26:41 +02:00
// Run through the sharing filters.
2019-11-15 23:26:29 +01:00
/** This filter is documented in modules/sharedaddy/sharing-service.php */
$enabled = apply_filters ( 'sharing_show' , $enabled , $post );
/**
* Filters whether the Likes should be visible or not .
* Allows overwriting the options set in Settings > Sharing .
*
* @ module likes
*
* @ since 2.2 . 0
*
* @ param bool $enabled Should the Likes be visible ?
*/
return ( bool ) apply_filters ( 'wpl_is_likes_visible' , $enabled );
}
/**
* Are Post Likes enabled on single posts ?
*
2022-06-16 14:01:47 +02:00
* @ param string $post_type custom post type identifier .
2019-11-15 23:26:29 +01:00
* @ return bool
*/
2022-06-16 14:01:47 +02:00
public function is_single_post_enabled ( $post_type = 'post' ) {
2019-11-15 23:26:29 +01:00
$options = $this -> get_options ();
return ( bool ) apply_filters (
/**
* Filters whether Likes should be enabled on single posts .
*
* The dynamic part of the filter , { $post_type }, allows you to specific the post type where Likes should be enabled .
*
* @ module likes
*
* @ since 2.2 . 0
*
* @ param bool $enabled Are Post Likes enabled on single posts ?
*/
" wpl_is_single_ { $post_type } _disabled " ,
2022-06-16 14:01:47 +02:00
( bool ) in_array ( $post_type , $options [ 'show' ], true )
2019-11-15 23:26:29 +01:00
);
}
/**
* Get the 'disabled_likes' option from the DB of the current blog .
*
* @ return array
*/
2022-06-16 14:01:47 +02:00
public function get_options () {
2019-11-15 23:26:29 +01:00
$setting = array ();
2022-04-02 10:26:41 +02:00
$setting [ 'disabled' ] = get_option ( 'disabled_likes' );
$sharing = get_option ( 'sharing-options' , array () );
2019-11-15 23:26:29 +01:00
// Default visibility settings
if ( ! isset ( $sharing [ 'global' ][ 'show' ] ) ) {
$sharing [ 'global' ][ 'show' ] = array ( 'post' , 'page' );
// Scalar check
} elseif ( is_scalar ( $sharing [ 'global' ][ 'show' ] ) ) {
switch ( $sharing [ 'global' ][ 'show' ] ) {
2022-04-02 10:26:41 +02:00
case 'posts' :
2019-11-15 23:26:29 +01:00
$sharing [ 'global' ][ 'show' ] = array ( 'post' , 'page' );
break ;
2022-04-02 10:26:41 +02:00
case 'index' :
2019-11-15 23:26:29 +01:00
$sharing [ 'global' ][ 'show' ] = array ( 'index' );
break ;
2022-04-02 10:26:41 +02:00
case 'posts-index' :
2019-11-15 23:26:29 +01:00
$sharing [ 'global' ][ 'show' ] = array ( 'post' , 'page' , 'index' );
break ;
}
}
// Ensure it's always an array (even if not previously empty or scalar)
$setting [ 'show' ] = ! empty ( $sharing [ 'global' ][ 'show' ] ) ? ( array ) $sharing [ 'global' ][ 'show' ] : array ();
/**
* Filters where the Likes are displayed .
*
* @ module likes
*
* @ since 2.2 . 0
*
* @ param array $setting Array of Likes display settings .
*/
return apply_filters ( 'wpl_get_options' , $setting );
}
/**
* Are Post Likes enabled on archive / front / search pages ?
*
* @ return bool
*/
2022-06-16 14:01:47 +02:00
public function is_index_enabled () {
2019-11-15 23:26:29 +01:00
$options = $this -> get_options ();
/**
* Filters whether Likes should be enabled on archive / front / search pages .
*
* @ module likes
*
* @ since 2.2 . 0
*
* @ param bool $enabled Are Post Likes enabled on archive / front / search pages ?
*/
2022-06-16 14:01:47 +02:00
return ( bool ) apply_filters ( 'wpl_is_index_disabled' , ( bool ) in_array ( 'index' , $options [ 'show' ], true ) );
2019-11-15 23:26:29 +01:00
}
/**
* Are Post Likes enabled on single pages ?
*
* @ return bool
*/
2022-06-16 14:01:47 +02:00
public function is_single_page_enabled () {
2019-11-15 23:26:29 +01:00
$options = $this -> get_options ();
/**
* Filters whether Likes should be enabled on single pages .
*
* @ module likes
*
* @ since 2.2 . 0
*
* @ param bool $enabled Are Post Likes enabled on single pages ?
*/
2022-06-16 14:01:47 +02:00
return ( bool ) apply_filters ( 'wpl_is_single_page_disabled' , ( bool ) in_array ( 'page' , $options [ 'show' ], true ) );
2019-11-15 23:26:29 +01:00
}
/**
* Are Media Likes enabled on single pages ?
*
* @ return bool
*/
2022-06-16 14:01:47 +02:00
public function is_attachment_enabled () {
2019-11-15 23:26:29 +01:00
$options = $this -> get_options ();
/**
* Filters whether Likes should be enabled on attachment pages .
*
* @ module likes
*
* @ since 2.2 . 0
*
* @ param bool $enabled Are Post Likes enabled on attachment pages ?
*/
2022-06-16 14:01:47 +02:00
return ( bool ) apply_filters ( 'wpl_is_attachment_disabled' , ( bool ) in_array ( 'attachment' , $options [ 'show' ], true ) );
2019-11-15 23:26:29 +01:00
}
/**
* The actual options block to be inserted into the sharing page .
*/
2022-06-16 14:01:47 +02:00
public function admin_settings_init () {
2019-11-15 23:26:29 +01:00
?>
< tr >
< th scope = " row " >
< label >< ? php esc_html_e ( 'WordPress.com Likes are' , 'jetpack' ); ?> </label>
</ th >
< td >
< div >
< label >
< input type = " radio " class = " code " name = " wpl_default " value = " on " < ? php checked ( $this -> is_enabled_sitewide (), true ); ?> />
< ? php esc_html_e ( 'On for all posts' , 'jetpack' ); ?>
</ label >
</ div >
< div >
< label >
< input type = " radio " class = " code " name = " wpl_default " value = " off " < ? php checked ( $this -> is_enabled_sitewide (), false ); ?> />
< ? php esc_html_e ( 'Turned on per post' , 'jetpack' ); ?>
</ label >
< div >
</ td >
</ tr >
< ? php if ( ! $this -> in_jetpack ) : ?>
< tr >
< th scope = " row " >
< label >< ? php esc_html_e ( 'WordPress.com Reblog Button' , 'jetpack' ); ?> </label>
</ th >
< td >
< div >
< label >
< input type = " radio " class = " code " name = " jetpack_reblogs_enabled " value = " on " < ? php checked ( $this -> reblogs_enabled_sitewide (), true ); ?> />
< ? php esc_html_e ( 'Show the Reblog button on posts' , 'jetpack' ); ?>
</ label >
</ div >
< div >
< label >
< input type = " radio " class = " code " name = " jetpack_reblogs_enabled " value = " off " < ? php checked ( $this -> reblogs_enabled_sitewide (), false ); ?> />
< ? php esc_html_e ( 'Don\'t show the Reblog button on posts' , 'jetpack' ); ?>
</ label >
</ div >
</ td >
</ tr >
<!-- WPCOM only : Comment Likes -->
< ? php if ( ! $this -> in_jetpack ) : ?>
< tr >
< th scope = " row " >
< label >< ? php esc_html_e ( 'Comment Likes are' , 'jetpack' ); ?> </label>
</ th >
< td >
< div >
< label >
< input type = " checkbox " class = " code " name = " jetpack_comment_likes_enabled " value = " 1 " < ? php checked ( $this -> is_comments_enabled (), true ); ?> />
< ? php esc_html_e ( 'On for all comments' , 'jetpack' ); ?>
</ label >
</ div >
</ td >
</ tr >
< ? php endif ; ?>
< ? php endif ; ?>
</ tbody > < ? php // closes the tbody attached to sharing_show_buttons_on_row_start... ?>
2022-04-02 10:26:41 +02:00
< ? php
2019-11-15 23:26:29 +01:00
}
/**
* Returns the current state of the " WordPress.com Reblogs are " option .
2022-04-02 10:26:41 +02:00
*
2022-06-16 14:01:47 +02:00
* @ return bool true if enabled sitewide , false if not
2019-11-15 23:26:29 +01:00
*/
2022-06-16 14:01:47 +02:00
public function reblogs_enabled_sitewide () {
2019-11-15 23:26:29 +01:00
/**
* Filters whether Reblogs are enabled by default on all posts .
* true if enabled sitewide , false if not .
*
* @ module likes
*
* @ since 3.0 . 0
*
* @ param bool $option Are Reblogs enabled sitewide .
*/
return ( bool ) apply_filters ( 'wpl_reblogging_enabled_sitewide' , ! get_option ( 'disabled_reblogs' ) );
}
/**
* Used for WPCOM ONLY . Comment likes are in their own module in Jetpack .
* Returns if comment likes are enabled . Defaults to 'off'
2022-04-02 10:26:41 +02:00
*
2019-11-15 23:26:29 +01:00
* @ return boolean true if we should show comment likes , false if not
*/
2022-06-16 14:01:47 +02:00
public function is_comments_enabled () {
2019-11-15 23:26:29 +01:00
/**
* Filters whether Comment Likes are enabled .
* true if enabled , false if not .
*
* @ module comment - likes
*
* @ since 2.2 . 0
*
* @ param bool $option Are Comment Likes enabled sitewide .
*/
return ( bool ) apply_filters ( 'jetpack_comment_likes_enabled' , get_option ( 'jetpack_comment_likes_enabled' , false ) );
}
/**
2022-06-16 14:01:47 +02:00
* Saves the setting in the database .
2019-11-15 23:26:29 +01:00
*/
2022-06-16 14:01:47 +02:00
public function admin_settings_callback () {
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.
return ;
}
2019-11-15 23:26:29 +01:00
// We're looking for these, and doing a dance to set some stats and save
// them together in array option.
2022-06-16 14:01:47 +02:00
if ( ! empty ( $_POST [ 'wpl_default' ] ) ) {
$new_state = sanitize_text_field ( wp_unslash ( $_POST [ 'wpl_default' ] ) );
} else {
$new_state = 'on' ;
}
2019-11-15 23:26:29 +01:00
2022-06-16 14:01:47 +02:00
if ( ! empty ( $_POST [ 'jetpack_reblogs_enabled' ] ) ) {
$reblogs_new_state = sanitize_text_field ( wp_unslash ( $_POST [ 'jetpack_reblogs_enabled' ] ) );
} else {
$reblogs_new_state = 'on' ;
}
2019-11-15 23:26:29 +01:00
// Checked (enabled)
2022-04-02 10:26:41 +02:00
switch ( $new_state ) {
case 'off' :
2019-11-15 23:26:29 +01:00
update_option ( 'disabled_likes' , 1 );
break ;
2022-04-02 10:26:41 +02:00
case 'on' :
2019-11-15 23:26:29 +01:00
default :
delete_option ( 'disabled_likes' );
break ;
}
2022-04-02 10:26:41 +02:00
switch ( $reblogs_new_state ) {
case 'off' :
2019-11-15 23:26:29 +01:00
update_option ( 'disabled_reblogs' , 1 );
break ;
2022-04-02 10:26:41 +02:00
case 'on' :
2019-11-15 23:26:29 +01:00
default :
delete_option ( 'disabled_reblogs' );
break ;
}
// WPCOM only: Comment Likes
if ( ! $this -> in_jetpack ) {
2022-06-16 14:01:47 +02:00
if ( ! empty ( $_POST [ 'jetpack_comment_likes_enabled' ] ) ) {
$new_comments_state = sanitize_text_field ( wp_unslash ( $_POST [ 'jetpack_comment_likes_enabled' ] ) );
} else {
$new_comments_state = false ;
}
2022-04-02 10:26:41 +02:00
switch ( ( bool ) $new_comments_state ) {
2019-11-15 23:26:29 +01:00
case true :
update_option ( 'jetpack_comment_likes_enabled' , 1 );
2022-04-02 10:26:41 +02:00
break ;
2019-11-15 23:26:29 +01:00
case false :
default :
update_option ( 'jetpack_comment_likes_enabled' , 0 );
2022-04-02 10:26:41 +02:00
break ;
2019-11-15 23:26:29 +01:00
}
}
}
/**
* Adds the admin update hook so we can save settings even if Sharedaddy is not enabled .
*/
2022-06-16 14:01:47 +02:00
public function process_update_requests_if_sharedaddy_not_loaded () {
if ( isset ( $_GET [ 'page' ] ) && ( $_GET [ 'page' ] === 'sharing.php' || $_GET [ 'page' ] === 'sharing' ) ) {
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.
2019-11-15 23:26:29 +01:00
/** This action is documented in modules/sharedaddy/sharing.php */
do_action ( 'sharing_admin_update' );
wp_safe_redirect ( admin_url ( 'options-general.php?page=sharing&update=saved' ) );
die ();
}
}
}
/**
* 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 .
*/
2022-06-16 14:01:47 +02:00
public function admin_settings_showbuttonon_init () {
2019-11-15 23:26:29 +01:00
/** This action is documented in modules/sharedaddy/sharing.php */
2022-06-16 14:01:47 +02:00
echo apply_filters ( 'sharing_show_buttons_on_row_start' , '<tr valign="top">' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2019-11-15 23:26:29 +01:00
?>
2022-06-16 14:01:47 +02:00
< th scope = " row " >< label >< ? php esc_html_e ( 'Show buttons on' , 'jetpack' ); ?> </label></th>
2019-11-15 23:26:29 +01:00
< td >
< ? php
2022-04-02 10:26:41 +02:00
$br = false ;
2019-11-15 23:26:29 +01:00
$shows = array_values ( get_post_types ( array ( 'public' => true ) ) );
array_unshift ( $shows , 'index' );
$global = $this -> get_options ();
foreach ( $shows as $show ) :
2022-06-16 14:01:47 +02:00
if ( 'index' === $show ) {
2019-11-15 23:26:29 +01:00
$label = __ ( 'Front Page, Archive Pages, and Search Results' , 'jetpack' );
} else {
$post_type_object = get_post_type_object ( $show );
2022-04-02 10:26:41 +02:00
$label = $post_type_object -> labels -> name ;
}
if ( $br ) {
echo '<br />' ;
2019-11-15 23:26:29 +01:00
}
?>
2022-04-02 10:26:41 +02:00
< 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>
< ? php
$br = true ;
endforeach ;
?>
2019-11-15 23:26:29 +01:00
</ td >
< ? php
/** This action is documented in modules/sharedaddy/sharing.php */
2022-06-16 14:01:47 +02:00
echo apply_filters ( 'sharing_show_buttons_on_row_end' , '</tr>' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2019-11-15 23:26:29 +01:00
}
/**
* If sharedaddy is not loaded , we still need to save the the settings of the " Show buttons on " option .
*/
2022-06-16 14:01:47 +02:00
public function admin_settings_showbuttonon_callback () {
2019-11-15 23:26:29 +01:00
$options = get_option ( 'sharing-options' );
2022-04-02 10:26:41 +02:00
if ( ! is_array ( $options ) ) {
2019-11-15 23:26:29 +01:00
$options = array ();
2022-04-02 10:26:41 +02:00
}
2019-11-15 23:26:29 +01:00
2022-04-02 10:26:41 +02:00
$shows = array_values ( get_post_types ( array ( 'public' => true ) ) );
2019-11-15 23:26:29 +01:00
$shows [] = 'index' ;
2022-04-02 10:26:41 +02:00
// 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.
2019-11-15 23:26:29 +01:00
$data = $_POST ;
if ( isset ( $data [ 'show' ] ) ) {
if ( is_scalar ( $data [ 'show' ] ) ) {
switch ( $data [ 'show' ] ) {
2022-04-02 10:26:41 +02:00
case 'posts' :
2019-11-15 23:26:29 +01:00
$data [ 'show' ] = array ( 'post' , 'page' );
break ;
2022-04-02 10:26:41 +02:00
case 'index' :
2019-11-15 23:26:29 +01:00
$data [ 'show' ] = array ( 'index' );
break ;
2022-04-02 10:26:41 +02:00
case 'posts-index' :
2019-11-15 23:26:29 +01:00
$data [ 'show' ] = array ( 'post' , 'page' , 'index' );
break ;
}
}
2022-06-16 14:01:47 +02:00
$data [ 'show' ] = array_intersect ( $data [ 'show' ], $shows );
if ( $data [ 'show' ] ) {
2019-11-15 23:26:29 +01:00
$options [ 'global' ][ 'show' ] = $data [ 'show' ];
}
} else {
$options [ 'global' ][ 'show' ] = array ();
}
update_option ( 'sharing-options' , $options );
}
}