PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.1.1
Jetpack – WP Security, Backup, Speed, & Growth v14.1.1
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-color.php 2 years ago class-wpcom-rest-api-v2-endpoint-admin-menu.php 1 year ago class-wpcom-rest-api-v2-endpoint-ai.php 2 years ago class-wpcom-rest-api-v2-endpoint-app-media.php 2 years ago class-wpcom-rest-api-v2-endpoint-blog-stats.php 2 years ago class-wpcom-rest-api-v2-endpoint-email-preview.php 2 years ago class-wpcom-rest-api-v2-endpoint-external-media.php 1 year ago class-wpcom-rest-api-v2-endpoint-following.php 2 years ago class-wpcom-rest-api-v2-endpoint-goodreads.php 2 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 2 years ago class-wpcom-rest-api-v2-endpoint-newsletter-categories-list.php 2 years ago class-wpcom-rest-api-v2-endpoint-newsletter-categories-subscriptions-count.php 2 years ago class-wpcom-rest-api-v2-endpoint-podcast-player.php 2 years ago class-wpcom-rest-api-v2-endpoint-profile.php 2 years ago class-wpcom-rest-api-v2-endpoint-publicize-share-post.php 1 year ago class-wpcom-rest-api-v2-endpoint-publicize-share-status.php 1 year ago class-wpcom-rest-api-v2-endpoint-related-posts.php 2 years ago class-wpcom-rest-api-v2-endpoint-resolve-redirect.php 2 years ago class-wpcom-rest-api-v2-endpoint-search.php 4 years ago class-wpcom-rest-api-v2-endpoint-send-email-preview.php 2 years ago class-wpcom-rest-api-v2-endpoint-template-loader.php 3 years ago class-wpcom-rest-api-v2-endpoint-top-posts.php 2 years ago class-wpcom-rest-api-v2-endpoint-transient.php 5 years ago class-wpcom-rest-api-v3-endpoint-blogging-prompts.php 1 year ago gutenberg-available-extensions.php 2 years ago hello.php 4 years ago memberships.php 1 year ago publicize-connection-test-results.php 3 years ago publicize-connections.php 2 years ago publicize-services.php 3 years ago service-api-keys.php 2 years ago sites-posts-featured-media-url.php 2 years ago subscribers.php 3 years ago trait-wpcom-rest-api-proxy-request-trait.php 1 year ago
publicize-connections.php
229 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 * { # Connection 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 'external_id' => array(
98 'description' => __( 'The external ID of the connected account', 'jetpack' ),
99 'type' => 'string',
100 ),
101 );
102 }
103
104 /**
105 * Schema for the endpoint.
106 *
107 * @return array
108 */
109 public function get_item_schema() {
110 $schema = array(
111 '$schema' => 'http://json-schema.org/draft-04/schema#',
112 'title' => 'jetpack-publicize-connection',
113 'type' => 'object',
114 'properties' => $this->get_connection_schema_properties(),
115 );
116
117 return $this->add_additional_fields_schema( $schema );
118 }
119
120 /**
121 * Helper for retrieving Connections. Used by this endpoint and by
122 * the Connection Test Result endpoint.
123 *
124 * @internal
125 * @return array
126 */
127 protected function get_connections() {
128 global $publicize;
129
130 $items = array();
131
132 foreach ( (array) $publicize->get_services( 'connected' ) as $service_name => $connections ) {
133 foreach ( $connections as $connection ) {
134 $connection_meta = $publicize->get_connection_meta( $connection );
135 $connection_data = $connection_meta['connection_data'];
136
137 $items[] = array(
138 'id' => (string) $publicize->get_connection_unique_id( $connection ),
139 'connection_id' => (string) $publicize->get_connection_id( $connection ),
140 'service_name' => $service_name,
141 'display_name' => $publicize->get_display_name( $service_name, $connection ),
142 'username' => $publicize->get_username( $service_name, $connection ),
143 'profile_display_name' => ! empty( $connection_meta['profile_display_name'] ) ? $connection_meta['profile_display_name'] : '',
144 'profile_picture' => ! empty( $connection_meta['profile_picture'] ) ? $connection_meta['profile_picture'] : '',
145 // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual -- We expect an integer, but do loose comparison below in case some other type is stored.
146 'global' => 0 == $connection_data['user_id'],
147 'external_id' => $connection_meta['external_id'] ?? '',
148 );
149 }
150 }
151
152 return $items;
153 }
154
155 /**
156 * Get list of connected Publicize connections.
157 *
158 * @param WP_REST_Request $request Full details about the request.
159 *
160 * @return WP_REST_Response suitable for 1-page collection
161 */
162 public function get_items( $request ) {
163 $items = array();
164
165 foreach ( $this->get_connections() as $item ) {
166 $items[] = $this->prepare_item_for_response( $item, $request );
167 }
168
169 $response = rest_ensure_response( $items );
170 $response->header( 'X-WP-Total', count( $items ) );
171 $response->header( 'X-WP-TotalPages', 1 );
172
173 return $response;
174 }
175
176 /**
177 * Filters out data based on ?_fields= request parameter
178 *
179 * @param array $connection Array of info about a specific Publicize connection.
180 * @param WP_REST_Request $request Full details about the request.
181 *
182 * @return array filtered $connection
183 */
184 public function prepare_item_for_response( $connection, $request ) {
185 if ( ! is_callable( array( $this, 'get_fields_for_response' ) ) ) {
186 return $connection;
187 }
188
189 $fields = $this->get_fields_for_response( $request );
190
191 $response_data = array();
192 foreach ( $connection as $field => $value ) {
193 if ( in_array( $field, $fields, true ) ) {
194 $response_data[ $field ] = $value;
195 }
196 }
197
198 return $response_data;
199 }
200
201 /**
202 * Verify that user can access Publicize data
203 *
204 * @return true|WP_Error
205 */
206 public function get_items_permission_check() {
207 global $publicize;
208
209 if ( ! $publicize ) {
210 return new WP_Error(
211 'publicize_not_available',
212 __( 'Sorry, Jetpack Social is not available on your site right now.', 'jetpack' ),
213 array( 'status' => rest_authorization_required_code() )
214 );
215 }
216
217 if ( $publicize->current_user_can_access_publicize_data() ) {
218 return true;
219 }
220
221 return new WP_Error(
222 'invalid_user_permission_publicize',
223 __( 'Sorry, you are not allowed to access Jetpack Social data on this site.', 'jetpack' ),
224 array( 'status' => rest_authorization_required_code() )
225 );
226 }
227 }
228 wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_List_Publicize_Connections' );
229