PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.6.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.6.3
4.6.3 4.6.2 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 6 days ago block.json 4 months ago
Block.php
187 lines
1 <?php
2
3 namespace SureCartBlocks\Blocks\Form;
4
5 use SureCart\Models\ManualPaymentMethod;
6 use SureCart\Models\Processor;
7 use SureCart\Support\PublicCatalogData;
8 use SureCartBlocks\Blocks\BaseBlock;
9
10 /**
11 * Checkout block
12 */
13 class Block extends BaseBlock {
14 /**
15 * Get the style for the block
16 *
17 * @param array $attributes Block attributes.
18 * @return string
19 */
20 public function getStyle( $attributes ) {
21 $style = 'text-align: left;';
22 $style .= '--sc-form-row-spacing: ' . ( $attributes['gap'] ?? '25' ) . ';';
23 if ( ! empty( $attributes['color'] ) ) {
24 $style .= '--sc-color-primary-500: ' . sanitize_hex_color( $attributes['color'] ) . ';';
25 $style .= '--sc-focus-ring-color-primary: ' . sanitize_hex_color( $attributes['color'] ) . ';';
26 $style .= '--sc-input-border-color-focus: ' . sanitize_hex_color( $attributes['color'] ) . ';';
27 }
28 return $style;
29 }
30
31 /**
32 * Render the block
33 *
34 * @param array $attributes Block attributes.
35 * @param string $content Post content.
36 *
37 * @return string
38 */
39 public function render( $attributes, $content ) {
40 global $sc_form_id;
41 $post = get_post( $sc_form_id );
42 $user = wp_get_current_user();
43
44 $processors = Processor::get();
45 if ( is_wp_error( $processors ) ) {
46 $processors = [];
47 }
48
49 // set the initial state.
50 sc_initial_state(
51 array_filter(
52 [
53 'checkout' => [
54 'formId' => $attributes['form_id'] ?? $sc_form_id,
55 'mode' => apply_filters( 'surecart/payments/mode', $attributes['mode'] ?? 'live' ),
56 // Serialized into public page state — strip private catalog fields.
57 'product' => PublicCatalogData::product( $attributes['product'] ?? [] ),
58 'currencyCode' => $attributes['currency'] ?? \SureCart::account()->currency,
59 'groupId' => 'sc-checkout-' . ( $attributes['form_id'] ?? $sc_form_id ),
60 'abandonedCheckoutEnabled' => ! is_admin(),
61 'captureGeoAddressEnabled' => (bool) ( \SureCart::account()->order_protocol->capture_geo_address_enabled ?? false ),
62 'geoCapture' => [
63 'title' => (string) get_option( 'surecart_checkout_geo_capture_title' ),
64 'content' => (string) get_option( 'surecart_checkout_geo_capture_content' ),
65 'allowLabel' => (string) get_option( 'surecart_checkout_geo_capture_allow_label' ),
66 'declineLabel' => (string) get_option( 'surecart_checkout_geo_capture_decline_label' ),
67 ],
68 'showLoginPrompt' => (bool) get_option( 'surecart_checkout_show_login_prompt', false ),
69 'taxProtocol' => \SureCart::account()->tax_protocol,
70 'isCheckoutPage' => true,
71 'validateStock' => ! is_admin(),
72 'persist' => $this->getPeristance( $attributes, $attributes['form_id'] ?? $sc_form_id ),
73 ],
74 'processors' => [
75 'processors' => array_values(
76 array_filter(
77 $processors ?? [],
78 function ( $processor ) {
79 return $processor->approved && $processor->enabled;
80 }
81 )
82 ),
83 'manualPaymentMethods' => (array) ManualPaymentMethod::where( [ 'archived' => false ] )->get() ?? [],
84 'config' => [
85 'stripe' => [
86 'paymentElement' => (bool) get_option( 'sc_stripe_payment_element', true ),
87 ],
88 ],
89 ],
90 'user' => [
91 'loggedIn' => is_user_logged_in(),
92 'email' => $user->user_email,
93 'name' => $user->display_name,
94 'avatarUrl' => is_user_logged_in() ? get_avatar_url( $user->user_email, [ 'size' => 48 ] ) : '',
95 ],
96 'form' => array_filter(
97 [
98 'text' => array_filter(
99 [
100 'loading' => array_filter( $attributes['loading_text'] ?? [] ),
101 'success' => array_filter( $attributes['success_text'] ?? [] ),
102 ]
103 ),
104 ]
105 ),
106 ]
107 )
108 );
109
110 if ( ! empty( $attributes['prices'] ) ) {
111 $line_items = $this->convertPricesToLineItems( $attributes['prices'] );
112 sc_initial_state(
113 [
114 'checkout' => [
115 'initialLineItems' => sc_initial_line_items( $line_items ),
116 ],
117 ]
118 );
119 }
120
121 return \SureCart::block()->render(
122 'blocks/form',
123 [
124 'align' => $attributes['align'] ?? '',
125 'modified' => $post->post_modified_gmt ?? '',
126 'honeypot_enabled' => (bool) get_option( 'surecart_honeypot_enabled', true ),
127 'classes' => $this->getClasses( $attributes ),
128 'style' => $this->getStyle( $attributes ),
129 'content' => $content,
130 'id' => 'sc-checkout-' . ( $attributes['form_id'] ?? $sc_form_id ),
131 'success_url' => ! empty( $attributes['success_url'] ) ? $attributes['success_url'] : \SureCart::pages()->url( 'order-confirmation' ),
132 ]
133 );
134 }
135
136 /**
137 * Get persistent mode.
138 *
139 * @param array $attributes Block attributes.
140 * @return string|false
141 */
142 public function getPeristance( $attributes, $id = null ) {
143 // don't persist in the admin.
144 if ( is_admin() ) {
145 return false;
146 }
147
148 // if there is a checkout id in the url, use url persistence.
149 if ( ! empty( $_GET['checkout_id'] ) ) {
150 return 'url';
151 }
152
153 // default checkout form should persist in the browser.
154 if ( \SureCart::forms()->getDefaultId() === (int) $id ) {
155 return 'browser';
156 }
157
158 // otherwise, use the attributes with url as the fallback.
159 return $attributes['persist_cart'] ?? 'url';
160 }
161
162 /**
163 * Convert price blocks to line items
164 *
165 * @param array $prices Array of prices.
166 *
167 * @return array Array of line items.
168 */
169 public function convertPricesToLineItems( $prices ) {
170 return array_values(
171 array_map(
172 function ( $price ) {
173 return array_filter(
174 [
175 'price' => $price['id'],
176 'variant' => $price['variant_id'] ?? null,
177 'quantity' => $price['quantity'] ?? 1,
178 'ad_hoc_amount' => $price['ad_hoc_amount'] ?? null,
179 ]
180 );
181 },
182 $prices
183 )
184 );
185 }
186 }
187