PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
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 year ago block.json 2 years ago
Block.php
175 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 'taxProtocol' => \SureCart::account()->tax_protocol,
60 'isCheckoutPage' => true,
61 'validateStock' => ! is_admin(),
62 'persist' => $this->getPeristance( $attributes, $attributes['form_id'] ?? $sc_form_id ),
63 ],
64 'processors' => [
65 'processors' => array_values(
66 array_filter(
67 $processors ?? [],
68 function( $processor ) {
69 return $processor->approved && $processor->enabled;
70 }
71 )
72 ),
73 'manualPaymentMethods' => (array) ManualPaymentMethod::where( [ 'archived' => false ] )->get() ?? [],
74 'config' => [
75 'stripe' => [
76 'paymentElement' => (bool) get_option( 'sc_stripe_payment_element', true ),
77 ],
78 ],
79 ],
80 'user' => [
81 'loggedIn' => is_user_logged_in(),
82 'email' => $user->user_email,
83 'name' => $user->display_name,
84 ],
85 'form' => array_filter(
86 [
87 'text' => array_filter(
88 [
89 'loading' => array_filter( $attributes['loading_text'] ?? [] ),
90 'success' => array_filter( $attributes['success_text'] ?? [] ),
91 ]
92 ),
93 ]
94 ),
95 ]
96 )
97 );
98
99 if ( ! empty( $attributes['prices'] ) ) {
100 $line_items = $this->convertPricesToLineItems( $attributes['prices'] );
101 sc_initial_state(
102 [
103 'checkout' => [
104 'initialLineItems' => sc_initial_line_items( $line_items ),
105 ],
106 ]
107 );
108 }
109
110 return \SureCart::block()->render(
111 'blocks/form',
112 [
113 'align' => $attributes['align'] ?? '',
114 'modified' => $post->post_modified_gmt ?? '',
115 'honeypot_enabled' => (bool) get_option( 'surecart_honeypot_enabled', true ),
116 'classes' => $this->getClasses( $attributes ),
117 'style' => $this->getStyle( $attributes ),
118 'content' => $content,
119 'id' => 'sc-checkout-' . ( $attributes['form_id'] ?? $sc_form_id ),
120 'success_url' => ! empty( $attributes['success_url'] ) ? $attributes['success_url'] : \SureCart::pages()->url( 'order-confirmation' ),
121 ]
122 );
123 }
124
125 /**
126 * Get persistent mode.
127 *
128 * @param array $attributes Block attributes.
129 * @return string|false
130 */
131 public function getPeristance( $attributes, $id = null ) {
132 // don't persist in the admin.
133 if ( is_admin() ) {
134 return false;
135 }
136
137 // if there is a checkout id in the url, use url persistence.
138 if ( ! empty( $_GET['checkout_id'] ) ) {
139 return 'url';
140 }
141
142 // default checkout form should persist in the browser.
143 if ( \SureCart::forms()->getDefaultId() === (int) $id ) {
144 return 'browser';
145 }
146
147 // otherwise, use the attributes with url as the fallback.
148 return $attributes['persist_cart'] ?? 'url';
149 }
150
151 /**
152 * Convert price blocks to line items
153 *
154 * @param array $prices Array of prices.
155 *
156 * @return array Array of line items.
157 */
158 public function convertPricesToLineItems( $prices ) {
159 return array_values(
160 array_map(
161 function( $price ) {
162 return array_filter(
163 [
164 'price' => $price['id'],
165 'variant' => $price['variant_id'] ?? null,
166 'quantity' => $price['quantity'] ?? 1,
167 ]
168 );
169 },
170 $prices
171 )
172 );
173 }
174 }
175