PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.2
Jetpack – WP Security, Backup, Speed, & Growth v16.2
16.2 16.2-beta 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 All 502 releases
jetpack / _inc / lib / core-api / wpcom-endpoints / class-wpcom-rest-api-v2-endpoint-mailchimp.php

class-wpcom-rest-api-v2-endpoint-mailchimp.php in Jetpack – WP Security, Backup, Speed, & Growth 16.2, at _inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-mailchimp.php

194 lines 5.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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