PluginProbe
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets / 4.6.5
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets v4.6.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 +167 -43 2.5.14.6.5 View file →
@@ -1,11 +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;
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;
10 14 use ShopEngine\Libs\Rating\Rating;
11 15 use ShopEngine\Libs\Updater\Init as Updater;
@@ -11,9 +15,8 @@
11 15 use ShopEngine\Libs\Updater\Init as Updater;
12 16 use ShopEngine\Modules\Manifest as Module_Manifest;
13 17 use ShopEngine\Widgets\Manifest;
14 18
15 -defined('ABSPATH') || exit;
16 19
17 20 /**
18 21 * Plugin final Class.
19 22 * Handles dynamically loading classes only when needed. Check Elementor Plugin, Woocomerce Plugin Loaded or Install.
@@ -30,11 +33,15 @@
30 33 */
31 34 public function __construct() {
32 35 // load autoload method
33 36 Autoloader::run();
37 + add_action( 'wp_ajax_shopengine_admin_action', [\ShopEngine\Utils\Util::class, 'shopengine_admin_action'] );
34 38 }
35 39
36 -
40 + public function utils_url()
41 + {
42 + return $this->plugin_url() . 'utils/';
43 + }
37 44 /**
38 45 * Public function init.
39 46 * call function for all
40 47 *
@@ -43,8 +50,11 @@
43 50 public function init() {
44 51
45 52 $error = false;
46 53
54 + // init notice class
55 + \Oxaim\Libs\Notice::init();
56 +
47 57 // check woocommerce plugin
48 58 if(!did_action('woocommerce_loaded')) {
49 59 add_action('admin_notices', [$this, 'missing_woocommerce']);
50 60
@@ -86,14 +96,23 @@
86 96 array_unshift($links, $custom_link);
87 97 endforeach;
88 98
89 99 if (!is_plugin_active('shopengine-pro/shopengine-pro.php')) {
90 - $links[] = '<a title="' . $pro . '" 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>';
91 101 }
92 102 return $links;
93 103 });
94 104
105 + /**
106 + * EmailKit Global Class initialization
107 + *
108 + */
109 + if( !did_action('edit_with_emailkit_loaded') && class_exists('\Wpmet\Libs\Emailkit') && \ShopEngine\Utils\Util::get_settings( 'shopengine_user_consent_for_banner', 'true' ) == 'true' ) {
95 110
111 + new \Wpmet\Libs\Emailkit();
112 + }
113 +
114 +
96 115 /**
97 116 * Routes initialization
98 117 *
99 118 */
@@ -106,44 +125,21 @@
106 125 add_action('admin_init', function () {
107 126 if(class_exists('ShopEngine_Pro')) {
108 127 new Updater();
109 128 }
129 + new \ShopEngine\Compatibility\Migrations\Direct_Checkout;
110 130 });
111 131
112 132
113 133 add_action('wp_loaded', function () {
114 -
115 - if(isset($_REQUEST['preview']) && $_REQUEST['preview'] == 'true' && !empty($_REQUEST['preview_id'])) {
116 -
117 - $pid = (int)$_REQUEST['preview_id'];
118 -
119 - $po = get_post($pid);
120 -
121 - if($po->post_type === Template_Cpt::TYPE) {
122 -
123 - $template = \ShopEngine\Core\Builders\Templates::get_registered_template_data($pid);
124 -
125 - if(empty($template) || !isset($template['url'])) {
126 - return;
127 - }
128 -
129 - $param = [
130 - 'shopengine_template_id' => $pid,
131 - 'preview_nonce' => wp_create_nonce('template_preview_' . $pid),
132 - 'change_template' => '1',
133 - ];
134 -
135 - $url = \ShopEngine\Utils\Helper::add_to_url($template['url'], $param);
136 -
137 - wp_safe_redirect($url);
138 - exit;
139 - }
140 - }
134 + /**
135 + * migrate data
136 + */
137 + LangMigration::instance()->init();
141 138 });
142 139
143 140 // avoid themes for loading woocommerce functions
144 - $avoid_themes = ['avada', 'avada child'];
145 -
141 + $avoid_themes = ['avada', 'avada child', 'woodmart', 'woodmart child'];
146 142 if(!in_array(strtolower(wp_get_theme()), $avoid_themes)) {
147 143 /**
148 144 * Ensuring woocommerce functions are loaded before theme is modifying those
149 145 *
@@ -171,21 +167,142 @@
171 167 add_theme_support('wc-product-gallery-lightbox');
172 168 add_theme_support('wc-product-gallery-slider');
173 169 }
174 170
171 +
172 + $filter_string = ''; // elementskit,metform-pro
173 + $filter_string .= ((!in_array('elementskit/elementskit.php', apply_filters('active_plugins', get_option('active_plugins')))) ? '' : ',elementskit');
174 + $filter_string .= (!class_exists('\MetForm\Plugin') ? '' : ',metform');
175 + $filter_string .= (!class_exists('\MetForm_Pro\Plugin') ? '' : ',metform-pro');
176 +
175 177 #Registering new post-type & etc
176 178 Base::instance()->init();
179 +
177 180
178 181 Rating::instance('shopengine')
179 182 ->set_plugin( 'ShopEngine', 'https://wpmet.com/wordpress.org/rating/shopengine' )
180 183 ->set_plugin_logo( 'https://ps.w.org/shopengine/assets/icon-256x256.gif?rev=2505061', 'width:150px !important' )
181 - ->set_priority( 10 )
184 + ->set_priority( 11 )
182 185 ->set_first_appear_day( 7 )
183 186 ->set_condition( true )
184 187 ->call();
188 +
189 + if ( is_admin() && \ShopEngine\Utils\Util::get_settings( 'shopengine_user_consent_for_banner', 'true' ) == 'true' ) {
185 190
191 + /**
192 + * Show WPMET stories widget in dashboard
193 + */
194 +
195 + \Wpmet\Libs\Stories::instance('shopengine')
196 +
197 + ->set_filter($filter_string)
198 + ->set_plugin('ShopEngine', 'https://wpmet.com/plugin/shopengine/')
199 + ->set_api_url('https://api.wpmet.com/public/stories/')
200 + ->call();
201 +
202 + // banner
203 + \Wpmet\Libs\Banner::instance('shopengine')
204 + ->set_filter(ltrim($filter_string, ','))
205 + ->set_api_url('https://api.wpmet.com/public/jhanda')
206 + ->set_plugin_screens('edit-shopengine-template')
207 + ->set_plugin_screens('edit-shopengine-template')
208 + ->call();
209 + }
210 +
211 + $apps_img_path = \ShopEngine::plugin_url() . 'assets/images/apps-page/';
212 + /**
213 + * Show our plugins menu for others wpmet plugins
214 + */
215 + \ShopEngine\Wpmet\Libs\Plugins::instance()->init('shopengine')
216 + ->set_parent_menu_slug('shopengine-settings')
217 + ->set_submenu_name('Our Plugins')
218 + ->set_section_title('Get More out of Your WooCommerce Website!')
219 + ->set_section_description('Install other plugins from us and take your WooCommerce site to the next level for absolutely free!')
220 + ->set_items_per_row(4)
221 + ->set_plugins(
222 + [
223 + 'elementskit-lite/elementskit-lite.php' => [
224 + 'name' => esc_html__('ElementsKit', 'shopengine'),
225 + 'url' => 'https://wordpress.org/plugins/elementskit-lite/',
226 + 'icon' => $apps_img_path. 'elementskit.gif',
227 + 'desc' => esc_html__('All-in-one Elementor addon trusted by 1 Million+ users, makes your website builder process easier with ultimate freedom.', 'shopengine'),
228 + 'docs' => 'https://wpmet.com/doc/elementskit/',
229 + ],
230 + 'getgenie/getgenie.php' => [
231 + 'name' => esc_html__('GetGenie', 'shopengine'),
232 + 'url' => 'https://wordpress.org/plugins/getgenie/',
233 + 'icon' => $apps_img_path.'getgenie.gif',
234 + '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'),
235 + 'docs' => 'https://getgenie.ai/docs/',
236 + ],
237 + 'gutenkit-blocks-addon/gutenkit-blocks-addon.php' => [
238 + 'name' => esc_html__('GutenKit', 'shopengine'),
239 + 'url' => 'https://wordpress.org/plugins/gutenkit-blocks-addon/',
240 + 'icon' => $apps_img_path. 'guten-kit.png',
241 + 'desc' => esc_html__('Gutenberg blocks, patterns, and templates that extend the page-building experience using the WordPress block editor.', 'shopengine'),
242 + 'docs' => 'https://wpmet.com/doc/gutenkit/',
243 + ],
244 + 'metform/metform.php' => [
245 + 'name' => esc_html__('MetForm', 'shopengine'),
246 + 'url' => 'https://wordpress.org/plugins/metform/',
247 + 'icon' => $apps_img_path. 'metform.png',
248 + 'desc' => esc_html__('Drag & drop form builder for Elementor to create contact forms, multi-step forms, and more — smoother, faster, and better!', 'shopengine'),
249 + 'docs' => 'https://wpmet.com/doc/metform/',
250 + ],
251 + 'emailkit/EmailKit.php' => [
252 + 'name' => esc_html__('EmailKit', 'shopengine'),
253 + 'url' => 'https://wordpress.org/plugins/emailkit/',
254 + 'icon' => $apps_img_path . 'emailkit.png',
255 + 'desc' => esc_html__('Advanced email customizer for WooCommerce and WordPress. Build, customize, and send emails from WordPress to boost your sales!', 'shopengine'),
256 + 'docs' => 'https://wpmet.com/doc/emailkit/',
257 + ],
258 + 'wp-social/wp-social.php' => [
259 + 'name' => esc_html__('WP Social', 'shopengine'),
260 + 'url' => 'https://wordpress.org/plugins/wp-social/',
261 + 'icon' => $apps_img_path . 'wp-social.png',
262 + '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'),
263 + 'docs' => 'https://wpmet.com/doc/wp-social/',
264 + ],
265 + 'wp-ultimate-review/wp-ultimate-review.php' => [
266 + 'name' => esc_html__('WP Ultimate Review', 'shopengine'),
267 + 'url' => 'https://wordpress.org/plugins/wp-ultimate-review/',
268 + 'icon' => $apps_img_path . 'ultimate-review.png',
269 + 'desc' => esc_html__('Collect and showcase reviews on your website to build brand credibility and social proof with the easiest solution.','shopengine'),
270 + 'docs' => 'https://wpmet.com/doc/wp-ultimate-review/',
271 + ],
272 + 'wp-fundraising-donation/wp-fundraising.php' => [
273 + 'name' => esc_html__('FundEngine', 'shopengine'),
274 + 'url' => 'https://wordpress.org/plugins/wp-fundraising-donation/',
275 + 'icon' => $apps_img_path . 'fundengine.png',
276 + 'desc' => esc_html__('Create fundraising, crowdfunding, and donation websites with PayPal and Stripe payment gateway integration.', 'shopengine'),
277 + 'docs' => 'https://wpmet.com/doc/fundengine/',
278 + ],
279 + 'blocks-for-shopengine/shopengine-gutenberg-addon.php' => [
280 + 'name' => esc_html__('Blocks for ShopEngine', 'shopengine'),
281 + 'url' => 'https://wordpress.org/plugins/blocks-for-shopengine/',
282 + 'icon' => $apps_img_path. 'shopengine.gif',
283 + 'desc' => esc_html__('All in one WooCommerce solution for Gutenberg! Build your WooCommerce pages in a block editor with full customization.', 'shopengine'),
284 + 'docs' => 'https://wpmet.com/doc/shopengine/shopengine-gutenberg/',
285 + ],
286 + 'genie-image-ai/genie-image-ai.php' => [
287 + 'name' => esc_html__('Genie Image', 'shopengine'),
288 + 'url' => 'https://wordpress.org/plugins/genie-image-ai/',
289 + 'icon' => $apps_img_path . 'genie-image.png',
290 + '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.
291 + ', 'shopengine'),
292 + 'docs' => 'https://getgenie.ai/docs/',
293 + ],
294 + ]
295 + )
296 + ->call();
297 +
298 +
299 +
300 + \ShopEngine\Core\MultiLanguage\Language::instance()->init();
301 +
186 302 \ShopEngine\Core\Settings\Base::instance()->init();
187 303
304 +
188 305 new Libs\Select_Api\Base();
189 306
190 307 (new Module_Manifest())->init();
191 308
@@ -200,9 +317,9 @@
200 317 add_action('get_header', [$this, 'shopengine_track_product_views']);
201 318
202 319 // database migrations
203 320 // (new \ShopEngine\Compatibility\Migrations\Migration())->init();
204 - (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
321 + // (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
205 322
206 323
207 324 // call service providers
208 325
@@ -216,11 +333,12 @@
216 333 }
217 334
218 335 }
219 336
337 + add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
220 338
221 -
222 - add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
339 + //it will register an option in customizer for woocommerce products catelog. It's related with our Arcive Products widget.
340 + Register_Settings::instance()->init();
223 341 }
224 342
225 343
226 344 // add async and defer attributes to enqueued scripts
@@ -252,9 +370,9 @@
252 370 $cookie_name = "shopengine_recent_viewed_product";
253 371
254 372 if(isset($_COOKIE[$cookie_name])) {
255 373
256 - $cookie_ids = $_COOKIE[$cookie_name];
374 + $cookie_ids = sanitize_text_field(wp_unslash($_COOKIE[$cookie_name]));
257 375 $product_ids = explode(',', $cookie_ids);
258 376
259 377 if(!is_array($product_ids)) {
260 378 $product_ids = [$product_ids];
@@ -342,11 +460,11 @@
342 460
343 461
344 462 public function missing_woocommerce() {
345 463
346 - if(isset($_GET['activate'])) {
347 - unset($_GET['activate']);
348 - }
464 + if(!current_user_can('manage_options')) {
465 + return;
466 + }
349 467
350 468 if(file_exists(WP_PLUGIN_DIR . '/woocommerce/woocommerce.php')) {
351 469
352 470 $btn['label'] = esc_html__('Activate WooCommerce', 'shopengine');
@@ -362,8 +480,9 @@
362 480 [
363 481 'id' => 'missing-woo',
364 482 'type' => 'error',
365 483 'dismissible' => true,
484 + 'is_required' => true,
366 485 'btn' => $btn,
367 486 'message' => sprintf(esc_html__('ShopEngine requires woocommerce Plugin, which is currently NOT RUNNING.', 'shopengine'), '4.1.0'),
368 487 ]
369 488 );
@@ -371,11 +490,11 @@
371 490
372 491
373 492 public function missing_elementor() {
374 493
375 - if(isset($_GET['activate'])) {
376 - unset($_GET['activate']);
377 - }
494 + if(!current_user_can('manage_options')) {
495 + return;
496 + }
378 497
379 498 if(file_exists(WP_PLUGIN_DIR . '/elementor/elementor.php')) {
380 499
381 500 $btn['label'] = esc_html__('Activate Elementor', 'shopengine');
@@ -390,8 +509,9 @@
390 509 Utils\Notice::push(
391 510 [
392 511 'id' => 'missing-elementor',
393 512 'type' => 'error',
513 + 'is_required' => true,
394 514 'dismissible' => true,
395 515 'btn' => $btn,
396 516 'message' => sprintf(esc_html__('ShopEngine requires Elementor version %1$s+, which is currently NOT RUNNING.', 'shopengine'), '3.0.0'),
397 517 ]
@@ -399,8 +519,12 @@
399 519 }
400 520
401 521
402 522 public function failed_elementor_version() {
523 +
524 + if(!current_user_can('manage_options')) {
525 + return;
526 + }
403 527
404 528 $btn['label'] = esc_html__('Update Elementor', 'shopengine');
405 529 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=elementor'), 'upgrade-plugin_elementor');
406 530