PluginProbe ʕ •ᴥ•ʔ
Premium Addons for Elementor – Powerful Elementor Templates & Widgets / 4.11.62
Premium Addons for Elementor – Powerful Elementor Templates & Widgets v4.11.62
4.11.79 4.11.78 4.11.77 4.11.76 4.11.75 3.20.5 4.11.69 3.20.6 4.11.7 3.20.7 4.11.70 3.20.8 4.11.71 3.20.9 4.11.72 3.21.1 4.11.73 3.21.2 4.11.74 3.21.3 4.11.8 3.21.4 4.11.9 3.21.5 4.2.0 3.21.6 4.2.1 3.3.0 4.2.2 3.3.1 4.2.3 3.3.2 4.2.4 3.3.3 4.2.5 3.3.4 4.2.6 3.3.5 4.2.7 3.3.6 4.2.8 3.3.7 4.2.9 3.3.8 4.3.0 3.3.9 4.3.1 3.4.0 4.3.2 3.4.1 4.3.3 3.4.2 4.3.4 3.4.3 4.3.5 3.4.4 4.3.6 3.4.5 4.3.7 3.4.6 4.3.8 3.4.7 4.3.9 3.4.8 4.4.0 3.4.9 4.4.1 3.5.0 4.4.2 3.5.1 4.4.3 3.5.2 4.4.4 3.5.3 4.4.5 3.5.4 4.4.6 3.5.5 4.4.7 3.5.6 4.4.8 3.5.7 4.4.9 3.5.8 4.5.0 3.5.9 4.5.1 3.6.0 4.5.2 3.6.1 4.5.3 3.6.2 4.5.4 3.6.3 4.5.5 3.6.4 4.5.6 3.6.5 4.5.7 3.6.6 4.5.8 3.6.7 4.5.9 3.6.8 4.6.0 3.6.9 4.6.1 3.7.0 4.7.0 3.7.1 4.7.1 3.7.2 4.7.2 3.7.3 4.7.3 3.7.4 4.7.4 3.7.5 4.7.5 3.7.6 4.7.6 3.7.7 4.7.7 3.7.8 4.7.8 3.7.9 4.7.9 3.8.0 4.8.0 3.8.1 4.8.1 3.8.2 4.8.10 3.8.3 4.8.11 3.8.4 4.8.2 3.8.5 4.8.3 3.8.6 4.8.4 3.8.7 4.8.5 3.8.8 4.8.6 3.8.9 4.8.7 3.9.0 4.8.8 3.9.1 4.8.9 3.9.2 4.9.0 3.9.3 4.9.0-beta1 3.9.4 4.9.0-beta2 3.9.5 4.9.1 3.9.6 4.9.10 3.9.7 4.9.11 3.9.8 4.9.12 3.9.9 4.9.13 4.0.1 4.9.14 4.0.3 4.9.15 4.0.4 4.9.16 4.0.5 4.9.17 4.0.6 4.9.18 4.0.7 4.9.19 4.0.8 4.9.2 4.0.9 4.9.20 4.1.0 4.9.21 4.1.1 4.9.22 4.1.2 4.9.23 4.1.3 4.9.24 trunk 4.1.4 4.9.25 1.0 4.1.5 4.9.26 1.01 4.1.6 4.9.27 1.02 4.1.7 4.9.28 1.03 4.1.8 4.9.29 1.04 4.1.9 4.9.3 1.05 4.10.0 4.9.30 1.06 4.10.1 4.9.31 1.07 4.10.10 4.9.32 1.08 4.10.11 4.9.33 1.09 4.10.12 4.9.34 2.0 4.10.13 4.9.35 2.0.1 4.10.14 4.9.36 2.0.2 4.10.15 4.9.37 2.0.3 4.10.16 4.9.38 2.0.4 4.10.17 4.9.39 2.0.5 4.10.18 4.9.4 2.0.6 4.10.19 4.9.40 2.0.7 4.10.2 4.9.41 2.0.8 4.10.20 4.9.42 2.0.9 4.10.21 4.9.43 2.1.0 4.10.22 4.9.45 2.1.1 4.10.23 4.9.46 2.1.2 4.10.24 4.9.47 2.1.3 4.10.25 4.9.48 2.1.4 4.10.26 4.9.49 2.1.5 4.10.27 4.9.5 2.1.5-beta1 4.10.28 4.9.50 2.1.6 4.10.29 4.9.51 2.1.7 4.10.3 4.9.52 2.1.8 4.10.30 4.9.53 2.1.9 4.10.31 4.9.54 2.2.0 4.10.32 4.9.55 2.2.1 4.10.33 4.9.56 2.2.2 4.10.34 4.9.57 2.2.3 4.10.35 4.9.6 2.2.4 4.10.36 4.9.7 2.2.5 4.10.37 4.9.8 2.2.6 4.10.38 4.9.9 2.2.7 4.10.39 2.2.8 4.10.4 2.2.9 4.10.40 2.3.0 4.10.41 2.3.1 4.10.42 2.3.2 4.10.43 2.3.3 4.10.44 2.3.4 4.10.45 2.3.5 4.10.46 2.3.6 4.10.47 2.3.7 4.10.48 2.3.8 4.10.49 2.3.9 4.10.5 2.4.0 4.10.50 2.4.1 4.10.51 2.5.0 4.10.52 2.5.1 4.10.53 2.5.2 4.10.54 2.5.3 4.10.55 2.5.4 4.10.56 2.5.5 4.10.57 2.5.6 4.10.58 2.5.7 4.10.59 2.5.8 4.10.6 2.5.9 4.10.60 2.6.0 4.10.61 2.6.1 4.10.62 2.6.2 4.10.63 2.6.3 4.10.64 2.6.4 4.10.65 2.6.5 4.10.66 2.6.6 4.10.67 2.6.7 4.10.68 2.6.8 4.10.69 2.6.9 4.10.7 2.7.0 4.10.70 2.7.1 4.10.71 2.7.2 4.10.72 2.7.3 4.10.73 2.7.4 4.10.74 2.7.5 4.10.75 2.7.6 4.10.76 2.7.7 4.10.77 2.7.8 4.10.78 2.7.9 4.10.79 2.8.0 4.10.8 2.8.1 4.10.80 2.8.2 4.10.81 2.8.3 4.10.82 2.8.4 4.10.83 2.8.5 4.10.84 2.8.6 4.10.85 2.8.7 4.10.86 2.8.8 4.10.87 2.8.9 4.10.88 2.9.0 4.10.89 2.9.1 4.10.9 2.9.2 4.10.90 2.9.3 4.11.0 2.9.4 4.11.1 2.9.5 4.11.10 2.9.6 4.11.11 2.9.7 4.11.12 2.9.8 4.11.13 2.9.9 4.11.14 3.0.0 4.11.15 3.0.1 4.11.16 3.0.2 4.11.17 3.0.3 4.11.18 3.0.4 4.11.19 3.0.5 4.11.2 3.0.6 4.11.20 3.0.7 4.11.21 3.0.8 4.11.22 3.0.9 4.11.23 3.1.0 4.11.24 3.1.1 4.11.25 3.1.2 4.11.26 3.1.3 4.11.27 3.1.4 4.11.28 3.1.5 4.11.29 3.1.6 4.11.3 3.1.7 4.11.30 3.1.8 4.11.31 3.1.9 4.11.32 3.10.0 4.11.33 3.10.1 4.11.34 3.10.2 4.11.35 3.10.3 4.11.36 3.10.4 4.11.37 3.10.5 4.11.38 3.10.6 4.11.39 3.10.7 4.11.4 3.10.8 4.11.40 3.10.9 4.11.41 3.11.0 4.11.42 3.11.1 4.11.43 3.11.2 4.11.44 3.11.3 4.11.45 3.11.4 4.11.46 3.11.5 4.11.47 3.11.6 4.11.48 3.11.7 4.11.49 3.11.8 4.11.5 3.11.9 4.11.50 3.12.0 4.11.51 3.12.1 4.11.52 3.12.2 4.11.53 3.12.3 4.11.54 3.2.0 4.11.55 3.2.1 4.11.56 3.2.2 4.11.57 3.2.3 4.11.58 3.2.4 4.11.59 3.2.5 4.11.6 3.2.6 4.11.60 3.2.7 4.11.61 3.2.8 4.11.62 3.2.9 4.11.63 3.20.0 4.11.64 3.20.1 4.11.65 3.20.2 4.11.66 3.20.3 4.11.67 3.20.4 4.11.68
premium-addons-for-elementor / includes / assets-manager.php
premium-addons-for-elementor / includes Last commit date
controls 5 months ago extras 5 months ago helpers 5 months ago pa-display-conditions 5 months ago templates 5 months ago acf-helper.php 5 months ago addons-cross-cp.php 5 months ago addons-integration.php 5 months ago assets-manager.php 5 months ago class-pa-core.php 5 months ago cm-pointer.php 5 months ago helper-functions.php 5 months ago live-editor-modal.php 5 months ago module-base.php 5 months ago pa-nav-menu-walker.php 5 months ago papro-promotion.php 5 months ago premium-template-tags.php 5 months ago promotion-pointer.php 5 months ago
assets-manager.php
1549 lines
1 <?php
2 /**
3 * PA Assets Manager.
4 */
5
6 namespace PremiumAddons\Includes;
7
8 use Elementor\Plugin;
9 use PremiumAddons\Includes\Helper_Functions;
10 use PremiumAddons\Admin\Includes\Admin_Helper;
11 use PremiumAddons\Admin\Includes\Admin_Bar;
12
13 require_once PREMIUM_ADDONS_PATH . 'widgets/dep/urlopen.php';
14
15 if ( ! defined( 'ABSPATH' ) ) {
16 exit;
17 }
18
19 /**
20 * PA Assets Manager Class.
21 */
22 class Assets_Manager {
23
24 /**
25 * Assets Key.
26 */
27 const ASSETS_KEY = '_pa_widget_elements';
28
29 /**
30 * Class Instance.
31 *
32 * @var object|null instance.
33 */
34 private static $instance = null;
35
36 /**
37 * Post Id.
38 * Option Id.
39 *
40 * @var string|null post_id.
41 */
42 protected $post_id = null;
43
44 /**
45 * Enabled Elements.
46 *
47 * @var array|null
48 */
49 protected $enabled_elements = null;
50
51 /**
52 * Integrations.
53 *
54 * @var array|null
55 */
56 protected $integrations = null;
57
58 /**
59 * Class Constructor.
60 */
61 public function __construct( $enabled_elements, $integrations ) {
62
63 $this->enabled_elements = $enabled_elements;
64 $this->integrations = $integrations;
65
66 $this->register_hooks();
67 }
68
69 /**
70 * Register Hooks.
71 *
72 * @access protected
73 * @since 4.6.1
74 */
75 protected function register_hooks() {
76
77 $is_dynamic_assets_enabled = $this->enabled_elements['premium-assets-generator'];
78
79 if ( $is_dynamic_assets_enabled ) {
80
81 // Register AJAX Hooks for regenerate assets.
82 add_action( 'wp_ajax_pa_clear_cached_assets', array( $this, 'pa_clear_cached_assets' ) );
83
84 add_action( 'elementor/editor/after_save', array( $this, 'handle_post_save' ), 10, 2 );
85
86 add_action( 'elementor/theme/register_locations', array( $this, 'get_asset_per_location' ), 20 );
87 add_filter( 'elementor/files/file_name', array( $this, 'load_asset_per_file' ) );
88
89 add_action( 'wp_enqueue_scripts', array( $this, 'handle_assets_load' ), 100 );
90
91 // Delete cached options on post delete.
92 add_action( 'wp_trash_post', array( $this, 'delete_trashed_post_data' ) );
93
94 add_action( 'elementor/frontend/before_enqueue_styles', array( $this, 'before_enqueue_styles' ) );
95
96 // Add admin bar tools for dynamic assets clear.
97 $row_meta = Helper_Functions::is_hide_row_meta();
98
99 if ( ! is_admin() && ! $row_meta ) {
100 Admin_Bar::get_instance();
101 }
102 }
103
104 add_action( 'elementor/frontend/after_register_styles', array( $this, 'register_frontend_styles' ) );
105 add_action( 'elementor/frontend/after_register_scripts', array( $this, 'register_frontend_scripts' ) );
106 }
107
108 /**
109 * Handle Assets Load.
110 *
111 * @access public
112 * @since 4.6.1
113 */
114 public function handle_assets_load() {
115
116 // Set current post id.
117 $this->set_post_id();
118
119 $this->enqueue_elements_handler();
120
121 // This will run only on frontend.
122 $this->get_pa_elements_list();
123
124 // Handle generate and enqueue assets for editor.
125 if ( $this->is_edit() ) {
126 $this->enqueue_asset( null, 'edit' );
127 }
128 }
129
130 /**
131 * Before Enqueue Styles.
132 *
133 * @access public
134 * @since 4.6.1
135 */
136 public function before_enqueue_styles() {
137
138 if ( $this->is_edit() ) {
139 return false;
140 }
141
142 $this->post_id = get_the_ID();
143
144 // Check for content changes and update assets data.
145 $this->get_pa_elements_list( $this->post_id );
146
147 $elements = get_post_meta( $this->post_id, self::ASSETS_KEY, true );
148
149 if ( ! empty( $elements ) ) {
150 $this->enqueue_asset( $this->post_id, $elements );
151 }
152 }
153
154 public function get_asset_per_location( $instance ) {
155
156 if ( is_admin() || ! ( class_exists( 'ElementorPro\Modules\ThemeBuilder\Module' ) ) ) {
157 return false;
158 }
159
160 $locations = $instance->get_locations();
161
162 foreach ( $locations as $location => $_unused ) {
163
164 $documents_module = \ElementorPro\Modules\ThemeBuilder\Module::instance();
165
166 if ( method_exists( $documents_module, 'get_locations_manager' ) && method_exists( $documents_module->get_locations_manager(), 'get_documents_for_location' ) ) {
167 $documents = $documents_module->get_locations_manager()->get_documents_for_location( $location );
168 } else {
169 $documents = $documents_module->get_conditions_manager()->get_documents_for_location( $location );
170 }
171
172 foreach ( $documents as $document ) {
173 if ( ! is_object( $document ) ) {
174 continue;
175 }
176
177 $post_id = $document->get_post()->ID;
178
179 $this->post_id = $post_id;
180 $this->get_pa_elements_list( $this->post_id );
181 $elements = get_post_meta( $this->post_id, self::ASSETS_KEY, true );
182
183 if ( ! empty( $elements ) ) {
184 $this->enqueue_asset( $this->post_id, $elements );
185 }
186 }
187 }
188 }
189
190 public function load_asset_per_file( $file_name ) {
191
192 if ( empty( $file_name ) ) {
193 return $file_name;
194 }
195
196 $post_id = preg_replace( '/[^0-9]/', '', $file_name );
197
198 if ( $post_id < 1 ) {
199 return $file_name;
200 }
201
202 $this->post_id = $post_id;
203
204 $this->get_pa_elements_list( $this->post_id );
205 $elements = get_post_meta( $this->post_id, self::ASSETS_KEY, true );
206
207 if ( ! empty( $elements ) ) {
208 $this->enqueue_asset( $this->post_id, $elements );
209 }
210
211 return $file_name;
212 }
213
214 /**
215 * Enqueue Asset.
216 *
217 * Enqueue dynamic CSS/JS file for the current post.
218 *
219 * @access public
220 * @since 4.6.1
221 *
222 * @param int $post_id post id.
223 * @param string $location edit|front.
224 */
225 public function enqueue_asset( $post_id = null, $location = 'front' ) {
226
227 $dynamic_asset_id = ( $post_id ? '-' . $post_id : '' );
228
229 // If no CSS file found, then generate it.
230 if ( ! $this->has_asset_file( $post_id, 'css' ) ) {
231 $this->generate_new_asset_file( $post_id, $location, 'css' );
232 }
233
234 wp_enqueue_style(
235 'pafe' . $dynamic_asset_id,
236 Helper_Functions::get_safe_url( PREMIUM_ASSETS_URL . '/' . 'pafe' . $dynamic_asset_id . '.css' ),
237 array(),
238 get_post_modified_time()
239 );
240
241 // If no JS file found, then generate it.
242 if ( ! $this->has_asset_file( $post_id, 'js' ) ) {
243 $this->generate_new_asset_file( $post_id, $location, 'js' );
244 }
245
246 // Check again to prevent case where no JS file generated (independent widgets only).
247 if ( $this->has_asset_file( $post_id, 'js' ) ) {
248 wp_enqueue_script(
249 'pafe' . $dynamic_asset_id,
250 Helper_Functions::get_safe_url( PREMIUM_ASSETS_URL . '/' . 'pafe' . $dynamic_asset_id . '.js' ),
251 array(),
252 get_post_modified_time(),
253 true
254 );
255 }
256 }
257
258 /**
259 * Has Asset File.
260 *
261 * Check if the current post ID has an asset file.
262 *
263 * @access public
264 * @since 4.6.1
265 *
266 * @param int $post_id post id.
267 * @param string $ext js|css.
268 *
269 * @return bool if has asset file.
270 */
271 public function has_asset_file( $post_id, $ext = 'css' ) {
272
273 if ( file_exists( Helper_Functions::get_safe_path( PREMIUM_ASSETS_PATH . '/' . 'pafe' . ( $post_id ? '-' . $post_id : '' ) . '.' . $ext ) ) ) {
274 return true;
275 }
276
277 return false;
278 }
279
280 /**
281 * Handle Post Save.
282 *
283 * @access public
284 * @since 4.6.1
285 */
286 public function handle_post_save( $post_id, $data ) {
287
288 $widget_list = $this->extract_pa_elements( $data );
289 $this->save_pa_widgets_list( $post_id, $widget_list );
290 }
291
292 /**
293 * Set post unique id.
294 *
295 * @access public
296 * @since 4.6.1
297 *
298 * @return void
299 */
300 public function set_post_id() {
301
302 $this->post_id = get_the_ID();
303 }
304
305 /**
306 * Extracts PA Elements.
307 *
308 * @access public
309 * @since 4.6.1
310 *
311 * @param array $data post data.
312 *
313 * @return array
314 */
315 public function extract_pa_elements( $data ) {
316
317 if ( empty( $data ) ) {
318 return array();
319 }
320
321 $pa_names = Admin_Helper::get_pa_elements_names();
322
323 $pa_elems = array();
324
325 Plugin::$instance->db->iterate_data(
326 $data,
327 function ( $element ) use ( &$pa_elems, $pa_names ) {
328
329 if ( isset( $element['elType'] ) ) {
330
331 if ( 'widget' === $element['elType'] && isset( $element['widgetType'] ) ) {
332
333 $widget_type = ( 'global' === $element['widgetType'] && ! empty( $element['templateID'] ) ) ? $this->get_global_widget_type( $element['templateID'] ) : $element['widgetType'];
334
335 if ( in_array( $widget_type, $pa_names, true ) && ! in_array( $widget_type, $pa_elems, true ) ) {
336
337 array_push( $pa_elems, $widget_type );
338
339 }
340 }
341 }
342 }
343 );
344
345 return $pa_elems;
346 }
347
348 /**
349 * Get Global Widget Type.
350 *
351 * @access public
352 * @since 4.6.1
353 * @link https://code.elementor.com/methods/elementor-templatelibrary-manager-get_template_data/
354 * @param int $temp_id template it.
355 *
356 * @return string|void
357 */
358 public function get_global_widget_type( $temp_id ) {
359
360 $temp_data = Plugin::$instance->templates_manager->get_template_data(
361 array(
362 'source' => 'local',
363 'template_id' => $temp_id,
364 )
365 );
366
367 if ( is_wp_error( $temp_data ) || ! $temp_data || empty( $temp_data ) ) {
368 return;
369 }
370
371 if ( ! isset( $temp_data['content'] ) || empty( $temp_data['content'] ) ) {
372 return;
373 }
374
375 return $temp_data['content'][0]['widgetType'];
376 }
377
378 /**
379 * Generate New Asset File.
380 *
381 * Generates a new CSS/JS file for the current post.
382 *
383 * @access public
384 * @since 4.6.1
385 *
386 * @param int $post_id post id.
387 * @param string $location edit|front.
388 * @param string $ext js|css.
389 */
390 public function generate_new_asset_file( $post_id, $location, $ext ) {
391
392 // If no directory found, then create it.
393 if ( ! file_exists( PREMIUM_ASSETS_PATH ) ) {
394 wp_mkdir_p( PREMIUM_ASSETS_PATH );
395 }
396
397 // Generate dynamic asset file content.
398 $file_content = $this->get_asset_file_content( $post_id, $location, $ext );
399
400 if ( ! empty( $file_content ) ) {
401
402 $name = 'pafe' . ( $post_id ? '-' . $post_id : '' ) . '.' . $ext;
403 $file_path = Helper_Functions::get_safe_path( PREMIUM_ASSETS_PATH . DIRECTORY_SEPARATOR . $name );
404
405 file_put_contents( $file_path, $file_content ); // phpcs:ignore
406 }
407 }
408
409 /**
410 * Get Asset File Content.
411 *
412 * Collects pa/papro widgets assets.
413 *
414 * @access public
415 * @since 4.6.1
416 *
417 * @param int $post_id post id.
418 * @param string $location edit|front.
419 * @param string $ext js|css.
420 *
421 * @return string|array $content
422 */
423 public function get_asset_file_content( $post_id, $location, $ext ) {
424
425 $content = '';
426
427 if ( 'edit' === $location ) {
428 // For editor, generate assets based on the enabled elements.
429 $elements = Helper_Functions::get_enabled_widgets_names();
430 } else {
431 $elements = get_post_meta( $post_id, self::ASSETS_KEY, true );
432 }
433
434 if ( empty( $elements ) ) {
435 return '';
436 }
437
438 $elements = $this->prepare_pa_elements( $elements, $ext );
439
440 foreach ( $elements as $element ) {
441
442 $path = $this->get_file_path( $element, $ext );
443
444 if ( ! $path ) {
445 continue;
446 }
447
448 $file_content = $this->get_file_content( Helper_Functions::get_safe_path( $path ) );
449
450 $content .= $file_content;
451 }
452
453 return $content;
454 }
455
456 /**
457 * Prepare PA Elements.
458 *
459 * @access public
460 * @since 4.6.1
461 *
462 * @param array $elements post elements.
463 * @param string $ext js|css.
464 *
465 * @return array
466 */
467 public function prepare_pa_elements( $elements, $ext ) {
468
469 if ( Helper_Functions::check_papro_version() ) {
470
471 $social_revs = array(
472 'premium-yelp-reviews',
473 'premium-google-reviews',
474 'premium-facebook-reviews',
475 );
476
477 $if_has_social_reviews = array_intersect( $social_revs, $elements );
478
479 if ( ! empty( $if_has_social_reviews ) ) {
480 $elements[] = 'premium-reviews';
481 }
482
483 $social_feed = array(
484 'premium-twitter-feed',
485 'premium-facebook-feed',
486 );
487
488 $if_has_social_feed = array_intersect( $social_feed, $elements );
489
490 if ( ! empty( $if_has_social_feed ) ) {
491 $elements[] = 'social-common';
492 }
493 }
494
495 if ( 'css' === $ext ) {
496 $common_assets = $this->has_free_elements( $elements ) ? array( 'common' ) : array();
497 $common_assets = $this->has_pro_elements( $elements ) ? array_merge( $common_assets, array( 'common-pro' ) ) : $common_assets;
498
499 $elements = array_merge( $elements, $common_assets );
500 $indep_elements = array(
501 'premium-world-clock',
502 'premium-svg-drawer',
503 );
504
505 // Load CSS files for PRO Woo Products skins handled for editor/frontend.
506 $if_woo_products = array_intersect( array( 'woo-products', 'premium-woo-products' ), $elements );
507
508 if ( $if_woo_products && Helper_Functions::check_papro_version() ) {
509 $elements[] = 'premium-woo-products-pro';
510 }
511 } else {
512 $indep_elements = array(
513 'social-common',
514 'premium-lottie',
515 'premium-vscroll',
516 'premium-hscroll',
517 'premium-nav-menu',
518 'premium-addon-maps',
519 'premium-woo-products',
520 'premium-woo-products-pro',
521 'premium-mini-cart',
522 'premium-woo-cta',
523 'premium-smart-post-listing',
524 'premium-notifications',
525 'premium-site-logo',
526 );
527
528 }
529
530 $elements = array_diff( $elements, $indep_elements );
531
532 return $elements;
533 }
534
535 /**
536 * Get File Content.
537 *
538 * @param string $path file path.
539 *
540 * @return string
541 */
542 public static function get_file_content( $path ) {
543
544 if ( ! file_exists( $path ) ) {
545 return '';
546 }
547
548 $file_content = file_get_contents( $path );
549
550 return $file_content;
551 }
552
553 /**
554 * Get File Path.
555 * Construct file path.
556 *
557 * @param string $element pa element name.
558 * @param string $ext file extension ( js|css).
559 *
560 * @return string file path.
561 */
562 public function get_file_path( $element, $ext ) {
563
564 $is_pro = $this->is_pro_widget( $element );
565
566 if ( ! Helper_Functions::check_papro_version() && $is_pro ) {
567 return false;
568 }
569
570 $element = str_replace( '-addon', '', $element );
571
572 if ( 0 === strpos( $element, 'woo-' ) || 0 === strpos( $element, 'mini-' ) ) {
573 $element = 'premium-' . $element;
574 }
575
576 $path = $is_pro ? PREMIUM_PRO_ADDONS_PATH : PREMIUM_ADDONS_PATH;
577
578 return $path . 'assets/frontend/min-' . $ext . '/' . $element . '.min.' . $ext;
579 }
580
581 /**
582 * Is Pro Widget.
583 * Checks if the widget is pro.
584 *
585 * @access public
586 * @since 4.6.1
587 *
588 * @param string $widget widget name.
589 *
590 * @return bool
591 */
592 public function is_pro_widget( $widget ) {
593
594 $pro_names = array_merge( array( 'common-pro', 'premium-reviews', 'premium-woo-products-pro', 'social-common' ), $this->get_pro_widgets_names() );
595
596 return in_array( $widget, $pro_names, true );
597 }
598
599 /**
600 * Has Pro Elements.
601 * Check if the post has pa pro elements.
602 *
603 * @access public
604 * @since 4.6.1
605 *
606 * @param array $post_elements post elements.
607 *
608 * @return boolean
609 */
610 public function has_pro_elements( $post_elements ) {
611
612 $pro_elements = $this->get_pro_widgets_names();
613 $has_pro = array_intersect( $post_elements, $pro_elements ) ? true : false;
614
615 return $has_pro;
616 }
617
618 /**
619 * Has Free Elements.
620 * Check if the post has pa elements.
621 *
622 * @access public
623 * @since 4.6.1
624 *
625 * @param array $post_elements post elements.
626 *
627 * @return boolean
628 */
629 public function has_free_elements( $post_elements ) {
630
631 $free_elements = Admin_Helper::get_free_widgets_names();
632
633 // add some other pro widgets.
634 $free_elements = array_merge(
635 $free_elements,
636 array(
637 'premium-smart-post-listing',
638 'premium-addon-instagram-feed',
639 'premium-notbar',
640 'premium-addon-flip-box',
641 'premium-addon-icon-box',
642 'premium-addon-magic-section',
643 'premium-whatsapp-chat',
644 )
645 );
646
647 $has_free = array_intersect( $post_elements, $free_elements ) ? true : false;
648
649 return $has_free;
650 }
651
652 /**
653 * Get Pro Widgets Names.
654 *
655 * @access public
656 * @since 4.6.1
657 *
658 * @return array
659 */
660 public function get_pro_widgets_names() {
661
662 $pro_elements = Admin_Helper::get_pro_elements();
663 $pro_names = array();
664
665 foreach ( $pro_elements as $element ) {
666 if ( isset( $element['name'] ) ) {
667 array_push( $pro_names, $element['name'] );
668 }
669 }
670
671 return $pro_names;
672 }
673
674 /**
675 * Clear Cached Assets.
676 *
677 * Deletes assets options from DB And
678 * deletes assets files from uploads/premium-addons-for-elementor via AJAX
679 * directory.
680 *
681 * @access public
682 * @since 4.9.3
683 */
684 public function pa_clear_cached_assets() {
685
686 check_ajax_referer( 'pa-generate-nonce', 'security' );
687
688 $post_id = isset( $_POST['id'] ) ? sanitize_text_field( wp_unslash( $_POST['id'] ) ) : '';
689 $this->clear_dynamic_assets_data( $post_id );
690
691 wp_send_json_success( 'Cached Assets Cleared' );
692 }
693
694 /**
695 * Clear Dynamic Assets Data.
696 *
697 * Deletes assets options from DB And
698 * deletes assets files from uploads/premium-addons-for-elementor
699 * directory.
700 *
701 * @access public
702 * @since 4.10.51
703 *
704 * @param string $id post ID.
705 */
706 public function clear_dynamic_assets_data( $id = '' ) {
707
708 if ( ! current_user_can( 'manage_options' ) ) {
709 wp_send_json_error( __( 'You are not allowed to do this action', 'premium-addons-for-elementor' ) );
710 }
711
712 if ( Helper_Functions::check_elementor_version() ) {
713 Plugin::$instance->files_manager->clear_cache();
714 }
715
716 if ( ! empty( $id ) ) {
717 delete_post_meta( $id, self::ASSETS_KEY );
718 }
719
720 // Purge All LS Cache
721 do_action( 'litespeed_purge_all', 'Premium Addons for Elementor' );
722
723 $this->delete_assets_files( $id );
724 }
725
726 /**
727 * Delete Assets Options.
728 *
729 * @access public
730 * @since 4.9.3
731 */
732 public function delete_trashed_post_data( $id = '' ) {
733
734 $this->delete_assets_files( $id );
735
736 delete_post_meta( $id, self::ASSETS_KEY );
737 }
738
739 /**
740 * Delete Assets Files.
741 *
742 * @access public
743 * @since 4.6.1
744 *
745 * @param string $id post id.
746 */
747 public static function delete_assets_files( $id = '' ) {
748
749 $path = PREMIUM_ASSETS_PATH;
750
751 if ( ! is_dir( $path ) ) {
752 return;
753 }
754
755 if ( empty( $id ) ) {
756 foreach ( scandir( $path ) as $file ) {
757 if ( '.' === $file || '..' === $file ) {
758 continue;
759 }
760
761 unlink( Helper_Functions::get_safe_path( $path . DIRECTORY_SEPARATOR . $file ) );
762 }
763 } else {
764
765 foreach ( glob( PREMIUM_ASSETS_PATH . '/*' . $id . '*' ) as $file ) {
766 unlink( Helper_Functions::get_safe_path( $file ) );
767 }
768 }
769 }
770
771 /**
772 * Get PA Elements List.
773 *
774 * @access public
775 * @since 4.6.1
776 *
777 * @return boolean
778 */
779 public function get_pa_elements_list() {
780
781 if ( is_object( Plugin::instance()->editor ) && Plugin::instance()->editor->is_edit_mode() ) {
782 return false;
783 }
784
785 $post_id = $this->post_id;
786
787 if ( $this->has_assets_data( $post_id ) ) {
788 return false;
789 }
790
791 $document = is_object( Plugin::$instance->documents ) ? Plugin::$instance->documents->get( $post_id ) : array();
792 $data = is_object( $document ) ? $document->get_elements_data() : array();
793 $data = $this->extract_pa_elements( $data );
794
795 $this->save_pa_widgets_list( $post_id, $data );
796
797 return true;
798 }
799
800 /**
801 * Save PA Widgets List.
802 *
803 * @access public
804 * @since 4.6.1
805 *
806 * @param int $post_id post id.
807 * @param array $list widgets list.
808 *
809 * @return boolean
810 */
811 public function save_pa_widgets_list( $post_id, $list ) {
812
813 if ( \defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
814 return $post_id;
815 }
816
817 $documents = is_object( Plugin::$instance->documents ) ? Plugin::$instance->documents->get( $post_id ) : array();
818
819 if ( ! in_array( get_post_status( $post_id ), array( 'publish', 'private' ) ) || ( is_object( $documents ) && ! $documents->is_built_with_elementor() ) ) {
820 return false;
821 }
822
823 if ( in_array( get_post_meta( $post_id, '_elementor_template_type', true ), array( 'kit' ) ) ) {
824 return false;
825 }
826
827 // No new elements added.
828 $existing_elements = get_post_meta( $post_id, self::ASSETS_KEY, true );
829 if ( $list === $existing_elements || serialize( $list ) === serialize( $existing_elements ) ) {
830 return false;
831 }
832
833 try {
834
835 update_post_meta( $post_id, self::ASSETS_KEY, $list );
836
837 $this->delete_assets_files( $post_id );
838
839 if ( $this->has_assets_data( $post_id ) ) {
840 $this->update_assets_files( $post_id, $list );
841 }
842
843 return true;
844 } catch ( \Exception $e ) {
845 return false;
846 }
847 }
848
849 /**
850 * Update Assets Files.
851 *
852 * @access public
853 * @since 4.6.1
854 *
855 * @param int $post_id post id.
856 * @param array $elements elements.
857 */
858 public function update_assets_files( $post_id, $elements ) {
859
860 $this->generate_new_asset_file( $post_id, 'front', 'css' );
861 $this->generate_new_asset_file( $post_id, 'front', 'js' );
862 }
863
864 public function is_edit() {
865 return (
866 Plugin::instance()->editor->is_edit_mode() ||
867 Plugin::instance()->preview->is_preview_mode() ||
868 is_preview()
869 );
870 }
871
872 /**
873 * Has Assets Data.
874 *
875 * @access public
876 * @since 4.10.54
877 *
878 * @param int $post_id post id.
879 *
880 * @return boolean
881 */
882 public function has_assets_data( $post_id ) {
883
884 $status = get_post_meta( $post_id, self::ASSETS_KEY, true );
885
886 return ! empty( $status );
887 }
888
889 /**
890 * Exclude PA assets from WP Optimize
891 *
892 * @since 4.10.73
893 * @access public
894 */
895 function exclude_pa_assets_from_wp_optimize( $excluded_handles ) {
896
897 $excluded_handles[] = 'pa-frontend';
898
899 return $excluded_handles;
900 }
901
902 /**
903 * Register Frontend CSS files
904 *
905 * @since 2.9.0
906 * @access public
907 */
908 public function register_frontend_styles() {
909
910 $dir = Helper_Functions::get_styles_dir();
911 $suffix = Helper_Functions::get_assets_suffix();
912
913 wp_register_style(
914 'font-awesome-5-all',
915 ELEMENTOR_ASSETS_URL . 'lib/font-awesome/css/all.min.css',
916 false,
917 PREMIUM_ADDONS_VERSION
918 );
919
920 wp_register_style(
921 'pa-flipster',
922 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/flipster' . $suffix . '.css',
923 false,
924 PREMIUM_ADDONS_VERSION
925 );
926
927 wp_register_style(
928 'pa-prettyphoto',
929 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/prettyphoto' . $suffix . '.css',
930 array(),
931 PREMIUM_ADDONS_VERSION,
932 'all'
933 );
934
935 wp_register_style(
936 'pa-btn',
937 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/button-line' . $suffix . '.css',
938 array(),
939 PREMIUM_ADDONS_VERSION,
940 'all'
941 );
942
943 wp_register_style(
944 'pa-load-animations',
945 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/load-animations' . $suffix . '.css',
946 array(),
947 PREMIUM_ADDONS_VERSION,
948 'all'
949 );
950
951 wp_register_style(
952 'pa-share-btn',
953 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/share-button' . $suffix . '.css',
954 array(),
955 PREMIUM_ADDONS_VERSION,
956 'all'
957 );
958
959 wp_register_style(
960 'pa-image-effects',
961 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/image-effects' . $suffix . '.css',
962 array(),
963 PREMIUM_ADDONS_VERSION,
964 'all'
965 );
966
967 wp_register_style(
968 'pa-slick',
969 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/slick' . $suffix . '.css',
970 array(),
971 PREMIUM_ADDONS_VERSION,
972 'all'
973 );
974
975 wp_register_style(
976 'pa-world-clock',
977 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-world-clock' . $suffix . '.css',
978 array(),
979 PREMIUM_ADDONS_VERSION,
980 'all'
981 );
982
983 wp_register_style(
984 'tooltipster',
985 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/tooltipster.min.css',
986 array(),
987 PREMIUM_ADDONS_VERSION,
988 'all'
989 );
990
991 wp_register_style(
992 'pa-gTooltips',
993 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-gtooltips' . $suffix . '.css',
994 array(),
995 PREMIUM_ADDONS_VERSION,
996 'all'
997 );
998
999 wp_register_style(
1000 'pa-shape-divider',
1001 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-sh-divider' . $suffix . '.css',
1002 array(),
1003 PREMIUM_ADDONS_VERSION,
1004 'all'
1005 );
1006
1007 wp_register_style(
1008 'pa-odometer',
1009 PREMIUM_ADDONS_URL . 'assets/frontend/min-css/odometer.min.css',
1010 array(),
1011 PREMIUM_ADDONS_VERSION,
1012 'all'
1013 );
1014
1015 wp_register_style(
1016 'pa-glass',
1017 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/liquid-glass' . $suffix . '.css',
1018 array(),
1019 PREMIUM_ADDONS_VERSION,
1020 'all'
1021 );
1022
1023 if ( ! $this->enabled_elements['premium-assets-generator'] ) {
1024
1025 wp_enqueue_style(
1026 'premium-addons',
1027 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-addons' . $suffix . '.css',
1028 array(),
1029 PREMIUM_ADDONS_VERSION,
1030 'all'
1031 );
1032
1033 }
1034 }
1035
1036 public function enqueue_elements_handler() {
1037
1038 wp_enqueue_script(
1039 'pa-elements-handler',
1040 PREMIUM_ADDONS_URL . 'assets/frontend/min-js/elements-handler.min.js',
1041 array(),
1042 PREMIUM_ADDONS_VERSION,
1043 true
1044 );
1045 }
1046
1047 /**
1048 * Registers required JS files
1049 *
1050 * @since 1.0.0
1051 * @access public
1052 */
1053 public function register_frontend_scripts() {
1054
1055 $maps_settings = $this->integrations;
1056
1057 $dir = Helper_Functions::get_scripts_dir();
1058 $suffix = Helper_Functions::get_assets_suffix();
1059
1060 wp_localize_script(
1061 'elementor-frontend',
1062 'PremiumSettings',
1063 array(
1064 'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
1065 'nonce' => wp_create_nonce( 'pa-blog-widget-nonce' ),
1066
1067 )
1068 );
1069
1070 if ( ! $this->enabled_elements['premium-assets-generator'] ) {
1071 wp_register_script(
1072 'premium-addons',
1073 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-addons' . $suffix . '.js',
1074 array( 'jquery' ),
1075 PREMIUM_ADDONS_VERSION,
1076 true
1077 );
1078 }
1079
1080 wp_register_script(
1081 'pa-scrolldir',
1082 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/pa-scrolldir' . $suffix . '.js',
1083 array( 'jquery' ),
1084 PREMIUM_ADDONS_VERSION,
1085 true
1086 );
1087
1088 wp_register_script(
1089 'prettyPhoto-js',
1090 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/prettyPhoto' . $suffix . '.js',
1091 array( 'jquery' ),
1092 PREMIUM_ADDONS_VERSION,
1093 true
1094 );
1095
1096 wp_register_script(
1097 'tooltipster-bundle',
1098 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/tooltipster' . $suffix . '.js',
1099 array( 'jquery' ),
1100 PREMIUM_ADDONS_VERSION,
1101 true
1102 );
1103
1104 wp_register_script(
1105 'pa-vticker',
1106 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/vticker' . $suffix . '.js',
1107 array( 'jquery' ),
1108 PREMIUM_ADDONS_VERSION,
1109 true
1110 );
1111
1112 wp_register_script(
1113 'pa-typed',
1114 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/typed' . $suffix . '.js',
1115 array( 'jquery' ),
1116 PREMIUM_ADDONS_VERSION,
1117 true
1118 );
1119
1120 wp_register_script(
1121 'countdown-translator',
1122 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/countdown-translator' . $suffix . '.js',
1123 array( 'jquery' ),
1124 PREMIUM_ADDONS_VERSION,
1125 true
1126 );
1127
1128 wp_register_script(
1129 'pa-countdown',
1130 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/jquery-countdown' . $suffix . '.js',
1131 array( 'jquery' ),
1132 PREMIUM_ADDONS_VERSION,
1133 true
1134 );
1135
1136 wp_register_script(
1137 'isotope-js',
1138 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/isotope' . $suffix . '.js',
1139 array( 'jquery' ),
1140 PREMIUM_ADDONS_VERSION,
1141 true
1142 );
1143
1144 wp_register_script(
1145 'pa-modal',
1146 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/modal' . $suffix . '.js',
1147 array( 'jquery' ),
1148 PREMIUM_ADDONS_VERSION,
1149 true
1150 );
1151
1152 wp_register_script(
1153 'pa-maps',
1154 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-maps' . $suffix . '.js',
1155 array( 'jquery' ),
1156 PREMIUM_ADDONS_VERSION,
1157 true
1158 );
1159
1160 wp_register_script(
1161 'pa-vscroll',
1162 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-vscroll' . $suffix . '.js',
1163 array( 'jquery' ),
1164 PREMIUM_ADDONS_VERSION,
1165 true
1166 );
1167
1168 wp_register_script(
1169 'pa-slimscroll',
1170 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/jquery-slimscroll' . $suffix . '.js',
1171 array( 'jquery' ),
1172 PREMIUM_ADDONS_VERSION,
1173 true
1174 );
1175
1176 wp_register_script(
1177 'pa-iscroll',
1178 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/iscroll' . $suffix . '.js',
1179 array( 'jquery' ),
1180 PREMIUM_ADDONS_VERSION,
1181 true
1182 );
1183
1184 wp_register_script(
1185 'pa-tilt',
1186 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/universal-tilt' . $suffix . '.js',
1187 array( 'jquery' ),
1188 PREMIUM_ADDONS_VERSION,
1189 true
1190 );
1191
1192 wp_register_script(
1193 'lottie-js',
1194 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/lottie' . $suffix . '.js',
1195 array( 'jquery' ),
1196 PREMIUM_ADDONS_VERSION,
1197 true
1198 );
1199
1200 wp_register_script(
1201 'pa-odometer',
1202 PREMIUM_ADDONS_URL . 'assets/frontend/min-js/odometer.min.js',
1203 array( 'jquery' ),
1204 PREMIUM_ADDONS_VERSION,
1205 true
1206 );
1207
1208 wp_register_script(
1209 'pa-tweenmax',
1210 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/TweenMax' . $suffix . '.js',
1211 array( 'jquery' ),
1212 PREMIUM_ADDONS_VERSION,
1213 true
1214 );
1215
1216 wp_register_script(
1217 'pa-headroom',
1218 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/headroom' . $suffix . '.js',
1219 array( 'jquery' ),
1220 PREMIUM_ADDONS_VERSION
1221 );
1222
1223 wp_register_script(
1224 'pa-menu',
1225 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-nav-menu' . $suffix . '.js',
1226 array( 'jquery' ),
1227 PREMIUM_ADDONS_VERSION,
1228 true
1229 );
1230
1231 if ( $maps_settings['premium-map-cluster'] ) {
1232 wp_register_script(
1233 'pa-maps-cluster',
1234 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/markerclusterer.min.js',
1235 array(),
1236 '1.0.1',
1237 true
1238 );
1239 }
1240
1241 if ( $maps_settings['premium-map-disable-api'] && '1' !== $maps_settings['premium-map-api'] ) {
1242
1243 $locale = $maps_settings['premium-map-locale'] ?? 'en';
1244
1245 $api = sprintf( 'https://maps.googleapis.com/maps/api/js?key=%1$s&libraries=marker&callback=initMap&language=%2$s&loading=async', $maps_settings['premium-map-api'], $locale );
1246
1247 wp_register_script(
1248 'pa-maps-api',
1249 $api,
1250 array(),
1251 PREMIUM_ADDONS_VERSION,
1252 true
1253 );
1254 }
1255
1256 wp_register_script(
1257 'pa-slick',
1258 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/slick' . $suffix . '.js',
1259 array( 'jquery' ),
1260 PREMIUM_ADDONS_VERSION,
1261 true
1262 );
1263
1264 wp_register_script(
1265 'pa-flipster',
1266 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/flipster' . $suffix . '.js',
1267 array( 'jquery' ),
1268 PREMIUM_ADDONS_VERSION
1269 );
1270
1271 wp_register_script(
1272 'pa-anime',
1273 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/anime' . $suffix . '.js',
1274 array( 'jquery' ),
1275 PREMIUM_ADDONS_VERSION,
1276 true
1277 );
1278
1279 wp_register_script(
1280 'pa-feffects',
1281 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-float-effects' . $suffix . '.js',
1282 array( 'jquery' ),
1283 PREMIUM_ADDONS_VERSION,
1284 true
1285 );
1286
1287 wp_register_script(
1288 'pa-gTooltips',
1289 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-gtooltips' . $suffix . '.js',
1290 array( 'jquery' ),
1291 PREMIUM_ADDONS_VERSION,
1292 true
1293 );
1294
1295 wp_register_script(
1296 'pa-shape-divider',
1297 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-sh-divider' . $suffix . '.js',
1298 array( 'jquery' ),
1299 PREMIUM_ADDONS_VERSION,
1300 true
1301 );
1302
1303 wp_localize_script(
1304 'pa-shape-divider',
1305 'PaShapeDividerSettings',
1306 array(
1307 'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
1308 'nonce' => wp_create_nonce( 'pa-shape-nonce' ),
1309 )
1310 );
1311
1312 wp_localize_script(
1313 'pa-gTooltips',
1314 'PremiumSettings',
1315 array(
1316 'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
1317 'nonce' => wp_create_nonce( 'pa-blog-widget-nonce' ),
1318 )
1319 );
1320
1321 wp_register_script(
1322 'pa-eq-height',
1323 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-eq-height' . $suffix . '.js',
1324 array( 'jquery' ),
1325 PREMIUM_ADDONS_VERSION,
1326 true
1327 );
1328
1329 wp_register_script(
1330 'pa-dis-conditions',
1331 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-dis-conditions' . $suffix . '.js',
1332 array( 'jquery' ),
1333 PREMIUM_ADDONS_VERSION,
1334 true
1335 );
1336
1337 wp_register_script(
1338 'pa-gsap',
1339 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/pa-gsap' . $suffix . '.js',
1340 array( 'jquery' ),
1341 PREMIUM_ADDONS_VERSION,
1342 true
1343 );
1344
1345 wp_register_script(
1346 'pa-motionpath',
1347 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/motionpath' . $suffix . '.js',
1348 array(
1349 'jquery',
1350 ),
1351 PREMIUM_ADDONS_VERSION,
1352 true
1353 );
1354
1355 wp_register_script(
1356 'pa-scrolltrigger',
1357 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/scrollTrigger' . $suffix . '.js',
1358 array( 'jquery' ),
1359 PREMIUM_ADDONS_VERSION,
1360 true
1361 );
1362
1363 wp_register_script(
1364 'pa-notifications',
1365 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-notifications' . $suffix . '.js',
1366 array( 'jquery' ),
1367 PREMIUM_ADDONS_VERSION,
1368 true
1369 );
1370
1371 wp_register_script(
1372 'pa-luxon',
1373 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/luxon' . $suffix . '.js',
1374 array( 'jquery' ),
1375 PREMIUM_ADDONS_VERSION,
1376 true
1377 );
1378
1379 wp_register_script(
1380 'mousewheel-js',
1381 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/jquery-mousewheel' . $suffix . '.js',
1382 array( 'jquery' ),
1383 PREMIUM_ADDONS_VERSION,
1384 true
1385 );
1386
1387 wp_register_script(
1388 'pa-wrapper-link',
1389 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-wrap-link' . $suffix . '.js',
1390 array( 'jquery' ),
1391 PREMIUM_ADDONS_VERSION,
1392 true
1393 );
1394
1395 // We need to make sure premium-woocommerce.js will not be loaded twice if assets are generated.
1396 if ( class_exists( 'woocommerce' ) ) {
1397
1398 wp_register_script(
1399 'premium-woo-cats',
1400 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-woo-categories' . $suffix . '.js',
1401 array( 'jquery' ),
1402 PREMIUM_ADDONS_VERSION,
1403 true
1404 );
1405
1406 wp_register_script(
1407 'premium-mini-cart',
1408 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-mini-cart' . $suffix . '.js',
1409 array( 'jquery' ),
1410 PREMIUM_ADDONS_VERSION,
1411 true
1412 );
1413
1414 wp_register_script(
1415 'premium-woo-cart',
1416 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-woo-cart' . $suffix . '.js',
1417 array( 'jquery' ),
1418 PREMIUM_ADDONS_VERSION,
1419 true
1420 );
1421
1422 wp_register_script(
1423 'premium-woo-cta',
1424 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-woo-cta' . $suffix . '.js',
1425 array( 'jquery' ),
1426 PREMIUM_ADDONS_VERSION,
1427 true
1428 );
1429
1430 wp_register_script(
1431 'premium-woocommerce',
1432 PREMIUM_ADDONS_URL . 'assets/frontend/' . $dir . '/premium-woo-products' . $suffix . '.js',
1433 array( 'jquery' ),
1434 PREMIUM_ADDONS_VERSION,
1435 true
1436 );
1437
1438 wp_localize_script(
1439 'premium-woo-cta',
1440 'PAWooCTASettings',
1441 array(
1442 'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
1443 'cta_nonce' => wp_create_nonce( 'pa-woo-cta-nonce' ),
1444 'view_cart' => __( 'View cart', 'woocommerce' ),
1445 'mini_cart_nonce' => wp_create_nonce( 'pa-mini-cart-nonce' ),
1446 'qv_nonce' => wp_create_nonce( 'pa-woo-qv-nonce' ),
1447 )
1448 );
1449
1450 /**
1451 * Localize the $product_added_to_cart flag to mini cart script.
1452 * The transient is deleted to be used only once.
1453 */
1454 $product_added_to_cart = get_transient( 'pa_product_added_to_cart' );
1455 if ( $product_added_to_cart ) {
1456 delete_transient( 'pa_product_added_to_cart' );
1457 }
1458
1459 wp_localize_script(
1460 'premium-mini-cart',
1461 'PAWooMCartSettings',
1462 array(
1463 'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
1464 'cta_nonce' => wp_create_nonce( 'pa-woo-cta-nonce' ),
1465 'view_cart' => __( 'View cart', 'woocommerce' ),
1466 'mini_cart_nonce' => wp_create_nonce( 'pa-mini-cart-nonce' ),
1467 'qv_nonce' => wp_create_nonce( 'pa-woo-qv-nonce' ),
1468 'stock_msg' => __( '*The current stock is only ', 'premium-addons-for-elementor' ),
1469 'productAddedToCart' => (bool) $product_added_to_cart,
1470 )
1471 );
1472
1473 wp_localize_script(
1474 'premium-woocommerce',
1475 'PAWooProductsSettings',
1476 array(
1477 'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
1478 'products_nonce' => wp_create_nonce( 'pa-woo-products-nonce' ),
1479 'qv_nonce' => wp_create_nonce( 'pa-woo-qv-nonce' ),
1480 'cta_nonce' => wp_create_nonce( 'pa-woo-cta-nonce' ),
1481 'woo_cart_url' => get_permalink( wc_get_page_id( 'cart' ) ),
1482 'view_cart' => __( 'View cart', 'woocommerce' ),
1483 'mini_cart_nonce' => wp_create_nonce( 'pa-mini-cart-nonce' ),
1484 )
1485 );
1486
1487 }
1488
1489 // Localize jQuery with required data for Global Add-ons.
1490 if ( $this->enabled_elements['premium-floating-effects'] ) {
1491 wp_localize_script(
1492 'pa-feffects',
1493 'PremiumFESettings',
1494 array(
1495 'papro_installed' => Helper_Functions::check_papro_version(),
1496 )
1497 );
1498 }
1499
1500 // Localize jQuery with required data for Global Add-ons.
1501 if ( $this->enabled_elements['premium-countdown'] ) {
1502
1503 wp_localize_script(
1504 'pa-countdown',
1505 'premiumCountDownStrings',
1506 array(
1507 'single' => array(
1508 __( 'Year', 'premium-addons-for-elementor' ),
1509 __( 'Month', 'premium-addons-for-elementor' ),
1510 __( 'Week', 'premium-addons-for-elementor' ),
1511 __( 'Day', 'premium-addons-for-elementor' ),
1512 __( 'Hour', 'premium-addons-for-elementor' ),
1513 __( 'Minute', 'premium-addons-for-elementor' ),
1514 __( 'Second', 'premium-addons-for-elementor' ),
1515 ),
1516 'plural' => array(
1517 __( 'Years', 'premium-addons-for-elementor' ),
1518 __( 'Months', 'premium-addons-for-elementor' ),
1519 __( 'Weeks', 'premium-addons-for-elementor' ),
1520 __( 'Days', 'premium-addons-for-elementor' ),
1521 __( 'Hours', 'premium-addons-for-elementor' ),
1522 __( 'Minutes', 'premium-addons-for-elementor' ),
1523 __( 'Seconds', 'premium-addons-for-elementor' ),
1524 ),
1525 )
1526 );
1527 }
1528 }
1529
1530 /**
1531 * Creates and returns an instance of the class.
1532 *
1533 * @since 4.6.1
1534 * @access public
1535 *
1536 * @return object
1537 */
1538 public static function get_instance( $enabled_elements, $integrations ) {
1539
1540 if ( ! isset( self::$instance ) ) {
1541
1542 self::$instance = new self( $enabled_elements, $integrations );
1543
1544 }
1545
1546 return self::$instance;
1547 }
1548 }
1549