PluginProbe
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets / 4.6.6
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets v4.6.6
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 +159 -34 3.1.14.6.6 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,18 @@
92 101 }
93 102 return $links;
94 103 });
95 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' ) {
96 110
111 + new \Wpmet\Libs\Emailkit();
112 + }
113 +
114 +
97 115 /**
98 116 * Routes initialization
99 117 *
100 118 */
@@ -112,45 +130,16 @@
112 130 });
113 131
114 132
115 133 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 134 /**
145 135 * migrate data
146 - */
136 + */
147 137 LangMigration::instance()->init();
148 138 });
149 139
150 140 // avoid themes for loading woocommerce functions
151 - $avoid_themes = ['avada', 'avada child'];
152 -
141 + $avoid_themes = ['avada', 'avada child', 'woodmart', 'woodmart child'];
153 142 if(!in_array(strtolower(wp_get_theme()), $avoid_themes)) {
154 143 /**
155 144 * Ensuring woocommerce functions are loaded before theme is modifying those
156 145 *
@@ -178,23 +167,142 @@
178 167 add_theme_support('wc-product-gallery-lightbox');
179 168 add_theme_support('wc-product-gallery-slider');
180 169 }
181 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 +
182 177 #Registering new post-type & etc
183 178 Base::instance()->init();
179 +
184 180
185 181 Rating::instance('shopengine')
186 182 ->set_plugin( 'ShopEngine', 'https://wpmet.com/wordpress.org/rating/shopengine' )
187 183 ->set_plugin_logo( 'https://ps.w.org/shopengine/assets/icon-256x256.gif?rev=2505061', 'width:150px !important' )
188 - ->set_priority( 10 )
184 + ->set_priority( 11 )
189 185 ->set_first_appear_day( 7 )
190 186 ->set_condition( true )
191 187 ->call();
188 +
189 + if ( is_admin() && \ShopEngine\Utils\Util::get_settings( 'shopengine_user_consent_for_banner', 'true' ) == 'true' ) {
192 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 +
193 300 \ShopEngine\Core\MultiLanguage\Language::instance()->init();
194 301
195 302 \ShopEngine\Core\Settings\Base::instance()->init();
196 303
304 +
197 305 new Libs\Select_Api\Base();
198 306
199 307 (new Module_Manifest())->init();
200 308
@@ -226,8 +334,11 @@
226 334
227 335 }
228 336
229 337 add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
338 +
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();
230 341 }
231 342
232 343
233 344 // add async and defer attributes to enqueued scripts
@@ -349,8 +460,12 @@
349 460
350 461
351 462 public function missing_woocommerce() {
352 463
464 + if(!current_user_can('manage_options')) {
465 + return;
466 + }
467 +
353 468 if(file_exists(WP_PLUGIN_DIR . '/woocommerce/woocommerce.php')) {
354 469
355 470 $btn['label'] = esc_html__('Activate WooCommerce', 'shopengine');
356 471 $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 +480,9 @@
365 480 [
366 481 'id' => 'missing-woo',
367 482 'type' => 'error',
368 483 'dismissible' => true,
484 + 'is_required' => true,
369 485 'btn' => $btn,
370 486 'message' => sprintf(esc_html__('ShopEngine requires woocommerce Plugin, which is currently NOT RUNNING.', 'shopengine'), '4.1.0'),
371 487 ]
372 488 );
@@ -374,8 +490,12 @@
374 490
375 491
376 492 public function missing_elementor() {
377 493
494 + if(!current_user_can('manage_options')) {
495 + return;
496 + }
497 +
378 498 if(file_exists(WP_PLUGIN_DIR . '/elementor/elementor.php')) {
379 499
380 500 $btn['label'] = esc_html__('Activate Elementor', 'shopengine');
381 501 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=elementor/elementor.php&plugin_status=all&paged=1', 'activate-plugin_elementor/elementor.php');
@@ -389,8 +509,9 @@
389 509 Utils\Notice::push(
390 510 [
391 511 'id' => 'missing-elementor',
392 512 'type' => 'error',
513 + 'is_required' => true,
393 514 'dismissible' => true,
394 515 'btn' => $btn,
395 516 'message' => sprintf(esc_html__('ShopEngine requires Elementor version %1$s+, which is currently NOT RUNNING.', 'shopengine'), '3.0.0'),
396 517 ]
@@ -398,8 +519,12 @@
398 519 }
399 520
400 521
401 522 public function failed_elementor_version() {
523 +
524 + if(!current_user_can('manage_options')) {
525 + return;
526 + }
402 527
403 528 $btn['label'] = esc_html__('Update Elementor', 'shopengine');
404 529 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=elementor'), 'upgrade-plugin_elementor');
405 530