PluginProbe
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets / 1.7.0
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets v1.7.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 +87 -343 4.9.01.7.0 View file →
@@ -1,23 +1,18 @@
1 1 <?php
2 2
3 3 namespace ShopEngine;
4 4
5 -defined('ABSPATH') || exit;
6 -
7 5 use ShopEngine\Compatibility\Conflicts\Manifest as Conflict_Manifest;
8 6 use ShopEngine\Core\Builders\Base;
9 -use ShopEngine\Compatibility\Migrations\LangMigration;
10 7 use ShopEngine\Core\Query_Modifier;
11 -use ShopEngine\Core\Wc_Customizer\Register_Settings;
12 8 use ShopEngine\Core\Template_Cpt;
13 9 use ShopEngine\Libs\License\License_Route;
14 -use ShopEngine\Libs\Rating\Rating;
15 10 use ShopEngine\Libs\Updater\Init as Updater;
16 11 use ShopEngine\Modules\Manifest as Module_Manifest;
17 -use ShopEngine\Utils\Feedback\Plugin_Unsubscribe;
18 12 use ShopEngine\Widgets\Manifest;
19 13
14 +defined('ABSPATH') || exit;
20 15
21 16 /**
22 17 * Plugin final Class.
23 18 * Handles dynamically loading classes only when needed. Check Elementor Plugin, Woocomerce Plugin Loaded or Install.
@@ -34,15 +29,11 @@
34 29 */
35 30 public function __construct() {
36 31 // load autoload method
37 32 Autoloader::run();
38 - add_action( 'wp_ajax_shopengine_admin_action', [\ShopEngine\Utils\Util::class, 'shopengine_admin_action'] );
39 33 }
40 34
41 - public function utils_url()
42 - {
43 - return $this->plugin_url() . 'utils/';
44 - }
35 +
45 36 /**
46 37 * Public function init.
47 38 * call function for all
48 39 *
@@ -51,11 +42,8 @@
51 42 public function init() {
52 43
53 44 $error = false;
54 45
55 - // init notice class
56 - \Oxaim\Libs\Notice::init();
57 -
58 46 // check woocommerce plugin
59 47 if(!did_action('woocommerce_loaded')) {
60 48 add_action('admin_notices', [$this, 'missing_woocommerce']);
61 49
@@ -61,81 +49,34 @@
61 49
62 50 $error = true;
63 51 }
64 52
65 - $check_elementor_version = false;
66 -
67 53 // Check if Elementor installed and activated.
68 - if(!did_action('elementor/loaded')) {
54 + if(!did_action('elementor/loaded')) {
55 + add_action('admin_notices', [$this, 'missing_elementor']);
69 56
70 - if(!did_action('shopengine-gutenberg-addon/before_loaded')) {
57 + $error = true;
58 + }
71 59
72 - add_action('admin_notices', [$this, 'missing_elementor']);
73 -
74 - $error = true;
75 - }
76 - }
77 -
78 60 // Check for required Elementor version.
79 - if(did_action('elementor/loaded') && defined('ELEMENTOR_VERSION') && !version_compare(ELEMENTOR_VERSION, '3.0.0', '>=')) {
61 + if(defined('ELEMENTOR_VERSION') && !version_compare(ELEMENTOR_VERSION, '3.0.0', '>=')) {
62 + add_action('admin_notices', [$this, 'failed_elementor_version']);
80 63
81 - add_action('admin_notices', [$this, 'failed_elementor_version']);
64 + $error = true;
65 + }
82 66
83 - $error = true;
84 - }
67 + if($error) {
85 68
86 - if($error) {
87 69 return;
88 70 }
89 71
90 72
91 -
92 - add_filter("plugin_action_links_shopengine/shopengine.php", function ($links) {
93 - $free = esc_html__("Go To Shopengine","shopengine");
94 - $pro = esc_html__("Go To ShopenginePro","shopengine");
95 -
96 - $custom_links[] = '<a title="' . $free . '" href="'.admin_url('edit.php?post_type=shopengine-template#getting-started').'" target="_blank">' . esc_html__('Settings', 'shopengine') . '</a>';
97 -
98 - foreach ($custom_links as $custom_link):
99 - array_unshift($links, $custom_link);
100 - endforeach;
101 -
102 - if (!is_plugin_active('shopengine-pro/shopengine-pro.php')) {
103 - $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>';
104 - }
105 - return $links;
106 - });
107 -
108 - if(\ShopEngine\Utils\Util::get_settings( 'shopengine_user_consent_for_banner', 'true' ) == 'true'){
109 -
110 - /**
111 - * EmailKit Global Class initialization
112 - *
113 - */
114 - if( !class_exists('EmailKit') && !did_action('edit_with_emailkit_loaded') && class_exists('\Wpmet\Libs\Emailkit') ) {
115 -
116 - new \Wpmet\Libs\Emailkit();
117 - }
118 -
119 - /**
120 - * MetForm get free templates promotional class initialization
121 - *
122 - */
123 - if( !did_action('metform/after_load') && did_action('elementor/loaded') && class_exists('\Wpmet\Libs\Metform_Promo_Banner') ) {
124 -
125 - new \Wpmet\Libs\Metform_Promo_Banner();
126 - }
127 - }
128 -
129 -
130 73 /**
131 74 * Routes initialization
132 75 *
133 76 */
134 77 new License_Route();
135 -
136 - // Initialize deactivation feedback modal
137 - new \ShopEngine\Utils\Feedback\Plugin_Unsubscribe();
78 +
138 79 /**
139 80 * Run pro plugin updater here....
140 81 *
141 82 */
@@ -142,58 +83,71 @@
142 83 add_action('admin_init', function () {
143 84 if(class_exists('ShopEngine_Pro')) {
144 85 new Updater();
145 86 }
146 - new \ShopEngine\Compatibility\Migrations\Direct_Checkout;
87 +
147 88 });
148 89
90 + global $pagenow;
149 91
150 - add_action('wp_loaded', function () {
151 - /**
152 - * migrate data
153 - */
154 - LangMigration::instance()->init();
155 - });
92 + if(is_admin() && $pagenow == 'post.php' && $_REQUEST['action'] === 'edit') {
156 93
157 - // avoid themes for loading woocommerce functions
158 - $avoid_themes = ['avada', 'woodmart', 'Avada', 'Woodmart'];
94 + $pid = $_REQUEST['post'];
95 + $po = get_post($pid);
159 96
160 - if( !in_array(get_template(), $avoid_themes) ) {
161 - /**
162 - * Ensuring woocommerce functions are loaded before theme is modifying those
163 - *
164 - */
165 - require_once WC_ABSPATH . '/includes/wc-template-functions.php';
97 + if($po->post_type === Template_Cpt::TYPE) {
98 +
99 + $url = get_admin_url(). 'edit.php?post_type='.Template_Cpt::TYPE.'#'.Template_Cpt::TYPE;
100 +
101 + wp_safe_redirect( $url );
102 + exit;
103 + }
166 104 }
167 105
106 + add_action('wp_loaded', function (){
168 107
169 - if(did_action('elementor/loaded')) {
170 - // Load custom elementor controls
171 - new \ShopEngine\Core\Elementor_Controls\Init();
108 + if(isset($_REQUEST['preview']) && $_REQUEST['preview'] == 'true' && !empty($_REQUEST['preview_id'])) {
172 109
173 - //Loading the scripts and styles
174 - add_action('elementor/editor/after_enqueue_styles', [$this, 'js_css_elementor']);
175 -
176 - // Register widgets immediately after elementor is loaded with higher priority
177 - if(is_plugin_active('related-products-manager-woocommerce/related-products-manager-for-woocommerce.php')) {
110 + $pid = (int) $_REQUEST['preview_id'];
178 111
179 - add_action('elementor/widgets/register', function() {
180 - (new Manifest())->init();
181 - }, 5); // Priority 5 to load early
112 + $po = get_post($pid);
113 +
114 + if($po->post_type === Template_Cpt::TYPE) {
115 +
116 + $template = \ShopEngine\Core\Builders\Templates::get_registered_template_data($pid);
117 +
118 + if(empty($template) || !isset($template['url'])){
119 + return;
120 + }
121 +
122 + $param = [
123 + 'shopengine_template_id' => $pid,
124 + 'preview_nonce' => wp_create_nonce( 'template_preview_' . $pid ),
125 + 'change_template' => '1'
126 + ];
127 +
128 + $url = \ShopEngine\Utils\Helper::add_to_url($template['url'], $param);
129 +
130 + wp_safe_redirect( $url );
131 + exit;
132 + }
182 133 }
134 + });
183 135
184 - }
185 136
186 - // Cart validation compatibility with WC Min Max Quantity plugin
137 + /**
138 + * Ensuring woocommerce functions are loaded before theme is modifying those
139 + *
140 + */
141 + require_once WC_ABSPATH . '/includes/wc-template-functions.php';
187 142
188 - if ( function_exists( 'is_plugin_active' ) && is_plugin_active( 'woo-min-max-quantity-step-control-single/wcmmq.php' ) ) {
189 -
190 - add_filter( 'wcmmq_cart_validation_check', [ $this, 'shopengine_wcmmq_cart_validation_compat' ], 10, 2 );
191 - }
192 143
144 + // Load custom elementor controls
145 + new \ShopEngine\Core\Elementor_Controls\Init();
193 146
194 - //Loading public scripts and styles
147 + //Loading the scripts and styles
195 148 add_action('wp_enqueue_scripts', [$this, 'js_css_public']);
149 + add_action('elementor/editor/after_enqueue_styles', [$this, 'js_css_elementor']);
196 150
197 151 //woocommece theme support
198 152 if(!current_theme_supports('woocommerce')) {
199 153 add_theme_support('woocommerce');
@@ -201,255 +155,60 @@
201 155 add_theme_support('wc-product-gallery-lightbox');
202 156 add_theme_support('wc-product-gallery-slider');
203 157 }
204 158
205 -
206 - $filter_string = ''; // elementskit,metform-pro
207 - $filter_string .= ((!in_array('elementskit/elementskit.php', apply_filters('active_plugins', get_option('active_plugins')))) ? '' : ',elementskit');
208 - $filter_string .= (!class_exists('\MetForm\Plugin') ? '' : ',metform');
209 - $filter_string .= (!class_exists('\MetForm_Pro\Plugin') ? '' : ',metform-pro');
210 -
159 +
211 160 #Registering new post-type & etc
212 161 Base::instance()->init();
213 -
214 162
215 - Rating::instance('shopengine')
216 - ->set_plugin( 'ShopEngine', 'https://wpmet.com/wordpress.org/rating/shopengine' )
217 - ->set_rating_url( 'https://wordpress.org/support/plugin/shopengine/reviews/#new-post' )
218 - ->set_plugin_logo( 'https://ps.w.org/shopengine/assets/icon-256x256.gif?rev=2505061', 'width:150px !important' )
219 - ->set_priority( 11 )
220 - ->set_first_appear_day( 7 )
221 - ->set_condition( true )
222 - ->call();
223 -
224 - if ( is_admin() && \ShopEngine\Utils\Util::get_settings( 'shopengine_user_consent_for_banner', 'true' ) == 'true' ) {
225 -
226 - /**
227 - * Show WPMET stories widget in dashboard
228 - */
229 -
230 - \Wpmet\Libs\Stories::instance('shopengine')
231 -
232 - ->set_filter($filter_string)
233 - ->set_plugin('ShopEngine', 'https://wpmet.com/plugin/shopengine/')
234 - ->set_api_url('https://api.wpmet.com/public/stories/')
235 - ->call();
236 -
237 - // banner
238 - \Wpmet\Libs\Banner::instance('shopengine')
239 - ->set_filter(ltrim($filter_string, ','))
240 - ->set_api_url('https://api.wpmet.com/public/jhanda')
241 - ->set_plugin_screens('edit-shopengine-template')
242 - ->set_plugin_screens('edit-shopengine-template')
243 - ->call();
244 - }
245 -
246 - add_action('init', function () {
247 - $apps_img_path = \ShopEngine::plugin_url() . 'assets/images/apps-page/';
248 - /**
249 - * Show our plugins menu for others wpmet plugins
250 - */
251 - \ShopEngine\Wpmet\Libs\Plugins::instance()->init('shopengine')
252 - ->set_parent_menu_slug('shopengine-settings')
253 - ->set_submenu_name('Our Plugins')
254 - ->set_section_title('Get More out of Your WooCommerce Website!')
255 - ->set_section_description('Install other plugins from us and take your WooCommerce site to the next level for absolutely free!')
256 - ->set_items_per_row(4)
257 - ->set_plugins(
258 - [
259 - 'elementskit-lite/elementskit-lite.php' => [
260 - 'name' => esc_html__('ElementsKit', 'shopengine'),
261 - 'url' => 'https://wordpress.org/plugins/elementskit-lite/',
262 - 'icon' => $apps_img_path. 'elementskit.gif',
263 - 'desc' => esc_html__('All-in-one Elementor addon trusted by 1 Million+ users, makes your website builder process easier with ultimate freedom.', 'shopengine'),
264 - 'docs' => 'https://wpmet.com/doc/elementskit/',
265 - ],
266 - 'getgenie/getgenie.php' => [
267 - 'name' => esc_html__('GetGenie', 'shopengine'),
268 - 'url' => 'https://wordpress.org/plugins/getgenie/',
269 - 'icon' => $apps_img_path.'getgenie.gif',
270 - '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'),
271 - 'docs' => 'https://getgenie.ai/docs/',
272 - ],
273 - 'gutenkit-blocks-addon/gutenkit-blocks-addon.php' => [
274 - 'name' => esc_html__('GutenKit', 'shopengine'),
275 - 'url' => 'https://wordpress.org/plugins/gutenkit-blocks-addon/',
276 - 'icon' => $apps_img_path. 'guten-kit.png',
277 - 'desc' => esc_html__('Gutenberg blocks, patterns, and templates that extend the page-building experience using the WordPress block editor.', 'shopengine'),
278 - 'docs' => 'https://wpmet.com/doc/gutenkit/',
279 - ],
280 - 'metform/metform.php' => [
281 - 'name' => esc_html__('MetForm', 'shopengine'),
282 - 'url' => 'https://wordpress.org/plugins/metform/',
283 - 'icon' => $apps_img_path. 'metform.png',
284 - 'desc' => esc_html__('Drag & drop form builder for Elementor to create contact forms, multi-step forms, and more — smoother, faster, and better!', 'shopengine'),
285 - 'docs' => 'https://wpmet.com/doc/metform/',
286 - ],
287 - 'emailkit/EmailKit.php' => [
288 - 'name' => esc_html__('EmailKit', 'shopengine'),
289 - 'url' => 'https://wordpress.org/plugins/emailkit/',
290 - 'icon' => $apps_img_path . 'emailkit.png',
291 - 'desc' => esc_html__('Advanced email customizer for WooCommerce and WordPress. Build, customize, and send emails from WordPress to boost your sales!', 'shopengine'),
292 - 'docs' => 'https://wpmet.com/doc/emailkit/',
293 - ],
294 - 'wp-social/wp-social.php' => [
295 - 'name' => esc_html__('WP Social', 'shopengine'),
296 - 'url' => 'https://wordpress.org/plugins/wp-social/',
297 - 'icon' => $apps_img_path . 'wp-social.png',
298 - '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'),
299 - 'docs' => 'https://wpmet.com/doc/wp-social/',
300 - ],
301 - 'wp-ultimate-review/wp-ultimate-review.php' => [
302 - 'name' => esc_html__('WP Ultimate Review', 'shopengine'),
303 - 'url' => 'https://wordpress.org/plugins/wp-ultimate-review/',
304 - 'icon' => $apps_img_path . 'ultimate-review.png',
305 - 'desc' => esc_html__('Collect and showcase reviews on your website to build brand credibility and social proof with the easiest solution.','shopengine'),
306 - 'docs' => 'https://wpmet.com/doc/wp-ultimate-review/',
307 - ],
308 - 'wp-fundraising-donation/wp-fundraising.php' => [
309 - 'name' => esc_html__('FundEngine', 'shopengine'),
310 - 'url' => 'https://wordpress.org/plugins/wp-fundraising-donation/',
311 - 'icon' => $apps_img_path . 'fundengine.png',
312 - 'desc' => esc_html__('Create fundraising, crowdfunding, and donation websites with PayPal and Stripe payment gateway integration.', 'shopengine'),
313 - 'docs' => 'https://wpmet.com/doc/fundengine/',
314 - ],
315 - 'blocks-for-shopengine/shopengine-gutenberg-addon.php' => [
316 - 'name' => esc_html__('Blocks for ShopEngine', 'shopengine'),
317 - 'url' => 'https://wordpress.org/plugins/blocks-for-shopengine/',
318 - 'icon' => $apps_img_path. 'shopengine.gif',
319 - 'desc' => esc_html__('All in one WooCommerce solution for Gutenberg! Build your WooCommerce pages in a block editor with full customization.', 'shopengine'),
320 - 'docs' => 'https://wpmet.com/doc/shopengine/shopengine-gutenberg/',
321 - ],
322 - 'genie-image-ai/genie-image-ai.php' => [
323 - 'name' => esc_html__('Genie Image', 'shopengine'),
324 - 'url' => 'https://wordpress.org/plugins/genie-image-ai/',
325 - 'icon' => $apps_img_path . 'genie-image.png',
326 - '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.
327 - ', 'shopengine'),
328 - 'docs' => 'https://getgenie.ai/docs/',
329 - ],
330 - ]
331 - )
332 - ->call();
333 -
334 - // working get instance of elementor widget
335 - (new Manifest())->init();
336 - } );
337 -
338 -
339 -
340 - \ShopEngine\Core\MultiLanguage\Language::instance()->init();
341 -
342 163 \ShopEngine\Core\Settings\Base::instance()->init();
343 164
165 + (new Module_Manifest)->init();
344 166
345 - new Libs\Select_Api\Base();
167 + // working get instance of elementor widget
168 + (new Manifest)->init();
346 169
347 - (new Module_Manifest())->init();
348 -
349 -
350 170 Query_Modifier::instance()->init();
351 171
352 - (new Conflict_Manifest())->init();
172 + (new Conflict_Manifest)->init();
353 173
354 174 // view count
355 - add_action('get_header', [$this, 'shopengine_track_product_views']);
175 + add_action('wp_head', [$this, 'shopengine_track_product_views']);
356 176
357 177 // database migrations
358 178 // (new \ShopEngine\Compatibility\Migrations\Migration())->init();
359 - // (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
179 + (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
360 180
361 -
362 - // call service providers
363 -
364 - $service_providers = include \ShopEngine::plugin_dir().'core/service-provider-manager.php';
365 - $method = 'init';
366 - foreach( $service_providers as $service_provider ){
367 -
368 - if(class_exists($service_provider) && method_exists($service_provider, $method)) {
369 - $instance = new $service_provider();
370 - $instance->$method();
371 - }
372 -
373 - }
374 -
375 181 add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
376 -
377 - //it will register an option in customizer for woocommerce products catelog. It's related with our Arcive Products widget.
378 - Register_Settings::instance()->init();
379 182 }
380 183
381 - public function shopengine_wcmmq_cart_validation_compat( $check, $request ) {
382 -
383 - $cart_widget_flag = isset( $_REQUEST['shopengine_cart_widget'] )
384 - ? sanitize_text_field( wp_unslash( $_REQUEST['shopengine_cart_widget'] ) )
385 - : '';
386 - $cart_widget_nonce = isset( $_REQUEST['shopengine_cart_widget_nonce'] )
387 - ? sanitize_text_field( wp_unslash( $_REQUEST['shopengine_cart_widget_nonce'] ) )
388 - : '';
389 184
390 - if ( $cart_widget_flag === '1' && wp_verify_nonce( $cart_widget_nonce, 'shopengine_cart_widget' ) ) {
391 - return false; // Skip WC MMQ validation for verified ShopEngine cart widget requests
392 - }
393 - return $check; // Proceed with normal validation for other requests
394 - }
185 + // add async and defer attributes to enqueued scripts
186 + public function filter_load_type($tag, $handle, $src) {
395 187
188 + if (strpos($handle, '-async') !== false) {
189 + $tag = str_replace(' src', ' async="async" src', $tag);
190 + }
396 191
192 + if (strpos($handle, '-defer') !== false) {
193 + $tag = str_replace('<script ', '<script defer ', $tag);
194 + }
397 195
398 -
399 -
400 - // add async and defer attributes to enqueued scripts
401 - public function filter_load_type($tag, $handle, $src) {
402 -
403 - if(strpos($handle, '-async') !== false) {
404 - $tag = str_replace(' src', ' async="async" src', $tag);
196 + return $tag;
405 197 }
406 198
407 - if(strpos($handle, '-defer') !== false) {
408 - $tag = str_replace('<script ', '<script defer ', $tag);
409 - }
410 -
411 - return $tag;
412 - }
413 -
414 199 /**
415 200 * Public function shopengine_track_product_views
416 201 * Adding Product Views Count Meta
417 202 */
418 - public function shopengine_track_product_views() {
419 -
203 + public function shopengine_track_product_views($product_id) {
420 204 if(class_exists('WooCommerce') && !is_product()) {
421 205 return;
422 206 }
423 -
424 207 $product_id = get_the_id();
425 208
426 - $cookie_name = "shopengine_recent_viewed_product";
427 -
428 - if(isset($_COOKIE[$cookie_name])) {
429 -
430 - $cookie_ids = sanitize_text_field(wp_unslash($_COOKIE[$cookie_name]));
431 - $product_ids = explode(',', $cookie_ids);
432 -
433 - if(!is_array($product_ids)) {
434 - $product_ids = [$product_ids];
435 - }
436 -
437 - $product_ids = array_combine($product_ids, $product_ids);
438 - unset($product_ids[$product_id]);
439 - $product_ids[] = $product_id;
440 -
441 - $cookie_value = implode(',', $product_ids);
442 -
443 - } else {
444 - $cookie_value = $product_id;
445 - }
446 -
447 - setcookie($cookie_name, $cookie_value, strtotime('+30 days'), '/' );
448 -
449 209 $count_key = 'shopengine_product_views_count';
450 210 $count = get_post_meta($product_id, $count_key, true);
451 -
452 211 if($count == '') {
453 212 $count = 1;
454 213 delete_post_meta($product_id, $count_key);
455 214 add_post_meta($product_id, $count_key, '1');
@@ -464,10 +223,12 @@
464 223 * Include public function
465 224 *
466 225 * @since 1.0.0
467 226 */
468 - public function js_css_public() {
469 - wp_register_style('shopengine-public', \ShopEngine::plugin_url() . 'assets/css/shopengine-public.css', false, \ShopEngine::version());
227 + public function js_css_public() {
228 + wp_enqueue_style('shopengine-icon', \ShopEngine::plugin_url() . 'assets/css/shopengine-icon.css', false, \ShopEngine::version());
229 + wp_enqueue_style('shopengine-simple-scrollbar-css', \ShopEngine::plugin_url() . 'assets/css/simple-scrollbar.css', false, \ShopEngine::version());
230 + wp_enqueue_style('shopengine-public-css', \ShopEngine::plugin_url() . 'assets/css/public-style.css', false, \ShopEngine::version());
470 231
471 232 // Modal Stylesheet
472 233 wp_register_style('shopengine-modal-styles', \ShopEngine::plugin_url() . 'assets/css/shopengine-modal.css', false, \ShopEngine::version());
473 234
@@ -516,11 +277,11 @@
516 277
517 278
518 279 public function missing_woocommerce() {
519 280
520 - if(!current_user_can('manage_options')) {
521 - return;
522 - }
281 + if(isset($_GET['activate'])) {
282 + unset($_GET['activate']);
283 + }
523 284
524 285 if(file_exists(WP_PLUGIN_DIR . '/woocommerce/woocommerce.php')) {
525 286
526 287 $btn['label'] = esc_html__('Activate WooCommerce', 'shopengine');
@@ -536,9 +297,8 @@
536 297 [
537 298 'id' => 'missing-woo',
538 299 'type' => 'error',
539 300 'dismissible' => true,
540 - 'is_required' => true,
541 301 'btn' => $btn,
542 302 'message' => sprintf(esc_html__('ShopEngine requires woocommerce Plugin, which is currently NOT RUNNING.', 'shopengine'), '4.1.0'),
543 303 ]
544 304 );
@@ -546,11 +306,11 @@
546 306
547 307
548 308 public function missing_elementor() {
549 309
550 - if(!current_user_can('manage_options')) {
551 - return;
552 - }
310 + if(isset($_GET['activate'])) {
311 + unset($_GET['activate']);
312 + }
553 313
554 314 if(file_exists(WP_PLUGIN_DIR . '/elementor/elementor.php')) {
555 315
556 316 $btn['label'] = esc_html__('Activate Elementor', 'shopengine');
@@ -561,28 +321,15 @@
561 321 $btn['label'] = esc_html__('Install Elementor', 'shopengine');
562 322 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=elementor'), 'install-plugin_elementor');
563 323 }
564 324
565 - if(file_exists(WP_PLUGIN_DIR . '/blocks-for-shopengine/shopengine-gutenberg-addon.php')) {
566 -
567 - $btn2['label'] = esc_html__('Activate Blocks for ShopEngine', 'shopengine');
568 - $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');
569 -
570 - } else {
571 -
572 - $btn2['label'] = esc_html__('Install Blocks for ShopEngine', 'shopengine');
573 - $btn2['url'] = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=blocks-for-shopengine'), 'install-plugin_blocks-for-shopengine');
574 - }
575 -
576 325 Utils\Notice::push(
577 326 [
578 327 'id' => 'missing-elementor',
579 328 'type' => 'error',
580 - 'is_required' => true,
581 329 'dismissible' => true,
582 330 'btn' => $btn,
583 - 'btn2' => $btn2,
584 - 'message' => esc_html__('To use ShopEngine, install Elementor (For the Elementor Builder) OR Blocks for ShopEngine (For Gutenberg Builder).', 'shopengine'),
331 + 'message' => sprintf(esc_html__('ShopEngine requires Elementor version %1$s+, which is currently NOT RUNNING.', 'shopengine'), '3.0.0'),
585 332 ]
586 333 );
587 334 }
588 335
@@ -588,12 +335,8 @@
588 335
589 336
590 337 public function failed_elementor_version() {
591 338
592 - if(!current_user_can('manage_options')) {
593 - return;
594 - }
595 -
596 339 $btn['label'] = esc_html__('Update Elementor', 'shopengine');
597 340 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=elementor'), 'upgrade-plugin_elementor');
598 341
599 342 Utils\Notice::push(
@@ -620,5 +363,6 @@
620 363 }
621 364
622 365 return self::$instance;
623 366 }
367 +
624 368 }