PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.7
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.7
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 13.7.2 13.8.3 All 506 releases
jetpack / jetpack_vendor / automattic / jetpack-publicize / src / rest-api / class-services-controller.php

class-services-controller.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-a.7, at jetpack_vendor/automattic/jetpack-publicize/src/rest-api/class-services-controller.php

174 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * The Publicize services Controller class.
4 *
5 * @package automattic/jetpack-publicize
6 */
7
8 namespace Automattic\Jetpack\Publicize\REST_API;
9
10 use Automattic\Jetpack\Connection\Traits\WPCOM_REST_API_Proxy_Request;
11 use Automattic\Jetpack\Publicize\Publicize_Utils;
12 use Automattic\Jetpack\Publicize\Services;
13 use WP_Error;
14 use WP_REST_Request;
15 use WP_REST_Response;
16 use WP_REST_Server;
17
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit( 0 );
20 }
21
22 /**
23 * Services Controller class.
24 *
25 * @phan-constructor-used-for-side-effects
26 */
27 class Services_Controller extends Base_Controller {
28
29 use WPCOM_REST_API_Proxy_Request;
30
31 /**
32 * Constructor.
33 */
34 public function __construct() {
35 parent::__construct();
36
37 $this->base_api_path = 'wpcom';
38 $this->version = 'v2';
39
40 $this->namespace = "{$this->base_api_path}/{$this->version}";
41 $this->rest_base = 'publicize/services';
42
43 add_action( 'rest_api_init', array( $this, 'register_routes' ) );
44 }
45
46 /**
47 * Register the routes.
48 */
49 public function register_routes() {
50 register_rest_route(
51 $this->namespace,
52 '/' . $this->rest_base,
53 array(
54 array(
55 'methods' => WP_REST_Server::READABLE,
56 'callback' => array( $this, 'get_items' ),
57 'permission_callback' => array( $this, 'get_items_permissions_check' ),
58 ),
59 'schema' => array( $this, 'get_public_item_schema' ),
60 )
61 );
62 }
63
64 /**
65 * Schema for the endpoint.
66 *
67 * @return array
68 */
69 public function get_item_schema() {
70 if ( $this->schema ) {
71 return $this->add_additional_fields_schema( $this->schema );
72 }
73 $schema = array(
74 '$schema' => 'http://json-schema.org/draft-04/schema#',
75 'title' => 'jetpack-publicize-service',
76 'type' => 'object',
77 'properties' => array(
78 'id' => array(
79 'type' => 'string',
80 'description' => __( 'Alphanumeric slug for the service.', 'jetpack-publicize-pkg' ),
81 ),
82 'description' => array(
83 'type' => 'string',
84 'description' => __( 'Description for the service.', 'jetpack-publicize-pkg' ),
85 ),
86 'label' => array(
87 'type' => 'string',
88 'description' => __( 'Human-readable label for the Jetpack Social service.', 'jetpack-publicize-pkg' ),
89 ),
90 'status' => array(
91 'type' => 'string',
92 'description' => __( 'Status of the service.', 'jetpack-publicize-pkg' ),
93 'enum' => array( null, 'ok', 'unsupported' ),
94 ),
95 'supports' => array(
96 'type' => 'object',
97 'description' => __( 'An object of features that the service supports.', 'jetpack-publicize-pkg' ),
98 'properties' => array(
99 'additional_users' => array(
100 'type' => 'boolean',
101 'description' => __( 'Whether the service is supported for multiple additional user accounts.', 'jetpack-publicize-pkg' ),
102 ),
103 'additional_users_only' => array(
104 'type' => 'boolean',
105 'description' => __( 'Whether the service supports only the additional users and not the main user account.', 'jetpack-publicize-pkg' ),
106 ),
107 ),
108 ),
109 'url' => array(
110 'type' => 'string',
111 'description' => __( 'URL to use for connecting an account for the service.', 'jetpack-publicize-pkg' ),
112 ),
113 ),
114 );
115
116 $this->schema = $schema;
117
118 return $this->add_additional_fields_schema( $schema );
119 }
120
121 /**
122 * Verify that the request has access to services list.
123 *
124 * @param WP_REST_Request $request Full details about the request.
125 * @return true|WP_Error
126 */
127 public function get_items_permissions_check( $request ) {// phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
128 return $this->publicize_permissions_check();
129 }
130
131 /**
132 * Get list of Publicize services.
133 *
134 * @param WP_REST_Request $request Full details about the request.
135 *
136 * @return WP_REST_Response suitable for 1-page collection
137 */
138 public function get_items( $request ) {
139 if ( Publicize_Utils::is_wpcom() ) {
140
141 $items = array();
142
143 /*
144 * Neither path goes through Services::get_all(), so the filter is applied
145 * here too to keep the REST route consistent with it.
146 *
147 * This filter is documented in projects/packages/publicize/src/class-services.php
148 */
149 $services = (array) apply_filters( 'jetpack_publicize_services', Services::wpcom_get_all() );
150
151 foreach ( $services as $item ) {
152 $data = $this->prepare_item_for_response( $item, $request );
153
154 $items[] = $this->prepare_response_for_collection( $data );
155 }
156 } else {
157 $items = $this->proxy_request_to_wpcom_as_user( $request );
158
159 if ( is_wp_error( $items ) ) {
160 return $items;
161 }
162
163 /** This filter is documented in projects/packages/publicize/src/class-services.php */
164 $items = (array) apply_filters( 'jetpack_publicize_services', $items );
165 }
166
167 $response = rest_ensure_response( $items );
168 $response->header( 'X-WP-Total', (string) count( $items ) );
169 $response->header( 'X-WP-TotalPages', '1' );
170
171 return $response;
172 }
173 }
174