PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.19.4
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.19.4
4.7.1 4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 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 / app / src / WordPress / Shortcodes / ShortcodesServiceProvider.php
surecart / app / src / WordPress / Shortcodes Last commit date
ShortcodesBlockConversionService.php 3 years ago ShortcodesService.php 2 years ago ShortcodesServiceProvider.php 2 years ago
ShortcodesServiceProvider.php
391 lines
1 <?php
2
3 namespace SureCart\WordPress\Shortcodes;
4
5 use SureCartBlocks\Blocks\AddToCartButton\Block as AddtoCartBlock;
6 use SureCartBlocks\Blocks\BuyButton\Block as BuyButtonBlock;
7 use SureCartCore\ServiceProviders\ServiceProviderInterface;
8
9 /**
10 * Register shortcodes.
11 */
12 class ShortcodesServiceProvider implements ServiceProviderInterface {
13 /**
14 * Register all dependencies in the IoC container.
15 *
16 * @param \Pimple\Container $container Service container.
17 * @return void
18 */
19 public function register( $container ) {
20 $container['surecart.shortcodes'] = function () {
21 return new ShortcodesService();
22 };
23 }
24
25 /**
26 * Bootstrap the service.
27 *
28 * @param \Pimple\Container $container Service container.
29 * @return void
30 */
31 public function bootstrap( $container ) {
32 add_shortcode( 'sc_line_item', '__return_false' );
33 add_shortcode( 'sc_form', [ $this, 'formShortcode' ] );
34 add_shortcode( 'sc_add_to_cart_button', [ $this, 'addToCartShortcode' ], 10, 2 );
35 add_shortcode( 'sc_buy_button', [ $this, 'buyButtonShortcode' ], 10, 2 );
36
37 // buttons.
38 $container['surecart.shortcodes']->registerBlockShortcode(
39 'sc_customer_dashboard_button',
40 \SureCartBlocks\Blocks\CustomerDashboardButton\Block::class,
41 [
42 'show_icon' => true,
43 'type' => 'primary',
44 'size' => 'medium',
45 ]
46 );
47
48 // dashboard.
49 $container['surecart.shortcodes']->registerBlockShortcode(
50 'sc_customer_orders',
51 \SureCartBlocks\Blocks\Dashboard\CustomerOrders\Block::class,
52 [ 'title' => '' ]
53 );
54 $container['surecart.shortcodes']->registerBlockShortcode(
55 'sc_customer_billing_details',
56 \SureCartBlocks\Blocks\Dashboard\CustomerBillingDetails\Block::class,
57 [ 'title' => '' ]
58 );
59 $container['surecart.shortcodes']->registerBlockShortcode(
60 'sc_customer_charges',
61 \SureCartBlocks\Blocks\Dashboard\CustomerCharges\Block::class,
62 [ 'title' => '' ]
63 );
64 $container['surecart.shortcodes']->registerBlockShortcode(
65 'sc_customer_payment_methods',
66 \SureCartBlocks\Blocks\Dashboard\CustomerPaymentMethods\Block::class,
67 [ 'title' => '' ]
68 );
69 $container['surecart.shortcodes']->registerBlockShortcode(
70 'sc_customer_subscriptions',
71 \SureCartBlocks\Blocks\Dashboard\CustomerSubscriptions\Block::class,
72 [ 'title' => '' ]
73 );
74 $container['surecart.shortcodes']->registerBlockShortcode(
75 'sc_customer_downloads',
76 \SureCartBlocks\Blocks\Dashboard\CustomerDownloads\Block::class,
77 [ 'title' => '' ]
78 );
79 $container['surecart.shortcodes']->registerBlockShortcode(
80 'sc_customer_wordpress_account',
81 \SureCartBlocks\Blocks\Dashboard\WordPressAccount\Block::class,
82 [ 'title' => '' ]
83 );
84 $container['surecart.shortcodes']->registerBlockShortcode(
85 'sc_customer_dashboard_page',
86 \SureCartBlocks\Blocks\Dashboard\CustomerDashboardArea\Block::class,
87 [ 'name' => '' ]
88 );
89 $container['surecart.shortcodes']->registerBlockShortcode(
90 'sc_customer_dashboard',
91 \SureCartBlocks\Blocks\Dashboard\CustomerDashboardArea\Block::class,
92 [ 'name' => '' ]
93 );
94 $container['surecart.shortcodes']->registerBlockShortcode(
95 'sc_customer_dashboard_tab',
96 \SureCartBlocks\Blocks\Dashboard\DashboardTab\Block::class,
97 [
98 'icon' => 'shopping-bag',
99 'panel' => '',
100 'title' => 'test',
101 ]
102 );
103
104 $container['surecart.shortcodes']->registerBlockShortcode(
105 'sc_cart_menu_icon',
106 \SureCartBlocks\Blocks\CartMenuButton\Block::class,
107 [
108 'cart_icon' => 'shopping-bag',
109 'cart_menu_always_shown' => true,
110 ]
111 );
112
113 // confirmation.
114 $container['surecart.shortcodes']->registerBlockShortcode(
115 'sc_order_confirmation',
116 \SureCartBlocks\Blocks\Confirmation\Block::class,
117 );
118 $container['surecart.shortcodes']->registerBlockShortcode(
119 'sc_order_confirmation_line_items',
120 \SureCartBlocks\Blocks\OrderConfirmationLineItems\Block::class,
121 );
122
123 // product page.
124 $container['surecart.shortcodes']->registerBlockShortcodeByName(
125 'sc_product_list',
126 'surecart/product-item-list',
127 [
128 'ids' => [],
129 'columns' => 4,
130 'sort_enabled' => true,
131 'search_enabled' => true,
132 'pagination_enabled' => true,
133 'ajax_pagination' => true,
134 'collection_enabled' => true,
135 'type' => 'all',
136 'limit' => 10,
137 ]
138 );
139
140 // Product collection page.
141 $container['surecart.shortcodes']->registerBlockShortcodeByName(
142 'sc_product_collection',
143 'surecart/product-collection',
144 [
145 'collection_id' => '', // mandatory.
146 'columns' => 4,
147 'sort_enabled' => true,
148 'search_enabled' => true,
149 'pagination_enabled' => true,
150 'ajax_pagination' => true,
151 'limit' => 10,
152 ]
153 );
154
155 $container['surecart.shortcodes']->registerBlockShortcodeByName(
156 'sc_product_description',
157 'surecart/product-description',
158 [
159 'id' => null,
160 ]
161 );
162 $container['surecart.shortcodes']->registerBlockShortcodeByName(
163 'sc_product_title',
164 'surecart/product-title',
165 [
166 'id' => null,
167 'level' => 1,
168 ]
169 );
170 $container['surecart.shortcodes']->registerBlockShortcodeByName(
171 'sc_product_price',
172 'surecart/product-price',
173 [
174 'id' => null,
175 ]
176 );
177 $container['surecart.shortcodes']->registerBlockShortcodeByName(
178 'sc_product_price_choices',
179 'surecart/product-price-choices',
180 [
181 'label' => __( 'Pricing', 'surecart' ),
182 'columns' => 2,
183 'show_price' => true,
184 'id' => null,
185 ]
186 );
187 $container['surecart.shortcodes']->registerBlockShortcodeByName(
188 'sc_product_media',
189 'surecart/product-media',
190 [
191 'auto_height' => true,
192 'id' => null,
193 ]
194 );
195 $container['surecart.shortcodes']->registerBlockShortcodeByName(
196 'sc_product_quantity',
197 'surecart/product-quantity',
198 [
199 'id' => null,
200 ]
201 );
202 $container['surecart.shortcodes']->registerBlockShortcodeByName(
203 'sc_product_cart_button',
204 'surecart/product-buy-button',
205 [
206 'add_to_cart' => true,
207 'text' => __( 'Add To Cart', 'surecart' ),
208 'width' => 100,
209 'id' => null,
210 ]
211 );
212 $container['surecart.shortcodes']->registerBlockShortcodeByName(
213 'sc_product_variant_choices',
214 'surecart/product-variant-choices',
215 [
216 'id' => null,
217 ]
218 );
219 }
220
221 /**
222 * Dashboard tab shortcode.
223 *
224 * @param array $attributes Shortcode attributes.
225 * @param string $content Shortcode content.
226 * @return string Shortcode output.
227 */
228 public function dashboardShortcode( $attributes, $content ) {
229 $attributes = shortcode_atts(
230 [],
231 $attributes,
232 'sc_customer_dashboard'
233 );
234
235 return '<sc-tab-group style="font-size:16px;font-family:var(--sc-font-sans)" class="wp-block-surecart-customer-dashboard alignwide">' . ( new \SureCartBlocks\Blocks\Dashboard\CustomerDashboard\Block() )->render( $attributes, $content ) . '</sc-tab-group>';
236 }
237
238 /**
239 * Form shorcode
240 *
241 * @param array $atts Shortcode attributes.
242 * @param string $content Shortcode content.
243 * @param string $name Shortcode tag.
244 *
245 * @return string Shortcode output.
246 */
247 public function formShortcode( $atts, $content, $name ) {
248 $atts = shortcode_atts(
249 [
250 'id' => null,
251 ],
252 $atts,
253 'sc_form'
254 );
255
256 if ( ! $atts['id'] ) {
257 return;
258 }
259
260 $form = \SureCart::forms()->get( $atts['id'] );
261
262 global $load_sc_js;
263 $load_sc_js = true;
264
265 global $sc_form_id;
266 $sc_form_id = $atts['id'];
267
268 // check to make sure we have a form post.
269 if ( ! is_a( $form, 'WP_Post' ) ) {
270 return __( 'This form is not available or has been deleted.', 'surecart' );
271 }
272
273 return apply_filters( 'surecart/shortcode/render', do_blocks( $form->post_content ), $atts, $name, $form );
274 }
275
276 /**
277 * Add To Cart Shortcode
278 *
279 * @param array $atts An array of attributes.
280 * @param string $content Content.
281 *
282 * @return string
283 */
284 public function addToCartShortcode( $atts, $content ) {
285 $atts = shortcode_atts(
286 [
287 'price_id' => null,
288 'variant_id' => null,
289 'type' => 'primary',
290 'size' => 'medium',
291 'button_text' => $content,
292 ],
293 $atts,
294 'sc_add_to_cart_button'
295 );
296
297 return( new AddToCartBlock() )->render( $atts );
298 }
299
300 /**
301 * Buy button shortcode.
302 *
303 * @param array $atts An array of attributes.
304 * @param string $content Content.
305 *
306 * @return string
307 */
308 public function buyButtonShortcode( $atts, $content ) {
309 // Remove inner shortcode from buy button label.
310 $label = strip_shortcodes( $content );
311 $atts = shortcode_atts(
312 [
313 'type' => 'primary',
314 'size' => 'medium',
315 'label' => $label,
316 ],
317 $atts,
318 'sc_buy_button'
319 );
320
321 $atts['line_items'] = (array) $this->getShortcodesAtts(
322 'sc_line_item',
323 $content,
324 [
325 'price_id' => null,
326 'quantity' => 1,
327 ]
328 );
329
330 foreach ( $atts['line_items'] as $key => $line_item ) {
331 $atts['line_items'][ $key ]['id'] = $line_item['price_id'];
332 }
333
334 $block = new BuyButtonBlock();
335
336 return $block->render( $atts );
337 }
338
339 /**
340 * Get specific shortcode atts from content
341 *
342 * @param string $name Name of shortcode.
343 * @param string $content Page content.
344 * @param array $defaults Defaults for each.
345 * @return array
346 */
347 public function getShortcodesAtts( $name, $content, $defaults = [] ) {
348 $items = [];
349
350 // if shortcode exists.
351 if (
352 preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches )
353 && array_key_exists( 2, $matches )
354 && in_array( $name, $matches[2] )
355 ) {
356 foreach ( (array) $matches[0] as $key => $value ) {
357 if ( strpos( $value, $name ) !== false ) {
358 $items[] = wp_parse_args(
359 shortcode_parse_atts( $matches[3][ $key ] ),
360 $defaults
361 );
362 }
363 }
364 }
365
366 return $items;
367 }
368
369 /**
370 * Convert to block.
371 *
372 * @param string $name The name.
373 * @param stdClass $block The block.
374 * @param array $defaults The defaults.
375 * @param array $atts The atts.
376 * @param string $content The content.
377 *
378 * @return string
379 */
380 protected function convertToBlock( $name, $block, $defaults = [], $atts = [], $content = '' ) {
381 return( new $block() )->render(
382 shortcode_atts(
383 $defaults,
384 $atts,
385 $name
386 ),
387 $content
388 );
389 }
390 }
391