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 / PriceSelector / Block.php
surecart / packages / blocks / Blocks / PriceSelector Last commit date
Block.php 2 years ago block.json 2 years ago
Block.php
118 lines
1 <?php
2
3 namespace SureCartBlocks\Blocks\PriceSelector;
4
5 use SureCartBlocks\Blocks\BaseBlock;
6
7 /**
8 * Checkout block
9 */
10 class Block extends BaseBlock {
11 /**
12 * Render the block
13 *
14 * @param array $attributes Block attributes.
15 * @param string $content Post content.
16 *
17 * @return string
18 */
19 public function render( $attributes, $content ) {
20 sc_initial_state(
21 [
22 'checkout' => [
23 'initialLineItems' => sc_initial_line_items( $this->getInitialLineItems() ),
24 ],
25 ]
26 );
27
28 return '<sc-price-choices
29 class="wp-block-surecart-price-choice ' . esc_attr( $this->getClasses( $attributes ) || '' ) . '"
30 label="' . esc_attr( $attributes['label'] ?? '' ) . '"
31 type="' . esc_attr( $attributes['type'] ?? 'radio' ) . '"
32 columns="' . intval( $attributes['columns'] ?? 1 ) . '"
33 >' .
34 $this->getRemovedPriceChoicesWrapper( $content )
35 . '</sc-price-choices>';
36 }
37
38 /**
39 * Get the initial line items.
40 *
41 * @return array
42 */
43 public function getInitialLineItems() {
44 // get choice blocks.
45 $choices = $this->getInnerPriceChoices();
46
47 // are any checked by default?
48 $checked = array_filter(
49 $choices,
50 function( $block ) {
51 return ! empty( $block['attrs']['checked'] );
52 }
53 );
54
55 // there are no checked, so use the first one.
56 if ( empty( $checked ) ) {
57 $checked = [ $choices[0] ] ?? [];
58 }
59
60 // get the line items.
61 return $this->convertPriceBlocksToLineItems( $checked );
62 }
63
64 /**
65 * Get the inner price choice blocks.
66 *
67 * @return array
68 */
69 public function getInnerPriceChoices() {
70 return array_filter(
71 $this->block->parsed_block['innerBlocks'],
72 function( $block ) {
73 return 'surecart/price-choice' === $block['blockName'] && ! empty( $block['attrs']['price_id'] );
74 }
75 );
76 }
77
78 /**
79 * Convert price blocks to line items
80 *
81 * @param array $blocks Array of parsed blocks.
82 *
83 * @return array Array of line items.
84 */
85 public function convertPriceBlocksToLineItems( $blocks ) {
86 return array_values(
87 array_map(
88 function( $block ) {
89 return [
90 'price' => $block['attrs']['price_id'],
91 'quantity' => $block['attrs']['quantity'] ?? 1,
92 ];
93 },
94 $blocks
95 )
96 );
97 }
98
99 /**
100 * Remove price choice wrapper and return the html.
101 *
102 * @param string $content Block content.
103 *
104 * @return string
105 */
106 public function getRemovedPriceChoicesWrapper( $content ): string {
107 if(empty($content)){
108 return '';
109 }
110
111 $price_choices_tag = trim(str_replace('</sc-price-choices>', '', strip_tags($content, '<sc-price-choices>')));
112 $content = str_replace($price_choices_tag, '', $content);
113 $content = str_replace('</sc-price-choices>', '', $content);
114
115 return filter_block_content( $content, 'post' );
116 }
117 }
118