PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.2-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.2-a.1
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / _inc / lib / core-api / wpcom-endpoints / class-wpcom-rest-api-v2-endpoint-podcast-player.php
jetpack / _inc / lib / core-api / wpcom-endpoints Last commit date
business-hours.php 9 months ago class-wpcom-rest-api-v2-endpoint-admin-bar.php 1 week ago class-wpcom-rest-api-v2-endpoint-admin-color.php 9 months ago class-wpcom-rest-api-v2-endpoint-admin-menu.php 1 month ago class-wpcom-rest-api-v2-endpoint-agent-guidelines-ai.php 1 week ago class-wpcom-rest-api-v2-endpoint-ai-feature-settings.php 1 week ago class-wpcom-rest-api-v2-endpoint-ai.php 2 months ago class-wpcom-rest-api-v2-endpoint-app-media.php 9 months ago class-wpcom-rest-api-v2-endpoint-application-password-extras.php 5 months ago class-wpcom-rest-api-v2-endpoint-block-editor-assets.php 2 months ago class-wpcom-rest-api-v2-endpoint-blog-stats.php 9 months ago class-wpcom-rest-api-v2-endpoint-email-preview.php 4 months ago class-wpcom-rest-api-v2-endpoint-external-media.php 2 weeks ago class-wpcom-rest-api-v2-endpoint-following.php 9 months ago class-wpcom-rest-api-v2-endpoint-goodreads.php 9 months ago class-wpcom-rest-api-v2-endpoint-google-docs.php 9 months ago class-wpcom-rest-api-v2-endpoint-guidelines-banner-dismissed.php 1 week ago class-wpcom-rest-api-v2-endpoint-instagram-gallery.php 3 months ago class-wpcom-rest-api-v2-endpoint-mailchimp.php 9 months ago class-wpcom-rest-api-v2-endpoint-mcp-settings.php 1 month ago class-wpcom-rest-api-v2-endpoint-newsletter-categories-list.php 9 months ago class-wpcom-rest-api-v2-endpoint-newsletter-categories-subscriptions-count.php 9 months ago class-wpcom-rest-api-v2-endpoint-newsletter-categories-subscriptions.php 3 weeks ago class-wpcom-rest-api-v2-endpoint-newsletter-email-sent-status.php 5 months ago class-wpcom-rest-api-v2-endpoint-podcast-player.php 1 week ago class-wpcom-rest-api-v2-endpoint-profile.php 9 months ago class-wpcom-rest-api-v2-endpoint-related-posts.php 9 months ago class-wpcom-rest-api-v2-endpoint-resolve-redirect.php 2 weeks ago class-wpcom-rest-api-v2-endpoint-search.php 2 months ago class-wpcom-rest-api-v2-endpoint-send-email-preview.php 1 week ago class-wpcom-rest-api-v2-endpoint-subscribers-list.php 1 week ago class-wpcom-rest-api-v2-endpoint-template-loader.php 9 months ago class-wpcom-rest-api-v2-endpoint-top-posts.php 3 months ago class-wpcom-rest-api-v2-endpoint-transient.php 9 months ago class-wpcom-rest-api-v3-endpoint-blogging-prompts.php 9 months ago class-wpcom-rest-api-v3-endpoint-jitm.php 9 months ago gutenberg-available-extensions.php 9 months ago hello.php 9 months ago memberships.php 2 months ago publicize-connection-test-results.php 9 months ago service-api-keys.php 3 months ago sites-posts-featured-media-url.php 9 months ago subscribers.php 9 months ago
class-wpcom-rest-api-v2-endpoint-podcast-player.php
176 lines
1 <?php
2 /**
3 * Podcast Player API
4 *
5 * @package automattic/jetpack
6 * @since 8.4.0
7 */
8
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit( 0 );
11 }
12
13 /**
14 * Fetch podcast feeds and parse data for the Podcast Player block.
15 *
16 * @since 8.4.0
17 */
18 class WPCOM_REST_API_V2_Endpoint_Podcast_Player extends WP_REST_Controller {
19 /**
20 * Constructor.
21 */
22 public function __construct() {
23 $this->namespace = 'wpcom/v2';
24 $this->rest_base = 'podcast-player';
25 // This endpoint *does not* need to connect directly to Jetpack sites.
26 add_action( 'rest_api_init', array( $this, 'register_routes' ) );
27 }
28
29 /**
30 * Register the route.
31 */
32 public function register_routes() {
33 // GET /sites/<blog_id>/podcast-player - Returns feed data.
34 register_rest_route(
35 $this->namespace,
36 '/' . $this->rest_base,
37 array(
38 array(
39 'methods' => WP_REST_Server::READABLE,
40 'callback' => array( $this, 'get_player_data' ),
41 'permission_callback' => function () {
42 return current_user_can( 'edit_posts' );
43 },
44 'args' => array(
45 'url' => array(
46 'description' => __( 'The Podcast RSS feed URL.', 'jetpack' ),
47 'type' => 'string',
48 'required' => 'true',
49 'validate_callback' => function ( $param ) {
50 return wp_http_validate_url( $param );
51 },
52 ),
53 'guids' => array(
54 'description' => __( 'A list of unique identifiers for fetching specific podcast episodes.', 'jetpack' ),
55 'type' => 'array',
56 'required' => 'false',
57 'validate_callback' => function ( $guids ) {
58 return is_array( $guids );
59 },
60 'sanitize_callback' => function ( $guids ) {
61 return array_map( 'sanitize_text_field', $guids );
62 },
63 ),
64 'episode-options' => array(
65 'description' => __( 'Whether we should return the episodes list for use in the selection UI', 'jetpack' ),
66 'type' => 'boolean',
67 'required' => 'false',
68 ),
69 ),
70 'schema' => array( $this, 'get_public_item_schema' ),
71 ),
72 )
73 );
74
75 // GET /sites/<blog_id>/podcast-player/track-quantity - Returns number of tracks.
76 register_rest_route(
77 $this->namespace,
78 '/' . $this->rest_base . '/track-quantity',
79 array(
80 array(
81 'methods' => WP_REST_Server::READABLE,
82 'callback' => array( $this, 'get_tracks_quantity' ),
83 'permission_callback' => function () {
84 return current_user_can( 'edit_posts' );
85 },
86 ),
87 )
88 );
89 }
90
91 /**
92 * Retrieves tracks quantity
93 *
94 * @return Integer number of tracks.
95 * */
96 public function get_tracks_quantity() {
97 if ( ! class_exists( 'Jetpack_Podcast_Helper' ) ) {
98 require_once JETPACK__PLUGIN_DIR . '/_inc/lib/class-jetpack-podcast-helper.php';
99 }
100
101 return rest_ensure_response( Jetpack_Podcast_Helper::get_tracks_quantity() );
102 }
103
104 /**
105 * Retrieves data needed to display a podcast player from RSS feed.
106 *
107 * @param WP_REST_Request $request The REST API request data.
108 * @return WP_REST_Response The REST API response.
109 */
110 public function get_player_data( $request ) {
111 if ( ! class_exists( 'Jetpack_Podcast_Helper' ) ) {
112 require_once JETPACK__PLUGIN_DIR . '/_inc/lib/class-jetpack-podcast-helper.php';
113 }
114
115 $helper = new Jetpack_Podcast_Helper( $request['url'] );
116
117 // The editor needs the feed's true state, not a fallback papering over a broken URL.
118 $args = array( 'report_errors' => true );
119
120 if ( isset( $request['guids'] ) ) {
121 $args['guids'] = $request['guids'];
122 }
123
124 if ( isset( $request['episode-options'] ) && $request['episode-options'] ) {
125 $args['episode-options'] = true;
126 }
127
128 $player_data = $helper->get_player_data( $args );
129
130 if ( is_wp_error( $player_data ) ) {
131 return rest_ensure_response( $player_data );
132 }
133
134 $player_data = $this->prepare_for_response( $player_data, $request );
135 return rest_ensure_response( $player_data );
136 }
137
138 /**
139 * Filters out data based on ?_fields= request parameter
140 *
141 * @param array $player_data Data for the player.
142 * @param WP_REST_Request $request The request.
143 * @return array filtered $player_data
144 */
145 public function prepare_for_response( $player_data, $request ) {
146 if ( ! is_callable( array( $this, 'get_fields_for_response' ) ) ) {
147 return $player_data;
148 }
149
150 $fields = $this->get_fields_for_response( $request );
151
152 $response_data = array();
153 foreach ( $player_data as $field => $value ) {
154 if ( in_array( $field, $fields, true ) ) {
155 $response_data[ $field ] = $value;
156 }
157 }
158
159 return $response_data;
160 }
161
162 /**
163 * Retrieves the response schema, conforming to JSON Schema.
164 *
165 * @return array
166 */
167 public function get_item_schema() {
168 if ( ! class_exists( 'Jetpack_Podcast_Helper' ) ) {
169 require_once JETPACK__PLUGIN_DIR . '/_inc/lib/class-jetpack-podcast-helper.php';
170 }
171
172 return Jetpack_Podcast_Helper::get_player_data_schema();
173 }
174 }
175 wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_Podcast_Player' );
176