PluginProbe
aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder / 2.14.0
aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder v2.14.0
2.14.0 2.13.0 2.13.1 2.12.0 2.11.1 2.11.0 2.10.0 2.9.0 2.7.4 2.7.5 2.7.6 2.7.7 2.8.0 2.8.1 2.9.1 trunk 1.0 1.0-beta1 1.0-beta2 1.0-beta3 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 All 81 releases
ablocks / includes / blocks / storeengine-cart-button / block.php

block.php in aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder 2.14.0, at includes/blocks/storeengine-cart-button/block.php

365 lines 15.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ABlocks\Blocks\StoreengineCartButton;
4
5 if ( ! defined( 'ABSPATH' ) ) {
6 exit;
7 }
8
9 use ABlocks\Classes\BlockBaseAbstract;
10 use ABlocks\Classes\CssGenerator;
11 use ABlocks\Helper;
12 use ABlocks\Controls\Typography;
13 use ABlocks\Controls\Background;
14 use ABlocks\Controls\Border;
15 use ABlocks\Controls\Dimensions;
16 use ABlocks\Controls\Range;
17 use ABlocks\Controls\BoxShadow;
18 use ABlocks\Controls\Color;
19
20 class Block extends BlockBaseAbstract {
21 protected $block_name = 'storeengine-cart-button';
22
23 public function build_css( $attributes ) {
24 $css_generator = new CssGenerator( $attributes, $this->block_name );
25
26 $css_generator->add_class_styles(
27 '{{WRAPPER}} .storeengine-btn--add-to-cart,
28 {{WRAPPER}} .storeengine-btn--add-to-cart-replacement,
29 {{WRAPPER}} .storeengine-btn--direct-checkout,
30 {{WRAPPER}} .storeengine-btn--view-options',
31 $this->get_button_css( $attributes ),
32 $this->get_button_css( $attributes, 'Tablet' ),
33 $this->get_button_css( $attributes, 'Mobile' ),
34 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_button_css( $attributes, $device ); } )
35 );
36 $css_generator->add_class_styles(
37 '{{WRAPPER}} .storeengine-btn--add-to-cart:hover,
38 {{WRAPPER}} .storeengine-btn--add-to-cart-replacement:hover,
39 {{WRAPPER}} .storeengine-btn--direct-checkout:hover,
40 {{WRAPPER}} .storeengine-btn--view-options:hover',
41 $this->get_button_hover_css( $attributes, '' ),
42 $this->get_button_hover_css( $attributes, 'Tablet' ),
43 $this->get_button_hover_css( $attributes, 'Mobile' ),
44 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_button_hover_css( $attributes, $device ); } )
45 );
46 $css_generator->add_class_styles(
47 '{{WRAPPER}} .storeengine-single-product-quantity-wrap',
48 $this->get_button_alignment_css( $attributes, '' ),
49 $this->get_button_alignment_css( $attributes, 'Tablet' ),
50 $this->get_button_alignment_css( $attributes, 'Mobile' ),
51 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_button_alignment_css( $attributes, $device ); } )
52 );
53 $css_generator->add_class_styles(
54 '{{WRAPPER}} .storeengine-add-to-cart-shortcode .storeengine-price.amount',
55 $this->get_price_css( $attributes, '' ),
56 $this->get_price_css( $attributes, 'Tablet' ),
57 $this->get_price_css( $attributes, 'Mobile' ),
58 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_price_css( $attributes, $device ); } )
59 );
60 $css_generator->add_class_styles(
61 '{{WRAPPER}} .storeengine-add-to-cart-shortcode .storeengine-price.amount:hover',
62 $this->get_price_hover_css( $attributes, '' ),
63 $this->get_price_hover_css( $attributes, 'Tablet' ),
64 $this->get_price_hover_css( $attributes, 'Mobile' ),
65 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_price_hover_css( $attributes, $device ); } )
66 );
67 $css_generator->add_class_styles(
68 '{{WRAPPER}} .storeengine-single-product-price-name,
69 {{WRAPPER}} .storeengine-loop-product-price-summery .storeengine-loop-product-price-label',
70 $this->get_price_name_css( $attributes, '' ),
71 $this->get_price_name_css( $attributes, 'Tablet' ),
72 $this->get_price_name_css( $attributes, 'Mobile' ),
73 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_price_name_css( $attributes, $device ); } )
74 );
75 $css_generator->add_class_styles(
76 '{{WRAPPER}} .storeengine-single-product-price-name:hover,
77 {{WRAPPER}} .storeengine-loop-product-price-summery .storeengine-loop-product-price-label:hover',
78 $this->get_price_name_hover_css( $attributes, '' ),
79 $this->get_price_name_hover_css( $attributes, 'Tablet' ),
80 $this->get_price_name_hover_css( $attributes, 'Mobile' ),
81 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_price_name_hover_css( $attributes, $device ); } )
82 );
83 $css_generator->add_class_styles(
84 '{{WRAPPER}} .storeengine-single__amount .storeengine-dropdown,
85 {{WRAPPER}} .storeengine-single__amount .storeengine-product__multi-prices,
86 {{WRAPPER}} .storeengine-dropdown.open .storeengine-dropdown-content .storeengine-product__multi-price,
87 {{WRAPPER}} .storeengine-dropdown.open .storeengine-dropdown-content .storeengine-product__multi-price label,
88 {{WRAPPER}} .storeengine-single-product-prices',
89 $this->get_box_css( $attributes, '' ),
90 $this->get_box_css( $attributes, 'Tablet' ),
91 $this->get_box_css( $attributes, 'Mobile' ),
92 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_box_css( $attributes, $device ); } )
93 );
94 $css_generator->add_class_styles(
95 '{{WRAPPER}} .storeengine-single__amount .storeengine-dropdown:hover,
96 {{WRAPPER}} .storeengine-single__amount .storeengine-product__multi-prices:hover,
97 {{WRAPPER}} .storeengine-dropdown.open .storeengine-dropdown-content .storeengine-product__multi-price:hover,
98 {{WRAPPER}} .storeengine-dropdown.open .storeengine-dropdown-content .storeengine-product__multi-price label:hover,
99 {{WRAPPER}} .storeengine-single-product-prices:hover',
100 $this->get_box_hover_css( $attributes, '' ),
101 $this->get_box_hover_css( $attributes, 'Tablet' ),
102 $this->get_box_hover_css( $attributes, 'Mobile' ),
103 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_box_hover_css( $attributes, $device ); } )
104 );
105 $css_generator->add_class_styles(
106 '{{WRAPPER}} .storeengine-single-product-price-summery .storeengine-single-product-price-label input[type=radio]',
107 $this->get_radio_css( $attributes, '' ),
108 $this->get_radio_css( $attributes, 'Tablet' ),
109 $this->get_radio_css( $attributes, 'Mobile' ),
110 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_radio_css( $attributes, $device ); } )
111 );
112 $css_generator->add_class_styles(
113 '{{WRAPPER}} .storeengine-single__amount',
114 $this->get_alignment_css( $attributes, '' ),
115 $this->get_alignment_css( $attributes, 'Tablet' ),
116 $this->get_alignment_css( $attributes, 'Mobile' ),
117 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_alignment_css( $attributes, $device ); } )
118 );
119 $css_generator->add_class_styles(
120 '{{WRAPPER}} .storeengine-add-to-cart-shortcode',
121 $this->get_gap_css( $attributes, '' ),
122 $this->get_gap_css( $attributes, 'Tablet' ),
123 $this->get_gap_css( $attributes, 'Mobile' ),
124 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_gap_css( $attributes, $device ); } )
125 );
126 $css_generator->add_class_styles(
127 '{{WRAPPER}} .storeengine-single-product-prices .storeengine-single-product-price,
128 {{WRAPPER}} .storeengine-product__multi-prices .storeengine-dropdown__toggle,
129 {{WRAPPER}} .storeengine-single__amount .storeengine-product__multi-prices',
130 $this->get_price_box_css( $attributes, '' ),
131 $this->get_price_box_css( $attributes, 'Tablet' ),
132 $this->get_price_box_css( $attributes, 'Mobile' ),
133 $css_generator->custom_device_map( function ( $device ) use ( $attributes ) { return $this->get_price_box_css( $attributes, $device ); } )
134 );
135
136 return $css_generator->generate_css();
137 }
138
139 public function get_button_css( $attributes, $device = '' ) {
140 $css = [];
141 $cssPadding = [];
142 $alignment_css = [];
143 $typographyValueGlobal = ( isset( $attributes['btn_typographyGlobal'] ) ? $attributes['btn_typographyGlobal'] : '' );
144 $typography_value = isset( $attributes['btn_typography'] ) ? $attributes['btn_typography'] : [];
145
146 if ( ! empty( $attributes['padding'] ) ) {
147 $cssPadding = Dimensions::get_css( $attributes['padding'], 'padding', $device );
148 }
149
150 if ( ! empty( $attributes['buttonTextAlign'][ 'value' . $device ] ) ) {
151 $alignment_css['justify-content'] = $attributes['buttonTextAlign'][ 'value' . $device ];
152 }
153
154 return array_merge(
155 [ 'color' => Color::get_css( isset( $attributes['button_color'] ) ? $attributes['button_color'] : '' ) ],
156 [ 'background' => Color::get_css( isset( $attributes['button_bg'] ) ? $attributes['button_bg'] : '' ) ],
157 $cssPadding,
158 Typography::get_css( $typography_value, '', $device, $typographyValueGlobal ),
159 $alignment_css,
160 Border::get_css( $attributes['buttonBorder'], '', $device ),
161 BoxShadow::get_css( $attributes['boxShadow'], '', $device ),
162 Range::get_css( [
163 'attributeValue' => $attributes['button_width'],
164 'attribute_object_key' => 'value',
165 'isResponsive' => true,
166 'defaultValue' => 100,
167 'hasUnit' => true,
168 'unitDefaultValue' => '%',
169 'property' => 'width',
170 'device' => $device,
171 ] )
172 );
173 }
174
175 public function get_button_hover_css( $attributes, $device = '' ) {
176
177 return array_merge(
178 [ 'color' => Color::get_css( isset( $attributes['button_color_hover'] ) ? $attributes['button_color_hover'] : '' ) ],
179 [ 'background' => Color::get_css( isset( $attributes['button_bg_hover'] ) ? $attributes['button_bg_hover'] : '' ) ],
180 Border::get_hover_css( $attributes['buttonBorder'] ?? [], '', $device ),
181 BoxShadow::get_hover_css( $attributes['boxShadow'], '', $device ),
182 );
183 }
184
185 public function get_button_alignment_css( $attributes, $device = '' ) {
186 $alignment_css = [];
187
188 if ( ! empty( $attributes['buttonAlign'][ 'value' . $device ] ) ) {
189 $alignment_css['justify-content'] = $attributes['buttonAlign'][ 'value' . $device ];
190 }
191
192 return $alignment_css;
193 }
194
195 public function get_price_css( $attributes, $device = '' ) {
196 $typographyValueGlobal = ( isset( $attributes['priceTypographyGlobal'] ) ? $attributes['priceTypographyGlobal'] : '' );
197 $typography_value = isset( $attributes['priceTypography'] ) ? $attributes['priceTypography'] : [];
198 return array_merge(
199 $typography_value,
200 Typography::get_css( $typography_value, '', $device, $typographyValueGlobal ),
201 [
202 'color' => Color::get_css(
203 isset( $attributes['priceColor'] ) ? $attributes['priceColor'] : ''
204 ),
205 ]
206 );
207 }
208
209 public function get_price_hover_css( $attributes, $device = '' ) {
210 return [
211 'color' => Color::get_css(
212 isset( $attributes['priceColorH'] ) ? $attributes['priceColorH'] : ''
213 ),
214 ];
215 }
216
217 public function get_price_name_css( $attributes, $device = '' ) {
218 $typographyValueGlobal = ( isset( $attributes['priceNameTypographyGlobal'] ) ? $attributes['priceNameTypographyGlobal'] : '' );
219 $typography_value = isset( $attributes['priceNameTypography'] ) ? $attributes['priceNameTypography'] : [];
220
221 return array_merge(
222 $typography_value,
223 Typography::get_css( $typography_value, '', $device, $typographyValueGlobal ),
224 [
225 'color' => Color::get_css(
226 isset( $attributes['priceNameColor'] ) ? $attributes['priceNameColor'] : ''
227 ),
228 ]
229 );
230 }
231
232 public function get_price_name_hover_css( $attributes, $device = '' ) {
233 return [
234 'color' => Color::get_css(
235 isset( $attributes['priceNameColorH'] ) ? $attributes['priceNameColorH'] : ''
236 ),
237 ];
238 }
239
240 public function get_box_css( $attributes, $device = '' ) {
241 return array_merge(
242 [
243 'background' => Color::get_css(
244 isset( $attributes['boxBackground'] ) ? $attributes['boxBackground'] : ''),
245 ],
246 Range::get_css( [
247 'attributeValue' => $attributes['boxWidth'],
248 'attribute_object_key' => 'value',
249 'isResponsive' => true,
250 'defaultValue' => 100,
251 'hasUnit' => true,
252 'unitDefaultValue' => '%',
253 'property' => 'width',
254 'device' => $device,
255 ] )
256 );
257 }
258
259 public function get_radio_css( $attributes, $device = '' ) {
260 return array_merge(
261 Range::get_css([
262 'attributeValue' => $attributes['radioWidth'],
263 'attribute_object_key' => 'value',
264 'isResponsive' => true,
265 'defaultValue' => 15,
266 'hasUnit' => true,
267 'unitDefaultValue' => 'px',
268 'property' => 'width',
269 'device' => $device,
270 ]),
271 Range::get_css([
272 'attributeValue' => $attributes['radioHeight'],
273 'attribute_object_key' => 'value',
274 'isResponsive' => true,
275 'defaultValue' => 15,
276 'hasUnit' => true,
277 'unitDefaultValue' => 'px',
278 'property' => 'height',
279 'device' => $device,
280 ])
281 );
282 }
283
284 public function get_alignment_css( $attributes, $device = '' ) {
285 $alignment_css = [];
286 $css['display'] = 'flex';
287 if ( ! empty( $attributes['priceAlign'][ 'value' . $device ] ) ) {
288 $alignment_css['justify-content'] = $attributes['priceAlign'][ 'value' . $device ];
289 }
290
291 return array_merge(
292 $alignment_css,
293 $css,
294 );
295 }
296
297
298 public function get_box_hover_css( $attributes, $device = '' ) {
299 return [
300 'background' => Color::get_css(
301 isset( $attributes['boxBackgroundH'] ) ? $attributes['boxBackgroundH'] : ''),
302 ];
303 }
304
305 public function get_gap_css( $attributes, $device = '' ) {
306 $css_flex['display'] = 'flex';
307 $css_direction['flex-direction'] = 'column';
308
309 return array_merge(
310 $css_direction,
311 $css_flex,
312 Range::get_css([
313 'attributeValue' => $attributes['elementGap'],
314 'attribute_object_key' => 'value',
315 'isResponsive' => true,
316 'defaultValue' => 12,
317 'hasUnit' => true,
318 'unitDefaultValue' => 'px',
319 'property' => 'gap',
320 'device' => $device,
321 ]),
322 );
323 }
324
325 public function get_price_box_css( $attributes, $device = '' ) {
326 if ( ! empty( $attributes['boxPadding'] ) ) {
327 $css_padding = Dimensions::get_css( $attributes['boxPadding'], 'padding', $device );
328 }
329
330 return array_merge(
331 $css_padding,
332 Border::get_css( $attributes['boxBorder'], '', $device ),
333 );
334
335 }
336
337 public function render_block_content( $attributes, $content, $block_instance ) {
338 $attr_array = [
339 'label' => Helper::get_attribute_value( $attributes, 'label' ),
340 'product_id' => Helper::get_attribute_value( $attributes, 'product_id' ),
341 'price_id' => Helper::get_attribute_value( $attributes, 'price_id' ),
342 'variation_id' => Helper::get_attribute_value( $attributes, 'variation_id' ),
343 'direct_checkout' => Helper::get_attribute_value( $attributes, 'direct_checkout' ) ? 'true' : 'false',
344 'quantity' => Helper::get_attribute_value( $attributes, 'quantity' ),
345 'show_quantity' => Helper::get_attribute_value( $attributes, 'show_quantity' ),
346 'disabled' => Helper::get_attribute_value( $attributes, 'disabled' ),
347 'price_display' => Helper::get_attribute_value( $attributes, 'price_display' ),
348 'button_display' => Helper::get_attribute_value( $attributes, 'button_display' ),
349 ];
350
351 if ( isset( $block_instance->context['postId'] ) && ! empty( $block_instance->context['postId'] ) && empty( $attr_array['product_id'] ) ) {
352 $attr_array['product_id'] = $block_instance->context['postId'];
353 }
354
355 // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
356 if ( isset( $_GET['context'] ) && 'edit' === sanitize_text_field( $_GET['context'] ) ) {
357 $attr_array['dummy'] = true;
358 }
359
360 $shortcode = '[storeengine_add_to_cart ' . Helper::attr_shortcode( $attr_array ) . ']';
361 echo do_shortcode( $shortcode );
362 }
363
364 }
365