PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.6.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.6.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 / Product / BuyButton / Block.php
surecart / packages / blocks / Blocks / Product / BuyButton Last commit date
Block.php 2 years ago block.json 1 year ago style.css 2 years ago
Block.php
153 lines
1 <?php
2
3 namespace SureCartBlocks\Blocks\Product\BuyButton;
4
5 use SureCartBlocks\Blocks\Product\ProductBlock;
6
7 /**
8 * Product Title Block
9 */
10 class Block extends ProductBlock {
11 /**
12 * Keep track of the instance number of this block.
13 *
14 * @var integer
15 */
16 public static $instance;
17
18 /**
19 * Get the style for the block.
20 *
21 * @param array $attr Style variables.
22 * @param string $prefix Prefix.
23 * @return string
24 */
25 public function getVars( $attr, $prefix ) {
26 $style = '';
27 // padding.
28 if ( ! empty( $attr['style']['spacing']['padding'] ) ) {
29 $padding = $attr['style']['spacing']['padding'];
30 $style .= $prefix . '-padding-top: ' . $this->getSpacingPresetCssVar( array_key_exists( 'top', $padding ) ? $padding['top'] : '0' ) . ';';
31 $style .= $prefix . '-padding-bottom: ' . $this->getSpacingPresetCssVar( array_key_exists( 'bottom', $padding ) ? $padding['bottom'] : '0' ) . ';';
32 $style .= $prefix . '-padding-left: ' . $this->getSpacingPresetCssVar( array_key_exists( 'left', $padding ) ? $padding['left'] : '0' ) . ';';
33 $style .= $prefix . '-padding-right: ' . $this->getSpacingPresetCssVar( array_key_exists( 'right', $padding ) ? $padding['right'] : '0' ) . ';';
34 }
35 // margin.
36 if ( ! empty( $attr['style']['spacing']['margin'] ) ) {
37 $margin = $attr['style']['spacing']['margin'];
38 $style .= $prefix . '-margin-top: ' . $this->getSpacingPresetCssVar( array_key_exists( 'top', $margin ) ? $margin['top'] : '0' ) . ';';
39 $style .= $prefix . '-margin-bottom: ' . $this->getSpacingPresetCssVar( array_key_exists( 'bottom', $margin ) ? $margin['bottom'] : '0' ) . ';';
40 $style .= $prefix . '-margin-left: ' . $this->getSpacingPresetCssVar( array_key_exists( 'left', $margin ) ? $margin['left'] : '0' ) . ';';
41 $style .= $prefix . '-margin-right: ' . $this->getSpacingPresetCssVar( array_key_exists( 'right', $margin ) ? $margin['right'] : '0' ) . ';';
42 }
43 // aspect ratio.
44 if ( ! empty( $attr['ratio'] ) ) {
45 $style .= $prefix . '-aspect-ratio: ' . $attr['ratio'] . ';';
46 }
47 // border width.
48 if ( ! empty( $attr['style']['border']['width'] ) ) {
49 $style .= $prefix . '-border-width: ' . $attr['style']['border']['width'] . ';';
50 }
51 // border radius.
52 if ( ! empty( $attr['style']['border']['radius'] ) ) {
53 $style .= $prefix . '-border-radius: ' . $attr['style']['border']['radius'] . ';';
54 }
55 // font weight.
56 if ( ! empty( $attr['style']['typography']['fontWeight'] ) ) {
57 $style .= $prefix . '-font-weight: ' . $attr['style']['typography']['fontWeight'] . ';';
58 }
59 // font size.
60 if ( ! empty( $attr['fontSize'] ) || ! empty( $attr['style']['typography']['fontSize'] ) ) {
61 $font_size = ! empty( $attr['fontSize'] ) ? $this->getFontSizePresetCssVar( $attr['fontSize'] ) : $attr['style']['typography']['fontSize'];
62 $style .= $prefix . '-font-size: ' . $font_size . ';';
63 }
64 // border color.
65 if ( ! empty( $attr['borderColor'] ) || ! empty( $attr['style']['border']['color'] ) ) {
66 $border_color = ! empty( $attr['borderColor'] ) ? $this->getColorPresetCssVar( $attr['borderColor'] ) : $attr['style']['border']['color'];
67 $style .= $prefix . '-border-color: ' . $border_color . ';';
68 }
69 // text color.
70 if ( ! empty( $attr['textColor'] ) || ! empty( $attr['style']['color']['text'] ) ) {
71 $text_color = ! empty( $attr['textColor'] ) ? $this->getColorPresetCssVar( $attr['textColor'] ) : $attr['style']['color']['text'];
72 $style .= $prefix . '-text-color: ' . $text_color . ';';
73 }
74 // background color.
75 if ( ! empty( $attr['backgroundColor'] ) || ! empty( $attr['style']['color']['background'] ) ) {
76 $text_color = ! empty( $attr['backgroundColor'] ) ? $this->getColorPresetCssVar( $attr['backgroundColor'] ) : $attr['style']['color']['background'];
77 $style .= $prefix . '-background-color: ' . $text_color . ';';
78 }
79 // text align.
80 if ( ! empty( $attr['align'] ) ) {
81 $style .= $prefix . '-align: ' . $attr['align'] . ';';
82 }
83
84 if ( ! empty( $attr['width'] ) ) {
85 $style .= $prefix . '-width: ' . $attr['width'] . '%;';
86 }
87
88 return $style;
89 }
90
91 /**
92 * Render the block
93 *
94 * @param array $attributes Block attributes.
95 * @param string $content Post content.
96 *
97 * @return string
98 */
99 public function render( $attributes, $content ) {
100 self::$instance++;
101
102 $product = $this->getProductAndSetInitialState( $attributes['id'] ?? '' );
103
104 if ( empty( $product ) ) {
105 return '';
106 }
107
108 // set width class.
109 $width_class = ! empty( $attributes['width'] ) ? 'has-custom-width sc-block-button__width-' . $attributes['width'] : '';
110 $form = \SureCart::forms()->getDefault();
111
112 ob_start();
113 ?>
114 <sc-product-buy-button
115 <?php echo wp_validate_boolean( $attributes['add_to_cart'] ) ? 'add-to-cart' : ''; ?>
116 class="wp-block-button sc-block-button <?php echo esc_attr( $width_class ); ?> <?php echo esc_attr( $attributes['className'] ?? '' ); ?>"
117 button-text="<?php echo esc_attr( $attributes['text'] ); ?>"
118 product-id="<?php echo esc_attr( $product->id ); ?>"
119 form-id="<?php echo (int) $form->ID; ?>"
120 checkout-link="<?php echo esc_attr( \SureCart::pages()->url( 'checkout' ) ); ?>"
121 id="sc-product-buy-button-<?php echo esc_attr( (int) self::$instance ); ?>"
122 >
123 <a href="#" class="wp-block-button__link sc-block-button__link wp-element-button <?php echo esc_attr( $this->getClasses( $attributes ) ); ?>" style="<?php echo esc_attr( $this->getStyles( $attributes ) ); ?>">
124 <span data-text><?php echo wp_kses_post( $product->archived || empty( $product->prices->data ) ? __( 'Unavailable For Purchase', 'surecart' ) : $attributes['text'] ); ?></span>
125 <?php echo wp_validate_boolean( $attributes['add_to_cart'] ) ? '<sc-spinner data-loader></sc-spinner>' : ''; ?>
126 </a>
127 <button disabled class="wp-block-button__link sc-block-button__link wp-element-button sc-block-button--sold-out <?php echo esc_attr( $this->getClasses( $attributes ) ); ?>" style="<?php echo esc_attr( $this->getStyles( $attributes ) ); ?>">
128 <span data-text><?php echo esc_html( $attributes['out_of_stock_text'] ?? __( 'Sold Out', 'surecart' ) ); ?></span>
129 </button>
130 <button disabled class="wp-block-button__link sc-block-button__link wp-element-button sc-block-button--unavailable <?php echo esc_attr( $this->getClasses( $attributes ) ); ?>" style="<?php echo esc_attr( $this->getStyles( $attributes ) ); ?>">
131 <span data-text><?php echo esc_html( $attributes['unavailable_text'] ?? __( 'Unavailable', 'surecart' ) ); ?></span>
132 </button>
133 </sc-product-buy-button>
134
135 <?php
136
137 // add this to the footer to make sure it's not covered by any other elements
138 // and can escape the container query.
139 add_action(
140 'wp_footer',
141 function() use ( $attributes, $product ) {
142 ?>
143 <sc-product-price-modal product-id="<?php echo esc_attr( $product->id ); ?>" <?php echo esc_attr( wp_validate_boolean( $attributes['add_to_cart'] ) ? 'add-to-cart' : '' ); ?>>
144 <?php echo wp_kses_post( $product->archived || empty( $product->prices->data ) ? __( 'Unavailable For Purchase', 'surecart' ) : $attributes['text'] ); ?>
145 </sc-product-price-modal>
146 <?php
147 }
148 );
149
150 return ob_get_clean();
151 }
152 }
153