PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.0-beta2
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.0-beta2
4.7.0 4.6.6 4.6.5 4.6.4 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 1 year ago block.json 2 years ago
Block.php
170 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 // default checkout form should persist in the browser.
138 if ( \SureCart::forms()->getDefaultId() === (int) $id ) {
139 return 'browser';
140 }
141
142 // otherwise, use the attributes with url as the fallback.
143 return $attributes['persist_cart'] ?? 'url';
144 }
145
146 /**
147 * Convert price blocks to line items
148 *
149 * @param array $prices Array of prices.
150 *
151 * @return array Array of line items.
152 */
153 public function convertPricesToLineItems( $prices ) {
154 return array_values(
155 array_map(
156 function( $price ) {
157 return array_filter(
158 [
159 'price' => $price['id'],
160 'variant' => $price['variant_id'] ?? null,
161 'quantity' => $price['quantity'] ?? 1,
162 ]
163 );
164 },
165 $prices
166 )
167 );
168 }
169 }
170