PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-a.5
Jetpack – WP Security, Backup, Speed, & Growth v16.1-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 / jetpack_vendor / automattic / jetpack-publicize / src / class-services.php
jetpack / jetpack_vendor / automattic / jetpack-publicize / src Last commit date
jetpack-social-settings 3 months ago rest-api 1 month ago social-image-generator 1 month ago class-connections.php 3 months ago class-focal-point.php 2 months ago class-keyring-helper.php 2 months ago class-keyring-result-handler.php 2 months ago class-message-templates-placeholders.php 3 months ago class-publicize-assets.php 2 months ago class-publicize-base.php 1 month ago class-publicize-script-data.php 1 month ago class-publicize-setup.php 1 month ago class-publicize-ui.php 1 month ago class-publicize-utils.php 1 month ago class-publicize.php 2 months ago class-services.php 9 months ago class-share-status.php 9 months ago class-social-admin-page.php 1 month ago
class-services.php
155 lines
1 <?php
2 /**
3 * Publicize Services class.
4 *
5 * @package automattic/jetpack-publicize
6 */
7
8 namespace Automattic\Jetpack\Publicize;
9
10 use Automattic\Jetpack\Publicize\REST_API\Proxy_Requests;
11 use WP_REST_Request;
12
13 /**
14 * Publicize Services class.
15 */
16 class Services {
17
18 const SERVICES_TRANSIENT = 'jetpack_social_services_list_v2';
19
20 /**
21 * Get the available publicize services. Meant to be called directly only on WPCOM.
22 *
23 * @return array
24 */
25 public static function wpcom_get_all() {
26 // Ensure that we are on WPCOM.
27 Publicize_Utils::assert_is_wpcom( __METHOD__ );
28
29 require_lib( 'external-connections' );
30
31 $external_connections = \WPCOM_External_Connections::init();
32
33 $services = $external_connections->get_external_services_list( 'publicize', get_current_blog_id() );
34
35 $items = array();
36
37 foreach ( $services as $service ) {
38 // Set the fields as per the schema in Services_Controller.
39 $items[] = array(
40 'id' => $service['ID'],
41 'description' => $service['description'],
42 'label' => $service['label'],
43 'status' => $service['status'] ?? 'ok',
44 'supports' => array(
45 'additional_users' => $service['multiple_external_user_ID_support'],
46 'additional_users_only' => $service['external_users_only'],
47 ),
48 'url' => $service['connect_URL'],
49 );
50 }
51
52 return $items;
53 }
54
55 /**
56 * Get all services.
57 *
58 * @param array $args Arguments
59 * - 'ignore_cache': bool Whether to ignore the cache and fetch the connections from the API.
60 * @return array
61 */
62 public static function get_all( $args = array() ) {
63
64 if ( Publicize_Utils::is_wpcom() ) {
65 $services = self::wpcom_get_all();
66 } else {
67
68 $ignore_cache = $args['ignore_cache'] ?? false;
69
70 $services = get_transient( self::SERVICES_TRANSIENT );
71
72 if ( $ignore_cache || false === $services ) {
73 $services = self::fetch_and_cache_services();
74 }
75 // This is here for backwards compatibility
76 // TODO Remove this array_map() call after April 2025 release of Jetpack.
77 return array_map(
78 function ( $service ) {
79 global $publicize;
80
81 return array_merge(
82 $service,
83 array(
84 'ID' => $service['id'],
85 'connect_URL' => $publicize->connect_url( $service['id'], 'connect' ),
86 'external_users_only' => $service['supports']['additional_users_only'],
87 'multiple_external_user_ID_support' => $service['supports']['additional_users'],
88 )
89 );
90 },
91 $services
92 );
93 }
94
95 return $services;
96 }
97
98 /**
99 * Fetch services from the REST API and cache them.
100 *
101 * @return array
102 */
103 public static function fetch_and_cache_services() {
104 $proxy = new Proxy_Requests( 'publicize/services' );
105
106 $request = new WP_REST_Request( 'GET' );
107
108 $response = $proxy->proxy_request_to_wpcom_as_user( $request );
109
110 if ( is_wp_error( $response ) ) {
111 // @todo log error.
112 return array();
113 }
114
115 if ( is_array( $response ) ) {
116 /**
117 * Let us set the connect URL to null.
118 *
119 * Reason:
120 * We do not want to cache the connect URL, as it's user-specific,
121 * but the services are for all users.
122 * The intention is to get the connect URL on demand via an API call when needed.
123 */
124 $services = array_map(
125 function ( $service ) {
126 return array_merge(
127 $service,
128 array(
129 'url' => null,
130 )
131 );
132 },
133 $response
134 );
135
136 if ( ! set_transient( self::SERVICES_TRANSIENT, $services, DAY_IN_SECONDS ) ) {
137 // If the transient has beeen set in another request, the call to set_transient can fail.
138 // If so, we can delete the transient and try again.
139 self::clear_cache();
140
141 set_transient( self::SERVICES_TRANSIENT, $services, DAY_IN_SECONDS );
142 }
143 }
144
145 return $response;
146 }
147
148 /**
149 * Clear the services cache.
150 */
151 public static function clear_cache() {
152 delete_transient( self::SERVICES_TRANSIENT );
153 }
154 }
155