PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.3.2
Jetpack – WP Security, Backup, Speed, & Growth v12.3.2
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 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-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 / extensions / blocks / mailchimp / mailchimp.php
jetpack / extensions / blocks / mailchimp Last commit date
mailchimp.php 3 years ago
mailchimp.php
276 lines
1 <?php
2 /**
3 * Mailchimp Block.
4 *
5 * @since 7.1.0
6 *
7 * @package automattic/jetpack
8 */
9
10 namespace Automattic\Jetpack\Extensions\Mailchimp;
11
12 use Automattic\Jetpack\Blocks;
13 use Jetpack;
14 use Jetpack_Gutenberg;
15 use Jetpack_Options;
16
17 const FEATURE_NAME = 'mailchimp';
18 const BLOCK_NAME = 'jetpack/' . FEATURE_NAME;
19
20 /**
21 * Registers the block for use in Gutenberg
22 * This is done via an action so that we can disable
23 * registration if we need to.
24 */
25 function register_block() {
26 if (
27 ( defined( 'IS_WPCOM' ) && IS_WPCOM )
28 || Jetpack::is_connection_ready()
29 ) {
30 Blocks::jetpack_register_block(
31 BLOCK_NAME,
32 array(
33 'render_callback' => __NAMESPACE__ . '\load_assets',
34 'supports' => array(
35 'align' => array( 'wide', 'full' ),
36 'color' => array(
37 'gradients' => true,
38 ),
39 'spacing' => array(
40 'padding' => true,
41 'margin' => true,
42 ),
43 ),
44 )
45 );
46 }
47 }
48 add_action( 'init', __NAMESPACE__ . '\register_block' );
49
50 /**
51 * Mailchimp block registration/dependency declaration.
52 *
53 * @param array $attr - Array containing the Mailchimp block attributes.
54 * @param string $content - Mailchimp block content.
55 *
56 * @return string
57 */
58 function load_assets( $attr, $content ) {
59
60 if ( ! verify_connection() ) {
61 return null;
62 }
63
64 $values = get_attributes_with_defaults( $attr );
65 $blog_id = ( defined( 'IS_WPCOM' ) && IS_WPCOM )
66 ? get_current_blog_id()
67 : Jetpack_Options::get_option( 'id' );
68 Jetpack_Gutenberg::load_assets_as_required( FEATURE_NAME );
69 $wrapper_attributes = \WP_Block_Supports::get_instance()->apply_block_supports();
70 $classes = ! empty( $wrapper_attributes['class'] ) ? $wrapper_attributes['class'] : '';
71 $amp_form_action = sprintf( 'https://public-api.wordpress.com/rest/v1.1/sites/%s/email_follow/amp/subscribe/', $blog_id );
72 $is_amp_request = Blocks::is_amp_request();
73
74 ob_start();
75 ?>
76
77 <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 ); ?>">
78 <form
79 aria-describedby="wp-block-jetpack-mailchimp_consent-text"
80 <?php if ( $is_amp_request ) : ?>
81 action-xhr="<?php echo esc_url( $amp_form_action ); ?>"
82 method="post"
83 id="mailchimp_form"
84 target="_top"
85 on="submit-success:AMP.setState( { mailing_list_status: 'subscribed', mailing_list_email: event.response.email } )"
86 <?php endif; ?>
87 >
88 <p>
89 <input
90 aria-label="<?php echo esc_attr( $values['emailPlaceholder'] ); ?>"
91 placeholder="<?php echo esc_attr( $values['emailPlaceholder'] ); ?>"
92 required
93 title="<?php echo esc_attr( $values['emailPlaceholder'] ); ?>"
94 type="email"
95 name="email"
96 />
97 </p>
98 <?php foreach ( is_array( $values['interests'] ) ? $values['interests'] : array() as $interest ) : ?>
99 <input
100 name="interests[<?php echo esc_attr( $interest ); ?>]"
101 type="hidden"
102 class="mc-submit-param"
103 value="1"
104 />
105 <?php endforeach; ?>
106 <?php
107 if (
108 ! empty( $values['signupFieldTag'] )
109 && ! empty( $values['signupFieldValue'] )
110 ) :
111 ?>
112 <input
113 name="merge_fields[<?php echo esc_attr( $values['signupFieldTag'] ); ?>]"
114 type="hidden"
115 class="mc-submit-param"
116 value="<?php echo esc_attr( $values['signupFieldValue'] ); ?>"
117 />
118 <?php endif; ?>
119 <?php echo render_button( $attr, $content ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
120 <p id="wp-block-jetpack-mailchimp_consent-text">
121 <?php echo wp_kses_post( $values['consentText'] ); ?>
122 </p>
123
124 <?php if ( $is_amp_request ) : ?>
125
126 <div submit-success>
127 <template type="amp-mustache">
128 <div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_success wp-block-jetpack-mailchimp__is-amp">
129 <?php echo esc_html( $values['successLabel'] ); ?>
130 </div>
131 </template>
132 </div>
133 <div submit-error>
134 <template type="amp-mustache">
135 <div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_error wp-block-jetpack-mailchimp__is-amp">
136 <?php echo esc_html( $values['errorLabel'] ); ?>
137 </div>
138 </template>
139 </div>
140 <div submitting>
141 <template type="amp-mustache">
142 <div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_processing wp-block-jetpack-mailchimp__is-amp" role="status">
143 <?php echo esc_html( $values['processingLabel'] ); ?>
144 </div>
145 </template>
146 </div>
147
148 <?php endif; ?>
149
150 </form>
151 <?php if ( ! $is_amp_request ) : ?>
152
153 <div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_processing" role="status">
154 <?php echo esc_html( $values['processingLabel'] ); ?>
155 </div>
156 <div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_success" role="status">
157 <?php echo esc_html( $values['successLabel'] ); ?>
158 </div>
159 <div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_error" role="alert">
160 <?php echo esc_html( $values['errorLabel'] ); ?>
161 </div>
162
163 <?php endif; ?>
164 </div>
165 <?php
166 $html = ob_get_clean();
167 return $html;
168 }
169
170 /**
171 * Mailchimp connection/list selection verification.
172 *
173 * @return boolean
174 */
175 function verify_connection() {
176 $option = get_option( 'jetpack_mailchimp' );
177 if ( ! $option ) {
178 return false;
179 }
180 $data = json_decode( $option, true );
181 if ( ! $data ) {
182 return false;
183 }
184 return isset( $data['follower_list_id'] ) && isset( $data['keyring_id'] );
185 }
186
187 /**
188 * Builds complete set of attributes using default values where needed.
189 *
190 * @param array $attr Saved set of attributes for the Mailchimp block.
191 * @return array
192 */
193 function get_attributes_with_defaults( $attr ) {
194 $values = array();
195 $defaults = array(
196 'emailPlaceholder' => esc_html__( 'Enter your email', 'jetpack' ),
197 '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' ),
198 'processingLabel' => esc_html__( 'Processing…', 'jetpack' ),
199 'successLabel' => esc_html__( 'Success! You\'re on the list.', 'jetpack' ),
200 'errorLabel' => esc_html__( 'Whoops! There was an error and we couldn\'t process your subscription. Please reload the page and try again.', 'jetpack' ),
201 'interests' => array(),
202 'signupFieldTag' => '',
203 'signupFieldValue' => '',
204 );
205
206 foreach ( $defaults as $id => $default ) {
207 $values[ $id ] = isset( $attr[ $id ] ) ? $attr[ $id ] : $default;
208 }
209
210 return $values;
211 }
212
213 /**
214 * Renders the Mailchimp block button using inner block content if available
215 * otherwise generating the HTML button from deprecated attributes.
216 *
217 * @param array $attr Attributes for the Mailchimp block.
218 * @param string $content Mailchimp block content.
219 *
220 * @return string
221 */
222 function render_button( $attr, $content ) {
223 if ( ! empty( $content ) ) {
224 $block_id = wp_unique_id( 'mailchimp-button-block-' );
225 return str_replace( 'mailchimp-widget-id', $block_id, $content );
226 }
227
228 return render_deprecated_button( $attr );
229 }
230
231 /**
232 * Renders HTML button from deprecated Mailchimp block attributes.
233 *
234 * @param array $attr Mailchimp block attributes.
235 * @return string
236 */
237 function render_deprecated_button( $attr ) {
238 $default = esc_html__( 'Join my email list', 'jetpack' );
239 $text = empty( $attr['submitButtonText'] ) ? $default : $attr['submitButtonText'];
240 $button_styles = array();
241
242 if ( ! empty( $attr['customBackgroundButtonColor'] ) ) {
243 array_push(
244 $button_styles,
245 sprintf(
246 'background-color: %s',
247 sanitize_hex_color( $attr['customBackgroundButtonColor'] )
248 )
249 );
250 }
251
252 if ( ! empty( $attr['customTextButtonColor'] ) ) {
253 array_push(
254 $button_styles,
255 sprintf(
256 'color: %s',
257 sanitize_hex_color( $attr['customTextButtonColor'] )
258 )
259 );
260 }
261
262 $button_styles = implode( ';', $button_styles );
263 $button_classes = 'components-button is-button is-primary ';
264
265 if ( ! empty( $attr['submitButtonClasses'] ) ) {
266 $button_classes .= $attr['submitButtonClasses'];
267 }
268
269 return sprintf(
270 '<p><button type="submit" class="%s" style="%s">%s</button></p>',
271 esc_attr( $button_classes ),
272 esc_attr( $button_styles ),
273 wp_kses_post( $text )
274 );
275 }
276