PluginProbe
Mailchimp List Subscribe Form / 1.9.0
Mailchimp List Subscribe Form v1.9.0
1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 All 55 releases
mailchimp / includes / class-mailchimp-admin.php

class-mailchimp-admin.php in Mailchimp List Subscribe Form 1.9.0, at includes/class-mailchimp-admin.php

878 lines 37.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class responsible for admin side functionalities.
4 *
5 * The long term plan is to break up admin functionality into smaller, more focused
6 * files to improve maintainability. This could also include:
7 * - Moving OAuth related code to oauth.php
8 * - Moving account creation code to account.php
9 * - Moving settings page code to settings.php
10 * - Moving notices code to notices.php (already done)
11 * This will help avoid having too much code in a single file and make the codebase more modular.
12 *
13 * @package Mailchimp
14 */
15
16 // Exit if accessed directly.
17 if ( ! defined( 'ABSPATH' ) ) {
18 exit;
19 }
20
21 /**
22 * Class Mailchimp_Admin
23 *
24 * @since 1.6.0
25 */
26 class Mailchimp_Admin {
27
28 /**
29 * The OAuth base endpoint
30 *
31 * @since 1.6.0
32 * @var string
33 */
34 private $oauth_url = 'https://wordpress.mailchimpapp.com';
35
36 /**
37 * Initialize the class
38 */
39 public function init() {
40 add_action( 'admin_notices', array( $this, 'admin_notices' ) );
41 add_action( 'wp_ajax_mailchimp_sf_oauth_start', array( $this, 'start_oauth_process' ) );
42 add_action( 'wp_ajax_mailchimp_sf_oauth_finish', array( $this, 'finish_oauth_process' ) );
43 add_action( 'wp_ajax_mailchimp_sf_create_account', array( $this, 'mailchimp_create_account' ) );
44 add_action( 'wp_ajax_mailchimp_sf_check_login_session', array( $this, 'check_login_session' ) );
45
46 add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_page_scripts' ) );
47 add_action( 'admin_menu', array( $this, 'add_admin_menu_pages' ) );
48 add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) );
49
50 $user_sync = new Mailchimp_User_Sync();
51 $user_sync->init();
52 }
53
54 /**
55 * Start the OAuth process.
56 *
57 * This function is called via AJAX.
58 *
59 * It starts the OAuth process by the calling the OAuth middleware
60 * server and sending the response to the front-end.
61 */
62 public function start_oauth_process() {
63 // Validate the nonce and permissions.
64 if (
65 ! current_user_can( 'manage_options' ) ||
66 ! isset( $_POST['nonce'] ) ||
67 ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'mailchimp_sf_oauth_start_nonce' )
68 ) {
69 wp_send_json_error( array( 'message' => esc_html__( 'You do not have permission to perform this action.', 'mailchimp' ) ) );
70 }
71
72 // Generate a secret and send it to the OAuth server.
73 $secret = uniqid( 'mailchimp_sf_' );
74 $args = array(
75 'domain' => site_url(),
76 'secret' => $secret,
77 );
78
79 $options = array(
80 'headers' => array(
81 'Content-type' => 'application/json',
82 ),
83 'body' => wp_json_encode( $args ),
84 );
85
86 $response = wp_remote_post( $this->oauth_url . '/api/start', $options );
87
88 // Check for errors.
89 if ( $response instanceof WP_Error ) {
90 wp_send_json_error( array( 'message' => $response->get_error_message() ) );
91 }
92
93 // Send the response to the front-end.
94 if ( 201 === $response['response']['code'] && ! empty( $response['body'] ) ) {
95 set_site_transient( 'mailchimp_sf_oauth_secret', $secret, 60 * 60 );
96 $result = json_decode( $response['body'], true );
97 wp_send_json_success( $result );
98 } else {
99 if ( ! empty( $response['response'] ) ) {
100 $response = $response['response'];
101 }
102 wp_send_json_error( $response );
103 }
104 }
105
106 /**
107 * Finish the OAuth process.
108 *
109 * This function is called via AJAX.
110 *
111 * This function finishes the OAuth process by the sending
112 * a temporary token back to the OAuth server.
113 */
114 public function finish_oauth_process() {
115 // Validate the nonce and permissions.
116 if (
117 ! current_user_can( 'manage_options' ) ||
118 ! isset( $_POST['nonce'] ) ||
119 ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'mailchimp_sf_oauth_finish_nonce' )
120 ) {
121 wp_send_json_error( array( 'message' => esc_html__( 'You do not have permission to perform this action.', 'mailchimp' ) ) );
122 }
123
124 $token = isset( $_POST['token'] ) ? sanitize_text_field( wp_unslash( $_POST['token'] ) ) : '';
125 $args = array(
126 'domain' => site_url(),
127 'secret' => get_site_transient( 'mailchimp_sf_oauth_secret' ),
128 'token' => $token,
129 );
130
131 $options = array(
132 'headers' => array(
133 'Content-type' => 'application/json',
134 ),
135 'body' => wp_json_encode( $args ),
136 );
137 $response = wp_remote_post( $this->oauth_url . '/api/finish', $options );
138
139 // Check for errors.
140 if ( $response instanceof WP_Error ) {
141 wp_send_json_error( array( 'message' => $response->get_error_message() ) );
142 }
143
144 if ( 200 === $response['response']['code'] ) {
145 // Save the access token and data center.
146 $result = json_decode( $response['body'], true );
147 if ( $result && ! empty( $result['access_token'] ) && ! empty( $result['data_center'] ) ) {
148 delete_site_transient( 'mailchimp_sf_oauth_secret' );
149
150 // Verify the token.
151 $verify = $this->verify_and_save_oauth_token( $result['access_token'], $result['data_center'] );
152
153 if ( is_wp_error( $verify ) ) {
154 // If there is an error, send it back to the front-end.
155 wp_send_json_error( array( 'message' => $verify->get_error_message() ) );
156 }
157
158 wp_send_json_success( true );
159 } else {
160 wp_send_json_error( array( 'message' => esc_html__( 'Invalid response from the server.', 'mailchimp' ) ) );
161 }
162 } else {
163 wp_send_json_error( $response );
164 }
165 }
166
167 /**
168 * Create a new Mailchimp account.
169 *
170 * This function is called via AJAX.
171 *
172 * This function creates a new Mailchimp account by sending the user data to the middleware server.
173 */
174 public function mailchimp_create_account() {
175 // Validate the nonce and permissions.
176 if (
177 ! current_user_can( 'manage_options' ) ||
178 ! isset( $_POST['nonce'] ) ||
179 ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'mailchimp_sf_create_account_nonce' )
180 ) {
181 wp_send_json_error( array( 'message' => esc_html__( 'You do not have permission to perform this action.', 'mailchimp' ) ) );
182 }
183
184 $data = isset( $_POST['data'] ) ? $this->sanitize_data( wp_unslash( $_POST['data'] ) ) : array(); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Data is sanitized in the sanitize_data method.
185 if ( empty( $data ) ) {
186 wp_send_json_error( array( 'message' => esc_html__( 'No data provided.', 'mailchimp' ) ) );
187 }
188
189 // Get the IP address.
190 if ( isset( $_SERVER['REMOTE_ADDR'] ) && ( '::1' === $_SERVER['REMOTE_ADDR'] || '127.0.0.1' === $_SERVER['REMOTE_ADDR'] ) ) {
191 $data['ip_address'] = '127.0.0.1';
192 } elseif ( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
193 $data['ip_address'] = sanitize_text_field( wp_unslash( $_SERVER['HTTP_CLIENT_IP'] ) );
194 } elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
195 $data['ip_address'] = sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_FORWARDED_FOR'] ) );
196 } else {
197 $data['ip_address'] = sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) );
198 }
199
200 $request_data = array(
201 'headers' => array(
202 'Content-type' => 'application/json',
203 'Accept' => 'application/json',
204 ),
205 'body' => wp_json_encode( $data ),
206 'timeout' => 30,
207 );
208
209 $response = wp_remote_post( $this->oauth_url . '/api/signup/', $request_data );
210 // Return the error if there is one.
211 if ( $response instanceof WP_Error ) {
212 wp_send_json_error( array( 'message' => $response->get_error_message() ) );
213 }
214
215 $response_body = json_decode( $response['body'] );
216 if ( 200 === $response['response']['code'] && true === $response_body->success ) {
217 $result = json_decode( $response['body'], true );
218
219 // Verify and save the token.
220 $verify = $this->verify_and_save_oauth_token( $result['data']['oauth_token'], $result['data']['dc'] );
221
222 if ( is_wp_error( $verify ) ) {
223 // If there is an error, send it back to the front-end.
224 wp_send_json_error( array( 'message' => $verify->get_error_message() ) );
225 }
226 update_option( 'mailchimp_sf_waiting_for_login', 'waiting' );
227 wp_send_json_success( true );
228
229 } elseif ( 404 === $response['response']['code'] ) {
230 wp_send_json_error( array( 'success' => false ) );
231
232 } else {
233 $username = isset( $_POST['data']['username'] ) ? sanitize_email( wp_unslash( $_POST['data']['username'] ) ) : '';
234 $username = preg_replace( '/[^A-Za-z0-9\-\@\.]/', '', $username );
235 $suggestion = wp_remote_get( $this->oauth_url . '/api/usernames/suggestions/' . $username );
236 $suggested_username = json_decode( $suggestion['body'] )->data;
237 wp_send_json_error(
238 array(
239 'success' => false,
240 'suggest_login' => true,
241 'suggested_username' => $suggested_username,
242 )
243 );
244 }
245 }
246
247 /**
248 * Check the login session.
249 *
250 * This function is called via AJAX.
251 *
252 * This function checks if the user is logged in to Mailchimp which confirms the account activation.
253 */
254 public function check_login_session() {
255 // Validate the nonce and permissions.
256 if (
257 ! current_user_can( 'manage_options' ) ||
258 ! isset( $_POST['nonce'] ) ||
259 ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'mailchimp_sf_check_login_session_nonce' )
260 ) {
261 wp_send_json_error( array( 'message' => esc_html__( 'You do not have permission to perform this action.', 'mailchimp' ) ) );
262 }
263
264 $api = mailchimp_sf_get_api();
265 if ( $api ) {
266 $profile = $api->get( '' );
267 if ( is_wp_error( $profile ) ) {
268 wp_send_json_error( array( 'message' => $profile->get_error_message() ) );
269 }
270
271 $logged_in = ( ! empty( $profile['last_login'] ) );
272 if ( $logged_in ) {
273 delete_option( 'mailchimp_sf_waiting_for_login' );
274 }
275 wp_send_json_success(
276 array(
277 'success' => true,
278 'logged_in' => $logged_in,
279 'redirect' => admin_url( 'admin.php?page=mailchimp_sf_options' ),
280 )
281 );
282 } else {
283 wp_send_json_error( array( 'success' => false ) );
284 }
285 }
286
287 /**
288 * Verify and save the OAuth token.
289 *
290 * @param string $access_token The token to verify.
291 * @param string $data_center The data center to verify.
292 * @return mixed
293 */
294 public function verify_and_save_oauth_token( $access_token, $data_center ) {
295 try {
296 $api = new MailChimp_API( $access_token, $data_center );
297 } catch ( Exception $e ) {
298 $msg = $e->getMessage();
299 return new WP_Error( 'mailchimp-sf-invalid-token', $msg );
300 }
301
302 $user = $api->get( '' );
303 if ( is_wp_error( $user ) ) {
304 return $user;
305 }
306
307 // Might as well set this data if we have it already.
308 $valid_roles = array( 'owner', 'admin', 'manager' );
309 if ( isset( $user['role'] ) && in_array( $user['role'], $valid_roles, true ) ) {
310 $data_encryption = new Mailchimp_Data_Encryption();
311
312 // Clean up the old data.
313 delete_option( 'mc_api_key' ); // Deprecated API key, need to remove as part of the migration.
314 delete_option( 'mailchimp_sf_access_token' );
315 delete_option( 'mailchimp_sf_auth_error' );
316 delete_option( 'mc_datacenter' );
317
318 update_option( 'mailchimp_sf_access_token', $data_encryption->encrypt( $access_token ) );
319 update_option( 'mc_datacenter', sanitize_text_field( $data_center ) );
320 update_option( 'mc_user', $this->sanitize_data( $user ) );
321
322 // Clear Mailchimp List ID if saved list is not available.
323 $lists = $api->get( 'lists', 100, array( 'fields' => 'lists.id,lists.name,lists.email_type_option' ) );
324 if ( ! is_wp_error( $lists ) ) {
325 $lists = $lists['lists'] ?? array();
326 $saved_list_id = get_option( 'mc_list_id' );
327 $list_ids = array_map(
328 function ( $ele ) {
329 return $ele['id'];
330 },
331 $lists
332 );
333 if ( ! in_array( $saved_list_id, $list_ids, true ) ) {
334 delete_option( 'mc_list_id' );
335 }
336
337 // Update lists option.
338 if ( ! empty( $lists ) ) {
339 update_option( 'mailchimp_sf_lists', $lists );
340 }
341 }
342 return true;
343 } else {
344 $msg = esc_html__( 'API Key must belong to "Owner", "Admin", or "Manager."', 'mailchimp' );
345 return new WP_Error( 'mailchimp-sf-invalid-role', $msg );
346 }
347 }
348
349 /**
350 * Display admin notices.
351 *
352 * @since 1.6.0
353 */
354 public function admin_notices() {
355 if ( ! current_user_can( 'manage_options' ) ) {
356 return;
357 }
358 $current_screen = get_current_screen();
359
360 // Display a deprecation notice if the user is using an API key to connect with Mailchimp.
361 if ( get_option( 'mc_api_key', '' ) && ! get_option( 'mailchimp_sf_access_token', '' ) && mailchimp_sf_should_display_form() ) {
362
363 if ( $current_screen && 'toplevel_page_mailchimp_sf_options' === $current_screen->id ) {
364 ?>
365 <div class="notice notice-warning">
366 <p>
367 <?php
368 esc_html_e( 'You are using an outdated API Key connection to Mailchimp, please migrate to the new OAuth authentication method to continue accessing your Mailchimp account.', 'mailchimp' );
369 ?>
370 </p>
371 <div class="migrate-to-oauth-wrapper">
372 <?php
373 // Migrate button.
374 $login_button_text = __( 'Migrate to OAuth authentication', 'mailchimp' );
375 include_once MCSF_DIR . 'includes/admin/templates/login-button.php'; // phpcs:ignore PEAR.Files.IncludingFile.UseRequireOnce
376 ?>
377 </div>
378 </div>
379 <?php
380 } else {
381 ?>
382 <div class="notice notice-warning is-dismissible">
383 <p>
384 <?php
385 $message = sprintf(
386 /* translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag */
387 __( 'You are using an outdated API Key connection to Mailchimp, please migrate to the new OAuth authentication method to continue accessing your Mailchimp account by clicking the "Migrate to OAuth authentication" button on the %1$sMailchimp settings%2$s page.', 'mailchimp' ),
388 '<a href="' . esc_url( admin_url( 'admin.php?page=mailchimp_sf_options' ) ) . '">',
389 '</a>'
390 );
391
392 echo wp_kses( $message, array( 'a' => array( 'href' => array() ) ) );
393 ?>
394 </p>
395 </div>
396 <?php
397 }
398 }
399
400 // Display a notice if the user is waiting for the login to complete.
401 if ( $current_screen && 'toplevel_page_mailchimp_sf_options' === $current_screen->id ) {
402 $api = mailchimp_sf_get_api();
403 if ( $api && 'waiting' === get_option( 'mailchimp_sf_waiting_for_login' ) ) {
404 $profile = $api->get( '' );
405 if ( ! is_wp_error( $profile ) ) {
406 if ( ! empty( $profile['last_login'] ) ) {
407 // Clear the waiting flag if the user is logged in.
408 delete_option( 'mailchimp_sf_waiting_for_login' );
409 } else {
410 ?>
411 <div class="notice notice-warning is-dismissible">
412 <p>
413 <?php
414 esc_html_e( 'Please activate your Mailchimp account to complete the setup. Without activation, the connection to WordPress may be interrupted.', 'mailchimp' );
415 ?>
416 </p>
417 </div>
418 <?php
419 }
420 }
421 }
422 }
423
424 if (
425 ! get_option( 'mailchimp_sf_auth_error', false ) ||
426 ! get_option( 'mailchimp_sf_access_token', '' )
427 ) {
428 return;
429 }
430
431 // Display a notice if the access token is invalid/revoked.
432 ?>
433 <div class="notice notice-error is-dismissible">
434 <p>
435 <?php
436 $message = sprintf(
437 /* translators: Placeholders: %1$s - <a> tag, %2$s - </a> tag */
438 __( 'Heads up! There may be a problem with your connection to Mailchimp. Please %1$sre-connect%2$s your Mailchimp account to fix the issue.', 'mailchimp' ),
439 '<a href="' . esc_url( admin_url( 'admin.php?page=mailchimp_sf_options' ) ) . '">',
440 '</a>'
441 );
442
443 echo wp_kses( $message, array( 'a' => array( 'href' => array() ) ) );
444 ?>
445 </p>
446 </div>
447 <?php
448 }
449
450 /**
451 * Sanitize variables using sanitize_text_field.
452 *
453 * Arrays are sanitized recursively, non-scalar values are ignored.
454 *
455 * @param string|array $data Data to sanitize.
456 * @return string|array
457 */
458 public function sanitize_data( $data ) {
459 if ( is_array( $data ) ) {
460 return array_map( array( $this, 'sanitize_data' ), $data );
461 } else {
462 return is_scalar( $data ) ? sanitize_text_field( $data ) : $data;
463 }
464 }
465
466 /**
467 * Enqueue scripts/styles for the Mailchimp admin page
468 *
469 * @param string $hook_suffix The current admin page.
470 * @return void
471 */
472 public function enqueue_admin_page_scripts( $hook_suffix ) {
473 if ( 'toplevel_page_mailchimp_sf_options' !== $hook_suffix && 'admin_page_mailchimp_sf_create_account' !== $hook_suffix ) {
474 return;
475 }
476
477 wp_enqueue_style( 'mailchimp_sf_admin_css', MCSF_URL . 'assets/css/admin.css', array( 'wp-jquery-ui-dialog' ), true );
478 wp_enqueue_script( 'showMe', MCSF_URL . 'assets/js/hidecss.js', array( 'jquery' ), MCSF_VER, true );
479 wp_enqueue_script( 'mailchimp_sf_admin', MCSF_URL . 'assets/js/admin.js', array( 'jquery', 'jquery-ui-dialog' ), MCSF_VER, true );
480
481 $data = array(
482 'ajax_url' => esc_url( admin_url( 'admin-ajax.php' ) ),
483 'oauth_url' => esc_url( $this->oauth_url ),
484 'oauth_start_nonce' => wp_create_nonce( 'mailchimp_sf_oauth_start_nonce' ),
485 'oauth_finish_nonce' => wp_create_nonce( 'mailchimp_sf_oauth_finish_nonce' ),
486 'oauth_window_name' => esc_html__( 'Mailchimp For WordPress OAuth', 'mailchimp' ),
487 'generic_error' => esc_html__( 'An error occurred. Please try again.', 'mailchimp' ),
488 'modal_title' => esc_html__( 'Login Popup is blocked!', 'mailchimp' ),
489 'modal_button_try_again' => esc_html__( 'Try again', 'mailchimp' ),
490 'modal_button_cancel' => esc_html__( 'No, cancel!', 'mailchimp' ),
491 'admin_settings_url' => esc_url( admin_url( 'admin.php?page=mailchimp_sf_options' ) ),
492 'user_sync_status_nonce' => wp_create_nonce( 'mailchimp_sf_user_sync_status' ),
493 'delete_user_sync_error_nonce' => wp_create_nonce( 'mailchimp_sf_delete_user_sync_error' ),
494 'no_errors_found' => esc_html__( 'No errors found', 'mailchimp' ),
495 );
496
497 // Create account page specific data.
498 if ( 'admin_page_mailchimp_sf_create_account' === $hook_suffix ) {
499 $data['create_account_nonce'] = wp_create_nonce( 'mailchimp_sf_create_account_nonce' );
500 $data['check_login_session_nonce'] = wp_create_nonce( 'mailchimp_sf_check_login_session_nonce' );
501 /* translators: %s is field name. */
502 $data['required_error'] = esc_html__( '%s can\'t be blank.', 'mailchimp' );
503 $data['invalid_email_error'] = esc_html__( 'Insert correct email.', 'mailchimp' );
504 $data['confirm_email_match'] = esc_html__( 'Email confirmation must match confirmation email.', 'mailchimp' );
505 $data['confirm_email_match2'] = esc_html__( 'Email confirmation must match the field above.', 'mailchimp' );
506 }
507
508 wp_localize_script(
509 'mailchimp_sf_admin',
510 'mailchimp_sf_admin_params',
511 $data
512 );
513 }
514
515 /**
516 * Add the create account page and the settings page to the admin menu.
517 *
518 * @since 1.6.0
519 */
520 public function add_admin_menu_pages() {
521 // Add settings page.
522 add_menu_page(
523 esc_html__( 'Mailchimp Setup', 'mailchimp' ),
524 esc_html__( 'Mailchimp', 'mailchimp' ),
525 MCSF_CAP_THRESHOLD,
526 'mailchimp_sf_options',
527 array( $this, 'settings_page' ),
528 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1Mi4wMyA1NSI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiNmZmY7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5Bc3NldCAxPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iTGF5ZXJfMS0yIiBkYXRhLW5hbWU9IkxheWVyIDEiPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTExLjY0LDI4LjU0YTQuNzUsNC43NSwwLDAsMC0xLjE3LjA4Yy0yLjc5LjU2LTQuMzYsMi45NC00LjA1LDZhNi4yNCw2LjI0LDAsMCwwLDUuNzIsNS4yMSw0LjE3LDQuMTcsMCwwLDAsLjgtLjA2YzIuODMtLjQ4LDMuNTctMy41NSwzLjEtNi41N0MxNS41MSwyOS44MywxMy4yMSwyOC42MywxMS42NCwyOC41NFptMi43Nyw4LjA3YTEuMTcsMS4xNywwLDAsMS0xLjEuNTUsMS41MywxLjUzLDAsMCwxLTEuMzctMS41OEE0LDQsMCwwLDEsMTIuMjMsMzRhMS40NCwxLjQ0LDAsMCwwLS41NS0xLjc0LDEuNDgsMS40OCwwLDAsMC0xLjEyLS4yMSwxLjQ0LDEuNDQsMCwwLDAtLjkyLjY0LDMuMzksMy4zOSwwLDAsMC0uMzQuNzlsMCwuMTFjLS4xMy4zNC0uMzMuNDUtLjQ3LjQzcy0uMTYtLjA1LS4yMS0uMjFhMywzLDAsMCwxLC43OC0yLjU1LDIuNDYsMi40NiwwLDAsMSwyLjExLS43NiwyLjUsMi41LDAsMCwxLDEuOTEsMS4zOSwzLjE5LDMuMTksMCwwLDEtLjIzLDIuODJsLS4wOS4yQTEuMTYsMS4xNiwwLDAsMCwxMywzNmEuNzQuNzQsMCwwLDAsLjYzLjMyLDEuMzgsMS4zOCwwLDAsMCwuMzQsMGMuMTUsMCwuMy0uMDcuMzksMEEuMjQuMjQsMCwwLDEsMTQuNDEsMzYuNjFaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNTEsMzMuODhhMy44NCwzLjg0LDAsMCwwLTEuMTUtMWwtLjExLS4zNy0uMTQtLjQyYTUuNTcsNS41NywwLDAsMCwuNS0zLjMyLDUuNDMsNS40MywwLDAsMC0xLjU0LTMsMTAuMDksMTAuMDksMCwwLDAtNC4yNC0yLjI2YzAtLjY3LDAtMS40My0uMDYtMS45YTEyLjgzLDEyLjgzLDAsMCwwLS40OS0zLjI1LDEwLjQ2LDEwLjQ2LDAsMCwwLTEuMy0yLjkyYzIuMTQtMi41NiwzLjI5LTUuMjEsMy4yOS03LjU3LDAtMy44My0zLTYuMy03LjU5LTYuM2ExOS4zLDE5LjMsMCwwLDAtNy4yMiwxLjZsLS4zNC4xNEwyOC43LDEuNTJBNi4zMSw2LjMxLDAsMCwwLDI0LjQzLDAsMTQuMDcsMTQuMDcsMCwwLDAsMTcuNiwyLjJhMzYuOTMsMzYuOTMsMCwwLDAtNi43OCw1LjIxYy00LjYsNC4zOC04LjMsOS42My05LjkxLDE0QTEyLjUxLDEyLjUxLDAsMCwwLDAsMjYuNTRhNi4xNiw2LjE2LDAsMCwwLDIuMTMsNC40bC43OC42NkExMC40NCwxMC40NCwwLDAsMCwyLjc0LDM1YTkuMzYsOS4zNiwwLDAsMCwzLjIxLDYsMTAsMTAsMCwwLDAsNS4xMywyLjQzLDIwLjE5LDIwLjE5LDAsMCwwLDcuMzEsOEEyMy4zMywyMy4zMywwLDAsMCwzMC4xNyw1NUgzMWEyMy4yNywyMy4yNywwLDAsMCwxMi0zLjE2LDE5LjEsMTkuMSwwLDAsMCw3LjgyLTkuMDZsMCwwQTE2Ljg5LDE2Ljg5LDAsMCwwLDUyLDM3LjIzLDUuMTcsNS4xNywwLDAsMCw1MSwzMy44OFptLTEuNzgsOC4yMWMtMyw3LjI5LTEwLjMsMTEuMzUtMTksMTEuMDktOC4wNi0uMjQtMTQuOTQtNC41LTE4LTExLjQzYTcuOTQsNy45NCwwLDAsMS01LjEyLTIuMDYsNy41Niw3LjU2LDAsMCwxLTIuNjEtNC44NUE4LjMxLDguMzEsMCwwLDEsNSwzMUwzLjMyLDI5LjU2Qy00LjQyLDIzLDE5Ljc3LTMuODYsMjcuNTEsMi44OWwyLjY0LDIuNTgsMS40NC0uNjFjNi43OS0yLjgxLDEyLjMtMS40NSwxMi4zLDMsMCwyLjMzLTEuNDgsNS4wNS0zLjg2LDcuNTJhNy41NCw3LjU0LDAsMCwxLDIsMy40OCwxMSwxMSwwLDAsMSwuNDIsMi44MmMwLDEsLjA5LDMuMTYuMDksMy4ybDEsLjI3QTguNjQsOC42NCwwLDAsMSw0Ny4yLDI3YTMuNjYsMy42NiwwLDAsMSwxLjA2LDIuMDZBNCw0LDAsMCwxLDQ3LjU1LDMyLDEwLjE1LDEwLjE1LDAsMCwxLDQ4LDMzLjA4Yy4yLjY0LjM1LDEuMTguMzcsMS4yNS43NCwwLDEuODkuODUsMS44OSwyLjg5QTE1LjI5LDE1LjI5LDAsMCwxLDQ5LjE4LDQyLjA5WiIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTQ4LDM2YTEuMzYsMS4zNiwwLDAsMC0uODYtLjE2LDExLjc2LDExLjc2LDAsMCwwLS44Mi0yLjc4QTE3Ljg5LDE3Ljg5LDAsMCwxLDQwLjQ1LDM2YTIzLjY0LDIzLjY0LDAsMCwxLTcuODEuODRjLTEuNjktLjE0LTIuODEtLjYzLTMuMjMuNzRhMTguMywxOC4zLDAsMCwwLDgsLjgxLjE0LjE0LDAsMCwxLC4xNi4xMy4xNS4xNSwwLDAsMS0uMDkuMTVzLTMuMTQsMS40Ni04LjE0LS4wOGEyLjU4LDIuNTgsMCwwLDAsMS44MywxLjkxLDguMjQsOC4yNCwwLDAsMCwxLjQ0LjM5YzYuMTksMS4wNiwxMi0yLjQ3LDEzLjI3LTMuMzYuMS0uMDcuMTYsMCwuMDguMTJsLS4xMy4xOGMtMS41OSwyLjA2LTUuODgsNC40NC0xMS40NSw0LjQ0LTIuNDMsMC00Ljg2LS44Ni01Ljc1LTIuMTctMS4zOC0yLS4wNy01LDIuMjQtNC43MWwxLC4xMWEyMS4xMywyMS4xMywwLDAsMCwxMC41LTEuNjhjMy4xNS0xLjQ2LDQuMzQtMy4wNyw0LjE2LTQuMzdBMS44NywxLjg3LDAsMCwwLDQ2LDI4LjM0YTYuOCw2LjgsMCwwLDAtMy0xLjQxYy0uNS0uMTQtLjg0LS4yMy0xLjItLjM1LS42NS0uMjEtMS0uMzktMS0xLjYxLDAtLjUzLS4xMi0yLjQtLjE2LTMuMTYtLjA2LTEuMzUtLjIyLTMuMTktMS4zNi00YTEuOTIsMS45MiwwLDAsMC0xLS4zMSwxLjg2LDEuODYsMCwwLDAtLjU4LjA2LDMuMDcsMy4wNywwLDAsMC0xLjUyLjg2LDUuMjQsNS4yNCwwLDAsMS00LDEuMzJjLS44LDAtMS42NS0uMTYtMi42Mi0uMjJsLS41NywwYTUuMjIsNS4yMiwwLDAsMC01LDQuNTdjLS41NiwzLjgzLDIuMjIsNS44MSwzLDdhMSwxLDAsMCwxLC4yMi41Mi44My44MywwLDAsMS0uMjguNTVoMGE5LjgsOS44LDAsMCwwLTIuMTYsOS4yLDcuNTksNy41OSwwLDAsMCwuNDEsMS4xMmMyLDQuNzMsOC4zLDYuOTMsMTQuNDMsNC45M2ExNS4wNiwxNS4wNiwwLDAsMCwyLjMzLTEsMTIuMjMsMTIuMjMsMCwwLDAsMy41Ny0yLjY3LDEwLjYxLDEwLjYxLDAsMCwwLDMtNS44MkM0OC42LDM2LjcsNDguMzMsMzYuMjMsNDgsMzZabS04LjI1LTcuODJjMCwuNS0uMzEuOTEtLjY4LjlzLS42Ni0uNDItLjY1LS45Mi4zMS0uOTEuNjgtLjlTMzkuNzIsMjcuNjgsMzkuNzEsMjguMThabS0xLjY4LTZjLjcxLS4xMiwxLjA2LjYyLDEuMzIsMS44NWEzLjY0LDMuNjQsMCwwLDEtLjA1LDIsNC4xNCw0LjE0LDAsMCwwLTEuMDYsMCw0LjEzLDQuMTMsMCwwLDEtLjY4LTEuNjRDMzcuMjksMjMuMjMsMzcuMzEsMjIuMzQsMzgsMjIuMjNabS0yLjQsNi41N2EuODIuODIsMCwwLDEsMS4xMS0uMTljLjQ1LjIyLjY5LjY3LjUzLDFhLjgyLjgyLDAsMCwxLTEuMTEuMTlDMzUuNywyOS41OCwzNS40NywyOS4xMywzNS42MywyOC44Wm0tMi44LS4zN2MtLjA3LjExLS4yMy4wOS0uNTcuMDZhNC4yNCw0LjI0LDAsMCwwLTIuMTQuMjIsMiwyLDAsMCwxLS40OS4xNC4xNi4xNiwwLDAsMS0uMTEsMCwuMTUuMTUsMCwwLDEtLjA1LS4xMi44MS44MSwwLDAsMSwuMzItLjUxLDIuNDEsMi40MSwwLDAsMSwxLjI3LS41MywxLjk0LDEuOTQsMCwwLDEsMS43NS41N0EuMTkuMTksMCwwLDEsMzIuODMsMjguNDNabS01LjExLTEuMjZjLS4xMiwwLS4xNy0uMDctLjE5LS4xNHMuMjgtLjU2LjYyLS44MWEzLjYsMy42LDAsMCwxLDMuNTEtLjQyQTMsMywwLDAsMSwzMywyNi44N2MuMTIuMi4xNS4zNS4wNy40NHMtLjQ0LDAtLjk1LS4yNGE0LjE4LDQuMTgsMCwwLDAtMi0uNDNBMjEuODUsMjEuODUsMCwwLDAsMjcuNzEsMjcuMTdaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMzUuNSwxMy4yOWMuMSwwLC4xNi0uMTUuMDctLjJhMTEsMTEsMCwwLDAtNC42OS0xLjIzLjA5LjA5LDAsMCwxLS4wNy0uMTQsNC43OCw0Ljc4LDAsMCwxLC44OC0uODkuMDkuMDksMCwwLDAtLjA2LS4xNiwxMi40NiwxMi40NiwwLDAsMC01LjYxLDIsLjA5LjA5LDAsMCwxLS4xMy0uMDksNi4xNiw2LjE2LDAsMCwxLC41OS0xLjQ1LjA4LjA4LDAsMCwwLS4xMS0uMTFBMjIuNzksMjIuNzksMCwwLDAsMjAsMTYuMjRhLjA5LjA5LDAsMCwwLC4xMi4xM0ExOS41MywxOS41MywwLDAsMSwyNywxMy4zMiwxOS4xLDE5LjEsMCwwLDEsMzUuNSwxMy4yOVoiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0yOC4zNCw2LjQyUzI2LjIzLDQsMjUuNiwzLjhDMjEuNjksMi43NCwxMy4yNCw4LjU3LDcuODQsMTYuMjcsNS42NiwxOS4zOSwyLjUzLDI0LjksNCwyNy43NGExMS40MywxMS40MywwLDAsMCwxLjc5LDEuNzJBNi42NSw2LjY1LDAsMCwxLDEwLDI2Ljc4LDM0LjIxLDM0LjIxLDAsMCwxLDIwLjgsMTEuNjIsNTUuMDksNTUuMDksMCwwLDEsMjguMzQsNi40MloiLz48L2c+PC9nPjwvc3ZnPg=='
529 );
530
531 add_submenu_page(
532 'admin.php',
533 esc_html__( 'Create Mailchimp Account', 'mailchimp' ),
534 esc_html__( 'Create Mailchimp Account', 'mailchimp' ),
535 'manage_options',
536 'mailchimp_sf_create_account',
537 array( $this, 'create_account_page' )
538 );
539 }
540
541 /**
542 * Create account page.
543 *
544 * @since 1.6.0
545 *
546 * @return void
547 */
548 public function create_account_page() {
549 $countries = $this->get_countries();
550 $timezones = $this->get_timezones();
551 ?>
552 <div id="mailchimp-sf-settings-page">
553 <?php
554 include_once MCSF_DIR . 'includes/admin/templates/create-account-page.php';
555 ?>
556 </div>
557 <?php
558 }
559
560 /**
561 * Render the settings page.
562 *
563 * @since 1.9.0
564 *
565 * @return void
566 */
567 public function settings_page() {
568 include_once MCSF_DIR . 'includes/admin/templates/settings.php';
569 }
570
571 /**
572 * Get a list of timezones.
573 *
574 * @since 1.6.0
575 *
576 * @return array
577 */
578 private function get_timezones() {
579 return timezone_identifiers_list();
580 }
581
582 /**
583 * Get a list of countries.
584 *
585 * @since 1.6.0
586 *
587 * @return array
588 */
589 public function get_countries() {
590 return array(
591 'AF' => __( 'Afghanistan', 'mailchimp' ),
592 'AX' => __( '�
593 land Islands', 'mailchimp' ),
594 'AL' => __( 'Albania', 'mailchimp' ),
595 'DZ' => __( 'Algeria', 'mailchimp' ),
596 'AS' => __( 'American Samoa', 'mailchimp' ),
597 'AD' => __( 'Andorra', 'mailchimp' ),
598 'AO' => __( 'Angola', 'mailchimp' ),
599 'AI' => __( 'Anguilla', 'mailchimp' ),
600 'AQ' => __( 'Antarctica', 'mailchimp' ),
601 'AG' => __( 'Antigua and Barbuda', 'mailchimp' ),
602 'AR' => __( 'Argentina', 'mailchimp' ),
603 'AM' => __( 'Armenia', 'mailchimp' ),
604 'AW' => __( 'Aruba', 'mailchimp' ),
605 'AU' => __( 'Australia', 'mailchimp' ),
606 'AT' => __( 'Austria', 'mailchimp' ),
607 'AZ' => __( 'Azerbaijan', 'mailchimp' ),
608 'BS' => __( 'Bahamas', 'mailchimp' ),
609 'BH' => __( 'Bahrain', 'mailchimp' ),
610 'BD' => __( 'Bangladesh', 'mailchimp' ),
611 'BB' => __( 'Barbados', 'mailchimp' ),
612 'BY' => __( 'Belarus', 'mailchimp' ),
613 'BE' => __( 'Belgium', 'mailchimp' ),
614 'PW' => __( 'Belau', 'mailchimp' ),
615 'BZ' => __( 'Belize', 'mailchimp' ),
616 'BJ' => __( 'Benin', 'mailchimp' ),
617 'BM' => __( 'Bermuda', 'mailchimp' ),
618 'BT' => __( 'Bhutan', 'mailchimp' ),
619 'BO' => __( 'Bolivia', 'mailchimp' ),
620 'BQ' => __( 'Bonaire, Saint Eustatius and Saba', 'mailchimp' ),
621 'BA' => __( 'Bosnia and Herzegovina', 'mailchimp' ),
622 'BW' => __( 'Botswana', 'mailchimp' ),
623 'BV' => __( 'Bouvet Island', 'mailchimp' ),
624 'BR' => __( 'Brazil', 'mailchimp' ),
625 'IO' => __( 'British Indian Ocean Territory', 'mailchimp' ),
626 'BN' => __( 'Brunei', 'mailchimp' ),
627 'BG' => __( 'Bulgaria', 'mailchimp' ),
628 'BF' => __( 'Burkina Faso', 'mailchimp' ),
629 'BI' => __( 'Burundi', 'mailchimp' ),
630 'KH' => __( 'Cambodia', 'mailchimp' ),
631 'CM' => __( 'Cameroon', 'mailchimp' ),
632 'CA' => __( 'Canada', 'mailchimp' ),
633 'CV' => __( 'Cape Verde', 'mailchimp' ),
634 'KY' => __( 'Cayman Islands', 'mailchimp' ),
635 'CF' => __( 'Central African Republic', 'mailchimp' ),
636 'TD' => __( 'Chad', 'mailchimp' ),
637 'CL' => __( 'Chile', 'mailchimp' ),
638 'CN' => __( 'China', 'mailchimp' ),
639 'CX' => __( 'Christmas Island', 'mailchimp' ),
640 'CC' => __( 'Cocos (Keeling) Islands', 'mailchimp' ),
641 'CO' => __( 'Colombia', 'mailchimp' ),
642 'KM' => __( 'Comoros', 'mailchimp' ),
643 'CG' => __( 'Congo (Brazzaville)', 'mailchimp' ),
644 'CD' => __( 'Congo (Kinshasa)', 'mailchimp' ),
645 'CK' => __( 'Cook Islands', 'mailchimp' ),
646 'CR' => __( 'Costa Rica', 'mailchimp' ),
647 'HR' => __( 'Croatia', 'mailchimp' ),
648 'CU' => __( 'Cuba', 'mailchimp' ),
649 'CW' => __( 'Cura&ccedil;ao', 'mailchimp' ),
650 'CY' => __( 'Cyprus', 'mailchimp' ),
651 'CZ' => __( 'Czech Republic', 'mailchimp' ),
652 'DK' => __( 'Denmark', 'mailchimp' ),
653 'DJ' => __( 'Djibouti', 'mailchimp' ),
654 'DM' => __( 'Dominica', 'mailchimp' ),
655 'DO' => __( 'Dominican Republic', 'mailchimp' ),
656 'EC' => __( 'Ecuador', 'mailchimp' ),
657 'EG' => __( 'Egypt', 'mailchimp' ),
658 'SV' => __( 'El Salvador', 'mailchimp' ),
659 'GQ' => __( 'Equatorial Guinea', 'mailchimp' ),
660 'ER' => __( 'Eritrea', 'mailchimp' ),
661 'EE' => __( 'Estonia', 'mailchimp' ),
662 'ET' => __( 'Ethiopia', 'mailchimp' ),
663 'FK' => __( 'Falkland Islands', 'mailchimp' ),
664 'FO' => __( 'Faroe Islands', 'mailchimp' ),
665 'FJ' => __( 'Fiji', 'mailchimp' ),
666 'FI' => __( 'Finland', 'mailchimp' ),
667 'FR' => __( 'France', 'mailchimp' ),
668 'GF' => __( 'French Guiana', 'mailchimp' ),
669 'PF' => __( 'French Polynesia', 'mailchimp' ),
670 'TF' => __( 'French Southern Territories', 'mailchimp' ),
671 'GA' => __( 'Gabon', 'mailchimp' ),
672 'GM' => __( 'Gambia', 'mailchimp' ),
673 'GE' => __( 'Georgia', 'mailchimp' ),
674 'DE' => __( 'Germany', 'mailchimp' ),
675 'GH' => __( 'Ghana', 'mailchimp' ),
676 'GI' => __( 'Gibraltar', 'mailchimp' ),
677 'GR' => __( 'Greece', 'mailchimp' ),
678 'GL' => __( 'Greenland', 'mailchimp' ),
679 'GD' => __( 'Grenada', 'mailchimp' ),
680 'GP' => __( 'Guadeloupe', 'mailchimp' ),
681 'GU' => __( 'Guam', 'mailchimp' ),
682 'GT' => __( 'Guatemala', 'mailchimp' ),
683 'GG' => __( 'Guernsey', 'mailchimp' ),
684 'GN' => __( 'Guinea', 'mailchimp' ),
685 'GW' => __( 'Guinea-Bissau', 'mailchimp' ),
686 'GY' => __( 'Guyana', 'mailchimp' ),
687 'HT' => __( 'Haiti', 'mailchimp' ),
688 'HM' => __( 'Heard Island and McDonald Islands', 'mailchimp' ),
689 'HN' => __( 'Honduras', 'mailchimp' ),
690 'HK' => __( 'Hong Kong', 'mailchimp' ),
691 'HU' => __( 'Hungary', 'mailchimp' ),
692 'IS' => __( 'Iceland', 'mailchimp' ),
693 'IN' => __( 'India', 'mailchimp' ),
694 'ID' => __( 'Indonesia', 'mailchimp' ),
695 'IR' => __( 'Iran', 'mailchimp' ),
696 'IQ' => __( 'Iraq', 'mailchimp' ),
697 'IE' => __( 'Ireland', 'mailchimp' ),
698 'IM' => __( 'Isle of Man', 'mailchimp' ),
699 'IL' => __( 'Israel', 'mailchimp' ),
700 'IT' => __( 'Italy', 'mailchimp' ),
701 'CI' => __( 'Ivory Coast', 'mailchimp' ),
702 'JM' => __( 'Jamaica', 'mailchimp' ),
703 'JP' => __( 'Japan', 'mailchimp' ),
704 'JE' => __( 'Jersey', 'mailchimp' ),
705 'JO' => __( 'Jordan', 'mailchimp' ),
706 'KZ' => __( 'Kazakhstan', 'mailchimp' ),
707 'KE' => __( 'Kenya', 'mailchimp' ),
708 'KI' => __( 'Kiribati', 'mailchimp' ),
709 'KW' => __( 'Kuwait', 'mailchimp' ),
710 'KG' => __( 'Kyrgyzstan', 'mailchimp' ),
711 'LA' => __( 'Laos', 'mailchimp' ),
712 'LV' => __( 'Latvia', 'mailchimp' ),
713 'LB' => __( 'Lebanon', 'mailchimp' ),
714 'LS' => __( 'Lesotho', 'mailchimp' ),
715 'LR' => __( 'Liberia', 'mailchimp' ),
716 'LY' => __( 'Libya', 'mailchimp' ),
717 'LI' => __( 'Liechtenstein', 'mailchimp' ),
718 'LT' => __( 'Lithuania', 'mailchimp' ),
719 'LU' => __( 'Luxembourg', 'mailchimp' ),
720 'MO' => __( 'Macao', 'mailchimp' ),
721 'MK' => __( 'North Macedonia', 'mailchimp' ),
722 'MG' => __( 'Madagascar', 'mailchimp' ),
723 'MW' => __( 'Malawi', 'mailchimp' ),
724 'MY' => __( 'Malaysia', 'mailchimp' ),
725 'MV' => __( 'Maldives', 'mailchimp' ),
726 'ML' => __( 'Mali', 'mailchimp' ),
727 'MT' => __( 'Malta', 'mailchimp' ),
728 'MH' => __( 'Marshall Islands', 'mailchimp' ),
729 'MQ' => __( 'Martinique', 'mailchimp' ),
730 'MR' => __( 'Mauritania', 'mailchimp' ),
731 'MU' => __( 'Mauritius', 'mailchimp' ),
732 'YT' => __( 'Mayotte', 'mailchimp' ),
733 'MX' => __( 'Mexico', 'mailchimp' ),
734 'FM' => __( 'Micronesia', 'mailchimp' ),
735 'MD' => __( 'Moldova', 'mailchimp' ),
736 'MC' => __( 'Monaco', 'mailchimp' ),
737 'MN' => __( 'Mongolia', 'mailchimp' ),
738 'ME' => __( 'Montenegro', 'mailchimp' ),
739 'MS' => __( 'Montserrat', 'mailchimp' ),
740 'MA' => __( 'Morocco', 'mailchimp' ),
741 'MZ' => __( 'Mozambique', 'mailchimp' ),
742 'MM' => __( 'Myanmar', 'mailchimp' ),
743 'NA' => __( 'Namibia', 'mailchimp' ),
744 'NR' => __( 'Nauru', 'mailchimp' ),
745 'NP' => __( 'Nepal', 'mailchimp' ),
746 'NL' => __( 'Netherlands', 'mailchimp' ),
747 'NC' => __( 'New Caledonia', 'mailchimp' ),
748 'NZ' => __( 'New Zealand', 'mailchimp' ),
749 'NI' => __( 'Nicaragua', 'mailchimp' ),
750 'NE' => __( 'Niger', 'mailchimp' ),
751 'NG' => __( 'Nigeria', 'mailchimp' ),
752 'NU' => __( 'Niue', 'mailchimp' ),
753 'NF' => __( 'Norfolk Island', 'mailchimp' ),
754 'MP' => __( 'Northern Mariana Islands', 'mailchimp' ),
755 'KP' => __( 'North Korea', 'mailchimp' ),
756 'NO' => __( 'Norway', 'mailchimp' ),
757 'OM' => __( 'Oman', 'mailchimp' ),
758 'PK' => __( 'Pakistan', 'mailchimp' ),
759 'PS' => __( 'Palestinian Territory', 'mailchimp' ),
760 'PA' => __( 'Panama', 'mailchimp' ),
761 'PG' => __( 'Papua New Guinea', 'mailchimp' ),
762 'PY' => __( 'Paraguay', 'mailchimp' ),
763 'PE' => __( 'Peru', 'mailchimp' ),
764 'PH' => __( 'Philippines', 'mailchimp' ),
765 'PN' => __( 'Pitcairn', 'mailchimp' ),
766 'PL' => __( 'Poland', 'mailchimp' ),
767 'PT' => __( 'Portugal', 'mailchimp' ),
768 'PR' => __( 'Puerto Rico', 'mailchimp' ),
769 'QA' => __( 'Qatar', 'mailchimp' ),
770 'RE' => __( 'Reunion', 'mailchimp' ),
771 'RO' => __( 'Romania', 'mailchimp' ),
772 'RU' => __( 'Russia', 'mailchimp' ),
773 'RW' => __( 'Rwanda', 'mailchimp' ),
774 'BL' => __( 'Saint Barth&eacute;lemy', 'mailchimp' ),
775 'SH' => __( 'Saint Helena', 'mailchimp' ),
776 'KN' => __( 'Saint Kitts and Nevis', 'mailchimp' ),
777 'LC' => __( 'Saint Lucia', 'mailchimp' ),
778 'MF' => __( 'Saint Martin (French part)', 'mailchimp' ),
779 'SX' => __( 'Saint Martin (Dutch part)', 'mailchimp' ),
780 'PM' => __( 'Saint Pierre and Miquelon', 'mailchimp' ),
781 'VC' => __( 'Saint Vincent and the Grenadines', 'mailchimp' ),
782 'SM' => __( 'San Marino', 'mailchimp' ),
783 'ST' => __( 'S&atilde;o Tom&eacute; and Pr&iacute;ncipe', 'mailchimp' ),
784 'SA' => __( 'Saudi Arabia', 'mailchimp' ),
785 'SN' => __( 'Senegal', 'mailchimp' ),
786 'RS' => __( 'Serbia', 'mailchimp' ),
787 'SC' => __( 'Seychelles', 'mailchimp' ),
788 'SL' => __( 'Sierra Leone', 'mailchimp' ),
789 'SG' => __( 'Singapore', 'mailchimp' ),
790 'SK' => __( 'Slovakia', 'mailchimp' ),
791 'SI' => __( 'Slovenia', 'mailchimp' ),
792 'SB' => __( 'Solomon Islands', 'mailchimp' ),
793 'SO' => __( 'Somalia', 'mailchimp' ),
794 'ZA' => __( 'South Africa', 'mailchimp' ),
795 'GS' => __( 'South Georgia/Sandwich Islands', 'mailchimp' ),
796 'KR' => __( 'South Korea', 'mailchimp' ),
797 'SS' => __( 'South Sudan', 'mailchimp' ),
798 'ES' => __( 'Spain', 'mailchimp' ),
799 'LK' => __( 'Sri Lanka', 'mailchimp' ),
800 'SD' => __( 'Sudan', 'mailchimp' ),
801 'SR' => __( 'Suriname', 'mailchimp' ),
802 'SJ' => __( 'Svalbard and Jan Mayen', 'mailchimp' ),
803 'SZ' => __( 'Eswatini', 'mailchimp' ),
804 'SE' => __( 'Sweden', 'mailchimp' ),
805 'CH' => __( 'Switzerland', 'mailchimp' ),
806 'SY' => __( 'Syria', 'mailchimp' ),
807 'TW' => __( 'Taiwan', 'mailchimp' ),
808 'TJ' => __( 'Tajikistan', 'mailchimp' ),
809 'TZ' => __( 'Tanzania', 'mailchimp' ),
810 'TH' => __( 'Thailand', 'mailchimp' ),
811 'TL' => __( 'Timor-Leste', 'mailchimp' ),
812 'TG' => __( 'Togo', 'mailchimp' ),
813 'TK' => __( 'Tokelau', 'mailchimp' ),
814 'TO' => __( 'Tonga', 'mailchimp' ),
815 'TT' => __( 'Trinidad and Tobago', 'mailchimp' ),
816 'TN' => __( 'Tunisia', 'mailchimp' ),
817 'TR' => __( 'Turkey', 'mailchimp' ),
818 'TM' => __( 'Turkmenistan', 'mailchimp' ),
819 'TC' => __( 'Turks and Caicos Islands', 'mailchimp' ),
820 'TV' => __( 'Tuvalu', 'mailchimp' ),
821 'UG' => __( 'Uganda', 'mailchimp' ),
822 'UA' => __( 'Ukraine', 'mailchimp' ),
823 'AE' => __( 'United Arab Emirates', 'mailchimp' ),
824 'GB' => __( 'United Kingdom (UK)', 'mailchimp' ),
825 'US' => __( 'United States (US)', 'mailchimp' ),
826 'UM' => __( 'United States (US) Minor Outlying Islands', 'mailchimp' ),
827 'UY' => __( 'Uruguay', 'mailchimp' ),
828 'UZ' => __( 'Uzbekistan', 'mailchimp' ),
829 'VU' => __( 'Vanuatu', 'mailchimp' ),
830 'VA' => __( 'Vatican', 'mailchimp' ),
831 'VE' => __( 'Venezuela', 'mailchimp' ),
832 'VN' => __( 'Vietnam', 'mailchimp' ),
833 'VG' => __( 'Virgin Islands (British)', 'mailchimp' ),
834 'VI' => __( 'Virgin Islands (US)', 'mailchimp' ),
835 'WF' => __( 'Wallis and Futuna', 'mailchimp' ),
836 'EH' => __( 'Western Sahara', 'mailchimp' ),
837 'WS' => __( 'Samoa', 'mailchimp' ),
838 'YE' => __( 'Yemen', 'mailchimp' ),
839 'ZM' => __( 'Zambia', 'mailchimp' ),
840 'ZW' => __( 'Zimbabwe', 'mailchimp' ),
841 );
842 }
843
844 /**
845 * Display the Mailchimp footer text on the Mailchimp admin pages.
846 *
847 * @since 1.6.0
848 *
849 * @param string $text The current footer text.
850 * @return string The modified footer text.
851 */
852 public function admin_footer_text( $text ) {
853 $current_screen = get_current_screen();
854 $current_screen_id = $current_screen ? $current_screen->id : '';
855 if ( ! in_array( $current_screen_id, array( 'toplevel_page_mailchimp_sf_options', 'admin_page_mailchimp_sf_create_account' ), true ) ) {
856 return $text;
857 }
858
859 return wp_kses(
860 sprintf(
861 /* translators: %d - Current year, %s - Mailchimp legal links */
862 __( '©%1$d Intuit Inc. All rights reserved. Mailchimp® is a registered trademark of The Rocket Science Group, <a href="%2$s" target="_blank" rel="noopener noreferrer">Cookie Preferences</a>, <a href="%3$s" target="_blank" rel="noopener noreferrer">Privacy</a>, and <a href="%4$s" target="_blank" rel="noopener noreferrer">Terms</a>.', 'mailchimp' ),
863 gmdate( 'Y' ),
864 esc_url( 'https://mailchimp.com/legal/cookies/#optanon-toggle-display/' ),
865 esc_url( 'https://www.intuit.com/privacy/statement/' ),
866 esc_url( 'https://mailchimp.com/legal/terms' )
867 ),
868 array(
869 'a' => array(
870 'href' => array(),
871 'target' => array(),
872 'rel' => array(),
873 ),
874 )
875 );
876 }
877 }
878