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