PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.5.0
4.7.2 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 / Assets / ScriptsService.php
surecart / app / src / WordPress / Assets Last commit date
AssetsService.php 3 years ago AssetsServiceProvider.php 3 years ago BlockAssetsLoadService.php 4 years ago PreloadService.php 3 years ago ScriptsService.php 3 years ago StylesService.php 3 years ago
ScriptsService.php
402 lines
1 <?php
2
3 namespace SureCart\WordPress\Assets;
4
5 use SureCart\Models\ManualPaymentMethod;
6 use SureCart\Models\Processor;
7
8 /**
9 * Handles the component theme.
10 */
11 class ScriptsService {
12 /**
13 * Holds the service container
14 *
15 * @var \Pimple\Container
16 */
17 protected $container;
18
19 /**
20 * Make sure we change the script loader tag for esm loading.
21 *
22 * @param \Pimple\Container $container Service Container.
23 */
24 public function __construct( $container ) {
25 $this->container = $container;
26
27 // add module to components tag.
28 add_filter( 'script_loader_tag', [ $this, 'componentsTag' ], 10, 3 );
29 }
30
31 /**
32 * Add module to the components tag
33 *
34 * @param string $tag Tag output.
35 * @param string $handle Script handle.
36 * @param string $source Script source.
37 *
38 * @return string
39 */
40 public function componentsTag( $tag, $handle, $source ) {
41 if ( 'surecart-components' !== $handle || ! $source ) {
42 return $tag;
43 }
44 // don't use javascript module if we are not using esm loader.
45 if ( ! \SureCart::assets()->usesEsmLoader() ) {
46 return $tag;
47 }
48
49 // make sure our translations do not get stripped.
50 $translations = wp_scripts()->print_translations( $handle, false );
51 if ( $translations ) {
52 $translations = sprintf( "<script%s id='%s-js-translations'>\n%s\n</script>\n", " type='text/javascript'", esc_attr( $handle ), $translations );
53 }
54
55 // phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedScript
56 return '<script src="' . esc_url_raw( $source ) . '" type="module"></script>' . $translations;
57 }
58
59 /**
60 * Get the claim url.
61 *
62 * @return string
63 */
64 public function getAccountClaimUrl() {
65 return ! wp_doing_ajax() && is_admin() && ! \SureCart::account()->claimed ? \SureCart::routeUrl( 'account.claim' ) : '';
66 }
67
68 /**
69 * Register the component scripts and translations.
70 *
71 * @return void
72 */
73 public function register() {
74
75 // should we use the esm loader directly?
76 if ( ! is_admin() && \SureCart::assets()->usesEsmLoader() ) {
77 wp_register_script(
78 'surecart-components',
79 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/components/surecart/surecart.esm.js',
80 [ 'wp-i18n' ],
81 filemtime( trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/components/surecart/surecart.esm.js' ) . '-' . \SureCart::plugin()->version(),
82 false
83 );
84 } else {
85 // instead, use a static loader that injects the script at runtime.
86 $static_assets = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/components/static-loader.asset.php';
87 wp_register_script(
88 'surecart-components',
89 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/components/static-loader.js',
90 array_merge( [ 'wp-i18n' ], $static_assets['dependencies'] ?? [] ),
91 $static_assets['version'] . '-' . \SureCart::plugin()->version(),
92 true
93 );
94 wp_localize_script(
95 'surecart-components',
96 'surecartComponents',
97 [
98 'url' => trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/components/surecart/surecart.esm.js?ver=' . filemtime( trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/components/surecart/surecart.esm.js' ),
99 ]
100 );
101 }
102
103 // wp_register_script(
104 // 'surecart-components',
105 // 'https://unpkg.com/@surecart/components@1.0.1-beta.1/dist/surecart/surecart.esm.js',
106 // [ 'wp-i18n' ],
107 // null,
108 // false
109 // );
110
111 wp_set_script_translations( 'surecart-components', 'surecart' );
112
113 wp_localize_script(
114 'surecart-components',
115 'scData',
116 apply_filters(
117 'surecart-components/scData',
118 [
119 'cdn_root' => SURECART_CDN_IMAGE_BASE,
120 'root_url' => esc_url_raw( get_rest_url() ),
121 'plugin_url' => \SureCart::core()->assets()->getUrl(),
122 'api_url' => \SureCart::requests()->getBaseUrl(),
123 'currency' => \SureCart::account()->currency,
124 'do_not_persist_cart' => is_admin(),
125 'theme' => get_option( 'surecart_theme', 'light' ),
126 'pages' => [
127 'dashboard' => \SureCart::pages()->url( 'dashboard' ),
128 'checkout' => \SureCart::pages()->url( 'checkout' ),
129 ],
130 'page_id' => get_the_ID(),
131 'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
132 'nonce_endpoint' => admin_url( 'admin-ajax.php?action=sc-rest-nonce' ),
133 'recaptcha_site_key' => \SureCart::settings()->recaptcha()->getSiteKey(),
134 'claim_url' => $this->getAccountClaimUrl(),
135 'admin_url' => trailingslashit( admin_url() ),
136 'user_permissions' => array (
137 'manage_sc_shop_settings' => current_user_can( 'manage_sc_shop_settings' )
138 )
139 ]
140 )
141 );
142
143 wp_localize_script( 'surecart-components', 'scIcons', [ 'path' => esc_url_raw( plugin_dir_url( SURECART_PLUGIN_FILE ) . 'dist/icon-assets' ) ] );
144
145 // core-data.
146 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/store/data.asset.php';
147 wp_register_script(
148 'sc-core-data',
149 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/store/data.js',
150 array_merge( [ 'surecart-components' ], $asset_file['dependencies'] ?? [] ),
151 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
152 true
153 );
154
155 // ui.
156 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/store/ui.asset.php';
157 wp_register_script(
158 'sc-ui-data',
159 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/store/ui.js',
160 array_merge( [ 'surecart-components' ], $asset_file['dependencies'] ?? [] ),
161 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
162 true
163 );
164
165 $this->registerBlocks();
166
167 wp_localize_script( 'surecart-cart-blocks', 'scIcons', [ 'path' => esc_url_raw( plugin_dir_url( SURECART_PLUGIN_FILE ) . 'dist/icon-assets' ) ] );
168 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/blocks/cart.asset.php';
169 $deps = $asset_file['dependencies'] ?? [];
170 // fix bug in deps array.
171 $deps[ array_search( 'wp-blockEditor', $deps ) ] = 'wp-block-editor';
172 wp_register_script(
173 'surecart-cart-blocks',
174 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/blocks/cart.js',
175 array_merge( [ 'surecart-components' ], $deps ),
176 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
177 true
178 );
179 wp_localize_script(
180 'surecart-cart-blocks',
181 'scBlockData',
182 [
183 'currency' => \SureCart::account()->currency,
184 'theme' => get_option( 'surecart_theme', 'light' ),
185 ]
186 );
187
188 wp_localize_script( 'surecart-cart-blocks', 'scIcons', [ 'path' => esc_url_raw( plugin_dir_url( SURECART_PLUGIN_FILE ) . 'dist/icon-assets' ) ] );
189
190 // cart.
191 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/blocks/cart.asset.php';
192 $deps = $asset_file['dependencies'] ?? [];
193 // fix bug in deps array.
194 $deps[ array_search( 'wp-blockEditor', $deps ) ] = 'wp-block-editor';
195 wp_register_script(
196 'surecart-cart-blocks',
197 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/blocks/cart.js',
198 array_merge( [ 'surecart-components' ], $deps ),
199 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
200 true
201 );
202
203 wp_localize_script( 'surecart-cart-blocks', 'scIcons', [ 'path' => esc_url_raw( plugin_dir_url( SURECART_PLUGIN_FILE ) . 'dist/icon-assets' ) ] );
204
205 // regsiter recaptcha.
206 wp_register_script( 'surecart-google-recaptcha', 'https://www.google.com/recaptcha/api.js?render=' . \SureCart::settings()->recaptcha()->getSiteKey(), [], \SureCart::plugin()->version(), true );
207
208 // register stripe if enabled.
209 if ( get_option( 'surecart_load_stripe_js', false ) ) {
210 wp_enqueue_script( 'surecart-stripe-script', 'https://js.stripe.com/v3', [], \SureCart::plugin()->version(), false );
211 }
212
213 // templates.
214 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/templates/admin.asset.php';
215 wp_register_script(
216 'surecart-templates-admin',
217 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/templates/admin.js',
218 $asset_file['dependencies'],
219 $asset_file['version'],
220 true
221 );
222 }
223
224 /**
225 * Enqueue block front scripts.
226 *
227 * @return void
228 */
229 public function enqueueFront() {
230 // make sure it is registered.
231 $this->register();
232 // enqueue it.
233 wp_enqueue_script( 'surecart-components' );
234
235 // fix shitty jetpack issues key hijacking issues.
236 add_filter(
237 'wp_head',
238 function() {
239 wp_dequeue_script( 'wpcom-notes-common' );
240 wp_dequeue_script( 'wpcom-notes-admin-bar' );
241 wp_dequeue_style( 'wpcom-notes-admin-bar' );
242 wp_dequeue_style( 'noticons' );
243 },
244 200
245 );
246 }
247
248 /**
249 * Enqueue editor scripts.
250 *
251 * @return void
252 */
253 public function enqueueEditor() {
254 $this->enqueueBlocks();
255 $this->enqueuePageTemplateEditor();
256 $this->enqueueCartBlocks();
257 $this->enqueueProductBlocks();
258 }
259
260 /**
261 * Enqueue page templates.
262 *
263 * @return void
264 */
265 public function enqueuePageTemplateEditor() {
266 wp_enqueue_script( 'surecart-templates-admin' );
267 }
268
269 /**
270 * We only want these available in FSE.
271 *
272 * @return void
273 */
274 public function enqueueProductBlocks() {
275 global $pagenow;
276 if ( 'site-editor.php' !== $pagenow ) {
277 return;
278 }
279
280 wp_enqueue_script( 'surecart-product-blocks' );
281 }
282
283 /**
284 * Enqueue Cart Blocks.
285 *
286 * @return void
287 */
288 public function enqueueCartBlocks() {
289 // not our post type.
290 if ( 'sc_cart' !== get_post_type() ) {
291 return;
292 }
293 wp_enqueue_script( 'surecart-cart-blocks' );
294 }
295
296 /**
297 * Register block scripts.
298 *
299 * @return void
300 */
301 public function registerBlocks() {
302 $enabled_payment_processors = array_values(
303 array_filter(
304 (array) Processor::get() ?? [],
305 function( $payment_method ) {
306 return $payment_method->enabled ?? false;
307 }
308 )
309 );
310 // blocks.
311 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/blocks/library.asset.php';
312 $deps = $asset_file['dependencies'] ?? [];
313 // fix bug in deps array.
314 $deps[ array_search( 'wp-blockEditor', $deps ) ] = 'wp-block-editor';
315 wp_register_script(
316 'surecart-blocks',
317 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/blocks/library.js',
318 $deps,
319 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
320 true
321 );
322
323 // only register
324 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/blocks/product.asset.php';
325 $deps = $asset_file['dependencies'] ?? [];
326 // fix bug in deps array.
327 $deps[ array_search( 'wp-blockEditor', $deps ) ] = 'wp-block-editor';
328 wp_register_script(
329 'surecart-product-blocks',
330 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/blocks/product.js',
331 $deps,
332 $asset_file['version'],
333 true
334 );
335
336 // localize.
337 wp_localize_script(
338 'surecart-blocks',
339 'scData',
340 apply_filters(
341 'surecart-components/scData',
342 [
343 'root_url' => esc_url_raw( get_rest_url() ),
344 'plugin_url' => \SureCart::core()->assets()->getUrl(),
345 'api_url' => \SureCart::requests()->getBaseUrl(),
346 'currency' => \SureCart::account()->currency,
347 'do_not_persist_cart' => is_admin(),
348 'theme' => get_option( 'surecart_theme', 'light' ),
349 'pages' => [
350 'dashboard' => \SureCart::pages()->url( 'dashboard' ),
351 'checkout' => \SureCart::pages()->url( 'checkout' ),
352 ],
353 'page_id' => get_the_ID(),
354 'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
355 'nonce_endpoint' => admin_url( 'admin-ajax.php?action=sc-rest-nonce' ),
356 'recaptcha_site_key' => \SureCart::settings()->recaptcha()->getSiteKey(),
357 'claim_url' => $this->getAccountClaimUrl(),
358 'admin_url' => trailingslashit( admin_url() ),
359 'user_permissions' => array (
360 'manage_sc_shop_settings' => current_user_can( 'manage_sc_shop_settings' )
361 )
362 ]
363 )
364 );
365
366 wp_localize_script(
367 'surecart-blocks',
368 'scBlockData',
369 [
370 'root_url' => esc_url_raw( get_rest_url() ),
371 'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
372 'nonce_endpoint' => admin_url( 'admin-ajax.php?action=sc-rest-nonce' ),
373 'processors' => $enabled_payment_processors,
374 'manualPaymentMethods' => (array) ManualPaymentMethod::get() ?? [],
375 'plugin_url' => \SureCart::core()->assets()->getUrl(),
376 'currency' => \SureCart::account()->currency,
377 'theme' => get_option( 'surecart_theme', 'light' ),
378 'entitlements' => \SureCart::account()->entitlements,
379 'upgrade_url' => \SureCart::config()->links->purchase,
380 'beta' => [
381 'stripe_payment_element' => (bool) get_option( 'sc_stripe_payment_element', false ),
382 ],
383 'pages' => [
384 'dashboard' => \SureCart::pages()->url( 'dashboard' ),
385 'checkout' => \SureCart::pages()->url( 'checkout' ),
386 ],
387 ]
388 );
389
390 wp_localize_script( 'surecart-blocks', 'scIcons', [ 'path' => esc_url_raw( plugin_dir_url( SURECART_PLUGIN_FILE ) . 'dist/icon-assets' ) ] );
391 }
392
393 /**
394 * Enqueue blocks scripts.
395 *
396 * @return void
397 */
398 public function enqueueBlocks() {
399 wp_enqueue_script( 'surecart-blocks' );
400 }
401 }
402