PluginProbe ʕ •ᴥ•ʔ
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution / 1.6.1
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution v1.6.1
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 4 years ago base 4 years ago compatibility 4 years ago core 4 years ago languages 4 years ago libs 4 years ago modules 4 years ago traits 5 years ago utils 4 years ago widgets 4 years ago autoloader.php 5 years ago plugin.php 4 years ago readme.txt 4 years ago shopengine.php 4 years ago
plugin.php
369 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\Core\Query_Modifier;
8 use ShopEngine\Core\Template_Cpt;
9 use ShopEngine\Libs\License\License_Route;
10 use ShopEngine\Libs\Updater\Init as Updater;
11 use ShopEngine\Modules\Manifest as Module_Manifest;
12 use ShopEngine\Widgets\Manifest;
13
14 defined('ABSPATH') || exit;
15
16 /**
17 * Plugin final Class.
18 * Handles dynamically loading classes only when needed. Check Elementor Plugin, Woocomerce Plugin Loaded or Install.
19 *
20 * @since 1.0.0
21 */
22 final class Plugin {
23
24 private static $instance;
25
26 /**
27 * __construct function
28 * @since 1.0.0
29 */
30 public function __construct() {
31 // load autoload method
32 Autoloader::run();
33 }
34
35
36 /**
37 * Public function init.
38 * call function for all
39 *
40 * @since 1.0.0
41 */
42 public function init() {
43
44 $error = false;
45
46 // check woocommerce plugin
47 if(!did_action('woocommerce_loaded')) {
48 add_action('admin_notices', [$this, 'missing_woocommerce']);
49
50 $error = true;
51 }
52
53 // Check if Elementor installed and activated.
54 if(!did_action('elementor/loaded')) {
55 add_action('admin_notices', [$this, 'missing_elementor']);
56
57 $error = true;
58 }
59
60 // Check for required Elementor version.
61 if(defined('ELEMENTOR_VERSION') && !version_compare(ELEMENTOR_VERSION, '3.0.0', '>=')) {
62 add_action('admin_notices', [$this, 'failed_elementor_version']);
63
64 $error = true;
65 }
66
67 if($error) {
68
69 return;
70 }
71
72
73 /**
74 * Routes initialization
75 *
76 */
77 new License_Route();
78
79 /**
80 * Run pro plugin updater here....
81 *
82 */
83 add_action('admin_init', function () {
84 if(class_exists('ShopEngine_Pro')) {
85 new Updater();
86 }
87
88 });
89
90 global $pagenow;
91
92 if(is_admin() && $pagenow == 'post.php' && $_REQUEST['action'] === 'edit') {
93
94 $pid = $_REQUEST['post'];
95 $po = get_post($pid);
96
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 }
104 }
105
106 add_action('wp_loaded', function (){
107
108 if(isset($_REQUEST['preview']) && $_REQUEST['preview'] == 'true' && !empty($_REQUEST['preview_id'])) {
109
110 $pid = (int) $_REQUEST['preview_id'];
111
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 }
133 }
134 });
135
136
137 /**
138 * Ensuring woocommerce functions are loaded before theme is modifying those
139 *
140 */
141 require_once WC_ABSPATH . '/includes/wc-template-functions.php';
142
143
144 // Load custom elementor controls
145 new \ShopEngine\Core\Elementor_Controls\Init();
146
147 //Loading the scripts and styles
148 add_action('wp_enqueue_scripts', [$this, 'js_css_public']);
149 add_action('elementor/editor/after_enqueue_styles', [$this, 'js_css_elementor']);
150
151 //woocommece theme support
152 if(!current_theme_supports('woocommerce')) {
153 add_theme_support('woocommerce');
154 add_theme_support('wc-product-gallery-zoom');
155 add_theme_support('wc-product-gallery-lightbox');
156 add_theme_support('wc-product-gallery-slider');
157 }
158
159
160 #Registering new post-type & etc
161 Base::instance()->init();
162
163 \ShopEngine\Core\Settings\Base::instance()->init();
164
165 (new Module_Manifest)->init();
166
167 // working get instance of elementor widget
168 (new Manifest)->init();
169
170 Query_Modifier::instance()->init();
171
172 (new Conflict_Manifest)->init();
173
174 // view count
175 add_action('wp_head', [$this, 'shopengine_track_product_views']);
176
177 // database migrations
178 // (new \ShopEngine\Compatibility\Migrations\Migration())->init();
179 (new \ShopEngine\Compatibility\Migrations\Temp_Migration())->init();
180
181 add_filter('script_loader_tag', [$this, 'filter_load_type'], 99, 3);
182 }
183
184
185 // add async and defer attributes to enqueued scripts
186 public function filter_load_type($tag, $handle, $src) {
187
188 if (strpos($handle, '-async') !== false) {
189 $tag = str_replace(' src', ' async="async" src', $tag);
190 }
191
192 if (strpos($handle, '-defer') !== false) {
193 $tag = str_replace('<script ', '<script defer ', $tag);
194 }
195
196 return $tag;
197 }
198
199 /**
200 * Public function shopengine_track_product_views
201 * Adding Product Views Count Meta
202 */
203 public function shopengine_track_product_views($product_id) {
204 if(class_exists('WooCommerce') && !is_product()) {
205 return;
206 }
207 $product_id = get_the_id();
208
209 $count_key = 'shopengine_product_views_count';
210 $count = get_post_meta($product_id, $count_key, true);
211 if($count == '') {
212 $count = 1;
213 delete_post_meta($product_id, $count_key);
214 add_post_meta($product_id, $count_key, '1');
215 } else {
216 $count++;
217 update_post_meta($product_id, $count_key, $count);
218 }
219 }
220
221 /**
222 * Public function js_css_public .
223 * Include public function
224 *
225 * @since 1.0.0
226 */
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());
231
232 // Modal Stylesheet
233 wp_register_style('shopengine-modal-styles', \ShopEngine::plugin_url() . 'assets/css/shopengine-modal.css', false, \ShopEngine::version());
234
235 // Modal Script
236 wp_register_script('shopengine-modal-script', \ShopEngine::plugin_url() . 'assets/js/shopengine-modal.js', ['jquery'], \ShopEngine::version(), true);
237
238 wp_enqueue_script('shopengine-simple-scrollbar.js-js', \ShopEngine::plugin_url() . 'assets/js/simple-scrollbar.js', [], \ShopEngine::version(), true);
239 wp_enqueue_script('shopengine-filter-js', \ShopEngine::plugin_url() . 'assets/js/filter.js', [], \ShopEngine::version(), true);
240 wp_enqueue_script('shopengine-js', \ShopEngine::plugin_url() . 'assets/js/public.js', [], \ShopEngine::version(), true);
241
242
243 wp_localize_script('shopengine-js', 'shopEngineApiSettings', [
244 'resturl' => get_rest_url(),
245 'rest_nonce' => wp_create_nonce('wp_rest'),
246 ]);
247
248
249 /**
250 * Registering libs css/js
251 *
252 */
253
254 wp_register_style(
255 'lib-sqv-css',
256 \ShopEngine::plugin_url() . '/assets/sqv/smart-quick-view.css',
257 [],
258 \ShopEngine::version()
259 );
260
261 wp_register_script(
262 'lib-sqv-js',
263 \ShopEngine::plugin_url() . 'assets/sqv/smart-quick-view.js',
264 ['jquery', 'wc-single-product'],
265 \ShopEngine::version(),
266 true
267 );
268 }
269
270 public function js_css_elementor() {
271 wp_enqueue_style('shopnegine-panel-icon', \ShopEngine::plugin_url() . 'assets/css/shopengine-icon.css', false, \ShopEngine::version());
272
273 if('shopengine-template' === get_post_type()):
274 wp_enqueue_style('shopnegine-editor-css', \ShopEngine::plugin_url() . 'assets/css/editor.css', false, \ShopEngine::version());
275 endif;
276 }
277
278
279 public function missing_woocommerce() {
280
281 if(isset($_GET['activate'])) {
282 unset($_GET['activate']);
283 }
284
285 if(file_exists(WP_PLUGIN_DIR . '/woocommerce/woocommerce.php')) {
286
287 $btn['label'] = esc_html__('Activate WooCommerce', 'shopengine');
288 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=woocommerce/woocommerce.php&plugin_status=all&paged=1', 'activate-plugin_woocommerce/woocommerce.php');
289
290 } else {
291
292 $btn['label'] = esc_html__('Install WooCommerce', 'shopengine');
293 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=woocommerce'), 'install-plugin_woocommerce');
294 }
295
296 Utils\Notice::push(
297 [
298 'id' => 'missing-woo',
299 'type' => 'error',
300 'dismissible' => true,
301 'btn' => $btn,
302 'message' => sprintf(esc_html__('ShopEngine requires woocommerce Plugin, which is currently NOT RUNNING.', 'shopengine'), '4.1.0'),
303 ]
304 );
305 }
306
307
308 public function missing_elementor() {
309
310 if(isset($_GET['activate'])) {
311 unset($_GET['activate']);
312 }
313
314 if(file_exists(WP_PLUGIN_DIR . '/elementor/elementor.php')) {
315
316 $btn['label'] = esc_html__('Activate Elementor', 'shopengine');
317 $btn['url'] = wp_nonce_url('plugins.php?action=activate&plugin=elementor/elementor.php&plugin_status=all&paged=1', 'activate-plugin_elementor/elementor.php');
318
319 } else {
320
321 $btn['label'] = esc_html__('Install Elementor', 'shopengine');
322 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=elementor'), 'install-plugin_elementor');
323 }
324
325 Utils\Notice::push(
326 [
327 'id' => 'missing-elementor',
328 'type' => 'error',
329 'dismissible' => true,
330 'btn' => $btn,
331 'message' => sprintf(esc_html__('ShopEngine requires Elementor version %1$s+, which is currently NOT RUNNING.', 'shopengine'), '3.0.0'),
332 ]
333 );
334 }
335
336
337 public function failed_elementor_version() {
338
339 $btn['label'] = esc_html__('Update Elementor', 'shopengine');
340 $btn['url'] = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=elementor'), 'upgrade-plugin_elementor');
341
342 Utils\Notice::push(
343 [
344 'id' => 'unsupported-elementor-version',
345 'type' => 'error',
346 'dismissible' => true,
347 'btn' => $btn,
348 'message' => sprintf(esc_html__('ShopEngine requires Elementor version %1$s+, which is currently NOT RUNNING.', 'shopengine'), '3.0.0'),
349 ]
350 );
351 }
352
353
354 public function flush_rewrites() {
355 $form_cpt = new Core\Builders\Cpt();
356 $form_cpt->flush_rewrites();
357 }
358
359
360 public static function instance() {
361 if(!self::$instance) {
362 self::$instance = new self();
363 }
364
365 return self::$instance;
366 }
367
368 }
369