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 / app / src / WordPress / Shortcodes / ShortcodesServiceProvider.php
surecart / app / src / WordPress / Shortcodes Last commit date
ShortcodesBlockConversionService.php 2 years ago ShortcodesService.php 3 years ago ShortcodesServiceProvider.php 2 years ago
ShortcodesServiceProvider.php
339 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' => false,
131 'search_enabled' => false,
132 'pagination_enabled' => true,
133 'ajax_pagination' => true,
134 'type' => 'all',
135 'limit' => 10,
136 ]
137 );
138 $container['surecart.shortcodes']->registerBlockShortcode(
139 'sc_product_description',
140 \SureCartBlocks\Blocks\Product\Description\Block::class,
141 );
142 $container['surecart.shortcodes']->registerBlockShortcode(
143 'sc_product_title',
144 \SureCartBlocks\Blocks\Product\Title\Block::class,
145 );
146 $container['surecart.shortcodes']->registerBlockShortcode(
147 'sc_product_price',
148 \SureCartBlocks\Blocks\Product\Price\Block::class,
149 );
150 $container['surecart.shortcodes']->registerBlockShortcode(
151 'sc_product_price_choices',
152 \SureCartBlocks\Blocks\Product\PriceChoices\Block::class,
153 [
154 'label' => __( 'Pricing', 'surecart' ),
155 'columns' => 2,
156 'show_price' => true,
157 ]
158 );
159 $container['surecart.shortcodes']->registerBlockShortcode(
160 'sc_product_media',
161 \SureCartBlocks\Blocks\Product\Media\Block::class,
162 [
163 'auto_height' => true,
164 ]
165 );
166 $container['surecart.shortcodes']->registerBlockShortcode(
167 'sc_product_quantity',
168 \SureCartBlocks\Blocks\Product\Quantity\Block::class,
169 );
170 $container['surecart.shortcodes']->registerBlockShortcode(
171 'sc_product_cart_button',
172 \SureCartBlocks\Blocks\Product\BuyButton\Block::class,
173 [
174 'add_to_cart' => true,
175 'text' => __( 'Add To Cart', 'surecart' ),
176 'width' => 100,
177 ]
178 );
179 }
180
181 /**
182 * Dashboard tab shortcode.
183 *
184 * @param array $attributes Shortcode attributes.
185 * @param string $content Shortcode content.
186 * @return string Shortcode output.
187 */
188 public function dashboardShortcode( $attributes, $content ) {
189 $attributes = shortcode_atts(
190 [],
191 $attributes,
192 'sc_customer_dashboard'
193 );
194
195 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>';
196 }
197
198 /**
199 * Form shorcode
200 *
201 * @param array $atts Shortcode attributes.
202 * @param string $content Shortcode content.
203 * @param string $name Shortcode tag.
204 *
205 * @return string Shortcode output.
206 */
207 public function formShortcode( $atts, $content, $name ) {
208 $atts = shortcode_atts(
209 [
210 'id' => null,
211 ],
212 $atts,
213 'sc_form'
214 );
215
216 if ( ! $atts['id'] ) {
217 return;
218 }
219
220 $form = \SureCart::forms()->get( $atts['id'] );
221
222 global $load_sc_js;
223 $load_sc_js = true;
224
225 global $sc_form_id;
226 $sc_form_id = $atts['id'];
227
228 // check to make sure we have a form post.
229 if ( ! is_a( $form, 'WP_Post' ) ) {
230 return __( 'This form is not available or has been deleted.', 'surecart' );
231 }
232
233 return apply_filters( 'surecart/shortcode/render', do_blocks( $form->post_content ), $atts, $name, $form );
234 }
235
236 /**
237 * Add To Cart Shortcode
238 *
239 * @param array $atts An array of attributes.
240 * @param string $content Content.
241 *
242 * @return string
243 */
244 public function addToCartShortcode( $atts, $content ) {
245 $atts = shortcode_atts(
246 [
247 'price_id' => null,
248 'type' => 'primary',
249 'size' => 'medium',
250 'button_text' => $content,
251 ],
252 $atts,
253 'sc_add_to_cart_button'
254 );
255
256 return( new AddToCartBlock() )->render( $atts );
257 }
258
259 /**
260 * Buy button shortcode.
261 *
262 * @param array $atts An array of attributes.
263 * @param string $content Content.
264 *
265 * @return string
266 */
267 public function buyButtonShortcode( $atts, $content ) {
268 // Remove inner shortcode from buy button label
269 $label = strip_shortcodes( $content );
270 $atts = shortcode_atts(
271 [
272 'type' => 'primary',
273 'size' => 'medium',
274 'label' => $label,
275 ],
276 $atts,
277 'sc_buy_button'
278 );
279
280 $atts['line_items'] = (array) $this->getShortcodesAtts(
281 'sc_line_item',
282 $content,
283 [
284 'price_id' => null,
285 'quantity' => 1,
286 ]
287 );
288
289 foreach ( $atts['line_items'] as $key => $line_item ) {
290 $atts['line_items'][ $key ]['id'] = $line_item['price_id'];
291 }
292
293 $block = new BuyButtonBlock();
294
295 return $block->render( $atts );
296 }
297
298 /**
299 * Get specific shortcode atts from content
300 *
301 * @param string $name Name of shortcode
302 * @param string $content Page content
303 * @param array $defaults Defaults for each
304 * @return array
305 */
306 public function getShortcodesAtts( $name, $content, $defaults = [] ) {
307 $items = [];
308
309 // if shortcode exists.
310 if (
311 preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches )
312 && array_key_exists( 2, $matches )
313 && in_array( $name, $matches[2] )
314 ) {
315 foreach ( (array) $matches[0] as $key => $value ) {
316 if ( strpos( $value, $name ) !== false ) {
317 $items[] = wp_parse_args(
318 shortcode_parse_atts( $matches[3][ $key ] ),
319 $defaults
320 );
321 }
322 }
323 }
324
325 return $items;
326 }
327
328 protected function convertToBlock( $name, $block, $defaults = [], $atts = [], $content = '' ) {
329 return( new $block() )->render(
330 shortcode_atts(
331 $defaults,
332 $atts,
333 $name
334 ),
335 $content
336 );
337 }
338 }
339