PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.13.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.13.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 2 years ago block.json 2 years ago
Block.php
148 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 ],
63 'processors' => [
64 'processors' => array_values(
65 array_filter(
66 $processors ?? [],
67 function( $processor ) {
68 return $processor->approved && $processor->enabled;
69 }
70 )
71 ),
72 'manualPaymentMethods' => (array) ManualPaymentMethod::where( [ 'archived' => false ] )->get() ?? [],
73 'config' => [
74 'stripe' => [
75 'paymentElement' => (bool) get_option( 'sc_stripe_payment_element', true ),
76 ],
77 ],
78 ],
79 'user' => [
80 'loggedIn' => is_user_logged_in(),
81 'email' => $user->user_email,
82 'name' => $user->display_name,
83 ],
84 'form' => array_filter(
85 [
86 'text' => array_filter(
87 [
88 'loading' => array_filter( $attributes['loading_text'] ?? [] ),
89 'success' => array_filter( $attributes['success_text'] ?? [] ),
90 ]
91 ),
92 ]
93 ),
94 ]
95 )
96 );
97
98 if ( ! empty( $attributes['prices'] ) ) {
99 $line_items = $this->convertPricesToLineItems( $attributes['prices'] );
100 sc_initial_state(
101 [
102 'checkout' => [
103 'initialLineItems' => sc_initial_line_items( $line_items ),
104 ],
105 ]
106 );
107 }
108
109 return \SureCart::blocks()->render(
110 'blocks/form',
111 [
112 'align' => $attributes['align'] ?? '',
113 'modified' => $post->post_modified_gmt ?? '',
114 'honeypot_enabled' => (bool) get_option( 'surecart_honeypot_enabled', true ),
115 'classes' => $this->getClasses( $attributes ),
116 'style' => $this->getStyle( $attributes ),
117 'content' => $content,
118 'id' => 'sc-checkout-' . ( $attributes['form_id'] ?? $sc_form_id ),
119 'success_url' => ! empty( $attributes['success_url'] ) ? $attributes['success_url'] : \SureCart::pages()->url( 'order-confirmation' ),
120 ]
121 );
122 }
123
124 /**
125 * Convert price blocks to line items
126 *
127 * @param array $prices Array of prices.
128 *
129 * @return array Array of line items.
130 */
131 public function convertPricesToLineItems( $prices ) {
132 return array_values(
133 array_map(
134 function( $price ) {
135 return array_filter(
136 [
137 'price' => $price['id'],
138 'variant' => $price['variant_id'] ?? null,
139 'quantity' => $price['quantity'] ?? 1,
140 ]
141 );
142 },
143 $prices
144 )
145 );
146 }
147 }
148