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 / BaseBlock.php
surecart / packages / blocks / Blocks Last commit date
AddToCartButton 1 year ago Address 5 months ago BumpLineItem 3 months ago Button 5 months ago BuyButton 1 year ago Card 5 months ago Cart 5 months ago CartBumpLineItem 5 months ago CartCoupon 5 months ago CartHeader 5 months ago CartItems 5 months ago CartMenuButton 5 months ago CartMessage 5 months ago CartSubmit 5 months ago CartSubtotal 5 months ago Checkbox 3 months ago CheckoutErrors 5 months ago CheckoutForm 3 months ago CollapsibleRow 1 week ago CollectionPage 5 months ago Column 5 months ago Columns 1 week ago ConditionalForm 5 months ago Confirmation 5 months ago Coupon 3 months ago CustomerDashboardButton 5 months ago Dashboard 3 months ago Divider 5 months ago Donation 5 months ago DonationAmount 5 months ago Email 3 months ago ExpressPayment 3 months ago FirstName 3 months ago Form 3 days ago Heading 5 months ago Input 5 months ago InvoiceDetails 5 months ago InvoiceDueDate 5 months ago InvoiceMemo 5 months ago InvoiceNumber 5 months ago InvoiceReceiptDownload 5 months ago LastName 3 months ago LineItemShipping 5 months ago LineItems 3 days ago LogoutButton 5 months ago Name 3 months ago NameYourPrice 3 months ago OrderBumps 3 weeks ago OrderConfirmationCustomer 5 months ago OrderConfirmationLineItems 5 months ago Password 5 months ago Payment 3 months ago Phone 1 week ago PriceChoice 5 months ago PriceSelector 5 months ago Product 1 week ago ProductCollection 1 week ago ProductCollectionDescription 1 week ago ProductCollectionImage 1 week ago ProductCollectionTitle 1 week ago ProductDonation 5 months ago ProductDonationAmount 5 months ago ProductDonationAmounts 5 months ago ProductDonationCustomAmount 5 months ago ProductDonationPrices 5 months ago ProductDonationRecurringPrices 5 months ago ProductItem 1 week ago ProductItemImage 1 week ago ProductItemList 1 week ago ProductItemPrice 1 week ago ProductItemTitle 1 week ago Radio 5 months ago RadioGroup 5 months ago SessionDetail 5 months ago ShippingChoices 5 months ago StoreLogo 3 months ago Submit 2 months ago Subtotal 3 months ago Switch 5 months ago TaxIdInput 5 months ago TaxLineItem 3 months ago Textarea 3 months ago Total 3 months ago Totals 3 months ago TrialLineItem 3 months ago Upsell 1 week ago VariantPriceSelector 5 months ago BaseBlock.php 3 years ago BlockService.php 4 years ago BlockServiceProvider.php 6 months ago CartBlock.php 2 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