PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta
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 / jetpack_vendor / automattic / jetpack-podcast / src / endpoints / class-podcast-settings-endpoint.php
jetpack / jetpack_vendor / automattic / jetpack-podcast / src / endpoints Last commit date
class-podcast-distribution-endpoint.php 1 month ago class-podcast-settings-endpoint.php 2 months ago class-podcast-stats-endpoint.php 2 months ago class-posts-to-podcast-endpoint.php 2 months ago class-posts-to-podcast-helper.php 2 months ago trait-relay-response.php 2 months ago
class-podcast-settings-endpoint.php
134 lines
1 <?php
2 /**
3 * Dedicated REST endpoint for `podcasting_*` site settings.
4 *
5 * @package automattic/jetpack-podcast
6 */
7
8 namespace Automattic\Jetpack\Podcast;
9
10 use WP_Error;
11 use WP_REST_Controller;
12 use WP_REST_Request;
13 use WP_REST_Response;
14 use WP_REST_Server;
15
16 /**
17 * Reads and writes the `podcasting_*` options for the dashboard SPA over its own
18 * `wpcom/v2/podcast/settings` route. Schema and sanitizers live in {@see Settings}.
19 *
20 * Registered through the WPCOM REST API v2 plugin framework
21 * ({@see wpcom_rest_api_v2_load_plugin()}), so a single definition is reachable on
22 * Simple and WoA via the `public-api.wordpress.com` proxy and, once Podcast ships in
23 * the Jetpack plugin, same-origin on self-hosted sites — no per-platform relay.
24 */
25 class Podcast_Settings_Endpoint extends WP_REST_Controller {
26
27 /**
28 * Wire the routes onto `rest_api_init`. The framework instantiates this once.
29 */
30 public function __construct() {
31 $this->namespace = 'wpcom/v2';
32 add_action( 'rest_api_init', array( $this, 'register_routes' ) );
33 }
34
35 /**
36 * Register the endpoint through the WPCOM REST API v2 framework. The loader
37 * ships with the Jetpack plugin core-api, present in every context Podcast runs
38 * in (Simple/WoA today, the Jetpack plugin once Podcast moves there); guarded so
39 * the package no-ops rather than fatals if it's somehow absent.
40 */
41 public static function init() {
42 if ( function_exists( 'wpcom_rest_api_v2_load_plugin' ) ) {
43 wpcom_rest_api_v2_load_plugin( self::class );
44 }
45 }
46
47 /**
48 * Register the GET (full record) + writable (partial patch) routes.
49 *
50 * Update args only coerce top-level types — the registered `sanitize_callback`s
51 * do the real validation on write, so one bad field can't 400 the whole patch.
52 */
53 public function register_routes() {
54 register_rest_route(
55 $this->namespace,
56 'podcast/settings',
57 array(
58 array(
59 'methods' => WP_REST_Server::READABLE,
60 'callback' => array( $this, 'get_item' ),
61 'permission_callback' => array( $this, 'permission_check' ),
62 ),
63 array(
64 'methods' => WP_REST_Server::EDITABLE,
65 'callback' => array( $this, 'update_item' ),
66 'permission_callback' => array( $this, 'permission_check' ),
67 'args' => Settings::rest_schema_properties(),
68 ),
69 )
70 );
71 }
72
73 /**
74 * Site admins only — same gate as the wp-admin Podcast dashboard.
75 *
76 * @return true|WP_Error
77 */
78 public function permission_check() {
79 if ( ! current_user_can( 'manage_options' ) ) {
80 return new WP_Error(
81 'rest_forbidden',
82 __( 'Sorry, you are not allowed to manage podcast settings for this site.', 'jetpack-podcast' ),
83 array( 'status' => rest_authorization_required_code() )
84 );
85 }
86 return true;
87 }
88
89 /**
90 * GET — the full, padded settings record.
91 *
92 * @param WP_REST_Request $request Unused.
93 * @return WP_REST_Response
94 */
95 public function get_item( $request ) {
96 unset( $request );
97 return rest_ensure_response( Settings::get_all() );
98 }
99
100 /**
101 * PUT/POST/PATCH — apply a partial patch and return the full merged record.
102 *
103 * Only keys actually present in the request are written, so absent keys can
104 * never clobber stored values. Array-shaped options merge on sanitize.
105 *
106 * @param WP_REST_Request $request Incoming request.
107 * @return WP_REST_Response
108 */
109 public function update_item( $request ) {
110 $saved = false;
111
112 foreach ( Settings::OPTION_NAMES as $name ) {
113 $value = $request->get_param( $name );
114 if ( null === $value ) {
115 continue;
116 }
117 if ( update_option( $name, $value ) ) {
118 $saved = true;
119 }
120 }
121
122 if ( $saved ) {
123 /**
124 * Fires after a podcast settings write changes at least one option.
125 *
126 * @since 1.1.1
127 */
128 do_action( 'jetpack_podcast_settings_saved' );
129 }
130
131 return rest_ensure_response( Settings::get_all() );
132 }
133 }
134