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 / Upsell / SubmitButton / Block.php
surecart / packages / blocks / Blocks / Upsell / SubmitButton Last commit date
Block.php 2 years ago block.json 5 months ago style.css 2 years ago
Block.php
158 lines
1 <?php
2
3 namespace SureCartBlocks\Blocks\Upsell\SubmitButton;
4
5 use SureCart\Support\Currency;
6 use SureCartBlocks\Blocks\BaseBlock;
7
8 /**
9 * Upsell Submit Button block.
10 */
11 class Block extends BaseBlock {
12 /**
13 * Keep track of the instance number of this block.
14 *
15 * @var integer
16 */
17 public static $instance;
18
19 /**
20 * Get the style for the block
21 *
22 * @param array $attr Style variables.
23 * @param string $prefix Prefix for the css variables.
24 * @return string
25 */
26 public function getVars( $attr, $prefix ) {
27 $style = '';
28 // padding.
29 if ( ! empty( $attr['style']['spacing']['padding'] ) ) {
30 $padding = $attr['style']['spacing']['padding'];
31 $style .= $prefix . '-padding-top: ' . $this->getSpacingPresetCssVar( array_key_exists( 'top', $padding ) ? $padding['top'] : '0' ) . ';';
32 $style .= $prefix . '-padding-bottom: ' . $this->getSpacingPresetCssVar( array_key_exists( 'bottom', $padding ) ? $padding['bottom'] : '0' ) . ';';
33 $style .= $prefix . '-padding-left: ' . $this->getSpacingPresetCssVar( array_key_exists( 'left', $padding ) ? $padding['left'] : '0' ) . ';';
34 $style .= $prefix . '-padding-right: ' . $this->getSpacingPresetCssVar( array_key_exists( 'right', $padding ) ? $padding['right'] : '0' ) . ';';
35 }
36 // margin.
37 if ( ! empty( $attr['style']['spacing']['margin'] ) ) {
38 $margin = $attr['style']['spacing']['margin'];
39 $style .= $prefix . '-margin-top: ' . $this->getSpacingPresetCssVar( array_key_exists( 'top', $margin ) ? $margin['top'] : '0' ) . ';';
40 $style .= $prefix . '-margin-bottom: ' . $this->getSpacingPresetCssVar( array_key_exists( 'bottom', $margin ) ? $margin['bottom'] : '0' ) . ';';
41 $style .= $prefix . '-margin-left: ' . $this->getSpacingPresetCssVar( array_key_exists( 'left', $margin ) ? $margin['left'] : '0' ) . ';';
42 $style .= $prefix . '-margin-right: ' . $this->getSpacingPresetCssVar( array_key_exists( 'right', $margin ) ? $margin['right'] : '0' ) . ';';
43 }
44 // aspect ratio.
45 if ( ! empty( $attr['ratio'] ) ) {
46 $style .= $prefix . '-aspect-ratio: ' . $attr['ratio'] . ';';
47 }
48 // border width.
49 if ( ! empty( $attr['style']['border']['width'] ) ) {
50 $style .= $prefix . '-border-width: ' . $attr['style']['border']['width'] . ';';
51 }
52 // border radius.
53 if ( ! empty( $attr['style']['border']['radius'] ) ) {
54 $style .= $prefix . '-border-radius: ' . $attr['style']['border']['radius'] . ';';
55 }
56 // font weight.
57 if ( ! empty( $attr['style']['typography']['fontWeight'] ) ) {
58 $style .= $prefix . '-font-weight: ' . $attr['style']['typography']['fontWeight'] . ';';
59 }
60 // font size.
61 if ( ! empty( $attr['fontSize'] ) || ! empty( $attr['style']['typography']['fontSize'] ) ) {
62 $font_size = ! empty( $attr['fontSize'] ) ? $this->getFontSizePresetCssVar( $attr['fontSize'] ) : $attr['style']['typography']['fontSize'];
63 $style .= $prefix . '-font-size: ' . $font_size . ';';
64 }
65 // border color.
66 if ( ! empty( $attr['borderColor'] ) || ! empty( $attr['style']['border']['color'] ) ) {
67 $border_color = ! empty( $attr['borderColor'] ) ? $this->getColorPresetCssVar( $attr['borderColor'] ) : $attr['style']['border']['color'];
68 $style .= $prefix . '-border-color: ' . $border_color . ';';
69 }
70 // text color.
71 if ( ! empty( $attr['textColor'] ) || ! empty( $attr['style']['color']['text'] ) ) {
72 $text_color = ! empty( $attr['textColor'] ) ? $this->getColorPresetCssVar( $attr['textColor'] ) : $attr['style']['color']['text'];
73 $style .= $prefix . '-text-color: ' . $text_color . ';';
74 }
75 // background color.
76 if ( ! empty( $attr['backgroundColor'] ) || ! empty( $attr['style']['color']['background'] ) ) {
77 $text_color = ! empty( $attr['backgroundColor'] ) ? $this->getColorPresetCssVar( $attr['backgroundColor'] ) : $attr['style']['color']['background'];
78 $style .= $prefix . '-background-color: ' . $text_color . ';';
79 }
80 // text align.
81 if ( ! empty( $attr['align'] ) ) {
82 $style .= $prefix . '-align: ' . $attr['align'] . ';';
83 }
84
85 if ( ! empty( $attr['width'] ) ) {
86 $style .= $prefix . '-width: ' . $attr['width'] . '%;';
87 }
88
89 return $style;
90 }
91
92 /**
93 * Render the block
94 *
95 * @param array $attributes Block attributes.
96 * @param string $content Post content.
97 *
98 * @return string
99 */
100 public function render( $attributes, $content ) {
101 $upsell = get_query_var( 'surecart_current_upsell' );
102 $product = get_query_var( 'surecart_current_product' );
103 if ( empty( $upsell ) ) {
104 return '';
105 }
106
107 $width_class = ! empty( $attributes['width'] ) ? 'has-custom-width sc-block-button__width-' . $attributes['width'] : '';
108 $icon = ! empty( $attributes['show_icon'] ) ? 'lock' : false;
109
110 ob_start();
111 ?>
112
113 <div>
114 <sc-error />
115 </div>
116
117 <sc-upsell-submit-button
118 class="wp-block-button sc-block-button <?php echo esc_attr( $width_class ); ?> <?php echo esc_attr( $attributes['className'] ?? '' ); ?>"
119 >
120 <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 ) ); ?>">
121 <span data-text>
122 <?php if ( ! empty( $icon ) ) : ?>
123 <sc-icon slot="prefix" name="<?php echo esc_attr( $icon ); ?>" slot="prefix" aria-hidden="true"></sc-icon>
124 <?php endif; ?>
125 <?php echo wp_kses_post( $product->archived || empty( $product->prices->data ) ? __( 'Unavailable For Purchase', 'surecart' ) : $attributes['text'] ); ?>
126 </span>
127
128 <sc-spinner data-loader></sc-spinner>
129 </a>
130 <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 ) ); ?>">
131 <span data-text><?php echo esc_html( $attributes['out_of_stock_text'] ?? __( 'Sold Out', 'surecart' ) ); ?></span>
132 <sc-spinner data-loader></sc-spinner>
133 </button>
134 <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 ) ); ?>">
135 <span data-text><?php echo esc_html( $attributes['unavailable_text'] ?? __( 'Unavailable', 'surecart' ) ); ?></span>
136 <sc-spinner data-loader></sc-spinner>
137 </button>
138 </sc-upsell-submit-button>
139
140 <?php
141
142 // add this to the footer to make sure it's not covered by any other elements
143 // and can escape the container query.
144 add_action(
145 'wp_footer',
146 function() use ( $attributes, $product ) {
147 ?>
148 <sc-product-price-modal addToCart="false" ?>>
149 <?php echo wp_kses_post( $product->archived || empty( $product->prices->data ) ? __( 'Unavailable For Purchase', 'surecart' ) : $attributes['text'] ); ?>
150 </sc-product-price-modal>
151 <?php
152 }
153 );
154
155 return ob_get_clean();
156 }
157 }
158