PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.2.3
Jetpack – WP Security, Backup, Speed, & Growth v12.2.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-following.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 3 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
224 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' => __( 'Display name of the connected account', 'jetpack' ),
79 'type' => 'string',
80 ),
81 'username' => array(
82 'description' => __( 'Username of the connected account', 'jetpack' ),
83 'type' => 'string',
84 ),
85 'profile_display_name' => array(
86 'description' => __( 'The name to display in the profile of the connected account', 'jetpack' ),
87 'type' => 'string',
88 ),
89 'profile_picture' => array(
90 'description' => __( 'Profile picture of the connected account', 'jetpack' ),
91 'type' => 'string',
92 ),
93 'global' => array(
94 'description' => __( 'Is this connection available to all users?', 'jetpack' ),
95 'type' => 'boolean',
96 ),
97 );
98 }
99
100 /**
101 * Schema for the endpoint.
102 *
103 * @return array
104 */
105 public function get_item_schema() {
106 $schema = array(
107 '$schema' => 'http://json-schema.org/draft-04/schema#',
108 'title' => 'jetpack-publicize-connection',
109 'type' => 'object',
110 'properties' => $this->get_connection_schema_properties(),
111 );
112
113 return $this->add_additional_fields_schema( $schema );
114 }
115
116 /**
117 * Helper for retrieving Connections. Used by this endpoint and by
118 * the Connection Test Result endpoint.
119 *
120 * @internal
121 * @return array
122 */
123 protected function get_connections() {
124 global $publicize;
125
126 $items = array();
127
128 foreach ( (array) $publicize->get_services( 'connected' ) as $service_name => $connections ) {
129 foreach ( $connections as $connection ) {
130 $connection_meta = $publicize->get_connection_meta( $connection );
131 $connection_data = $connection_meta['connection_data'];
132
133 $items[] = array(
134 'id' => (string) $publicize->get_connection_unique_id( $connection ),
135 'connection_id' => (string) $publicize->get_connection_id( $connection ),
136 'service_name' => $service_name,
137 'display_name' => $publicize->get_display_name( $service_name, $connection ),
138 'username' => $publicize->get_username( $service_name, $connection ),
139 'profile_display_name' => ! empty( $connection_meta['profile_display_name'] ) ? $connection_meta['profile_display_name'] : '',
140 'profile_picture' => ! empty( $connection_meta['profile_picture'] ) ? $connection_meta['profile_picture'] : '',
141 // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual -- We expect an integer, but do loose comparison below in case some other type is stored.
142 'global' => 0 == $connection_data['user_id'],
143 );
144 }
145 }
146
147 return $items;
148 }
149
150 /**
151 * Get list of connected Publicize connections.
152 *
153 * @param WP_REST_Request $request Full details about the request.
154 *
155 * @return WP_REST_Response suitable for 1-page collection
156 */
157 public function get_items( $request ) {
158 $items = array();
159
160 foreach ( $this->get_connections() as $item ) {
161 $items[] = $this->prepare_item_for_response( $item, $request );
162 }
163
164 $response = rest_ensure_response( $items );
165 $response->header( 'X-WP-Total', count( $items ) );
166 $response->header( 'X-WP-TotalPages', 1 );
167
168 return $response;
169 }
170
171 /**
172 * Filters out data based on ?_fields= request parameter
173 *
174 * @param array $connection Array of info about a specific Publicize connection.
175 * @param WP_REST_Request $request Full details about the request.
176 *
177 * @return array filtered $connection
178 */
179 public function prepare_item_for_response( $connection, $request ) {
180 if ( ! is_callable( array( $this, 'get_fields_for_response' ) ) ) {
181 return $connection;
182 }
183
184 $fields = $this->get_fields_for_response( $request );
185
186 $response_data = array();
187 foreach ( $connection as $field => $value ) {
188 if ( in_array( $field, $fields, true ) ) {
189 $response_data[ $field ] = $value;
190 }
191 }
192
193 return $response_data;
194 }
195
196 /**
197 * Verify that user can access Publicize data
198 *
199 * @return true|WP_Error
200 */
201 public function get_items_permission_check() {
202 global $publicize;
203
204 if ( ! $publicize ) {
205 return new WP_Error(
206 'publicize_not_available',
207 __( 'Sorry, Jetpack Social is not available on your site right now.', 'jetpack' ),
208 array( 'status' => rest_authorization_required_code() )
209 );
210 }
211
212 if ( $publicize->current_user_can_access_publicize_data() ) {
213 return true;
214 }
215
216 return new WP_Error(
217 'invalid_user_permission_publicize',
218 __( 'Sorry, you are not allowed to access Jetpack Social data on this site.', 'jetpack' ),
219 array( 'status' => rest_authorization_required_code() )
220 );
221 }
222 }
223 wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_List_Publicize_Connections' );
224