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