PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.6.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.6.1
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 / BaseBlock.php
surecart / packages / blocks / Blocks Last commit date
AddToCartButton 3 years ago Address 3 years ago BumpLineItem 3 years ago Button 3 years ago BuyButton 3 years ago Card 3 years ago Cart 3 years ago CartBumpLineItem 3 years ago CartCoupon 3 years ago CartHeader 3 years ago CartItems 3 years ago CartMenuButton 3 years ago CartMessage 3 years ago CartSubmit 3 years ago CartSubtotal 3 years ago Checkbox 3 years ago CheckoutErrors 3 years ago CheckoutForm 3 years ago CollapsibleRow 3 years ago Column 2 years ago Columns 2 years ago ConditionalForm 3 years ago Confirmation 3 years ago Coupon 3 years ago CustomerDashboardButton 3 years ago Dashboard 3 years ago Divider 3 years ago Donation 3 years ago DonationAmount 3 years ago Email 3 years ago ExpressPayment 3 years ago FirstName 3 years ago Form 2 years ago Heading 3 years ago Input 3 years ago LastName 3 years ago LineItemShipping 3 years ago LineItems 3 years ago LogoutButton 3 years ago Name 3 years ago NameYourPrice 3 years ago OrderBumps 2 years ago OrderConfirmationCustomer 3 years ago OrderConfirmationLineItems 3 years ago Password 2 years ago Payment 3 years ago Phone 3 years ago PriceChoice 3 years ago PriceSelector 3 years ago Product 2 years ago ProductItem 3 years ago ProductItemImage 3 years ago ProductItemList 2 years ago ProductItemPrice 3 years ago ProductItemTitle 3 years ago Radio 3 years ago RadioGroup 3 years ago SessionDetail 3 years ago ShippingChoices 3 years ago StoreLogo 3 years ago Submit 2 years ago Subtotal 3 years ago Switch 3 years ago TaxIdInput 3 years ago TaxLineItem 3 years ago Textarea 3 years ago Total 3 years ago Totals 2 years ago BaseBlock.php 3 years ago BlockService.php 3 years ago BlockServiceProvider.php 3 years ago CartBlock.php 3 years ago
BaseBlock.php
288 lines
1 <?php
2
3 namespace SureCartBlocks\Blocks;
4
5 use SureCartBlocks\Util\BlockStyleAttributes;
6
7 /**
8 * Checkout block
9 */
10 abstract class BaseBlock {
11 /**
12 * Optional directory to .json block data files.
13 *
14 * @var string
15 */
16 protected $directory = '';
17
18 /**
19 * Holds the block.
20 *
21 * @var object
22 */
23 protected $block;
24
25 /**
26 * Get the style for the block
27 *
28 * @param array $attributes Style variables.
29 * @return string
30 */
31 public function getVars( $attr, $prefix ) {
32 $style = '';
33 // padding.
34 if ( ! empty( $attr['style']['spacing']['padding'] ) ) {
35 $padding = $attr['style']['spacing']['padding'];
36 $style .= $prefix . '-padding-top: ' . $this->getSpacingPresetCssVar( array_key_exists( 'top', $padding ) ? $padding['top'] : '0' ) . ';';
37 $style .= $prefix . '-padding-bottom: ' . $this->getSpacingPresetCssVar( array_key_exists( 'bottom', $padding ) ? $padding['bottom'] : '0' ) . ';';
38 $style .= $prefix . '-padding-left: ' . $this->getSpacingPresetCssVar( array_key_exists( 'left', $padding ) ? $padding['left'] : '0' ) . ';';
39 $style .= $prefix . '-padding-right: ' . $this->getSpacingPresetCssVar( array_key_exists( 'right', $padding ) ? $padding['right'] : '0' ) . ';';
40 }
41 // margin.
42 if ( ! empty( $attr['style']['spacing']['margin'] ) ) {
43 $margin = $attr['style']['spacing']['margin'];
44 $style .= $prefix . '-margin-top: ' . $this->getSpacingPresetCssVar( array_key_exists( 'top', $margin ) ? $margin['top'] : '0' ) . ';';
45 $style .= $prefix . '-margin-bottom: ' . $this->getSpacingPresetCssVar( array_key_exists( 'bottom', $margin ) ? $margin['bottom'] : '0' ) . ';';
46 $style .= $prefix . '-margin-left: ' . $this->getSpacingPresetCssVar( array_key_exists( 'left', $margin ) ? $margin['left'] : '0' ) . ';';
47 $style .= $prefix . '-margin-right: ' . $this->getSpacingPresetCssVar( array_key_exists( 'right', $margin ) ? $margin['right'] : '0' ) . ';';
48 }
49 // aspect ratio.
50 if ( ! empty( $attr['ratio'] ) ) {
51 $style .= $prefix . '-aspect-ratio: ' . $attr['ratio'] . ';';
52 }
53 // border width.
54 if ( ! empty( $attr['style']['border']['width'] ) ) {
55 $style .= $prefix . '-border-width: ' . $attr['style']['border']['width'] . ';';
56 }
57 // border radius.
58 if ( ! empty( $attr['style']['border']['radius'] ) ) {
59 $style .= $prefix . '-border-radius: ' . $attr['style']['border']['radius'] . ';';
60 }
61 // font weight.
62 if ( ! empty( $attr['style']['typography']['fontWeight'] ) ) {
63 $style .= $prefix . '-font-weight: ' . $attr['style']['typography']['fontWeight'] . ';';
64 }
65 // font size.
66 if ( ! empty( $attr['fontSize'] ) || ! empty( $attr['style']['typography']['fontSize'] ) ) {
67 $font_size = ! empty( $attr['fontSize'] ) ? $this->getFontSizePresetCssVar( $attr['fontSize'] ) : $attr['style']['typography']['fontSize'];
68 $style .= 'font-size: ' . $font_size . ';';
69 }
70 // border color.
71 if ( ! empty( $attr['borderColor'] ) || ! empty( $attr['style']['border']['color'] ) ) {
72 $border_color = ! empty( $attr['borderColor'] ) ? $this->getColorPresetCssVar( $attr['borderColor'] ) : $attr['style']['border']['color'];
73 $style .= $prefix . '-border-color: ' . $border_color . ';';
74 }
75 // text color.
76 if ( ! empty( $attr['textColor'] ) || ! empty( $attr['style']['color']['text'] ) ) {
77 $text_color = ! empty( $attr['textColor'] ) ? $this->getColorPresetCssVar( $attr['textColor'] ) : $attr['style']['color']['text'];
78 $style .= $prefix . '-text-color: ' . $text_color . ';';
79 }
80 // background color.
81 if ( ! empty( $attr['backgroundColor'] ) || ! empty( $attr['style']['color']['background'] ) ) {
82 $text_color = ! empty( $attr['backgroundColor'] ) ? $this->getColorPresetCssVar( $attr['backgroundColor'] ) : $attr['style']['color']['background'];
83 $style .= $prefix . '-background-color: ' . $text_color . ';';
84 }
85 // text align.
86 if ( ! empty( $attr['align'] ) ) {
87 $style .= $prefix . '-align: ' . $attr['align'] . ';';
88 }
89
90 if ( ! empty( $attr['width'] ) ) {
91 $style .= $prefix . '-width: ' . $attr['width'] . '%;';
92 }
93
94 return $style;
95 }
96
97 /**
98 * Get the class name for the color.
99 *
100 * @param string $color_context_name The color context name (color, background-color).
101 * @param string $color_slug (foreground, background, etc.).
102 *
103 * @return string
104 */
105 public function getColorClassName( $color_context_name, $color_slug ) {
106 if ( ! $color_context_name || ! $color_slug ) {
107 return false;
108 }
109 $color_slug = _wp_to_kebab_case( $color_slug );
110 return "has-$color_slug-$color_context_name";
111 }
112
113 /**
114 * Get the classes.
115 *
116 * @param array $attributes The block attributes.
117 *
118 * @return string
119 */
120 public function getClasses( $attributes ) {
121 // get block classes and styles.
122 [ 'classes' => $classes ] = BlockStyleAttributes::getClassesAndStylesFromAttributes( $attributes );
123 // get text align class.
124 ['class' => $text_align_class] = BlockStyleAttributes::getTextAlignClassAndStyle( $attributes );
125 // get text align class.
126 [ 'class' => $align_class ] = BlockStyleAttributes::getAlignClassAndStyle( $attributes );
127 return implode( ' ', array_filter( [ $classes, $text_align_class, $align_class ] ) );
128 }
129
130 /**
131 * Get the styles
132 *
133 * @param array $attributes The block attributes.
134 *
135 * @return string
136 */
137 public function getStyles( $attributes ) {
138 [ 'styles' => $styles ] = BlockStyleAttributes::getClassesAndStylesFromAttributes( $attributes );
139 return $styles;
140 }
141
142 /**
143 * Get the spacing preset css variable.
144 *
145 * @param string $value The value.
146 *
147 * @return string|void
148 */
149 public function getSpacingPresetCssVar( $value ) {
150 if ( ! $value ) {
151 return;
152 }
153
154 preg_match( '/var:preset\|spacing\|(.+)/', $value, $matches );
155
156 if ( ! $matches ) {
157 return $value;
158 }
159
160 return "var(--wp--preset--spacing--$matches[1])";
161 }
162
163 /**
164 * Get the font size preset css variable.
165 *
166 * @param string $value The value.
167 *
168 * @return string|void
169 */
170 public function getFontSizePresetCssVar( $value ) {
171 if ( ! $value ) {
172 return;
173 }
174
175 return "var(--wp--preset--font-size--$value)";
176 }
177
178 /**
179 * Get the color preset css variable.
180 *
181 * @param string $value The value.
182 *
183 * @return string|void
184 */
185 public function getColorPresetCssVar( $value ) {
186 if ( ! $value ) {
187 return;
188 }
189
190 return "var(--wp--preset--color--$value)";
191 }
192
193
194 /**
195 * Register the block for dynamic output
196 *
197 * @param \Pimple\Container $container Service container.
198 *
199 * @return void
200 */
201 public function register() {
202 register_block_type_from_metadata(
203 $this->getDir(),
204 apply_filters(
205 'surecart/block/registration/args',
206 [ 'render_callback' => [ $this, 'preRender' ] ],
207 ),
208 );
209 }
210
211 /**
212 * Get the called class directory path
213 *
214 * @return string
215 */
216 public function getDir() {
217 if ( $this->directory ) {
218 return $this->directory;
219 }
220
221 $reflector = new \ReflectionClass( $this );
222 $fn = $reflector->getFileName();
223 return dirname( $fn );
224 }
225
226
227 /**
228 * Optionally run a function to modify attibuutes before rendering.
229 *
230 * @param array $attributes Block attributes.
231 * @param string $content Post content.
232 *
233 * @return function
234 */
235 public function preRender( $attributes, $content, $block ) {
236 $this->block = $block;
237
238 // run middlware.
239 $render = $this->middleware( $attributes, $content );
240
241 if ( is_wp_error( $render ) ) {
242 return $render->get_error_message();
243 }
244
245 if ( true !== $render ) {
246 return $render;
247 }
248
249 $attributes = $this->getAttributes( $attributes );
250
251 // render.
252 return $this->render( $attributes, $content, $block );
253 }
254
255 /**
256 * Run any block middleware before rendering.
257 *
258 * @param array $attributes Block attributes.
259 * @param string $content Post content.
260 * @return boolean|\WP_Error;
261 */
262 protected function middleware( $attributes, $content ) {
263 return true;
264 }
265
266 /**
267 * Allows filtering of attributes before rendering.
268 *
269 * @param array $attributes Block attributes.
270 * @return array $attributes
271 */
272 public function getAttributes( $attributes ) {
273 return $attributes;
274 }
275
276 /**
277 * Render the block
278 *
279 * @param array $attributes Block attributes.
280 * @param string $content Post content.
281 *
282 * @return string
283 */
284 public function render( $attributes, $content ) {
285 return '';
286 }
287 }
288