PluginProbe
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.7.2
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.7.2
4.7.2 4.7.1 4.7.0 4.6.6 4.6.5 4.6.4 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 All 281 releases
surecart / app / src / Integrations / Bricks / Elements / ProductReviews.php
ProductReviews.php
280 lines 7.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace SureCart\Integrations\Bricks\Elements;
4
5 use SureCart\Integrations\Bricks\Concerns\ConvertsBlocks;
6
7 if ( ! defined( 'ABSPATH' ) ) {
8 exit; // Exit if accessed directly.
9 }
10
11 /**
12 * Product Reviews element.
13 */
14 class ProductReviews extends \Bricks\Element {
15 use ConvertsBlocks;
16
17 /**
18 * Element category.
19 *
20 * @var string
21 */
22 public $category = 'SureCart Layout';
23
24 /**
25 * Element name.
26 *
27 * @var string
28 */
29 public $name = 'surecart-product-reviews';
30
31 /**
32 * Element block name.
33 *
34 * @var string
35 */
36 public $block_name = 'surecart/product-reviews';
37
38 /**
39 * Element icon.
40 *
41 * @var string
42 */
43 public $icon = 'ti-comments';
44
45 /**
46 * This is nestable.
47 *
48 * @var bool
49 */
50 public $nestable = true;
51
52 /**
53 * Get element label.
54 *
55 * @return string
56 */
57 public function get_label() {
58 return esc_html__( 'Product Reviews', 'surecart' );
59 }
60
61 /**
62 * Get nestable children.
63 *
64 * @return array
65 */
66 public function get_nestable_children() {
67 return [
68 [
69 'name' => 'block',
70 'label' => esc_html__( 'Product Reviews', 'surecart' ),
71 'children' => [
72 [
73 'name' => 'container',
74 'label' => esc_html__( 'Review List', 'surecart' ),
75 'settings' => [
76 '_direction' => 'column',
77 '_alignItems' => 'flex-start',
78 '_padding' => [
79 'top' => '0',
80 'right' => '0',
81 'bottom' => '0',
82 'left' => '0',
83 ],
84 ],
85 'children' => [
86 [
87 'name' => 'heading',
88 'settings' => [
89 'text' => esc_html__( 'Customer Reviews', 'surecart' ),
90 'tag' => 'h2',
91 '_margin' => [
92 'bottom' => '20',
93 ],
94 ],
95 ],
96 // Product Review Content - conditional wrapper (only renders when reviews exist).
97 // Contains only the summary/breakdown - NOT the review list.
98 [
99 'name' => 'surecart-product-review-content',
100 'label' => esc_html__( 'Review Content', 'surecart' ),
101 'children' => [
102 // Review Summary.
103 [
104 'name' => 'container',
105 'label' => esc_html__( 'Review Summary', 'surecart' ),
106 'settings' => [
107 '_direction' => 'row',
108 '_alignItems' => 'center',
109 '_columnGap' => '30px',
110 '_justifyContent' => 'space-between',
111 '_alignSelf' => 'stretch',
112 '_margin' => [
113 'top' => '0',
114 'right' => '0',
115 'bottom' => '20px',
116 'left' => '0',
117 ],
118 '_padding' => [
119 'top' => '0',
120 'right' => '0',
121 'bottom' => '0',
122 'left' => '0',
123 ],
124 ],
125 'children' => [
126 [
127 'name' => 'container',
128 'label' => esc_html__( 'Product Rating', 'surecart' ),
129 'settings' => [
130 '_direction' => 'column',
131 '_rowGap' => '10px',
132 '_justifyContent' => 'center',
133 '_flexShrink' => 0,
134 '_flexGrow' => 0,
135 '_width' => '180px',
136 '_padding' => [
137 'top' => '0',
138 'right' => '0',
139 'bottom' => '0',
140 'left' => '0',
141 ],
142 ],
143 'children' => [
144 [
145 'name' => 'surecart-product-review-average-rating-value',
146 'settings' => [
147 'format_style' => 'slash',
148 '_typography' => [
149 'font-size' => '30px',
150 'font-weight' => '600',
151 ],
152 ],
153 ],
154 [
155 'name' => 'surecart-product-review-average-rating-stars',
156 'settings' => [
157 'fill_color' => [
158 'hex' => 'var(--bricks-color-primary)',
159 ],
160 ],
161 ],
162 [
163 'name' => 'container',
164 'label' => esc_html__( 'Product Total Rating', 'surecart' ),
165 'settings' => [
166 '_direction' => 'row',
167 '_columnGap' => '4px',
168 '_alignItems' => 'flex-start',
169 '_justifyContent' => 'flex-start',
170 '_margin' => [
171 'top' => '0',
172 'right' => '0',
173 'bottom' => '0',
174 'left' => '0',
175 ],
176 '_padding' => [
177 'top' => '0',
178 'right' => '0',
179 'bottom' => '0',
180 'left' => '0',
181 ],
182 '_width' => 'auto',
183 ],
184 'children' => [
185 [
186 'name' => 'text-basic',
187 'settings' => [
188 'text' => esc_html__( 'Based on', 'surecart' ),
189 '_typography' => [
190 'font-size' => '14px',
191 'font-weight' => '400',
192 ],
193 ],
194 ],
195 [
196 'name' => 'surecart-product-review-total-rating',
197 'settings' => [
198 'show_label' => true,
199 '_typography' => [
200 'font-size' => '14px',
201 ],
202 ],
203 ],
204 ],
205 ],
206 ],
207 ],
208 [
209 'name' => 'container',
210 'label' => esc_html__( 'Breakdowns', 'surecart' ),
211 'settings' => [
212 '_flexGrow' => 1,
213 '_flexShrink' => 1,
214 '_flexBasis' => '0%',
215 '_maxWidth' => '500px',
216 '_overflow' => 'hidden',
217 '_alignItems' => 'flex-end',
218 ],
219 'children' => [
220 [
221 'name' => 'surecart-product-review-breakdown',
222 'settings' => [
223 'columns' => 2,
224 'row_gap' => '2px',
225 'column_gap' => '40px',
226 'fill_color' => [
227 'hex' => 'var(--bricks-color-primary)',
228 ],
229 'bar_fill_color' => [
230 'hex' => 'var(--bricks-color-primary)',
231 ],
232 ],
233 ],
234 ],
235 ],
236 ],
237 ],
238 ],
239 ],
240 // Review List - OUTSIDE the conditional wrapper.
241 // This element has its own internal "no reviews" handling.
242 [
243 'name' => 'surecart-product-review-list',
244 'settings' => [
245 '_width' => '100%',
246 'show_header' => true,
247 'show_sidebar' => true,
248 'show_add_button' => true,
249 'show_review_date' => true,
250 'show_content' => true,
251 'show_pagination' => true,
252 'fill_color' => [
253 'hex' => 'var(--bricks-color-primary)',
254 ],
255 ],
256 ],
257 ],
258 ],
259 ],
260 ],
261 ];
262 }
263
264 /**
265 * Render element.
266 *
267 * @return void
268 */
269 public function render() {
270 $output = "<div {$this->render_attributes( '_root' )}>";
271
272 // Render children elements (= individual items).
273 $output .= \Bricks\Frontend::render_children( $this );
274
275 $output .= '</div>';
276
277 echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
278 }
279 }
280