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