<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName /** * Get subscriber count from Jetpack's Subscriptions module. * * @package automattic/jetpack */ use Automattic\Jetpack\Constants; /** * Subscribers: Get subscriber count * * @since 6.9 */ class WPCOM_REST_API_V2_Endpoint_Subscribers extends WP_REST_Controller { /** * Constructor. */ public function __construct() { $this->namespace = 'wpcom/v2'; $this->rest_base = 'subscribers'; // This endpoint *does not* need to connect directly to Jetpack sites. $this->wpcom_is_wpcom_only_endpoint = true; add_action( 'rest_api_init', array( $this, 'register_routes' ) ); } /** * Register API routes. */ public function register_routes() { // GET /sites/<blog_id>/subscribers/count - Return number of subscribers for this site. register_rest_route( $this->namespace, '/' . $this->rest_base . '/count', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_subscriber_count' ), 'permission_callback' => array( $this, 'readable_permission_check' ), ), ) ); } /** * Permission check. Only authors can access this endpoint. */ public function readable_permission_check() { if ( ! current_user_can_for_blog( get_current_blog_id(), 'edit_posts' ) ) { return new WP_Error( 'authorization_required', 'Only users with the permission to edit posts can see the subscriber count.', array( 'status' => 401 ) ); } return true; } /** * Retrieves subscriber count * * @param WP_REST_Request $request incoming API request info. * @return array data object containing subscriber count */ public function get_subscriber_count( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable // Get the most up to date subscriber count when request is not a test. if ( ! Constants::is_defined( 'TESTING_IN_JETPACK' ) ) { delete_transient( 'wpcom_subscribers_total' ); delete_transient( 'wpcom_subscribers_total_no_publicize' ); } $include_publicize_subscribers = isset( $request['include_publicize_subscribers'] ) ? rest_sanitize_boolean( $request['include_publicize_subscribers'] ) : true; $subscriber_info = Jetpack_Subscriptions_Widget::fetch_subscriber_count( $include_publicize_subscribers ); $subscriber_count = $subscriber_info['value']; return array( 'count' => $subscriber_count, ); } } if ( Jetpack::is_module_active( 'subscriptions' ) || ( Constants::is_defined( 'TESTING_IN_JETPACK' ) && Constants::get_constant( 'TESTING_IN_JETPACK' ) ) ) { wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_Subscribers' ); }