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 / ProductDonation / Block.php
surecart / packages / blocks / Blocks / ProductDonation Last commit date
Block.php 1 year ago block.json 2 years ago style.css 2 years ago
Block.php
132 lines
1 <?php
2
3 namespace SureCartBlocks\Blocks\ProductDonation;
4
5 use SureCart\Models\Product;
6 use SureCartBlocks\Blocks\BaseBlock;
7 use SureCartBlocks\Util\BlockStyleAttributes;
8
9 /**
10 * Product Title Block
11 */
12 class Block extends BaseBlock {
13 /**
14 * Render the block
15 *
16 * @param array $attributes Block attributes.
17 * @param string $content Post content.
18 *
19 * @return string
20 */
21 public function render( $attributes, $content ) {
22 if ( empty( $attributes['product_id'] ) ) {
23 return '';
24 }
25
26 // get the product.
27 $product = Product::with( array( 'prices' ) )->find( $attributes['product_id'] ?? '' );
28 if ( is_wp_error( $product ) ) {
29 return $product->get_error_message();
30 }
31
32 // no ad_hoc prices.
33 if ( ! count( $product->activeAdHocPrices() ) ) {
34 return false;
35 }
36
37 // get amounts from inner blocks.
38 $amounts = $this->getAmounts();
39 if ( empty( $amounts ) ) {
40 return false;
41 }
42
43 // set initial state.
44 sc_initial_state(
45 array(
46 'checkout' => array(
47 'initialLineItems' => sc_initial_line_items( $this->getInitialLineItems( $product, $amounts ) ),
48 ),
49 'productDonation' => array(
50 $attributes['product_id'] => array(
51 'product' => $product->toArray(),
52 'amounts' => $amounts,
53 'ad_hoc_amount' => null,
54 'custom_amount' => null,
55 'selectedPrice' => ( $product->active_prices || array() )[0] ?? null,
56 ),
57 ),
58 )
59 );
60
61 [ 'styles' => $styles, 'classes' => $classes ] = BlockStyleAttributes::getClassesAndStylesFromAttributes( $attributes );
62
63 if ( ! empty( $attributes['textColor'] ) ) {
64 $styles .= '--sc-input-label-color: ' . $attributes['textColor'] . '; ';
65 }
66
67 $wrapper_attributes = get_block_wrapper_attributes(
68 array(
69 'style' => esc_attr( $styles ),
70 'class' => esc_attr( $classes ),
71 )
72 );
73
74 return wp_sprintf(
75 '<div %s>
76 %s
77 </div>',
78 $wrapper_attributes,
79 filter_block_content( $content )
80 );
81
82 return filter_block_content( $content );
83 }
84
85 /**
86 * Get the initial line items.
87 *
88 * @return array
89 */
90 public function getInitialLineItems( $product, $amounts ) {
91 if ( empty( $product->activeAdHocPrices()[0] ) ) {
92 return array();
93 }
94
95 return array(
96 array(
97 'price' => $product->activeAdHocPrices()[0]->id,
98 'ad_hoc_amount' => $product->activeAdHocPrices()[0]->amount,
99 'quantity' => 1,
100 ),
101 );
102 }
103
104 /**
105 * Get the amounts.
106 *
107 * @return array
108 */
109 public function getAmounts() {
110 $amounts_block = array_filter(
111 $this->block->parsed_block['innerBlocks'],
112 function ( $block ) {
113 return 'surecart/product-donation-amounts' === $block['blockName'];
114 },
115 );
116
117 if ( empty( $amounts_block[0]['innerBlocks'] ) ) {
118 return false;
119 }
120
121 // get amounts from inner blocks.
122 return array_values(
123 array_map(
124 function ( $block ) {
125 return $block['attrs']['amount'] ?? 0;
126 },
127 $amounts_block[0]['innerBlocks']
128 )
129 );
130 }
131 }
132