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