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