PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.1
4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / packages / blocks / Blocks / Form / Block.php
surecart / packages / blocks / Blocks / Form Last commit date
Block.php 1 week ago block.json 3 months ago
Block.php
185 lines
1 <?php
2
3 namespace SureCartBlocks\Blocks\Form;
4
5 use SureCart\Models\ManualPaymentMethod;
6 use SureCart\Models\Processor;
7 use SureCartBlocks\Blocks\BaseBlock;
8
9 /**
10 * Checkout block
11 */
12 class Block extends BaseBlock {
13 /**
14 * Get the style for the block
15 *
16 * @param array $attributes Block attributes.
17 * @return string
18 */
19 public function getStyle( $attributes ) {
20 $style = 'text-align: left;';
21 $style .= '--sc-form-row-spacing: ' . ( $attributes['gap'] ?? '25' ) . ';';
22 if ( ! empty( $attributes['color'] ) ) {
23 $style .= '--sc-color-primary-500: ' . sanitize_hex_color( $attributes['color'] ) . ';';
24 $style .= '--sc-focus-ring-color-primary: ' . sanitize_hex_color( $attributes['color'] ) . ';';
25 $style .= '--sc-input-border-color-focus: ' . sanitize_hex_color( $attributes['color'] ) . ';';
26 }
27 return $style;
28 }
29
30 /**
31 * Render the block
32 *
33 * @param array $attributes Block attributes.
34 * @param string $content Post content.
35 *
36 * @return string
37 */
38 public function render( $attributes, $content ) {
39 global $sc_form_id;
40 $post = get_post( $sc_form_id );
41 $user = wp_get_current_user();
42
43 $processors = Processor::get();
44 if ( is_wp_error( $processors ) ) {
45 $processors = [];
46 }
47
48 // set the initial state.
49 sc_initial_state(
50 array_filter(
51 [
52 'checkout' => [
53 'formId' => $attributes['form_id'] ?? $sc_form_id,
54 'mode' => apply_filters( 'surecart/payments/mode', $attributes['mode'] ?? 'live' ),
55 'product' => $attributes['product'] ?? [],
56 'currencyCode' => $attributes['currency'] ?? \SureCart::account()->currency,
57 'groupId' => 'sc-checkout-' . ( $attributes['form_id'] ?? $sc_form_id ),
58 'abandonedCheckoutEnabled' => ! is_admin(),
59 'captureGeoAddressEnabled' => (bool) ( \SureCart::account()->order_protocol->capture_geo_address_enabled ?? false ),
60 'geoCapture' => [
61 'title' => (string) get_option( 'surecart_checkout_geo_capture_title' ),
62 'content' => (string) get_option( 'surecart_checkout_geo_capture_content' ),
63 'allowLabel' => (string) get_option( 'surecart_checkout_geo_capture_allow_label' ),
64 'declineLabel' => (string) get_option( 'surecart_checkout_geo_capture_decline_label' ),
65 ],
66 'showLoginPrompt' => (bool) get_option( 'surecart_checkout_show_login_prompt', true ),
67 'taxProtocol' => \SureCart::account()->tax_protocol,
68 'isCheckoutPage' => true,
69 'validateStock' => ! is_admin(),
70 'persist' => $this->getPeristance( $attributes, $attributes['form_id'] ?? $sc_form_id ),
71 ],
72 'processors' => [
73 'processors' => array_values(
74 array_filter(
75 $processors ?? [],
76 function ( $processor ) {
77 return $processor->approved && $processor->enabled;
78 }
79 )
80 ),
81 'manualPaymentMethods' => (array) ManualPaymentMethod::where( [ 'archived' => false ] )->get() ?? [],
82 'config' => [
83 'stripe' => [
84 'paymentElement' => (bool) get_option( 'sc_stripe_payment_element', true ),
85 ],
86 ],
87 ],
88 'user' => [
89 'loggedIn' => is_user_logged_in(),
90 'email' => $user->user_email,
91 'name' => $user->display_name,
92 'avatarUrl' => is_user_logged_in() ? get_avatar_url( $user->user_email, [ 'size' => 48 ] ) : '',
93 ],
94 'form' => array_filter(
95 [
96 'text' => array_filter(
97 [
98 'loading' => array_filter( $attributes['loading_text'] ?? [] ),
99 'success' => array_filter( $attributes['success_text'] ?? [] ),
100 ]
101 ),
102 ]
103 ),
104 ]
105 )
106 );
107
108 if ( ! empty( $attributes['prices'] ) ) {
109 $line_items = $this->convertPricesToLineItems( $attributes['prices'] );
110 sc_initial_state(
111 [
112 'checkout' => [
113 'initialLineItems' => sc_initial_line_items( $line_items ),
114 ],
115 ]
116 );
117 }
118
119 return \SureCart::block()->render(
120 'blocks/form',
121 [
122 'align' => $attributes['align'] ?? '',
123 'modified' => $post->post_modified_gmt ?? '',
124 'honeypot_enabled' => (bool) get_option( 'surecart_honeypot_enabled', true ),
125 'classes' => $this->getClasses( $attributes ),
126 'style' => $this->getStyle( $attributes ),
127 'content' => $content,
128 'id' => 'sc-checkout-' . ( $attributes['form_id'] ?? $sc_form_id ),
129 'success_url' => ! empty( $attributes['success_url'] ) ? $attributes['success_url'] : \SureCart::pages()->url( 'order-confirmation' ),
130 ]
131 );
132 }
133
134 /**
135 * Get persistent mode.
136 *
137 * @param array $attributes Block attributes.
138 * @return string|false
139 */
140 public function getPeristance( $attributes, $id = null ) {
141 // don't persist in the admin.
142 if ( is_admin() ) {
143 return false;
144 }
145
146 // if there is a checkout id in the url, use url persistence.
147 if ( ! empty( $_GET['checkout_id'] ) ) {
148 return 'url';
149 }
150
151 // default checkout form should persist in the browser.
152 if ( \SureCart::forms()->getDefaultId() === (int) $id ) {
153 return 'browser';
154 }
155
156 // otherwise, use the attributes with url as the fallback.
157 return $attributes['persist_cart'] ?? 'url';
158 }
159
160 /**
161 * Convert price blocks to line items
162 *
163 * @param array $prices Array of prices.
164 *
165 * @return array Array of line items.
166 */
167 public function convertPricesToLineItems( $prices ) {
168 return array_values(
169 array_map(
170 function ( $price ) {
171 return array_filter(
172 [
173 'price' => $price['id'],
174 'variant' => $price['variant_id'] ?? null,
175 'quantity' => $price['quantity'] ?? 1,
176 'ad_hoc_amount' => $price['ad_hoc_amount'] ?? null,
177 ]
178 );
179 },
180 $prices
181 )
182 );
183 }
184 }
185