PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.0.3
Jetpack – WP Security, Backup, Speed, & Growth v12.0.3
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 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 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 / publicize-connections.php
jetpack / _inc / lib / core-api / wpcom-endpoints Last commit date
business-hours.php 4 years ago class-wpcom-rest-api-v2-endpoint-admin-menu.php 3 years ago class-wpcom-rest-api-v2-endpoint-ai.php 3 years ago class-wpcom-rest-api-v2-endpoint-external-media.php 3 years ago class-wpcom-rest-api-v2-endpoint-google-docs.php 4 years ago class-wpcom-rest-api-v2-endpoint-instagram-gallery.php 3 years ago class-wpcom-rest-api-v2-endpoint-mailchimp.php 3 years ago class-wpcom-rest-api-v2-endpoint-podcast-player.php 3 years ago class-wpcom-rest-api-v2-endpoint-publicize-share-post.php 3 years ago class-wpcom-rest-api-v2-endpoint-resolve-redirect.php 3 years ago class-wpcom-rest-api-v2-endpoint-search.php 4 years ago class-wpcom-rest-api-v2-endpoint-template-loader.php 3 years ago class-wpcom-rest-api-v2-endpoint-transient.php 5 years ago class-wpcom-rest-api-v2-endpoint-tweetstorm-gather.php 3 years ago class-wpcom-rest-api-v2-endpoint-tweetstorm-parse.php 3 years ago class-wpcom-rest-api-v3-endpoint-blogging-prompts.php 3 years ago gutenberg-available-extensions.php 4 years ago hello.php 4 years ago memberships.php 3 years ago publicize-connection-test-results.php 4 years ago publicize-connections.php 3 years ago publicize-services.php 3 years ago service-api-keys.php 3 years ago sites-posts-featured-media-url.php 4 years ago subscribers.php 3 years ago
publicize-connections.php
218 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Fetch information about Publicize connections on a site.
4 *
5 * @package automattic/jetpack
6 */
7
8 /**
9 * Publicize: List Connections
10 *
11 * [
12 * { # Connnection Object. See schema for more detail.
13 * id: (string) Connection unique_id
14 * service_name: (string) Service slug
15 * display_name: (string) User name/display name of user/connection on Service
16 * global: (boolean) Is the Connection available to all users of the site?
17 * },
18 * ...
19 * ]
20 *
21 * @since 6.8
22 */
23 class WPCOM_REST_API_V2_Endpoint_List_Publicize_Connections extends WP_REST_Controller {
24 /**
25 * Flag to help WordPress.com decide where it should look for
26 * Publicize data. Ignored for direct requests to Jetpack sites.
27 *
28 * @var bool $wpcom_is_wpcom_only_endpoint
29 */
30 public $wpcom_is_wpcom_only_endpoint = true;
31
32 /**
33 * Constructor.
34 */
35 public function __construct() {
36 $this->namespace = 'wpcom/v2';
37 $this->rest_base = 'publicize/connections';
38
39 add_action( 'rest_api_init', array( $this, 'register_routes' ) );
40 }
41
42 /**
43 * Called automatically on `rest_api_init()`.
44 */
45 public function register_routes() {
46 register_rest_route(
47 $this->namespace,
48 '/' . $this->rest_base,
49 array(
50 array(
51 'methods' => WP_REST_Server::READABLE,
52 'callback' => array( $this, 'get_items' ),
53 'permission_callback' => array( $this, 'get_items_permission_check' ),
54 ),
55 'schema' => array( $this, 'get_public_item_schema' ),
56 )
57 );
58 }
59
60 /**
61 * Helper for generating schema. Used by this endpoint and by the
62 * Connection Test Result endpoint.
63 *
64 * @internal
65 * @return array
66 */
67 protected function get_connection_schema_properties() {
68 return array(
69 'id' => array(
70 'description' => __( 'Unique identifier for the Jetpack Social connection', 'jetpack' ),
71 'type' => 'string',
72 ),
73 'service_name' => array(
74 'description' => __( 'Alphanumeric identifier for the Jetpack Social service', 'jetpack' ),
75 'type' => 'string',
76 ),
77 'display_name' => array(
78 'description' => __( 'Username of the connected account', 'jetpack' ),
79 'type' => 'string',
80 ),
81 'profile_display_name' => array(
82 'description' => __( 'The name to display in the profile of the connected account', 'jetpack' ),
83 'type' => 'string',
84 ),
85 'profile_picture' => array(
86 'description' => __( 'Profile picture of the connected account', 'jetpack' ),
87 'type' => 'string',
88 ),
89 'global' => array(
90 'description' => __( 'Is this connection available to all users?', 'jetpack' ),
91 'type' => 'boolean',
92 ),
93 );
94 }
95
96 /**
97 * Schema for the endpoint.
98 *
99 * @return array
100 */
101 public function get_item_schema() {
102 $schema = array(
103 '$schema' => 'http://json-schema.org/draft-04/schema#',
104 'title' => 'jetpack-publicize-connection',
105 'type' => 'object',
106 'properties' => $this->get_connection_schema_properties(),
107 );
108
109 return $this->add_additional_fields_schema( $schema );
110 }
111
112 /**
113 * Helper for retrieving Connections. Used by this endpoint and by
114 * the Connection Test Result endpoint.
115 *
116 * @internal
117 * @return array
118 */
119 protected function get_connections() {
120 global $publicize;
121
122 $items = array();
123
124 foreach ( (array) $publicize->get_services( 'connected' ) as $service_name => $connections ) {
125 foreach ( $connections as $connection ) {
126 $connection_meta = $publicize->get_connection_meta( $connection );
127 $connection_data = $connection_meta['connection_data'];
128
129 $items[] = array(
130 'id' => (string) $publicize->get_connection_unique_id( $connection ),
131 'service_name' => $service_name,
132 'display_name' => $publicize->get_display_name( $service_name, $connection ),
133 'profile_display_name' => ! empty( $connection_meta['profile_display_name'] ) ? $connection_meta['profile_display_name'] : '',
134 'profile_picture' => ! empty( $connection_meta['profile_picture'] ) ? $connection_meta['profile_picture'] : '',
135 // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual -- We expect an integer, but do loose comparison below in case some other type is stored.
136 'global' => 0 == $connection_data['user_id'],
137 );
138 }
139 }
140
141 return $items;
142 }
143
144 /**
145 * Get list of connected Publicize connections.
146 *
147 * @param WP_REST_Request $request Full details about the request.
148 *
149 * @return WP_REST_Response suitable for 1-page collection
150 */
151 public function get_items( $request ) {
152 $items = array();
153
154 foreach ( $this->get_connections() as $item ) {
155 $items[] = $this->prepare_item_for_response( $item, $request );
156 }
157
158 $response = rest_ensure_response( $items );
159 $response->header( 'X-WP-Total', count( $items ) );
160 $response->header( 'X-WP-TotalPages', 1 );
161
162 return $response;
163 }
164
165 /**
166 * Filters out data based on ?_fields= request parameter
167 *
168 * @param array $connection Array of info about a specific Publicize connection.
169 * @param WP_REST_Request $request Full details about the request.
170 *
171 * @return array filtered $connection
172 */
173 public function prepare_item_for_response( $connection, $request ) {
174 if ( ! is_callable( array( $this, 'get_fields_for_response' ) ) ) {
175 return $connection;
176 }
177
178 $fields = $this->get_fields_for_response( $request );
179
180 $response_data = array();
181 foreach ( $connection as $field => $value ) {
182 if ( in_array( $field, $fields, true ) ) {
183 $response_data[ $field ] = $value;
184 }
185 }
186
187 return $response_data;
188 }
189
190 /**
191 * Verify that user can access Publicize data
192 *
193 * @return true|WP_Error
194 */
195 public function get_items_permission_check() {
196 global $publicize;
197
198 if ( ! $publicize ) {
199 return new WP_Error(
200 'publicize_not_available',
201 __( 'Sorry, Jetpack Social is not available on your site right now.', 'jetpack' ),
202 array( 'status' => rest_authorization_required_code() )
203 );
204 }
205
206 if ( $publicize->current_user_can_access_publicize_data() ) {
207 return true;
208 }
209
210 return new WP_Error(
211 'invalid_user_permission_publicize',
212 __( 'Sorry, you are not allowed to access Jetpack Social data on this site.', 'jetpack' ),
213 array( 'status' => rest_authorization_required_code() )
214 );
215 }
216 }
217 wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_List_Publicize_Connections' );
218