PluginProbe ʕ •ᴥ•ʔ
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution / 4.2.0
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution v4.2.0
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 4.3.1 4.4.0 4.5.0 4.5.1 4.6.0 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 4.6.7 4.6.8 4.6.9 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 4.7.9 4.8.0 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 4.8.6 4.8.7 4.8.8 4.8.9 trunk 0.1.2-beta 0.1.3-beta 0.1.4-beta 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.2.1 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.5.0 1.5.1 1.6.0 1.6.1 1.7.0 1.8.0 1.8.1 1.9.0
shopengine / plugin.php
shopengine Last commit date
assets 3 years ago base 3 years ago compatibility 3 years ago core 3 years ago languages 3 years ago libs 3 years ago modules 3 years ago traits 3 years ago utils 3 years ago widgets 3 years ago autoloader.php 4 years ago phpcs.xml 3 years ago plugin.php 3 years ago readme.txt 3 years ago shopengine.php 3 years ago
plugin.php
404 lines
1 <?php
2
3 namespace ShopEngine;
4
5 use ShopEngine\Compatibility\Conflicts\Manifest as Conflict_Manifest;
6 use ShopEngine\Core\Builders\Base;
7 use ShopEngine\Compatibility\Migrations\LangMigration;
8 use ShopEngine\Core\Query_Modifier;
9 use ShopEngine\Core\Template_Cpt;
10 use ShopEngine\Libs\License\License_Route;
11 use ShopEngine\Libs\Rating\Rating;
12 use ShopEngine\Libs\Updater\Init as Updater;
13 use ShopEngine\Modules\Manifest as Module_Manifest;
14 use ShopEngine\Widgets\Manifest;
15
16 defined('ABSPATH') || exit;
17
18 /**
19 * Plugin final Class.
20 * Handles dynamically loading classes only when needed. Check Elementor Plugin, Woocomerce Plugin Loaded or Install.
21 *
22 * @since 1.0.0
23 */
24 final class Plugin {
25
26 private static $instance;
27
28 /**
29 * __construct function
30 * @since 1.0.0
31 */
32 public function __construct() {
33 // load autoload method
34 Autoloader::run();
35 }
36
37
38 /**
39 * Public function init.
40 * call function for all
41 *
42 * @since 1.0.0
43 */
44 public function init() {
45
46 $error = false;
47
48 // check woocommerce plugin
49 if(!did_action('woocommerce_loaded')) {
50 add_action('admin_notices', [$this, 'missing_woocommerce']);
51
52 $error = true;
53 }
54
55 $check_elementor_version = false;
56
57 // Check if Elementor installed and activated.
58 if(!did_action('elementor/loaded')) {
59
60 if(!did_action('shopengine-gutenberg-addon/before_loaded')) {
61
62 add_action('admin_notices', [$this, 'missing_elementor']);
63
64 $error = true;
65 }
66 }
67
68 // Check for required Elementor version.
69 if(did_action('elementor/loaded') && defined('ELEMENTOR_VERSION') && !version_compare(ELEMENTOR_VERSION, '3.0.0', '>=')) {
70
71 add_action('admin_notices', [$this, 'failed_elementor_version']);
72
73 $error = true;
74 }
75
76 if($error) {
77 return;
78 }
79
80 add_filter("plugin_action_links_shopengine/shopengine.php", function ($links) {
81 $free = esc_html__("Go To Shopengine","shopengine");
82 $pro = esc_html__("Go To ShopenginePro","shopengine");
83
84 $custom_links[] = '<a title="' . $free . '" href="'.admin_url('edit.php?post_type=shopengine-template#getting-started').'" target="_blank">' . esc_html__('Settings', 'shopengine') . '</a>';
85
86 foreach ($custom_links as $custom_link):
87 array_unshift($links, $custom_link);
88 endforeach;
89
90 if (!is_plugin_active('shopengine-pro/shopengine-pro.php')) {
91 $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>';
92 }
93 return $links;
94 });
95
96
97 /**
98 * Routes initialization
99 *
100 */
101 new License_Route();
102
103 /**
104 * Run pro plugin updater here....
105 *
106 */
107 add_action('admin_init', function () {
108 if(class_exists('ShopEngine_Pro')) {
109 new Updater();
110 }
111 new \ShopEngine\Compatibility\Migrations\Direct_Checkout;
112 });
113
114
115 add_action('wp_loaded', function () {
116 /**
117 * migrate data
118 */
119 LangMigration::instance()->init();
120 });
121
122 // avoid themes for loading woocommerce functions
123 $avoid_themes = ['avada', 'avada child'];
124
125 if(!in_array(strtolower(wp_get_theme()), $avoid_themes)) {
126 /**
127 * Ensuring woocommerce functions are loaded before theme is modifying those
128 *
129 */
130 require_once WC_ABSPATH . '/includes/wc-template-functions.php';
131 }
132
133
134 if(did_action('elementor/loaded')) {
135 // Load custom elementor controls
136 new \ShopEngine\Core\Elementor_Controls\Init();
137
138 //Loading the scripts and styles
139 add_action('elementor/editor/after_enqueue_styles', [$this, 'js_css_elementor']);
140 }
141
142
143 //Loading public scripts and styles
144 add_action('wp_enqueue_scripts', [$this, 'js_css_public']);
145
146 //woocommece theme support
147 if(!current_theme_supports('woocommerce')) {
148 add_theme_support('woocommerce');
149 add_theme_support('wc-product-gallery-zoom');
150 add_theme_support('wc-product-gallery-lightbox');
151 add_theme_support('wc-product-gallery-slider');
152 }
153
154 #Registering new post-type & etc
155 Base::instance()->init();
156
157 Rating::instance('shopengine')
158 ->set_plugin( 'ShopEngine', 'https://wpmet.com/wordpress.org/rating/shopengine' )
159 ->set_plugin_logo( 'https://ps.w.org/shopengine/assets/icon-256x256.gif?rev=2505061', 'width:150px !important' )
160 ->set_priority( 10 )
161 ->set_first_appear_day( 7 )
162 ->set_condition( true )
163 ->call();
164
165 \ShopEngine\Core\MultiLanguage\Language::instance()->init();
166
167 \ShopEngine\Core\Settings\Base::instance()->init();
168
169 new Libs\Select_Api\Base();
170
171 (new Module_Manifest())->init();
172
173 // working get instance of elementor widget
174 (new Manifest())->init();
175
176 Query_Modifier::instance()->init();
177
178 (new Conflict_Manifest())->init();
179
180 // view count
181 add_action('get_header', [$this, 'shopengine_track_product_views']);
182
183 // database migrations
184 // (new \ShopEngine\Compatibility\Migrations\Migration())->init();
185 // (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
186
187
188 // call service providers
189
190 $service_providers = include \ShopEngine::plugin_dir().'core/service-provider-manager.php';
191 $method = 'init';
192 foreach( $service_providers as $service_provider ){
193
194 if(class_exists($service_provider) && method_exists($service_provider, $method)) {
195 $instance = new $service_provider();
196 $instance->$method();
197 }
198
199 }
200
201 add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
202 }
203
204
205 // add async and defer attributes to enqueued scripts
206 public function filter_load_type($tag, $handle, $src) {
207
208 if(strpos($handle, '-async') !== false) {
209 $tag = str_replace(' src', ' async="async" src', $tag);
210 }
211
212 if(strpos($handle, '-defer') !== false) {
213 $tag = str_replace('<script ', '<script defer ', $tag);
214 }
215
216 return $tag;
217 }
218
219 /**
220 * Public function shopengine_track_product_views
221 * Adding Product Views Count Meta
222 */
223 public function shopengine_track_product_views() {
224
225 if(class_exists('WooCommerce') && !is_product()) {
226 return;
227 }
228
229 $product_id = get_the_id();
230
231 $cookie_name = "shopengine_recent_viewed_product";
232
233 if(isset($_COOKIE[$cookie_name])) {
234
235 $cookie_ids = sanitize_text_field(wp_unslash($_COOKIE[$cookie_name]));
236 $product_ids = explode(',', $cookie_ids);
237
238 if(!is_array($product_ids)) {
239 $product_ids = [$product_ids];
240 }
241
242 $product_ids = array_combine($product_ids, $product_ids);
243 unset($product_ids[$product_id]);
244 $product_ids[] = $product_id;
245
246 $cookie_value = implode(',', $product_ids);
247
248 } else {
249 $cookie_value = $product_id;
250 }
251
252 setcookie($cookie_name, $cookie_value, strtotime('+30 days'), '/' );
253
254 $count_key = 'shopengine_product_views_count';
255 $count = get_post_meta($product_id, $count_key, true);
256
257 if($count == '') {
258 $count = 1;
259 delete_post_meta($product_id, $count_key);
260 add_post_meta($product_id, $count_key, '1');
261 } else {
262 $count++;
263 update_post_meta($product_id, $count_key, $count);
264 }
265 }
266
267 /**
268 * Public function js_css_public .
269 * Include public function
270 *
271 * @since 1.0.0
272 */
273 public function js_css_public() {
274 wp_register_style('shopengine-public', \ShopEngine::plugin_url() . 'assets/css/shopengine-public.css', false, \ShopEngine::version());
275
276 // Modal Stylesheet
277 wp_register_style('shopengine-modal-styles', \ShopEngine::plugin_url() . 'assets/css/shopengine-modal.css', false, \ShopEngine::version());
278
279 // Modal Script
280 wp_register_script('shopengine-modal-script', \ShopEngine::plugin_url() . 'assets/js/shopengine-modal.js', ['jquery'], \ShopEngine::version(), true);
281
282 wp_enqueue_script('shopengine-simple-scrollbar.js-js', \ShopEngine::plugin_url() . 'assets/js/simple-scrollbar.js', [], \ShopEngine::version(), true);
283 wp_enqueue_script('shopengine-filter-js', \ShopEngine::plugin_url() . 'assets/js/filter.js', [], \ShopEngine::version(), true);
284 wp_enqueue_script('shopengine-js', \ShopEngine::plugin_url() . 'assets/js/public.js', [], \ShopEngine::version(), true);
285
286
287 wp_localize_script('shopengine-js', 'shopEngineApiSettings', [
288 'resturl' => get_rest_url(),
289 'rest_nonce' => wp_create_nonce('wp_rest'),
290 ]);
291
292
293 /**
294 * Registering libs css/js
295 *
296 */
297
298 wp_register_style(
299 'lib-sqv-css',
300 \ShopEngine::plugin_url() . '/assets/sqv/smart-quick-view.css',
301 [],
302 \ShopEngine::version()
303 );
304
305 wp_register_script(
306 'lib-sqv-js',
307 \ShopEngine::plugin_url() . 'assets/sqv/smart-quick-view.js',
308 ['jquery', 'wc-single-product'],
309 \ShopEngine::version(),
310 true
311 );
312 }
313
314 public function js_css_elementor() {
315 wp_enqueue_style('shopnegine-panel-icon', \ShopEngine::plugin_url() . 'assets/css/shopengine-icon.css', false, \ShopEngine::version());
316
317 if('shopengine-template' === get_post_type()):
318 wp_enqueue_style('shopnegine-editor-css', \ShopEngine::plugin_url() . 'assets/css/editor.css', false, \ShopEngine::version());
319 endif;
320 }
321
322
323 public function missing_woocommerce() {
324
325 if(file_exists(WP_PLUGIN_DIR . '/woocommerce/woocommerce.php')) {
326
327 $btn['label'] = esc_html__('Activate WooCommerce', 'shopengine');
328 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=woocommerce/woocommerce.php&plugin_status=all&paged=1', 'activate-plugin_woocommerce/woocommerce.php');
329
330 } else {
331
332 $btn['label'] = esc_html__('Install WooCommerce', 'shopengine');
333 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=woocommerce'), 'install-plugin_woocommerce');
334 }
335
336 Utils\Notice::push(
337 [
338 'id' => 'missing-woo',
339 'type' => 'error',
340 'dismissible' => true,
341 'btn' => $btn,
342 'message' => sprintf(esc_html__('ShopEngine requires woocommerce Plugin, which is currently NOT RUNNING.', 'shopengine'), '4.1.0'),
343 ]
344 );
345 }
346
347
348 public function missing_elementor() {
349
350 if(file_exists(WP_PLUGIN_DIR . '/elementor/elementor.php')) {
351
352 $btn['label'] = esc_html__('Activate Elementor', 'shopengine');
353 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=elementor/elementor.php&plugin_status=all&paged=1', 'activate-plugin_elementor/elementor.php');
354
355 } else {
356
357 $btn['label'] = esc_html__('Install Elementor', 'shopengine');
358 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=elementor'), 'install-plugin_elementor');
359 }
360
361 Utils\Notice::push(
362 [
363 'id' => 'missing-elementor',
364 'type' => 'error',
365 'dismissible' => true,
366 'btn' => $btn,
367 'message' => sprintf(esc_html__('ShopEngine requires Elementor version %1$s+, which is currently NOT RUNNING.', 'shopengine'), '3.0.0'),
368 ]
369 );
370 }
371
372
373 public function failed_elementor_version() {
374
375 $btn['label'] = esc_html__('Update Elementor', 'shopengine');
376 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=elementor'), 'upgrade-plugin_elementor');
377
378 Utils\Notice::push(
379 [
380 'id' => 'unsupported-elementor-version',
381 'type' => 'error',
382 'dismissible' => true,
383 'btn' => $btn,
384 'message' => sprintf(esc_html__('ShopEngine requires Elementor version %1$s+, which is currently NOT RUNNING.', 'shopengine'), '3.0.0'),
385 ]
386 );
387 }
388
389
390 public function flush_rewrites() {
391 $form_cpt = new Core\Builders\Cpt();
392 $form_cpt->flush_rewrites();
393 }
394
395
396 public static function instance() {
397 if(!self::$instance) {
398 self::$instance = new self();
399 }
400
401 return self::$instance;
402 }
403 }
404