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.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 / app / src / Integrations / Bricks / Concerns / ConvertsBlocks.php
surecart / app / src / Integrations / Bricks / Concerns Last commit date
ConvertsBlocks.php 1 year ago
ConvertsBlocks.php
170 lines
1 <?php
2
3 namespace SureCart\Integrations\Bricks\Concerns;
4
5 trait ConvertsBlocks {
6 /**
7 * Show if we should populate content on empty.
8 *
9 * @var string
10 */
11 public $show_populate_on_empty = false;
12
13 /**
14 * Get the block html
15 *
16 * @param array $block_attributes The block attributes.
17 * @param string $content The block content.
18 *
19 * @return string
20 */
21 protected function html( $block_attributes = [], $content = '' ) {
22 // Previewing a template, show a placeholder to populate.
23 if ( $this->show_populate_on_empty ) {
24 $product = sc_get_product();
25
26 if ( empty( $product ) ) {
27 return $this->render_element_placeholder(
28 [
29 'title' => esc_html__( 'For better preview select content to show.', 'surecart' ),
30 'description' => esc_html__( 'Go to: Settings > Template Settings > Populate Content', 'surecart' ),
31 ]
32 );
33 }
34 }
35
36 // add the rendered class and id.
37 $rendered_attributes = $this->get_block_rendered_attributes();
38 $block_attributes['className'] = $rendered_attributes['class'];
39 $block_attributes['anchor'] = $rendered_attributes['id'];
40
41 // get the bricks attributes.
42 $key = '_root';
43 $attributes = apply_filters( 'bricks/element/render_attributes', $this->attributes, $key, $this );
44
45 $block = sc_pre_render_blocks( '<!-- wp:' . $this->block_name . ' ' . ( is_array( $block_attributes ) ? wp_json_encode( $block_attributes, JSON_FORCE_OBJECT ) : '' ) . ' -->' . $content . '<!-- /wp:' . $this->block_name . ' -->' );
46
47 // start the processor and select the first tag.
48 $processor = new \WP_HTML_Tag_Processor( $block );
49 $processor->next_tag();
50
51 // Return: No attributes set for this element.
52 if ( ! isset( $attributes[ $key ] ) ) {
53 return $processor->get_updated_html(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
54 }
55
56 foreach ( $attributes[ $key ] as $name => $value ) {
57 // handle array and filter out empty values.
58 if ( is_array( $value ) ) {
59 $value = array_filter(
60 $value,
61 function ( $val ) {
62 return ! empty( $val ) || is_numeric( $val );
63 }
64 );
65 }
66
67 // handle class array.
68 if ( 'class' === $name ) {
69 foreach ( $value as $class ) {
70 $processor->add_class( $class );
71 }
72 continue;
73 }
74
75 // handle the rest of the string value attributes.
76 if ( is_string( $value ) ) {
77 $processor->set_attribute( $name, $value );
78 }
79 }
80
81 // return updated html.
82 return $processor->get_updated_html();
83 }
84
85 /**
86 * Render the raw block output.
87 *
88 * @param array $block_attributes The block attributes.
89 * @param string $content The block content.
90 *
91 * @return string
92 */
93 public function raw( $block_attributes = [], $content = '' ) {
94 if ( $this->show_populate_on_empty ) {
95 $product = sc_get_product();
96
97 if ( empty( $product ) ) {
98 return $this->render_element_placeholder(
99 [
100 'title' => esc_html__( 'For better preview select content to show.', 'surecart' ),
101 'description' => esc_html__( 'Go to: Settings > Template Settings > Populate Content', 'surecart' ),
102 ]
103 );
104 }
105 }
106
107 $rendered_attributes = $this->get_block_rendered_attributes();
108 $block_attributes['className'] = $rendered_attributes['class'];
109 $block_attributes['anchor'] = $rendered_attributes['id'];
110
111 return '<!-- wp:' . $this->block_name . ' ' . ( is_array( $block_attributes ) ? wp_json_encode( $block_attributes, JSON_FORCE_OBJECT ) : '' ) . ' -->' . $content . '<!-- /wp:' . $this->block_name . ' -->';
112 }
113
114 /**
115 * Preview block.
116 *
117 * @param string $content The block content.
118 * @param string $class_name The class name.
119 * @param string $tag The tag.
120 *
121 * @return string
122 */
123 public function preview( $content = '', $class_name = '', $tag = 'div' ) {
124 $rendered_attributes = $this->get_block_rendered_attributes();
125 $class = $class_name . ' ' . $rendered_attributes['class'];
126 $id = $rendered_attributes['id'];
127
128 $output = "<$tag id='$id' class='$class'>";
129 $output .= $content;
130 $output .= "</$tag>";
131
132 return $output;
133 }
134
135 /**
136 * Get the rendered attributes.
137 *
138 * @return array
139 */
140 public function get_block_rendered_attributes(): array {
141 $processor = new \WP_HTML_Tag_Processor( "<div {$this->render_attributes( '_root' )}></div>" );
142 $processor->next_tag();
143
144 $block_attributes['class'] = $processor->get_attribute( 'class' ) ?? '';
145 $block_attributes['id'] = $processor->get_attribute( 'id' ) ?? '';
146
147 return $block_attributes;
148 }
149
150 /**
151 * Whether it is editor or not.
152 *
153 * @return bool
154 */
155 public function is_admin_editor() {
156 return ! bricks_is_frontend() || bricks_is_builder_call();
157 }
158
159 /**
160 * Get raw color.
161 *
162 * @param string $key The key.
163 *
164 * @return string
165 */
166 public function get_raw_color( $key ) {
167 return $this->settings[ $key ]['hex'] ?? $this->settings[ $key ]['raw'] ?? '';
168 }
169 }
170