Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/jetpack/extensio.../blocks/mailchim...
File: mailchimp.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* Mailchimp Block.
[2] Fix | Delete
*
[3] Fix | Delete
* @since 7.1.0
[4] Fix | Delete
*
[5] Fix | Delete
* @package automattic/jetpack
[6] Fix | Delete
*/
[7] Fix | Delete
[8] Fix | Delete
namespace Automattic\Jetpack\Extensions\Mailchimp;
[9] Fix | Delete
[10] Fix | Delete
use Automattic\Jetpack\Assets;
[11] Fix | Delete
use Automattic\Jetpack\Blocks;
[12] Fix | Delete
use Automattic\Jetpack\Connection\Client;
[13] Fix | Delete
use Automattic\Jetpack\Connection\Manager as Connection_Manager;
[14] Fix | Delete
use Automattic\Jetpack\External_Connections;
[15] Fix | Delete
use Automattic\Jetpack\Status\Host;
[16] Fix | Delete
use Jetpack;
[17] Fix | Delete
use Jetpack_Gutenberg;
[18] Fix | Delete
use Jetpack_Options;
[19] Fix | Delete
[20] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[21] Fix | Delete
exit( 0 );
[22] Fix | Delete
}
[23] Fix | Delete
[24] Fix | Delete
/**
[25] Fix | Delete
* Registers the block for use in Gutenberg
[26] Fix | Delete
* This is done via an action so that we can disable
[27] Fix | Delete
* registration if we need to.
[28] Fix | Delete
*/
[29] Fix | Delete
function register_block() {
[30] Fix | Delete
if (
[31] Fix | Delete
( defined( 'IS_WPCOM' ) && IS_WPCOM )
[32] Fix | Delete
|| Jetpack::is_connection_ready()
[33] Fix | Delete
) {
[34] Fix | Delete
Blocks::jetpack_register_block(
[35] Fix | Delete
__DIR__,
[36] Fix | Delete
array(
[37] Fix | Delete
'render_callback' => __NAMESPACE__ . '\load_assets',
[38] Fix | Delete
)
[39] Fix | Delete
);
[40] Fix | Delete
[41] Fix | Delete
register_admin_settings();
[42] Fix | Delete
}
[43] Fix | Delete
}
[44] Fix | Delete
add_action( 'init', __NAMESPACE__ . '\register_block' );
[45] Fix | Delete
[46] Fix | Delete
/**
[47] Fix | Delete
* Mailchimp block registration/dependency declaration.
[48] Fix | Delete
*
[49] Fix | Delete
* @param array $attr - Array containing the Mailchimp block attributes.
[50] Fix | Delete
* @param string $content - Mailchimp block content.
[51] Fix | Delete
*
[52] Fix | Delete
* @return string
[53] Fix | Delete
*/
[54] Fix | Delete
function load_assets( $attr, $content ) {
[55] Fix | Delete
[56] Fix | Delete
if ( ! verify_connection() ) {
[57] Fix | Delete
return null;
[58] Fix | Delete
}
[59] Fix | Delete
[60] Fix | Delete
$values = get_attributes_with_defaults( $attr );
[61] Fix | Delete
$blog_id = ( defined( 'IS_WPCOM' ) && IS_WPCOM )
[62] Fix | Delete
? get_current_blog_id()
[63] Fix | Delete
: Jetpack_Options::get_option( 'id' );
[64] Fix | Delete
Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
[65] Fix | Delete
$wrapper_attributes = \WP_Block_Supports::get_instance()->apply_block_supports();
[66] Fix | Delete
$classes = ! empty( $wrapper_attributes['class'] ) ? $wrapper_attributes['class'] : '';
[67] Fix | Delete
$amp_form_action = sprintf( 'https://public-api.wordpress.com/rest/v1.1/sites/%s/email_follow/amp/subscribe/', $blog_id );
[68] Fix | Delete
$is_amp_request = Blocks::is_amp_request();
[69] Fix | Delete
[70] Fix | Delete
ob_start();
[71] Fix | Delete
?>
[72] Fix | Delete
[73] Fix | Delete
<div class="<?php echo esc_attr( $classes ); ?>"<?php echo ! empty( $wrapper_attributes['style'] ) ? ' style="' . esc_attr( $wrapper_attributes['style'] ) . '"' : ''; ?> data-blog-id="<?php echo esc_attr( $blog_id ); ?>">
[74] Fix | Delete
<form
[75] Fix | Delete
aria-describedby="wp-block-jetpack-mailchimp_consent-text"
[76] Fix | Delete
<?php if ( $is_amp_request ) : ?>
[77] Fix | Delete
action-xhr="<?php echo esc_url( $amp_form_action ); ?>"
[78] Fix | Delete
method="post"
[79] Fix | Delete
id="mailchimp_form"
[80] Fix | Delete
target="_top"
[81] Fix | Delete
on="submit-success:AMP.setState( { mailing_list_status: 'subscribed', mailing_list_email: event.response.email } )"
[82] Fix | Delete
<?php endif; ?>
[83] Fix | Delete
>
[84] Fix | Delete
<p>
[85] Fix | Delete
<input
[86] Fix | Delete
aria-label="<?php echo esc_attr( $values['emailPlaceholder'] ); ?>"
[87] Fix | Delete
placeholder="<?php echo esc_attr( $values['emailPlaceholder'] ); ?>"
[88] Fix | Delete
required
[89] Fix | Delete
title="<?php echo esc_attr( $values['emailPlaceholder'] ); ?>"
[90] Fix | Delete
type="email"
[91] Fix | Delete
name="email"
[92] Fix | Delete
/>
[93] Fix | Delete
</p>
[94] Fix | Delete
<?php foreach ( is_array( $values['interests'] ) ? $values['interests'] : array() as $interest ) : ?>
[95] Fix | Delete
<input
[96] Fix | Delete
name="interests[<?php echo esc_attr( $interest ); ?>]"
[97] Fix | Delete
type="hidden"
[98] Fix | Delete
class="mc-submit-param"
[99] Fix | Delete
value="1"
[100] Fix | Delete
/>
[101] Fix | Delete
<?php endforeach; ?>
[102] Fix | Delete
<?php
[103] Fix | Delete
if (
[104] Fix | Delete
! empty( $values['signupFieldTag'] )
[105] Fix | Delete
&& ! empty( $values['signupFieldValue'] )
[106] Fix | Delete
) :
[107] Fix | Delete
?>
[108] Fix | Delete
<input
[109] Fix | Delete
name="merge_fields[<?php echo esc_attr( $values['signupFieldTag'] ); ?>]"
[110] Fix | Delete
type="hidden"
[111] Fix | Delete
class="mc-submit-param"
[112] Fix | Delete
value="<?php echo esc_attr( $values['signupFieldValue'] ); ?>"
[113] Fix | Delete
/>
[114] Fix | Delete
<?php endif; ?>
[115] Fix | Delete
<?php echo render_button( $attr, $content ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
[116] Fix | Delete
<p id="wp-block-jetpack-mailchimp_consent-text">
[117] Fix | Delete
<?php echo wp_kses_post( $values['consentText'] ); ?>
[118] Fix | Delete
</p>
[119] Fix | Delete
[120] Fix | Delete
<?php if ( $is_amp_request ) : ?>
[121] Fix | Delete
[122] Fix | Delete
<div submit-success>
[123] Fix | Delete
<template type="amp-mustache">
[124] Fix | Delete
<div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_success wp-block-jetpack-mailchimp__is-amp">
[125] Fix | Delete
<?php echo esc_html( $values['successLabel'] ); ?>
[126] Fix | Delete
</div>
[127] Fix | Delete
</template>
[128] Fix | Delete
</div>
[129] Fix | Delete
<div submit-error>
[130] Fix | Delete
<template type="amp-mustache">
[131] Fix | Delete
<div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_error wp-block-jetpack-mailchimp__is-amp">
[132] Fix | Delete
<?php echo esc_html( $values['errorLabel'] ); ?>
[133] Fix | Delete
</div>
[134] Fix | Delete
</template>
[135] Fix | Delete
</div>
[136] Fix | Delete
<div submitting>
[137] Fix | Delete
<template type="amp-mustache">
[138] Fix | Delete
<div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_processing wp-block-jetpack-mailchimp__is-amp" role="status">
[139] Fix | Delete
<?php echo esc_html( $values['processingLabel'] ); ?>
[140] Fix | Delete
</div>
[141] Fix | Delete
</template>
[142] Fix | Delete
</div>
[143] Fix | Delete
[144] Fix | Delete
<?php endif; ?>
[145] Fix | Delete
[146] Fix | Delete
</form>
[147] Fix | Delete
<?php if ( ! $is_amp_request ) : ?>
[148] Fix | Delete
[149] Fix | Delete
<div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_processing" role="status">
[150] Fix | Delete
<?php echo esc_html( $values['processingLabel'] ); ?>
[151] Fix | Delete
</div>
[152] Fix | Delete
<div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_success" role="status">
[153] Fix | Delete
<?php echo esc_html( $values['successLabel'] ); ?>
[154] Fix | Delete
</div>
[155] Fix | Delete
<div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_error" role="alert">
[156] Fix | Delete
<?php echo esc_html( $values['errorLabel'] ); ?>
[157] Fix | Delete
</div>
[158] Fix | Delete
[159] Fix | Delete
<?php endif; ?>
[160] Fix | Delete
</div>
[161] Fix | Delete
<?php
[162] Fix | Delete
$html = ob_get_clean();
[163] Fix | Delete
return $html;
[164] Fix | Delete
}
[165] Fix | Delete
[166] Fix | Delete
/**
[167] Fix | Delete
* Mailchimp connection/list selection verification.
[168] Fix | Delete
*
[169] Fix | Delete
* @return boolean
[170] Fix | Delete
*/
[171] Fix | Delete
function verify_connection() {
[172] Fix | Delete
$option = get_option( 'jetpack_mailchimp' );
[173] Fix | Delete
if ( ! $option ) {
[174] Fix | Delete
return false;
[175] Fix | Delete
}
[176] Fix | Delete
$data = json_decode( $option, true );
[177] Fix | Delete
if ( ! $data ) {
[178] Fix | Delete
return false;
[179] Fix | Delete
}
[180] Fix | Delete
return isset( $data['follower_list_id'] ) && isset( $data['keyring_id'] );
[181] Fix | Delete
}
[182] Fix | Delete
[183] Fix | Delete
/**
[184] Fix | Delete
* Builds complete set of attributes using default values where needed.
[185] Fix | Delete
*
[186] Fix | Delete
* @param array $attr Saved set of attributes for the Mailchimp block.
[187] Fix | Delete
* @return array
[188] Fix | Delete
*/
[189] Fix | Delete
function get_attributes_with_defaults( $attr ) {
[190] Fix | Delete
$values = array();
[191] Fix | Delete
$defaults = array(
[192] Fix | Delete
'emailPlaceholder' => esc_html__( 'Enter your email', 'jetpack' ),
[193] Fix | Delete
'consentText' => esc_html__( 'By clicking submit, you agree to share your email address with the site owner and Mailchimp to receive marketing, updates, and other emails from the site owner. Use the unsubscribe link in those emails to opt out at any time.', 'jetpack' ),
[194] Fix | Delete
'processingLabel' => esc_html__( 'Processing…', 'jetpack' ),
[195] Fix | Delete
'successLabel' => esc_html__( 'Success! You\'re on the list.', 'jetpack' ),
[196] Fix | Delete
'errorLabel' => esc_html__( 'Whoops! There was an error and we couldn\'t process your subscription. Please reload the page and try again.', 'jetpack' ),
[197] Fix | Delete
'interests' => array(),
[198] Fix | Delete
'signupFieldTag' => '',
[199] Fix | Delete
'signupFieldValue' => '',
[200] Fix | Delete
);
[201] Fix | Delete
[202] Fix | Delete
foreach ( $defaults as $id => $default ) {
[203] Fix | Delete
$values[ $id ] = isset( $attr[ $id ] ) ? $attr[ $id ] : $default;
[204] Fix | Delete
}
[205] Fix | Delete
[206] Fix | Delete
return $values;
[207] Fix | Delete
}
[208] Fix | Delete
[209] Fix | Delete
/**
[210] Fix | Delete
* Renders the Mailchimp block button using inner block content if available
[211] Fix | Delete
* otherwise generating the HTML button from deprecated attributes.
[212] Fix | Delete
*
[213] Fix | Delete
* @param array $attr Attributes for the Mailchimp block.
[214] Fix | Delete
* @param string $content Mailchimp block content.
[215] Fix | Delete
*
[216] Fix | Delete
* @return string
[217] Fix | Delete
*/
[218] Fix | Delete
function render_button( $attr, $content ) {
[219] Fix | Delete
if ( ! empty( $content ) ) {
[220] Fix | Delete
$block_id = wp_unique_id( 'mailchimp-button-block-' );
[221] Fix | Delete
return str_replace( 'mailchimp-widget-id', $block_id, $content );
[222] Fix | Delete
}
[223] Fix | Delete
[224] Fix | Delete
return render_deprecated_button( $attr );
[225] Fix | Delete
}
[226] Fix | Delete
[227] Fix | Delete
/**
[228] Fix | Delete
* Renders HTML button from deprecated Mailchimp block attributes.
[229] Fix | Delete
*
[230] Fix | Delete
* @param array $attr Mailchimp block attributes.
[231] Fix | Delete
* @return string
[232] Fix | Delete
*/
[233] Fix | Delete
function render_deprecated_button( $attr ) {
[234] Fix | Delete
$default = esc_html__( 'Join my email list', 'jetpack' );
[235] Fix | Delete
$text = empty( $attr['submitButtonText'] ) ? $default : $attr['submitButtonText'];
[236] Fix | Delete
$button_styles = array();
[237] Fix | Delete
[238] Fix | Delete
if ( ! empty( $attr['customBackgroundButtonColor'] ) ) {
[239] Fix | Delete
array_push(
[240] Fix | Delete
$button_styles,
[241] Fix | Delete
sprintf(
[242] Fix | Delete
'background-color: %s',
[243] Fix | Delete
sanitize_hex_color( $attr['customBackgroundButtonColor'] )
[244] Fix | Delete
)
[245] Fix | Delete
);
[246] Fix | Delete
}
[247] Fix | Delete
[248] Fix | Delete
if ( ! empty( $attr['customTextButtonColor'] ) ) {
[249] Fix | Delete
array_push(
[250] Fix | Delete
$button_styles,
[251] Fix | Delete
sprintf(
[252] Fix | Delete
'color: %s',
[253] Fix | Delete
sanitize_hex_color( $attr['customTextButtonColor'] )
[254] Fix | Delete
)
[255] Fix | Delete
);
[256] Fix | Delete
}
[257] Fix | Delete
[258] Fix | Delete
$button_styles = implode( ';', $button_styles );
[259] Fix | Delete
$button_classes = 'components-button is-button is-primary ';
[260] Fix | Delete
[261] Fix | Delete
if ( ! empty( $attr['submitButtonClasses'] ) ) {
[262] Fix | Delete
$button_classes .= $attr['submitButtonClasses'];
[263] Fix | Delete
}
[264] Fix | Delete
[265] Fix | Delete
return sprintf(
[266] Fix | Delete
'<p><button type="submit" class="%s" style="%s">%s</button></p>',
[267] Fix | Delete
esc_attr( $button_classes ),
[268] Fix | Delete
esc_attr( $button_styles ),
[269] Fix | Delete
wp_kses_post( $text )
[270] Fix | Delete
);
[271] Fix | Delete
}
[272] Fix | Delete
[273] Fix | Delete
/**
[274] Fix | Delete
* Registers the settings to manage the Mailchimp connection.
[275] Fix | Delete
*/
[276] Fix | Delete
function register_admin_settings() {
[277] Fix | Delete
Assets::register_script(
[278] Fix | Delete
'jetpack-mailchimp-admin-extra-settings',
[279] Fix | Delete
Jetpack_Gutenberg::get_blocks_directory() . '/mailchimp/admin.js',
[280] Fix | Delete
JETPACK__PLUGIN_FILE,
[281] Fix | Delete
array(
[282] Fix | Delete
'textdomain' => 'jetpack',
[283] Fix | Delete
)
[284] Fix | Delete
);
[285] Fix | Delete
[286] Fix | Delete
External_Connections::add_settings_for_service(
[287] Fix | Delete
'writing',
[288] Fix | Delete
array(
[289] Fix | Delete
'service' => 'mailchimp',
[290] Fix | Delete
'title' => __( 'Mailchimp', 'jetpack' ),
[291] Fix | Delete
'signup_link' => 'https://public-api.wordpress.com/rest/v1.1/sharing/mailchimp/signup',
[292] Fix | Delete
'description' => __( 'Allow users to sign up to your Mailchimp mailing list.', 'jetpack' ),
[293] Fix | Delete
'script' => 'jetpack-mailchimp-admin-extra-settings',
[294] Fix | Delete
'support_link' => array(
[295] Fix | Delete
'wpcom' => 'https://wordpress.com/support/wordpress-editor/blocks/mailchimp-block/',
[296] Fix | Delete
'jetpack' => 'mailchimp-block',
[297] Fix | Delete
),
[298] Fix | Delete
)
[299] Fix | Delete
);
[300] Fix | Delete
[301] Fix | Delete
add_action( 'load-options.php', __NAMESPACE__ . '\update_settings' );
[302] Fix | Delete
}
[303] Fix | Delete
[304] Fix | Delete
/**
[305] Fix | Delete
* Update the site options that are related to Mailchimp.
[306] Fix | Delete
*/
[307] Fix | Delete
function update_settings() {
[308] Fix | Delete
$action = ! empty( $_REQUEST['action'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['action'] ) ) : '';
[309] Fix | Delete
$option_page = ! empty( $_REQUEST['option_page'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['option_page'] ) ) : '';
[310] Fix | Delete
$audience = ! empty( $_REQUEST['jetpack-mailchimp-audience'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['jetpack-mailchimp-audience'] ) ) : '';
[311] Fix | Delete
if ( $action !== 'update' || $option_page !== 'writing' || ! current_user_can( 'manage_options' ) || $audience === '' ) {
[312] Fix | Delete
return;
[313] Fix | Delete
}
[314] Fix | Delete
[315] Fix | Delete
check_admin_referer( 'writing-options' );
[316] Fix | Delete
[317] Fix | Delete
$site_id = Connection_Manager::get_site_id();
[318] Fix | Delete
if ( is_wp_error( $site_id ) ) {
[319] Fix | Delete
return;
[320] Fix | Delete
}
[321] Fix | Delete
[322] Fix | Delete
if ( $audience === 'none' ) {
[323] Fix | Delete
$data = array(
[324] Fix | Delete
'follower_list_id' => '0',
[325] Fix | Delete
'keyring_id' => '0',
[326] Fix | Delete
);
[327] Fix | Delete
} else {
[328] Fix | Delete
$connection = External_Connections::get_connection( 'mailchimp' );
[329] Fix | Delete
if ( empty( $connection ) ) {
[330] Fix | Delete
return;
[331] Fix | Delete
}
[332] Fix | Delete
$data = array(
[333] Fix | Delete
'follower_list_id' => $audience,
[334] Fix | Delete
'keyring_id' => $connection['ID'],
[335] Fix | Delete
);
[336] Fix | Delete
}
[337] Fix | Delete
[338] Fix | Delete
if ( ( new Host() )->is_wpcom_simple() ) {
[339] Fix | Delete
require_lib( 'mailchimp' );
[340] Fix | Delete
$response = \MailchimpApi::save_settings( $site_id, $data );
[341] Fix | Delete
} else {
[342] Fix | Delete
$response = Client::wpcom_json_api_request_as_user(
[343] Fix | Delete
sprintf( '/sites/%d/mailchimp/settings', $site_id ),
[344] Fix | Delete
'1.1',
[345] Fix | Delete
array( 'method' => 'POST' ),
[346] Fix | Delete
$data,
[347] Fix | Delete
'rest'
[348] Fix | Delete
);
[349] Fix | Delete
}
[350] Fix | Delete
if ( is_wp_error( $response ) ) {
[351] Fix | Delete
add_settings_error( 'general', 'settings_updated', __( 'Settings save failed.', 'jetpack' ), 'error' );
[352] Fix | Delete
}
[353] Fix | Delete
}
[354] Fix | Delete
[355] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function