PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.1
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 / PriceSelector / Block.php
surecart / packages / blocks / Blocks / PriceSelector Last commit date
Block.php 9 months ago block.json 5 months ago
Block.php
121 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 if ( ! apply_filters( 'sc_checkout_price_selector_first_price_as_default', true ) ) {
58 return [];
59 }
60 $checked = ! empty( $choices[0] ) ? [ $choices[0] ] : [];
61 }
62
63 // get the line items.
64 return $this->convertPriceBlocksToLineItems( $checked );
65 }
66
67 /**
68 * Get the inner price choice blocks.
69 *
70 * @return array
71 */
72 public function getInnerPriceChoices() {
73 return array_filter(
74 $this->block->parsed_block['innerBlocks'],
75 function( $block ) {
76 return 'surecart/price-choice' === $block['blockName'] && ! empty( $block['attrs']['price_id'] );
77 }
78 );
79 }
80
81 /**
82 * Convert price blocks to line items
83 *
84 * @param array $blocks Array of parsed blocks.
85 *
86 * @return array Array of line items.
87 */
88 public function convertPriceBlocksToLineItems( $blocks ) {
89 return array_values(
90 array_map(
91 function( $block ) {
92 return [
93 'price' => $block['attrs']['price_id'],
94 'quantity' => $block['attrs']['quantity'] ?? 1,
95 ];
96 },
97 $blocks
98 )
99 );
100 }
101
102 /**
103 * Remove price choice wrapper and return the html.
104 *
105 * @param string $content Block content.
106 *
107 * @return string
108 */
109 public function getRemovedPriceChoicesWrapper( $content ): string {
110 if(empty($content)){
111 return '';
112 }
113
114 $price_choices_tag = trim(str_replace('</sc-price-choices>', '', strip_tags($content, '<sc-price-choices>')));
115 $content = str_replace($price_choices_tag, '', $content);
116 $content = str_replace('</sc-price-choices>', '', $content);
117
118 return filter_block_content( $content, 'post' );
119 }
120 }
121