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