PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.13.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.13.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 2 years ago ShortcodesService.php 2 years ago ShortcodesServiceProvider.php 2 years ago
ShortcodesServiceProvider.php
373 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']->registerBlockShortcode(
156 'sc_product_description',
157 \SureCartBlocks\Blocks\Product\Description\Block::class,
158 );
159 $container['surecart.shortcodes']->registerBlockShortcode(
160 'sc_product_title',
161 \SureCartBlocks\Blocks\Product\Title\Block::class,
162 );
163 $container['surecart.shortcodes']->registerBlockShortcode(
164 'sc_product_price',
165 \SureCartBlocks\Blocks\Product\Price\Block::class,
166 );
167 $container['surecart.shortcodes']->registerBlockShortcode(
168 'sc_product_price_choices',
169 \SureCartBlocks\Blocks\Product\PriceChoices\Block::class,
170 [
171 'label' => __( 'Pricing', 'surecart' ),
172 'columns' => 2,
173 'show_price' => true,
174 ]
175 );
176 $container['surecart.shortcodes']->registerBlockShortcode(
177 'sc_product_media',
178 \SureCartBlocks\Blocks\Product\Media\Block::class,
179 [
180 'auto_height' => true,
181 ]
182 );
183 $container['surecart.shortcodes']->registerBlockShortcode(
184 'sc_product_quantity',
185 \SureCartBlocks\Blocks\Product\Quantity\Block::class,
186 );
187 $container['surecart.shortcodes']->registerBlockShortcode(
188 'sc_product_cart_button',
189 \SureCartBlocks\Blocks\Product\BuyButton\Block::class,
190 [
191 'add_to_cart' => true,
192 'text' => __( 'Add To Cart', 'surecart' ),
193 'width' => 100,
194 ]
195 );
196 $container['surecart.shortcodes']->registerBlockShortcodeByName(
197 'sc_product_variant_choices',
198 'surecart/product-variant-choices',
199 []
200 );
201 }
202
203 /**
204 * Dashboard tab shortcode.
205 *
206 * @param array $attributes Shortcode attributes.
207 * @param string $content Shortcode content.
208 * @return string Shortcode output.
209 */
210 public function dashboardShortcode( $attributes, $content ) {
211 $attributes = shortcode_atts(
212 [],
213 $attributes,
214 'sc_customer_dashboard'
215 );
216
217 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>';
218 }
219
220 /**
221 * Form shorcode
222 *
223 * @param array $atts Shortcode attributes.
224 * @param string $content Shortcode content.
225 * @param string $name Shortcode tag.
226 *
227 * @return string Shortcode output.
228 */
229 public function formShortcode( $atts, $content, $name ) {
230 $atts = shortcode_atts(
231 [
232 'id' => null,
233 ],
234 $atts,
235 'sc_form'
236 );
237
238 if ( ! $atts['id'] ) {
239 return;
240 }
241
242 $form = \SureCart::forms()->get( $atts['id'] );
243
244 global $load_sc_js;
245 $load_sc_js = true;
246
247 global $sc_form_id;
248 $sc_form_id = $atts['id'];
249
250 // check to make sure we have a form post.
251 if ( ! is_a( $form, 'WP_Post' ) ) {
252 return __( 'This form is not available or has been deleted.', 'surecart' );
253 }
254
255 return apply_filters( 'surecart/shortcode/render', do_blocks( $form->post_content ), $atts, $name, $form );
256 }
257
258 /**
259 * Add To Cart Shortcode
260 *
261 * @param array $atts An array of attributes.
262 * @param string $content Content.
263 *
264 * @return string
265 */
266 public function addToCartShortcode( $atts, $content ) {
267 $atts = shortcode_atts(
268 [
269 'price_id' => null,
270 'variant_id' => null,
271 'type' => 'primary',
272 'size' => 'medium',
273 'button_text' => $content,
274 ],
275 $atts,
276 'sc_add_to_cart_button'
277 );
278
279 return( new AddToCartBlock() )->render( $atts );
280 }
281
282 /**
283 * Buy button shortcode.
284 *
285 * @param array $atts An array of attributes.
286 * @param string $content Content.
287 *
288 * @return string
289 */
290 public function buyButtonShortcode( $atts, $content ) {
291 // Remove inner shortcode from buy button label.
292 $label = strip_shortcodes( $content );
293 $atts = shortcode_atts(
294 [
295 'type' => 'primary',
296 'size' => 'medium',
297 'label' => $label,
298 ],
299 $atts,
300 'sc_buy_button'
301 );
302
303 $atts['line_items'] = (array) $this->getShortcodesAtts(
304 'sc_line_item',
305 $content,
306 [
307 'price_id' => null,
308 'quantity' => 1,
309 ]
310 );
311
312 foreach ( $atts['line_items'] as $key => $line_item ) {
313 $atts['line_items'][ $key ]['id'] = $line_item['price_id'];
314 }
315
316 $block = new BuyButtonBlock();
317
318 return $block->render( $atts );
319 }
320
321 /**
322 * Get specific shortcode atts from content
323 *
324 * @param string $name Name of shortcode.
325 * @param string $content Page content.
326 * @param array $defaults Defaults for each.
327 * @return array
328 */
329 public function getShortcodesAtts( $name, $content, $defaults = [] ) {
330 $items = [];
331
332 // if shortcode exists.
333 if (
334 preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches )
335 && array_key_exists( 2, $matches )
336 && in_array( $name, $matches[2] )
337 ) {
338 foreach ( (array) $matches[0] as $key => $value ) {
339 if ( strpos( $value, $name ) !== false ) {
340 $items[] = wp_parse_args(
341 shortcode_parse_atts( $matches[3][ $key ] ),
342 $defaults
343 );
344 }
345 }
346 }
347
348 return $items;
349 }
350
351 /**
352 * Convert to block.
353 *
354 * @param string $name The name.
355 * @param stdClass $block The block.
356 * @param array $defaults The defaults.
357 * @param array $atts The atts.
358 * @param string $content The content.
359 *
360 * @return string
361 */
362 protected function convertToBlock( $name, $block, $defaults = [], $atts = [], $content = '' ) {
363 return( new $block() )->render(
364 shortcode_atts(
365 $defaults,
366 $atts,
367 $name
368 ),
369 $content
370 );
371 }
372 }
373