PluginProbe
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets / 4.7.0
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets v4.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 +159 -35 4.1.14.7.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,18 @@
92 101 }
93 102 return $links;
94 103 });
95 104
105 + /**
106 + * EmailKit Global Class initialization
107 + *
108 + */
109 + if( !class_exists('EmailKit') && !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,46 +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 - $tem_url = (get_post_meta($pid, 'shopengine_template__post_meta__type' , true) == 'order') ? $po->guid : $template['url'];
138 - $url = \ShopEngine\Utils\Helper::add_to_url($tem_url, $param);
139 -
140 - wp_safe_redirect($url);
141 - exit;
142 - }
143 - }
144 -
145 134 /**
146 135 * migrate data
147 - */
136 + */
148 137 LangMigration::instance()->init();
149 138 });
150 139
151 140 // avoid themes for loading woocommerce functions
152 - $avoid_themes = ['avada', 'avada child'];
153 -
141 + $avoid_themes = ['avada', 'avada child', 'woodmart', 'woodmart child'];
154 142 if(!in_array(strtolower(wp_get_theme()), $avoid_themes)) {
155 143 /**
156 144 * Ensuring woocommerce functions are loaded before theme is modifying those
157 145 *
@@ -179,23 +167,142 @@
179 167 add_theme_support('wc-product-gallery-lightbox');
180 168 add_theme_support('wc-product-gallery-slider');
181 169 }
182 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 +
183 177 #Registering new post-type & etc
184 178 Base::instance()->init();
179 +
185 180
186 181 Rating::instance('shopengine')
187 182 ->set_plugin( 'ShopEngine', 'https://wpmet.com/wordpress.org/rating/shopengine' )
188 183 ->set_plugin_logo( 'https://ps.w.org/shopengine/assets/icon-256x256.gif?rev=2505061', 'width:150px !important' )
189 - ->set_priority( 10 )
184 + ->set_priority( 11 )
190 185 ->set_first_appear_day( 7 )
191 186 ->set_condition( true )
192 187 ->call();
188 +
189 + if ( is_admin() && \ShopEngine\Utils\Util::get_settings( 'shopengine_user_consent_for_banner', 'true' ) == 'true' ) {
193 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 +
194 300 \ShopEngine\Core\MultiLanguage\Language::instance()->init();
195 301
196 302 \ShopEngine\Core\Settings\Base::instance()->init();
197 303
304 +
198 305 new Libs\Select_Api\Base();
199 306
200 307 (new Module_Manifest())->init();
201 308
@@ -227,8 +334,11 @@
227 334
228 335 }
229 336
230 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();
231 341 }
232 342
233 343
234 344 // add async and defer attributes to enqueued scripts
@@ -350,8 +460,12 @@
350 460
351 461
352 462 public function missing_woocommerce() {
353 463
464 + if(!current_user_can('manage_options')) {
465 + return;
466 + }
467 +
354 468 if(file_exists(WP_PLUGIN_DIR . '/woocommerce/woocommerce.php')) {
355 469
356 470 $btn['label'] = esc_html__('Activate WooCommerce', 'shopengine');
357 471 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=woocommerce/woocommerce.php&plugin_status=all&paged=1', 'activate-plugin_woocommerce/woocommerce.php');
@@ -366,8 +480,9 @@
366 480 [
367 481 'id' => 'missing-woo',
368 482 'type' => 'error',
369 483 'dismissible' => true,
484 + 'is_required' => true,
370 485 'btn' => $btn,
371 486 'message' => sprintf(esc_html__('ShopEngine requires woocommerce Plugin, which is currently NOT RUNNING.', 'shopengine'), '4.1.0'),
372 487 ]
373 488 );
@@ -375,8 +490,12 @@
375 490
376 491
377 492 public function missing_elementor() {
378 493
494 + if(!current_user_can('manage_options')) {
495 + return;
496 + }
497 +
379 498 if(file_exists(WP_PLUGIN_DIR . '/elementor/elementor.php')) {
380 499
381 500 $btn['label'] = esc_html__('Activate Elementor', 'shopengine');
382 501 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=elementor/elementor.php&plugin_status=all&paged=1', 'activate-plugin_elementor/elementor.php');
@@ -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