PluginProbe
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets / 4.8.0
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets v4.8.0
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 +191 -37 3.1.14.8.0 View file →
@@ -1,12 +1,15 @@
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;
7 9 use ShopEngine\Compatibility\Migrations\LangMigration;
8 10 use ShopEngine\Core\Query_Modifier;
11 +use ShopEngine\Core\Wc_Customizer\Register_Settings;
9 12 use ShopEngine\Core\Template_Cpt;
10 13 use ShopEngine\Libs\License\License_Route;
11 14 use ShopEngine\Libs\Rating\Rating;
12 15 use ShopEngine\Libs\Updater\Init as Updater;
@@ -12,9 +15,8 @@
12 15 use ShopEngine\Libs\Updater\Init as Updater;
13 16 use ShopEngine\Modules\Manifest as Module_Manifest;
14 17 use ShopEngine\Widgets\Manifest;
15 18
16 -defined('ABSPATH') || exit;
17 19
18 20 /**
19 21 * Plugin final Class.
20 22 * Handles dynamically loading classes only when needed. Check Elementor Plugin, Woocomerce Plugin Loaded or Install.
@@ -31,11 +33,15 @@
31 33 */
32 34 public function __construct() {
33 35 // load autoload method
34 36 Autoloader::run();
37 + add_action( 'wp_ajax_shopengine_admin_action', [\ShopEngine\Utils\Util::class, 'shopengine_admin_action'] );
35 38 }
36 39
37 -
40 + public function utils_url()
41 + {
42 + return $this->plugin_url() . 'utils/';
43 + }
38 44 /**
39 45 * Public function init.
40 46 * call function for all
41 47 *
@@ -44,8 +50,11 @@
44 50 public function init() {
45 51
46 52 $error = false;
47 53
54 + // init notice class
55 + \Oxaim\Libs\Notice::init();
56 +
48 57 // check woocommerce plugin
49 58 if(!did_action('woocommerce_loaded')) {
50 59 add_action('admin_notices', [$this, 'missing_woocommerce']);
51 60
@@ -92,9 +101,30 @@
92 101 }
93 102 return $links;
94 103 });
95 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 + }
96 125
126 +
97 127 /**
98 128 * Routes initialization
99 129 *
100 130 */
@@ -112,46 +142,18 @@
112 142 });
113 143
114 144
115 145 add_action('wp_loaded', function () {
116 - //phpcs:ignore WordPress.Security.NonceVerification.Recommended --It's a fronted user part, not possible to verify nonce here
117 - if(isset($_REQUEST['preview']) && $_REQUEST['preview'] == 'true' && !empty($_REQUEST['preview_id'])) {
118 -
119 - $pid = (int)$_REQUEST['preview_id']; //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- It's a fronted user part, not possible to verify nonce here
120 -
121 - $po = get_post($pid);
122 -
123 - if($po->post_type === Template_Cpt::TYPE) {
124 -
125 - $template = \ShopEngine\Core\Builders\Templates::get_registered_template_data($pid);
126 -
127 - if(empty($template) || !isset($template['url'])) {
128 - return;
129 - }
130 -
131 - $param = [
132 - 'shopengine_template_id' => $pid,
133 - 'preview_nonce' => wp_create_nonce('template_preview_' . $pid),
134 - 'change_template' => '1',
135 - ];
136 -
137 - $url = \ShopEngine\Utils\Helper::add_to_url($template['url'], $param);
138 -
139 - wp_safe_redirect($url);
140 - exit;
141 - }
142 - }
143 -
144 146 /**
145 147 * migrate data
146 - */
148 + */
147 149 LangMigration::instance()->init();
148 150 });
149 151
150 152 // avoid themes for loading woocommerce functions
151 - $avoid_themes = ['avada', 'avada child'];
153 + $avoid_themes = ['avada', 'woodmart', 'Avada', 'Woodmart'];
152 154
153 - if(!in_array(strtolower(wp_get_theme()), $avoid_themes)) {
155 + if( !in_array(get_template(), $avoid_themes) ) {
154 156 /**
155 157 * Ensuring woocommerce functions are loaded before theme is modifying those
156 158 *
157 159 */
@@ -178,29 +180,152 @@
178 180 add_theme_support('wc-product-gallery-lightbox');
179 181 add_theme_support('wc-product-gallery-slider');
180 182 }
181 183
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 +
182 190 #Registering new post-type & etc
183 191 Base::instance()->init();
192 +
184 193
185 194 Rating::instance('shopengine')
186 195 ->set_plugin( 'ShopEngine', 'https://wpmet.com/wordpress.org/rating/shopengine' )
196 + ->set_rating_url( 'https://wordpress.org/support/plugin/shopengine/reviews/#new-post' )
187 197 ->set_plugin_logo( 'https://ps.w.org/shopengine/assets/icon-256x256.gif?rev=2505061', 'width:150px !important' )
188 - ->set_priority( 10 )
198 + ->set_priority( 11 )
189 199 ->set_first_appear_day( 7 )
190 200 ->set_condition( true )
191 201 ->call();
202 +
203 + if ( is_admin() && \ShopEngine\Utils\Util::get_settings( 'shopengine_user_consent_for_banner', 'true' ) == 'true' ) {
192 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 +
193 319 \ShopEngine\Core\MultiLanguage\Language::instance()->init();
194 320
195 321 \ShopEngine\Core\Settings\Base::instance()->init();
196 322
323 +
197 324 new Libs\Select_Api\Base();
198 325
199 326 (new Module_Manifest())->init();
200 327
201 - // working get instance of elementor widget
202 - (new Manifest())->init();
203 328
204 329 Query_Modifier::instance()->init();
205 330
206 331 (new Conflict_Manifest())->init();
@@ -226,8 +351,11 @@
226 351
227 352 }
228 353
229 354 add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
355 +
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();
230 358 }
231 359
232 360
233 361 // add async and defer attributes to enqueued scripts
@@ -349,8 +477,12 @@
349 477
350 478
351 479 public function missing_woocommerce() {
352 480
481 + if(!current_user_can('manage_options')) {
482 + return;
483 + }
484 +
353 485 if(file_exists(WP_PLUGIN_DIR . '/woocommerce/woocommerce.php')) {
354 486
355 487 $btn['label'] = esc_html__('Activate WooCommerce', 'shopengine');
356 488 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=woocommerce/woocommerce.php&plugin_status=all&paged=1', 'activate-plugin_woocommerce/woocommerce.php');
@@ -365,8 +497,9 @@
365 497 [
366 498 'id' => 'missing-woo',
367 499 'type' => 'error',
368 500 'dismissible' => true,
501 + 'is_required' => true,
369 502 'btn' => $btn,
370 503 'message' => sprintf(esc_html__('ShopEngine requires woocommerce Plugin, which is currently NOT RUNNING.', 'shopengine'), '4.1.0'),
371 504 ]
372 505 );
@@ -374,8 +507,12 @@
374 507
375 508
376 509 public function missing_elementor() {
377 510
511 + if(!current_user_can('manage_options')) {
512 + return;
513 + }
514 +
378 515 if(file_exists(WP_PLUGIN_DIR . '/elementor/elementor.php')) {
379 516
380 517 $btn['label'] = esc_html__('Activate Elementor', 'shopengine');
381 518 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=elementor/elementor.php&plugin_status=all&paged=1', 'activate-plugin_elementor/elementor.php');
@@ -385,15 +522,28 @@
385 522 $btn['label'] = esc_html__('Install Elementor', 'shopengine');
386 523 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=elementor'), 'install-plugin_elementor');
387 524 }
388 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 +
389 537 Utils\Notice::push(
390 538 [
391 539 'id' => 'missing-elementor',
392 540 'type' => 'error',
541 + 'is_required' => true,
393 542 'dismissible' => true,
394 543 'btn' => $btn,
395 - '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'),
396 546 ]
397 547 );
398 548 }
399 549
@@ -398,8 +548,12 @@
398 548 }
399 549
400 550
401 551 public function failed_elementor_version() {
552 +
553 + if(!current_user_can('manage_options')) {
554 + return;
555 + }
402 556
403 557 $btn['label'] = esc_html__('Update Elementor', 'shopengine');
404 558 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=elementor'), 'upgrade-plugin_elementor');
405 559