PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
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 / class-wpcom-rest-api-v2-endpoint-mailchimp.php
jetpack / _inc / lib / core-api / wpcom-endpoints Last commit date
business-hours.php 7 months ago class-wpcom-rest-api-v2-endpoint-admin-bar.php 2 months ago class-wpcom-rest-api-v2-endpoint-admin-color.php 7 months ago class-wpcom-rest-api-v2-endpoint-admin-menu.php 1 month ago class-wpcom-rest-api-v2-endpoint-agent-guidelines-ai.php 1 week ago class-wpcom-rest-api-v2-endpoint-ai.php 1 week ago class-wpcom-rest-api-v2-endpoint-app-media.php 7 months ago class-wpcom-rest-api-v2-endpoint-application-password-extras.php 3 months ago class-wpcom-rest-api-v2-endpoint-block-editor-assets.php 2 weeks ago class-wpcom-rest-api-v2-endpoint-blog-stats.php 7 months ago class-wpcom-rest-api-v2-endpoint-email-preview.php 2 months ago class-wpcom-rest-api-v2-endpoint-external-media.php 7 months ago class-wpcom-rest-api-v2-endpoint-following.php 7 months ago class-wpcom-rest-api-v2-endpoint-goodreads.php 7 months ago class-wpcom-rest-api-v2-endpoint-google-docs.php 7 months ago class-wpcom-rest-api-v2-endpoint-guidelines-banner-dismissed.php 1 week ago class-wpcom-rest-api-v2-endpoint-instagram-gallery.php 2 months ago class-wpcom-rest-api-v2-endpoint-mailchimp.php 7 months ago class-wpcom-rest-api-v2-endpoint-mcp-settings.php 6 days ago class-wpcom-rest-api-v2-endpoint-newsletter-categories-list.php 7 months ago class-wpcom-rest-api-v2-endpoint-newsletter-categories-subscriptions-count.php 7 months ago class-wpcom-rest-api-v2-endpoint-newsletter-email-sent-status.php 3 months ago class-wpcom-rest-api-v2-endpoint-podcast-player.php 2 months ago class-wpcom-rest-api-v2-endpoint-profile.php 7 months ago class-wpcom-rest-api-v2-endpoint-related-posts.php 7 months ago class-wpcom-rest-api-v2-endpoint-resolve-redirect.php 7 months ago class-wpcom-rest-api-v2-endpoint-search.php 1 week ago class-wpcom-rest-api-v2-endpoint-send-email-preview.php 1 month ago class-wpcom-rest-api-v2-endpoint-subscribers-list.php 2 weeks ago class-wpcom-rest-api-v2-endpoint-template-loader.php 7 months ago class-wpcom-rest-api-v2-endpoint-top-posts.php 2 months ago class-wpcom-rest-api-v2-endpoint-transient.php 7 months ago class-wpcom-rest-api-v3-endpoint-blogging-prompts.php 7 months ago class-wpcom-rest-api-v3-endpoint-jitm.php 7 months ago gutenberg-available-extensions.php 7 months ago hello.php 7 months ago memberships.php 2 weeks ago publicize-connection-test-results.php 7 months ago service-api-keys.php 1 month ago sites-posts-featured-media-url.php 7 months ago subscribers.php 7 months ago
class-wpcom-rest-api-v2-endpoint-mailchimp.php
194 lines
1 <?php
2 /**
3 * API endpoints to interact with WordPress.com
4 * to get info from the Mailchimp API for use with the Mailchimp block.
5 *
6 * @package automattic/jetpack
7 */
8
9 use Automattic\Jetpack\Connection\Client;
10 use Automattic\Jetpack\Connection\Manager as Connection_Manager;
11 use Automattic\Jetpack\Status\Host;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit( 0 );
15 }
16
17 /**
18 * Mailchimp: Get Mailchimp Status.
19 * API to determine if current site has linked Mailchimp account and mailing list selected.
20 * This API is meant to be used in Jetpack and on WPCOM.
21 *
22 * @since 7.1
23 */
24 class WPCOM_REST_API_V2_Endpoint_Mailchimp extends WP_REST_Controller {
25 /**
26 * Constructor.
27 */
28 public function __construct() {
29 $this->namespace = 'wpcom/v2';
30 $this->rest_base = 'mailchimp';
31 $this->wpcom_is_wpcom_only_endpoint = true;
32
33 add_action( 'rest_api_init', array( $this, 'register_routes' ) );
34 }
35
36 /**
37 * Called automatically on `rest_api_init()`.
38 */
39 public function register_routes() {
40 register_rest_route(
41 $this->namespace,
42 $this->rest_base,
43 array(
44 array(
45 'methods' => WP_REST_Server::READABLE,
46 'callback' => array( $this, 'get_mailchimp_status' ),
47 'permission_callback' => '__return_true',
48 ),
49 )
50 );
51 register_rest_route(
52 $this->namespace,
53 $this->rest_base . '/groups',
54 array(
55 array(
56 'methods' => WP_REST_Server::READABLE,
57 'callback' => array( $this, 'get_mailchimp_groups' ),
58 'permission_callback' => '__return_true',
59 ),
60 )
61 );
62 register_rest_route(
63 $this->namespace,
64 $this->rest_base . '/settings',
65 array(
66 array(
67 'methods' => WP_REST_Server::READABLE,
68 'callback' => array( $this, 'get_mailchimp_settings' ),
69 'permission_callback' => function () {
70 return current_user_can( 'manage_options' );
71 },
72 ),
73 )
74 );
75 }
76
77 /**
78 * Check if MailChimp is set up properly.
79 *
80 * @return bool
81 */
82 private function is_connected() {
83 $option = get_option( 'jetpack_mailchimp' );
84 if ( ! $option ) {
85 return false;
86 }
87 $data = json_decode( $option, true );
88 if ( ! $data ) {
89 return false;
90 }
91 return isset( $data['follower_list_id'] ) && isset( $data['keyring_id'] );
92 }
93
94 /**
95 * Get the status of current blog's Mailchimp connection
96 *
97 * @return mixed
98 * code:string (connected|unconnected),
99 * connect_url:string
100 * site_id:int
101 */
102 public function get_mailchimp_status() {
103 $is_wpcom = ( defined( 'IS_WPCOM' ) && IS_WPCOM );
104 $site_id = $is_wpcom ? get_current_blog_id() : Jetpack_Options::get_option( 'id' );
105 if ( ! $site_id ) {
106 return new WP_Error(
107 'unavailable_site_id',
108 __( 'Sorry, something is wrong with your Jetpack connection.', 'jetpack' ),
109 403
110 );
111 }
112 $connect_url = '/wp-admin/options-writing.php';
113 return array(
114 'code' => $this->is_connected() ? 'connected' : 'not_connected',
115 'connect_url' => $connect_url,
116 'site_id' => $site_id,
117 );
118 }
119
120 /**
121 * Get all Mailchimp groups for the accounted connected to the current blog
122 *
123 * @return mixed
124 * groups:array
125 * site_id:int
126 */
127 public function get_mailchimp_groups() {
128 $is_wpcom = ( defined( 'IS_WPCOM' ) && IS_WPCOM );
129 $site_id = $is_wpcom ? get_current_blog_id() : Jetpack_Options::get_option( 'id' );
130 if ( ! $site_id ) {
131 return new WP_Error(
132 'unavailable_site_id',
133 __( 'Sorry, something is wrong with your Jetpack connection.', 'jetpack' ),
134 403
135 );
136 }
137
138 // Do not attempt to fetch groups if Mailchimp is not connected.
139 if ( ! $this->is_connected() ) {
140 return new WP_Error(
141 'mailchimp_not_connected',
142 __( 'Your site is not connected to Mailchimp yet.', 'jetpack' ),
143 403
144 );
145 }
146
147 $path = sprintf( '/sites/%d/mailchimp/groups', absint( $site_id ) );
148 $request = Client::wpcom_json_api_request_as_blog( $path );
149 $body = wp_remote_retrieve_body( $request );
150 return json_decode( $body );
151 }
152
153 /**
154 * Get the Mailchimp connection settings.
155 *
156 * @return mixed
157 */
158 public function get_mailchimp_settings() {
159 $site_id = Connection_Manager::get_site_id();
160 if ( is_wp_error( $site_id ) ) {
161 return new WP_Error(
162 'unavailable_site_id',
163 __( 'Sorry, something is wrong with your Jetpack connection.', 'jetpack' ),
164 403
165 );
166 }
167
168 $settings = array();
169
170 if ( ( new Host() )->is_wpcom_simple() ) {
171 require_lib( 'mailchimp' );
172 $api = new MailchimpApi( $site_id, get_current_user_id() );
173 $settings = $api::get_settings( $site_id );
174 $settings['audiences'] = $api->get_lists();
175 } else {
176 $path = sprintf( '/sites/%d/mailchimp/settings', $site_id );
177 $response = Client::wpcom_json_api_request_as_user( $path, '1.1', array(), null, 'rest' );
178 if ( ! is_wp_error( $response ) ) {
179 $settings = json_decode( wp_remote_retrieve_body( $response ), true );
180 }
181
182 $path = sprintf( '/sites/%d/mailchimp/lists', $site_id );
183 $response = Client::wpcom_json_api_request_as_user( $path, '1.1', array(), null, 'rest' );
184 if ( ! is_wp_error( $response ) ) {
185 $settings['audiences'] = json_decode( wp_remote_retrieve_body( $response ), true );
186 }
187 }
188
189 return $settings;
190 }
191 }
192
193 wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_Mailchimp' );
194