PluginProbe
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets / 4.8.5
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets v4.8.5
4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 2.0.0 2.1.0 2.2.0 2.2.1 2.2.2 2.3.0 2.4.0 2.5.0 2.5.1 3.0.0 3.1.0 3.1.1 4.0.0 4.0.1 4.1.0 4.1.1 4.2.0 4.2.1 4.3.0 All 85 releases
← All changes | plugin.php +213 -52 2.2.24.8.5 View file →
@@ -1,18 +1,22 @@
1 1 <?php
2 2
3 3 namespace ShopEngine;
4 4
5 +defined('ABSPATH') || exit;
6 +
5 7 use ShopEngine\Compatibility\Conflicts\Manifest as Conflict_Manifest;
6 8 use ShopEngine\Core\Builders\Base;
9 +use ShopEngine\Compatibility\Migrations\LangMigration;
7 10 use ShopEngine\Core\Query_Modifier;
11 +use ShopEngine\Core\Wc_Customizer\Register_Settings;
8 12 use ShopEngine\Core\Template_Cpt;
9 13 use ShopEngine\Libs\License\License_Route;
14 +use ShopEngine\Libs\Rating\Rating;
10 15 use ShopEngine\Libs\Updater\Init as Updater;
11 16 use ShopEngine\Modules\Manifest as Module_Manifest;
12 17 use ShopEngine\Widgets\Manifest;
13 18
14 -defined('ABSPATH') || exit;
15 19
16 20 /**
17 21 * Plugin final Class.
18 22 * Handles dynamically loading classes only when needed. Check Elementor Plugin, Woocomerce Plugin Loaded or Install.
@@ -29,11 +33,15 @@
29 33 */
30 34 public function __construct() {
31 35 // load autoload method
32 36 Autoloader::run();
37 + add_action( 'wp_ajax_shopengine_admin_action', [\ShopEngine\Utils\Util::class, 'shopengine_admin_action'] );
33 38 }
34 39
35 -
40 + public function utils_url()
41 + {
42 + return $this->plugin_url() . 'utils/';
43 + }
36 44 /**
37 45 * Public function init.
38 46 * call function for all
39 47 *
@@ -42,8 +50,11 @@
42 50 public function init() {
43 51
44 52 $error = false;
45 53
54 + // init notice class
55 + \Oxaim\Libs\Notice::init();
56 +
46 57 // check woocommerce plugin
47 58 if(!did_action('woocommerce_loaded')) {
48 59 add_action('admin_notices', [$this, 'missing_woocommerce']);
49 60
@@ -73,12 +84,14 @@
73 84
74 85 if($error) {
75 86 return;
76 87 }
77 -
88 +
78 89 add_filter("plugin_action_links_shopengine/shopengine.php", function ($links) {
90 + $free = esc_html__("Go To Shopengine","shopengine");
91 + $pro = esc_html__("Go To ShopenginePro","shopengine");
79 92
80 - $custom_links[] = '<a href="'.admin_url('edit.php?post_type=shopengine-template#getting-started').'" target="_blank">' . esc_html__('Settings', 'shopengine') . '</a>';
93 + $custom_links[] = '<a title="' . $free . '" href="'.admin_url('edit.php?post_type=shopengine-template#getting-started').'" target="_blank">' . esc_html__('Settings', 'shopengine') . '</a>';
81 94
82 95 foreach ($custom_links as $custom_link):
83 96 array_unshift($links, $custom_link);
84 97 endforeach;
@@ -83,14 +96,35 @@
83 96 array_unshift($links, $custom_link);
84 97 endforeach;
85 98
86 99 if (!is_plugin_active('shopengine-pro/shopengine-pro.php')) {
87 - $links[] = '<a href="https://wpmet.com/plugin/shopengine/pricing/" style="color:#FCB214;font-weight:700" target="_blank">' . esc_html__('Go Pro', 'shopengine') . '</a>';
100 + $links[] = '<a title="' . $pro . '" href="https://wpmet.com/plugin/shopengine/pricing/" style="color:#FCB214;font-weight:700" target="_blank" rel="noopener">' . esc_html__('Go Pro', 'shopengine') . '</a>';
88 101 }
89 102 return $links;
90 103 });
91 104
105 + if(\ShopEngine\Utils\Util::get_settings( 'shopengine_user_consent_for_banner', 'true' ) == 'true'){
106 +
107 + /**
108 + * EmailKit Global Class initialization
109 + *
110 + */
111 + if( !class_exists('EmailKit') && !did_action('edit_with_emailkit_loaded') && class_exists('\Wpmet\Libs\Emailkit') ) {
112 +
113 + new \Wpmet\Libs\Emailkit();
114 + }
115 +
116 + /**
117 + * MetForm get free templates promotional class initialization
118 + *
119 + */
120 + if( !did_action('metform/after_load') && did_action('elementor/loaded') && class_exists('\Wpmet\Libs\Metform_Promo_Banner') ) {
121 +
122 + new \Wpmet\Libs\Metform_Promo_Banner();
123 + }
124 + }
92 125
126 +
93 127 /**
94 128 * Routes initialization
95 129 *
96 130 */
@@ -103,45 +137,23 @@
103 137 add_action('admin_init', function () {
104 138 if(class_exists('ShopEngine_Pro')) {
105 139 new Updater();
106 140 }
141 + new \ShopEngine\Compatibility\Migrations\Direct_Checkout;
107 142 });
108 143
109 144
110 145 add_action('wp_loaded', function () {
111 -
112 - if(isset($_REQUEST['preview']) && $_REQUEST['preview'] == 'true' && !empty($_REQUEST['preview_id'])) {
113 -
114 - $pid = (int)$_REQUEST['preview_id'];
115 -
116 - $po = get_post($pid);
117 -
118 - if($po->post_type === Template_Cpt::TYPE) {
119 -
120 - $template = \ShopEngine\Core\Builders\Templates::get_registered_template_data($pid);
121 -
122 - if(empty($template) || !isset($template['url'])) {
123 - return;
124 - }
125 -
126 - $param = [
127 - 'shopengine_template_id' => $pid,
128 - 'preview_nonce' => wp_create_nonce('template_preview_' . $pid),
129 - 'change_template' => '1',
130 - ];
131 -
132 - $url = \ShopEngine\Utils\Helper::add_to_url($template['url'], $param);
133 -
134 - wp_safe_redirect($url);
135 - exit;
136 - }
137 - }
146 + /**
147 + * migrate data
148 + */
149 + LangMigration::instance()->init();
138 150 });
139 151
140 152 // avoid themes for loading woocommerce functions
141 - $avoid_themes = ['avada', 'avada child'];
153 + $avoid_themes = ['avada', 'woodmart', 'Avada', 'Woodmart'];
142 154
143 - if(!in_array(strtolower(wp_get_theme()), $avoid_themes)) {
155 + if( !in_array(get_template(), $avoid_themes) ) {
144 156 /**
145 157 * Ensuring woocommerce functions are loaded before theme is modifying those
146 158 *
147 159 */
@@ -168,20 +180,152 @@
168 180 add_theme_support('wc-product-gallery-lightbox');
169 181 add_theme_support('wc-product-gallery-slider');
170 182 }
171 183
172 -
184 +
185 + $filter_string = ''; // elementskit,metform-pro
186 + $filter_string .= ((!in_array('elementskit/elementskit.php', apply_filters('active_plugins', get_option('active_plugins')))) ? '' : ',elementskit');
187 + $filter_string .= (!class_exists('\MetForm\Plugin') ? '' : ',metform');
188 + $filter_string .= (!class_exists('\MetForm_Pro\Plugin') ? '' : ',metform-pro');
189 +
173 190 #Registering new post-type & etc
174 191 Base::instance()->init();
192 +
175 193
194 + Rating::instance('shopengine')
195 + ->set_plugin( 'ShopEngine', 'https://wpmet.com/wordpress.org/rating/shopengine' )
196 + ->set_rating_url( 'https://wordpress.org/support/plugin/shopengine/reviews/#new-post' )
197 + ->set_plugin_logo( 'https://ps.w.org/shopengine/assets/icon-256x256.gif?rev=2505061', 'width:150px !important' )
198 + ->set_priority( 11 )
199 + ->set_first_appear_day( 7 )
200 + ->set_condition( true )
201 + ->call();
202 +
203 + if ( is_admin() && \ShopEngine\Utils\Util::get_settings( 'shopengine_user_consent_for_banner', 'true' ) == 'true' ) {
204 +
205 + /**
206 + * Show WPMET stories widget in dashboard
207 + */
208 +
209 + \Wpmet\Libs\Stories::instance('shopengine')
210 +
211 + ->set_filter($filter_string)
212 + ->set_plugin('ShopEngine', 'https://wpmet.com/plugin/shopengine/')
213 + ->set_api_url('https://api.wpmet.com/public/stories/')
214 + ->call();
215 +
216 + // banner
217 + \Wpmet\Libs\Banner::instance('shopengine')
218 + ->set_filter(ltrim($filter_string, ','))
219 + ->set_api_url('https://api.wpmet.com/public/jhanda')
220 + ->set_plugin_screens('edit-shopengine-template')
221 + ->set_plugin_screens('edit-shopengine-template')
222 + ->call();
223 + }
224 +
225 + add_action('init', function () {
226 + $apps_img_path = \ShopEngine::plugin_url() . 'assets/images/apps-page/';
227 + /**
228 + * Show our plugins menu for others wpmet plugins
229 + */
230 + \ShopEngine\Wpmet\Libs\Plugins::instance()->init('shopengine')
231 + ->set_parent_menu_slug('shopengine-settings')
232 + ->set_submenu_name('Our Plugins')
233 + ->set_section_title('Get More out of Your WooCommerce Website!')
234 + ->set_section_description('Install other plugins from us and take your WooCommerce site to the next level for absolutely free!')
235 + ->set_items_per_row(4)
236 + ->set_plugins(
237 + [
238 + 'elementskit-lite/elementskit-lite.php' => [
239 + 'name' => esc_html__('ElementsKit', 'shopengine'),
240 + 'url' => 'https://wordpress.org/plugins/elementskit-lite/',
241 + 'icon' => $apps_img_path. 'elementskit.gif',
242 + 'desc' => esc_html__('All-in-one Elementor addon trusted by 1 Million+ users, makes your website builder process easier with ultimate freedom.', 'shopengine'),
243 + 'docs' => 'https://wpmet.com/doc/elementskit/',
244 + ],
245 + 'getgenie/getgenie.php' => [
246 + 'name' => esc_html__('GetGenie', 'shopengine'),
247 + 'url' => 'https://wordpress.org/plugins/getgenie/',
248 + 'icon' => $apps_img_path.'getgenie.gif',
249 + 'desc' => esc_html__('Your personal AI assistant for content and SEO. Write content that ranks on Google with NLP keywords and SERP analysis data.', 'shopengine'),
250 + 'docs' => 'https://getgenie.ai/docs/',
251 + ],
252 + 'gutenkit-blocks-addon/gutenkit-blocks-addon.php' => [
253 + 'name' => esc_html__('GutenKit', 'shopengine'),
254 + 'url' => 'https://wordpress.org/plugins/gutenkit-blocks-addon/',
255 + 'icon' => $apps_img_path. 'guten-kit.png',
256 + 'desc' => esc_html__('Gutenberg blocks, patterns, and templates that extend the page-building experience using the WordPress block editor.', 'shopengine'),
257 + 'docs' => 'https://wpmet.com/doc/gutenkit/',
258 + ],
259 + 'metform/metform.php' => [
260 + 'name' => esc_html__('MetForm', 'shopengine'),
261 + 'url' => 'https://wordpress.org/plugins/metform/',
262 + 'icon' => $apps_img_path. 'metform.png',
263 + 'desc' => esc_html__('Drag & drop form builder for Elementor to create contact forms, multi-step forms, and more — smoother, faster, and better!', 'shopengine'),
264 + 'docs' => 'https://wpmet.com/doc/metform/',
265 + ],
266 + 'emailkit/EmailKit.php' => [
267 + 'name' => esc_html__('EmailKit', 'shopengine'),
268 + 'url' => 'https://wordpress.org/plugins/emailkit/',
269 + 'icon' => $apps_img_path . 'emailkit.png',
270 + 'desc' => esc_html__('Advanced email customizer for WooCommerce and WordPress. Build, customize, and send emails from WordPress to boost your sales!', 'shopengine'),
271 + 'docs' => 'https://wpmet.com/doc/emailkit/',
272 + ],
273 + 'wp-social/wp-social.php' => [
274 + 'name' => esc_html__('WP Social', 'shopengine'),
275 + 'url' => 'https://wordpress.org/plugins/wp-social/',
276 + 'icon' => $apps_img_path . 'wp-social.png',
277 + 'desc' => esc_html__('Add social share, login, and engagement counter — unified solution for all social media with tons of different styles for your website.', 'shopengine'),
278 + 'docs' => 'https://wpmet.com/doc/wp-social/',
279 + ],
280 + 'wp-ultimate-review/wp-ultimate-review.php' => [
281 + 'name' => esc_html__('WP Ultimate Review', 'shopengine'),
282 + 'url' => 'https://wordpress.org/plugins/wp-ultimate-review/',
283 + 'icon' => $apps_img_path . 'ultimate-review.png',
284 + 'desc' => esc_html__('Collect and showcase reviews on your website to build brand credibility and social proof with the easiest solution.','shopengine'),
285 + 'docs' => 'https://wpmet.com/doc/wp-ultimate-review/',
286 + ],
287 + 'wp-fundraising-donation/wp-fundraising.php' => [
288 + 'name' => esc_html__('FundEngine', 'shopengine'),
289 + 'url' => 'https://wordpress.org/plugins/wp-fundraising-donation/',
290 + 'icon' => $apps_img_path . 'fundengine.png',
291 + 'desc' => esc_html__('Create fundraising, crowdfunding, and donation websites with PayPal and Stripe payment gateway integration.', 'shopengine'),
292 + 'docs' => 'https://wpmet.com/doc/fundengine/',
293 + ],
294 + 'blocks-for-shopengine/shopengine-gutenberg-addon.php' => [
295 + 'name' => esc_html__('Blocks for ShopEngine', 'shopengine'),
296 + 'url' => 'https://wordpress.org/plugins/blocks-for-shopengine/',
297 + 'icon' => $apps_img_path. 'shopengine.gif',
298 + 'desc' => esc_html__('All in one WooCommerce solution for Gutenberg! Build your WooCommerce pages in a block editor with full customization.', 'shopengine'),
299 + 'docs' => 'https://wpmet.com/doc/shopengine/shopengine-gutenberg/',
300 + ],
301 + 'genie-image-ai/genie-image-ai.php' => [
302 + 'name' => esc_html__('Genie Image', 'shopengine'),
303 + 'url' => 'https://wordpress.org/plugins/genie-image-ai/',
304 + 'icon' => $apps_img_path . 'genie-image.png',
305 + 'desc' => esc_html__('AI-powered text-to-image generator for WordPress with OpenAI’s DALL-E 2 technology to generate high-quality images in one click.
306 + ', 'shopengine'),
307 + 'docs' => 'https://getgenie.ai/docs/',
308 + ],
309 + ]
310 + )
311 + ->call();
312 +
313 + // working get instance of elementor widget
314 + (new Manifest())->init();
315 + } );
316 +
317 +
318 +
319 + \ShopEngine\Core\MultiLanguage\Language::instance()->init();
320 +
176 321 \ShopEngine\Core\Settings\Base::instance()->init();
177 322
323 +
178 324 new Libs\Select_Api\Base();
179 325
180 326 (new Module_Manifest())->init();
181 327
182 - // working get instance of elementor widget
183 - (new Manifest())->init();
184 328
185 329 Query_Modifier::instance()->init();
186 330
187 331 (new Conflict_Manifest())->init();
@@ -190,9 +334,9 @@
190 334 add_action('get_header', [$this, 'shopengine_track_product_views']);
191 335
192 336 // database migrations
193 337 // (new \ShopEngine\Compatibility\Migrations\Migration())->init();
194 - (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
338 + // (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
195 339
196 340
197 341 // call service providers
198 342
@@ -206,11 +350,12 @@
206 350 }
207 351
208 352 }
209 353
354 + add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
210 355
211 -
212 - add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
356 + //it will register an option in customizer for woocommerce products catelog. It's related with our Arcive Products widget.
357 + Register_Settings::instance()->init();
213 358 }
214 359
215 360
216 361 // add async and defer attributes to enqueued scripts
@@ -242,9 +387,9 @@
242 387 $cookie_name = "shopengine_recent_viewed_product";
243 388
244 389 if(isset($_COOKIE[$cookie_name])) {
245 390
246 - $cookie_ids = $_COOKIE[$cookie_name];
391 + $cookie_ids = sanitize_text_field(wp_unslash($_COOKIE[$cookie_name]));
247 392 $product_ids = explode(',', $cookie_ids);
248 393
249 394 if(!is_array($product_ids)) {
250 395 $product_ids = [$product_ids];
@@ -280,12 +425,10 @@
280 425 * Include public function
281 426 *
282 427 * @since 1.0.0
283 428 */
284 - public function js_css_public() {
285 - wp_enqueue_style('shopengine-icon', \ShopEngine::plugin_url() . 'assets/css/shopengine-icon.css', false, \ShopEngine::version());
286 - wp_enqueue_style('shopengine-simple-scrollbar-css', \ShopEngine::plugin_url() . 'assets/css/simple-scrollbar.css', false, \ShopEngine::version());
287 - wp_enqueue_style('shopengine-public-css', \ShopEngine::plugin_url() . 'assets/css/public-style.css', false, \ShopEngine::version());
429 + public function js_css_public() {
430 + wp_register_style('shopengine-public', \ShopEngine::plugin_url() . 'assets/css/shopengine-public.css', false, \ShopEngine::version());
288 431
289 432 // Modal Stylesheet
290 433 wp_register_style('shopengine-modal-styles', \ShopEngine::plugin_url() . 'assets/css/shopengine-modal.css', false, \ShopEngine::version());
291 434
@@ -334,11 +477,11 @@
334 477
335 478
336 479 public function missing_woocommerce() {
337 480
338 - if(isset($_GET['activate'])) {
339 - unset($_GET['activate']);
340 - }
481 + if(!current_user_can('manage_options')) {
482 + return;
483 + }
341 484
342 485 if(file_exists(WP_PLUGIN_DIR . '/woocommerce/woocommerce.php')) {
343 486
344 487 $btn['label'] = esc_html__('Activate WooCommerce', 'shopengine');
@@ -354,8 +497,9 @@
354 497 [
355 498 'id' => 'missing-woo',
356 499 'type' => 'error',
357 500 'dismissible' => true,
501 + 'is_required' => true,
358 502 'btn' => $btn,
359 503 'message' => sprintf(esc_html__('ShopEngine requires woocommerce Plugin, which is currently NOT RUNNING.', 'shopengine'), '4.1.0'),
360 504 ]
361 505 );
@@ -363,11 +507,11 @@
363 507
364 508
365 509 public function missing_elementor() {
366 510
367 - if(isset($_GET['activate'])) {
368 - unset($_GET['activate']);
369 - }
511 + if(!current_user_can('manage_options')) {
512 + return;
513 + }
370 514
371 515 if(file_exists(WP_PLUGIN_DIR . '/elementor/elementor.php')) {
372 516
373 517 $btn['label'] = esc_html__('Activate Elementor', 'shopengine');
@@ -378,15 +522,28 @@
378 522 $btn['label'] = esc_html__('Install Elementor', 'shopengine');
379 523 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=elementor'), 'install-plugin_elementor');
380 524 }
381 525
526 + if(file_exists(WP_PLUGIN_DIR . '/blocks-for-shopengine/shopengine-gutenberg-addon.php')) {
527 +
528 + $btn2['label'] = esc_html__('Activate Blocks for ShopEngine', 'shopengine');
529 + $btn2['url'] = wp_nonce_url('plugins.php?action=activate&plugin=blocks-for-shopengine/shopengine-gutenberg-addon.php&plugin_status=all&paged=1', 'activate-plugin_blocks-for-shopengine/shopengine-gutenberg-addon.php');
530 +
531 + } else {
532 +
533 + $btn2['label'] = esc_html__('Install Blocks for ShopEngine', 'shopengine');
534 + $btn2['url'] = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=blocks-for-shopengine'), 'install-plugin_blocks-for-shopengine');
535 + }
536 +
382 537 Utils\Notice::push(
383 538 [
384 539 'id' => 'missing-elementor',
385 540 'type' => 'error',
541 + 'is_required' => true,
386 542 'dismissible' => true,
387 543 'btn' => $btn,
388 - 'message' => sprintf(esc_html__('ShopEngine requires Elementor version %1$s+, which is currently NOT RUNNING.', 'shopengine'), '3.0.0'),
544 + 'btn2' => $btn2,
545 + 'message' => esc_html__('To use ShopEngine, install Elementor (For the Elementor Builder) OR Blocks for ShopEngine (For Gutenberg Builder).', 'shopengine'),
389 546 ]
390 547 );
391 548 }
392 549
@@ -391,8 +548,12 @@
391 548 }
392 549
393 550
394 551 public function failed_elementor_version() {
552 +
553 + if(!current_user_can('manage_options')) {
554 + return;
555 + }
395 556
396 557 $btn['label'] = esc_html__('Update Elementor', 'shopengine');
397 558 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=elementor'), 'upgrade-plugin_elementor');
398 559