PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.8.3
Jetpack – WP Security, Backup, Speed, & Growth v12.8.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 / donations / donations.php
jetpack / extensions / blocks / donations Last commit date
donations.php 2 years ago
donations.php
206 lines
1 <?php
2 /**
3 * Donations Block.
4 *
5 * @since 8.x
6 *
7 * @package automattic/jetpack
8 */
9
10 namespace Automattic\Jetpack\Extensions\Donations;
11
12 use Automattic\Jetpack\Blocks;
13 use Jetpack_Gutenberg;
14
15 /**
16 * Registers the block for use in Gutenberg
17 * This is done via an action so that we can disable
18 * registration if we need to.
19 */
20 function register_block() {
21 Blocks::jetpack_register_block(
22 __DIR__,
23 array(
24 'render_callback' => __NAMESPACE__ . '\render_block',
25 )
26 );
27 }
28 add_action( 'init', __NAMESPACE__ . '\register_block' );
29
30 /**
31 * Donations block dynamic rendering.
32 *
33 * @param array $attr Array containing the Donations block attributes.
34 * @param string $content String containing the Donations block content.
35 *
36 * @return string
37 */
38 function render_block( $attr, $content ) {
39 // Keep content as-is if rendered in other contexts than frontend (i.e. feed, emails, API, etc.).
40 if ( ! jetpack_is_frontend() ) {
41 return $content;
42 }
43
44 require_once JETPACK__PLUGIN_DIR . 'modules/memberships/class-jetpack-memberships.php';
45
46 // If stripe isn't connected don't show anything to potential donors - they can't actually make a donation.
47 if ( ! \Jetpack_Memberships::has_connected_account() ) {
48 return '';
49 }
50
51 Jetpack_Gutenberg::load_assets_as_required( __DIR__, array( 'thickbox' ) );
52 add_thickbox();
53
54 require_once JETPACK__PLUGIN_DIR . '/_inc/lib/class-jetpack-currencies.php';
55
56 $donations = array(
57 'one-time' => array_merge(
58 array(
59 'title' => __( 'One-Time', 'jetpack' ),
60 'class' => 'donations__one-time-item',
61 ),
62 $attr['oneTimeDonation']
63 ),
64 );
65 if ( $attr['monthlyDonation']['show'] ) {
66 $donations['1 month'] = array_merge(
67 array(
68 'title' => __( 'Monthly', 'jetpack' ),
69 'class' => 'donations__monthly-item',
70 ),
71 $attr['monthlyDonation']
72 );
73 }
74 if ( $attr['annualDonation']['show'] ) {
75 $donations['1 year'] = array_merge(
76 array(
77 'title' => __( 'Yearly', 'jetpack' ),
78 'class' => 'donations__annual-item',
79 ),
80 $attr['annualDonation']
81 );
82 }
83
84 $currency = $attr['currency'];
85 $nav = '';
86 $headings = '';
87 $amounts = '';
88 $extra_text = '';
89 $buttons = '';
90 foreach ( $donations as $interval => $donation ) {
91 $plan_id = (int) $donation['planId'];
92 $plan = get_post( $plan_id );
93 if ( ! $plan || is_wp_error( $plan ) ) {
94 continue;
95 }
96
97 if ( count( $donations ) > 1 ) {
98 if ( ! $nav ) {
99 $nav .= '<div class="donations__nav">';
100 }
101 $nav .= sprintf(
102 '<div role="button" tabindex="0" class="donations__nav-item" data-interval="%1$s">%2$s</div>',
103 esc_attr( $interval ),
104 esc_html( $donation['title'] )
105 );
106 }
107 $headings .= sprintf(
108 '<h4 class="%1$s">%2$s</h4>',
109 esc_attr( $donation['class'] ),
110 wp_kses_post( $donation['heading'] )
111 );
112 $amounts .= sprintf(
113 '<div class="donations__amounts %s">',
114 esc_attr( $donation['class'] )
115 );
116 foreach ( $donation['amounts'] as $amount ) {
117 $amounts .= sprintf(
118 '<div class="donations__amount" data-amount="%1$s">%2$s</div>',
119 esc_attr( $amount ),
120 esc_html( \Jetpack_Currencies::format_price( $amount, $currency ) )
121 );
122 }
123 $amounts .= '</div>';
124 $extra_text .= sprintf(
125 '<p class="%1$s">%2$s</p>',
126 esc_attr( $donation['class'] ),
127 wp_kses_post( $donation['extraText'] )
128 );
129 $buttons .= sprintf(
130 '<a class="wp-block-button__link donations__donate-button %1$s" href="%2$s">%3$s</a>',
131 esc_attr( $donation['class'] ),
132 esc_url( \Jetpack_Memberships::get_instance()->get_subscription_url( $plan_id ) ),
133 wp_kses_post( $donation['buttonText'] )
134 );
135 }
136 if ( $nav ) {
137 $nav .= '</div>';
138 }
139
140 $custom_amount = '';
141 if ( $attr['showCustomAmount'] ) {
142 $custom_amount .= sprintf(
143 '<p>%s</p>',
144 wp_kses_post( $attr['customAmountText'] )
145 );
146 $default_custom_amount = \Jetpack_Memberships::SUPPORTED_CURRENCIES[ $currency ] * 100;
147 $custom_amount .= sprintf(
148 '<div class="donations__amount donations__custom-amount">
149 %1$s
150 <div class="donations__amount-value" data-currency="%2$s" data-empty-text="%3$s"></div>
151 </div>',
152 esc_html( \Jetpack_Currencies::CURRENCIES[ $attr['currency'] ]['symbol'] ),
153 esc_attr( $attr['currency'] ),
154 esc_attr( \Jetpack_Currencies::format_price( $default_custom_amount, $currency, false ) )
155 );
156 }
157
158 return sprintf(
159 '
160 <div class="%1$s">
161 <div class="donations__container">
162 %2$s
163 <div class="donations__content">
164 <div class="donations__tab">
165 %3$s
166 <p>%4$s</p>
167 %5$s
168 %6$s
169 <hr class="donations__separator">
170 %7$s
171 %8$s
172 </div>
173 </div>
174 </div>
175 </div>
176 ',
177 esc_attr( Blocks::classes( Blocks::get_block_feature( __DIR__ ), $attr ) ),
178 $nav,
179 $headings,
180 $attr['chooseAmountText'],
181 $amounts,
182 $custom_amount,
183 $extra_text,
184 $buttons
185 );
186 }
187
188 /**
189 * Determine if AMP should be disabled on posts having Donations blocks.
190 *
191 * @param bool $skip Skipped.
192 * @param int $post_id Post ID.
193 * @param WP_Post $post Post.
194 *
195 * @return bool Whether to skip the post from AMP.
196 */
197 function amp_skip_post( $skip, $post_id, $post ) {
198 // When AMP is on standard mode, there are no non-AMP posts to link to where the donation can be completed, so let's
199 // prevent the post from being available in AMP.
200 if ( function_exists( 'amp_is_canonical' ) && \amp_is_canonical() && has_block( Blocks::get_block_name( __DIR__ ), $post->post_content ) ) {
201 return true;
202 }
203 return $skip;
204 }
205 add_filter( 'amp_skip_post', __NAMESPACE__ . '\amp_skip_post', 10, 3 );
206