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