PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
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 2 years ago AssetsServiceProvider.php 3 years ago BlockAssetsLoadService.php 1 year ago PreloadService.php 1 year ago ScriptsService.php 1 year ago StylesService.php 1 year ago
ScriptsService.php
406 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 * Register the component scripts and translations.
71 *
72 * @return void
73 */
74 public function register() {
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', 'regenerator-runtime' ],
81 filemtime( trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/components/surecart/surecart.esm.js' ) . '-' . \SureCart::plugin()->version(),
82 true
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', 'regenerator-runtime' ], $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_set_script_translations( 'surecart-components', 'surecart' );
104
105 wp_localize_script(
106 'surecart-components',
107 'scData',
108 apply_filters(
109 'surecart-components/scData', // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores,WordPress.NamingConventions.ValidHookName.NotLowercase
110 [
111 'cdn_root' => SURECART_CDN_IMAGE_BASE,
112 'root_url' => esc_url_raw( get_rest_url() ),
113 'plugin_url' => \SureCart::core()->assets()->getUrl(),
114 'home_url' => esc_url_raw( home_url() ),
115 'api_url' => \SureCart::requests()->getBaseUrl(),
116 'currency' => \SureCart::account()->currency,
117 'currency_symbol' => html_entity_decode( Currency::getCurrencySymbol( \SureCart::account()->currency ) ),
118 'theme' => get_option( 'surecart_theme', 'light' ),
119 'pages' => [
120 'dashboard' => \SureCart::pages()->url( 'dashboard' ),
121 'checkout' => \SureCart::pages()->url( 'checkout' ),
122 ],
123 'page_id' => get_the_ID(),
124 'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
125 'nonce_endpoint' => admin_url( 'admin-ajax.php?action=sc-rest-nonce' ),
126 'recaptcha_site_key' => \SureCart::settings()->recaptcha()->getSiteKey(),
127 'claim_url' => $this->getAccountClaimUrl(),
128 'admin_url' => trailingslashit( admin_url() ),
129 'getting_started_url' => untrailingslashit( admin_url( 'admin.php?page=sc-getting-started' ) ),
130 'user_permissions' => array(
131 'manage_sc_shop_settings' => current_user_can( 'manage_sc_shop_settings' ),
132 ),
133 'is_account_connected' => \SureCart::account()->isConnected(),
134 ]
135 )
136 );
137
138 wp_localize_script( 'surecart-components', 'scIcons', [ 'path' => esc_url_raw( plugin_dir_url( SURECART_PLUGIN_FILE ) . 'dist/icon-assets' ) ] );
139
140 // core-data.
141 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/store/data.asset.php';
142 $asset_file['dependencies'][] = 'regenerator-runtime';
143 wp_register_script(
144 'sc-core-data',
145 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/store/data.js',
146 array_merge( [ 'surecart-components' ], $asset_file['dependencies'] ?? [] ),
147 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
148 true
149 );
150
151 // ui.
152 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/store/ui.asset.php';
153 $asset_file['dependencies'][] = 'regenerator-runtime';
154 wp_register_script(
155 'sc-ui-data',
156 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/store/ui.js',
157 array_merge( [ 'surecart-components' ], $asset_file['dependencies'] ?? [] ),
158 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
159 true
160 );
161
162 $this->registerBlocks();
163
164 // regsiter recaptcha.
165 wp_register_script( 'surecart-google-recaptcha', 'https://www.google.com/recaptcha/api.js?render=' . \SureCart::settings()->recaptcha()->getSiteKey(), [], \SureCart::plugin()->version(), true );
166
167 // register stripe if enabled.
168 if ( get_option( 'surecart_load_stripe_js', false ) ) {
169 wp_enqueue_script( 'surecart-stripe-script', 'https://js.stripe.com/v3', [], \SureCart::plugin()->version(), false );
170 }
171
172 // templates.
173 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/templates/admin.asset.php';
174 $asset_file['dependencies'][] = 'regenerator-runtime';
175 wp_register_script(
176 'surecart-templates-admin',
177 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/templates/admin.js',
178 $asset_file['dependencies'],
179 $asset_file['version'],
180 true
181 );
182
183 // admin notices.
184 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/styles/webhook-notice.asset.php';
185 wp_register_style(
186 'surecart-webhook-admin-notices',
187 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/styles/webhook-notice.css',
188 $asset_file['dependencies'],
189 $asset_file['version']
190 );
191
192 wp_register_script(
193 'surecart-affiliate-tracking',
194 esc_url_raw( untrailingslashit( SURECART_JS_URL ) . '/v1/affiliates' ),
195 [],
196 '1.1',
197 [
198 'strategy' => 'defer',
199 ]
200 );
201
202 wp_add_inline_script(
203 'surecart-affiliate-tracking',
204 'window.SureCartAffiliatesConfig = {
205 "publicToken": "' . \SureCart::account()->public_token . '",
206 "baseURL":"' . esc_url_raw( untrailingslashit( SURECART_API_URL ) ) . '/v1"
207 };',
208 'before'
209 );
210 }
211
212 /**
213 * Enqueue block front scripts.
214 *
215 * @return void
216 */
217 public function enqueueFront() {
218 // make sure it is registered.
219 $this->register();
220 // enqueue it.
221 wp_enqueue_script( 'surecart-components' );
222
223 // fix shitty jetpack issues key hijacking issues.
224 add_filter(
225 'wp_head',
226 function () {
227 wp_dequeue_script( 'wpcom-notes-common' );
228 wp_dequeue_script( 'wpcom-notes-admin-bar' );
229 wp_dequeue_style( 'wpcom-notes-admin-bar' );
230 wp_dequeue_style( 'noticons' );
231 },
232 200
233 );
234 }
235
236 /**
237 * Enqueue editor scripts.
238 *
239 * @return void
240 */
241 public function enqueueEditor() {
242 $this->enqueueBlocks();
243 $this->enqueuePageTemplateEditor();
244 $this->enqueueProductBlocks();
245 $this->enqueueProductCollectionBlocks();
246 }
247
248 /**
249 * Enqueue page templates.
250 *
251 * @return void
252 */
253 public function enqueuePageTemplateEditor() {
254 wp_enqueue_script( 'surecart-templates-admin' );
255 }
256
257 /**
258 * We only want these available in FSE.
259 *
260 * @return void
261 */
262 public function enqueueProductBlocks() {
263 global $pagenow;
264 if ( 'site-editor.php' !== $pagenow ) {
265 return;
266 }
267
268 wp_enqueue_script( 'surecart-product-blocks' );
269 }
270
271 /**
272 * We only want these available in FSE.
273 *
274 * @return void
275 */
276 public function enqueueProductCollectionBlocks() {
277 global $pagenow;
278 if ( 'site-editor.php' !== $pagenow ) {
279 return;
280 }
281
282 wp_enqueue_script( 'surecart-product-collection-blocks' );
283 }
284
285 /**
286 * Register block scripts.
287 *
288 * @return void
289 */
290 public function registerBlocks() {
291 $enabled_payment_processors = is_admin() ? array_values(
292 array_filter(
293 (array) Processor::get() ?? [],
294 function ( $payment_method ) {
295 return $payment_method->enabled ?? false;
296 }
297 )
298 ) : [];
299 // blocks.
300 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/blocks/library.asset.php';
301 $deps = $asset_file['dependencies'] ?? [];
302 // fix bug in deps array.
303 $deps[ array_search( 'wp-blockEditor', $deps ) ] = 'wp-block-editor';
304 wp_register_script(
305 'surecart-blocks',
306 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/blocks/library.js',
307 $deps,
308 $asset_file['version'] . '-' . \SureCart::plugin()->version(),
309 true
310 );
311
312 // only register.
313 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/blocks/product.asset.php';
314 $deps = $asset_file['dependencies'] ?? [];
315 // fix bug in deps array.
316 $deps[ array_search( 'wp-blockEditor', $deps ) ] = 'wp-block-editor';
317 wp_register_script(
318 'surecart-product-blocks',
319 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/blocks/product.js',
320 $deps,
321 $asset_file['version'],
322 true
323 );
324
325 // Register product collection blocks.
326 $asset_file = include trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . 'dist/blocks/product_collection.asset.php';
327 $deps = $asset_file['dependencies'] ?? [];
328 $deps[ array_search( 'wp-blockEditor', $deps ) ] = 'wp-block-editor';
329 wp_register_script(
330 'surecart-product-collection-blocks',
331 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/blocks/product_collection.js',
332 $deps,
333 $asset_file['version'],
334 true
335 );
336
337 // localize.
338 wp_localize_script(
339 'surecart-blocks',
340 'scData',
341 apply_filters(
342 'surecart-components/scData', // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores,WordPress.NamingConventions.ValidHookName.NotLowercase
343 [
344 'root_url' => esc_url_raw( get_rest_url() ),
345 'plugin_url' => \SureCart::core()->assets()->getUrl(),
346 'api_url' => \SureCart::requests()->getBaseUrl(),
347 'currency' => \SureCart::account()->currency,
348 'currency_symbol' => html_entity_decode( Currency::getCurrencySymbol( \SureCart::account()->currency ) ),
349 'theme' => get_option( 'surecart_theme', 'light' ),
350 'pages' => [
351 'dashboard' => \SureCart::pages()->url( 'dashboard' ),
352 'checkout' => \SureCart::pages()->url( 'checkout' ),
353 ],
354 'default_checkout_id' => (int) \SureCart::forms()->getDefaultId(),
355 'page_id' => get_the_ID(),
356 'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
357 'nonce_endpoint' => admin_url( 'admin-ajax.php?action=sc-rest-nonce' ),
358 'recaptcha_site_key' => \SureCart::settings()->recaptcha()->getSiteKey(),
359 'claim_url' => $this->getAccountClaimUrl(),
360 'admin_url' => trailingslashit( admin_url() ),
361 'getting_started_url' => untrailingslashit( admin_url( 'admin.php?page=sc-getting-started' ) ),
362 'user_permissions' => array(
363 'manage_sc_shop_settings' => current_user_can( 'manage_sc_shop_settings' ),
364 ),
365 'is_account_connected' => \SureCart::account()->isConnected(),
366 ]
367 )
368 );
369
370 wp_localize_script(
371 'surecart-blocks',
372 'scBlockData',
373 [
374 'root_url' => esc_url_raw( get_rest_url() ),
375 'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
376 'nonce_endpoint' => admin_url( 'admin-ajax.php?action=sc-rest-nonce' ),
377 'processors' => $enabled_payment_processors,
378 'manualPaymentMethods' => is_admin() ? ( (array) ManualPaymentMethod::get() ?? [] ) : [],
379 'plugin_url' => \SureCart::core()->assets()->getUrl(),
380 'currency' => \SureCart::account()->currency,
381 'theme' => get_option( 'surecart_theme', 'light' ),
382 'entitlements' => \SureCart::account()->entitlements,
383 'upgrade_url' => \SureCart::config()->links->purchase,
384 'beta' => [
385 'stripe_payment_element' => (bool) get_option( 'sc_stripe_payment_element', true ),
386 ],
387 'pages' => [
388 'dashboard' => \SureCart::pages()->url( 'dashboard' ),
389 'checkout' => \SureCart::pages()->url( 'checkout' ),
390 ],
391 ]
392 );
393
394 wp_localize_script( 'surecart-blocks', 'scIcons', [ 'path' => esc_url_raw( plugin_dir_url( SURECART_PLUGIN_FILE ) . 'dist/icon-assets' ) ] );
395 }
396
397 /**
398 * Enqueue blocks scripts.
399 *
400 * @return void
401 */
402 public function enqueueBlocks() {
403 wp_enqueue_script( 'surecart-blocks' );
404 }
405 }
406