PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7.3.2
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7.3.2
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
learnpress / learnpress.php

learnpress.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.1.7.3.2, at learnpress.php

851 lines 22.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: LearnPress
4 * Plugin URI: http://thimpress.com/learnpress
5 * Description: LearnPress is a WordPress complete solution for creating a Learning Management System (LMS). It can help you to create courses, lessons and quizzes.
6 * Author: ThimPress
7 * Version: 4.1.7.3.2
8 * Author URI: http://thimpress.com
9 * Requires at least: 5.8
10 * Tested up to: 6.1.1
11 * Requires PHP: 7.0
12 * Text Domain: learnpress
13 * Domain Path: /languages/
14 *
15 * @package LearnPress
16 */
17
18 /**
19 * Prevent loading this file directly
20 */
21 defined( 'ABSPATH' ) || exit();
22
23 if ( ! defined( 'LP_PLUGIN_FILE' ) ) {
24 define( 'LP_PLUGIN_FILE', __FILE__ );
25 require_once 'inc/lp-constants.php';
26 }
27
28 if ( ! class_exists( 'LearnPress' ) ) {
29 /**
30 * Class LearnPress
31 *
32 * Version 3.0.1
33 */
34 class LearnPress {
35 /**
36 * Current version of the plugin
37 *
38 * @var string
39 */
40 public $version = LEARNPRESS_VERSION;
41 /**
42 * Version database require, use for this LP source
43 *
44 * @var int
45 */
46 public $db_version = 4;
47 /**
48 * @var int Version of mu file on folder mu-plugins
49 */
50 public $mu_file_version = 2;
51
52 /**
53 * The single instance of the class
54 *
55 * @var LearnPress object
56 */
57 private static $_instance = null;
58
59 /**
60 * Store the session class
61 *
62 * @var LP_Session_Handler
63 */
64 public $session = null;
65
66 /**
67 * @var LP_Profile
68 */
69 public $profile = null;
70
71 /**
72 * @var LP_Cart object
73 */
74 public $cart = false;
75
76 /**
77 * @var LP_Settings
78 */
79 public $settings = null;
80
81 /**
82 * @var null
83 */
84 public $schedule = null;
85
86 /**
87 * @var array
88 */
89 public $query_vars = array();
90
91 /**
92 * Table prefixes
93 *
94 * @var array
95 */
96 protected $_table_prefixes = array();
97
98 /**
99 * @var null
100 */
101 public $query = null;
102
103 /**
104 * @var array
105 */
106 public $global = array();
107
108 /**
109 * @var LP_Template
110 */
111 public $template = null;
112
113 /**
114 * @var LP_Core_API
115 */
116 public $api = null;
117
118 /**
119 * @var LP_Admin_Core_API
120 */
121 public $admin_api = null;
122
123 /**
124 * @var string
125 */
126 public $thim_core_version_require = '2.0.0';
127
128 /**
129 *
130 */
131 public $theme_support = null;
132
133 public $gateways = null;
134
135 /**
136 * LearnPress constructor.
137 */
138 protected function __construct() {
139 if ( self::$_instance ) {
140 return;
141 }
142 self::$_instance = $this;
143
144 update_option( 'learnpress_version', $this->version );
145
146 // Define constant .
147 $this->plugin_defines();
148
149 // define table prefixes .
150 $this->define_tables();
151
152 // Include files .
153 $this->includes();
154
155 // Copy mu plugin.
156 $this->mu_plugin();
157
158 // hooks .
159 $this->init_hooks();
160 }
161
162 /**
163 * Define constant.
164 */
165 protected function plugin_defines() {
166
167 }
168
169 /**
170 * Defines database table names.
171 */
172 public function define_tables() {
173 global $wpdb;
174
175 $tables = array(
176 'sessions',
177 'sections',
178 'section_items',
179 'user_items',
180 'user_itemmeta',
181 'user_item_results',
182 'order_items',
183 'order_itemmeta',
184 'quiz_questions',
185 'question_answers',
186 'question_answermeta',
187 );
188
189 foreach ( $tables as $short_name ) {
190 $table_name = $wpdb->prefix . LP_TABLE_PREFIX . $short_name;
191 $this->_table_prefixes[ 'tbl_' . $short_name ] = $table_name;
192
193 $backward_key = 'learnpress_' . $short_name;
194 $wpdb->{$backward_key} = $table_name;
195 }
196 }
197
198 /**
199 * Includes needed files.
200 */
201 public function includes() {
202 // Include required files load anywhere, both frontend and backend.
203 $this->include_files_global();
204
205 // include files when LP ready run - after setup success .
206 if ( ! LP_Install::instance()->tables_install_done() ) {
207 return;
208 }
209
210 // Include required files Backend.
211 $this->include_files_admin();
212
213 // Include required files Frontend.
214 $this->include_files_frontend();
215
216 new LP_Query();
217 }
218
219 /**
220 * load files anywhere, both frontend and backend
221 *
222 * @return void
223 */
224 private function include_files_global() {
225 require_once 'inc/class-lp-multi-language.php';
226
227 // Filter query .
228 require_once 'inc/filters/class-lp-filter.php';
229 require_once 'inc/filters/class-lp-post-type-filter.php';
230 require_once 'inc/filters/class-lp-course-filter.php';
231 require_once 'inc/filters/class-lp-order-filter.php';
232 require_once 'inc/filters/class-lp-section-filter.php';
233 require_once 'inc/filters/class-lp-section-items-filter.php';
234 require_once 'inc/filters/class-lp-question-filter.php';
235 require_once 'inc/filters/class-lp-user-items-filter.php';
236 require_once 'inc/filters/class-lp-quiz-questions-filter.php';
237 require_once 'inc/filters/class-lp-question-answers-filter.php';
238 require_once 'inc/filters/class-lp-question-answermeta-filter.php';
239
240 // Query Database .
241 require_once 'inc/databases/class-lp-db.php';
242 require_once 'inc/databases/class-lp-order-db.php';
243 require_once 'inc/databases/class-lp-course-db.php';
244 require_once 'inc/databases/class-lp-lesson-db.php';
245 require_once 'inc/databases/class-lp-section-db.php';
246 require_once 'inc/databases/class-lp-section-items-db.php';
247 require_once 'inc/databases/class-lp-quiz-db.php';
248 require_once 'inc/databases/class-lp-quiz-questions-db.php';
249 require_once 'inc/databases/class-lp-question-answers-db.php';
250 require_once 'inc/databases/class-lp-sessions-db.php';
251 require_once 'inc/databases/class-lp-question-db.php';
252 require_once 'inc/databases/class-lp-user-items-db.php';
253 require_once 'inc/databases/class-lp-user-item-results-db.php';
254
255 // Read files config on folder config .
256 require_once 'inc/Helper/Config.php';
257
258 // File system .
259 require_once 'inc/class-lp-file-system.php';
260
261 // File helper
262 require_once 'inc/class-lp-helper.php';
263
264 // Models
265 require_once 'inc/models/class-lp-rest-response.php';
266 include_once 'inc/models/steps/class-lp-group-step.php';
267 include_once 'inc/models/steps/class-lp-step.php';
268 require_once 'inc/models/class-lp-course-extra-info-fast-query-model.php';
269
270 // Handle steps.
271 require_once 'inc/handle-steps/class-lp-handle-steps.php';
272 require_once 'inc/handle-steps/class-lp-handle-upgrade-db-steps.php';
273
274 // LP Cache
275 require_once 'inc/cache/class-lp-cache.php';
276 require_once 'inc/cache/class-lp-courses-cache.php';
277 require_once 'inc/cache/class-lp-course-cache.php';
278 require_once 'inc/cache/class-lp-quiz-cache.php';
279
280 // Background processes.
281 require_once 'inc/libraries/wp-background-process/wp-background-processing.php';
282 require_once 'inc/background-process/abstract-lp-async-request.php';
283 require_once 'inc/background-process/class-lp-background-single-course.php';
284 require_once 'inc/background-process/class-lp-background-single-email.php';
285
286 // Assets object
287 require_once 'inc/class-lp-asset-key.php';
288 require_once 'inc/abstracts/abstract-assets.php';
289
290 // Debug class
291 require_once 'inc/class-lp-debug.php';
292
293 require_once 'inc/class-lp-settings.php';
294 require_once 'inc/abstract-settings.php';
295 require_once 'inc/settings/abstract-settings-page.php';
296 require_once 'inc/settings/class-lp-settings-courses.php';
297 require_once 'inc/class-lp-global.php';
298 require_once 'inc/class-lp-datetime.php';
299
300 // Register custom-post-type and taxonomies .
301 require_once 'inc/custom-post-types/abstract.php';
302 require_once 'inc/custom-post-types/course.php';
303 require_once 'inc/custom-post-types/lesson.php';
304 require_once 'inc/custom-post-types/quiz.php';
305 require_once 'inc/custom-post-types/question.php';
306 require_once 'inc/custom-post-types/order.php';
307
308 require_once 'inc/interfaces/interface-curd.php';
309 require_once 'inc/abstracts/abstract-array-access.php';
310 require_once 'inc/abstracts/abstract-object-data.php';
311 require_once 'inc/abstracts/abstract-post-data.php';
312
313 require_once 'inc/curds/class-lp-course-curd.php';
314 require_once 'inc/curds/class-lp-section-curd.php';
315 require_once 'inc/curds/class-lp-lesson-curd.php';
316 require_once 'inc/curds/class-lp-quiz-curd.php';
317 require_once 'inc/curds/class-lp-question-curd.php';
318 require_once 'inc/curds/class-lp-order-curd.php';
319 require_once 'inc/curds/class-lp-user-curd.php';
320 require_once 'inc/curds/class-lp-user-item-curd.php';
321
322 require_once 'inc/course/class-lp-course-item.php';
323 require_once 'inc/question/class-lp-question.php';
324 require_once 'inc/course/class-lp-course-section.php';
325 require_once 'inc/course/class-lp-course-no-required-enroll.php';
326 require_once 'inc/user-item/class-lp-user-item.php';
327 require_once 'inc/user-item/class-lp-user-item-course.php';
328
329 require_once 'inc/lp-deprecated.php'; // Will remove if Eduma and guest update all 4.0.0
330 require_once 'inc/lp-core-functions.php';
331 require_once 'inc/class-lp-autoloader.php';
332
333 require_once 'inc/lp-webhooks.php';
334 require_once 'inc/class-lp-request-handler.php';
335
336 require_once 'inc/admin/helpers/class-lp-plugins-helper.php';
337
338 // Todo: tungnx check those files.
339 require_once 'inc/abstracts/abstract-object-query.php';
340 require_once 'inc/class-lp-course-query.php';
341 require_once 'inc/abstracts/abstract-addon.php';
342 require_once 'inc/class-lp-thumbnail-helper.php';
343 require_once 'inc/cache.php';
344
345 // Class handle check db of LP need to upgrade?
346 require_once 'inc/admin/class-lp-updater.php';
347
348 require_once 'inc/course/lp-course-functions.php';
349 require_once 'inc/course/abstract-course.php';
350 require_once 'inc/course/class-lp-course.php';
351 require_once 'inc/quiz/lp-quiz-functions.php';
352 require_once 'inc/quiz/class-lp-quiz.php';
353 require_once 'inc/lesson/lp-lesson-functions.php';
354 require_once 'inc/order/lp-order-functions.php';
355 require_once 'inc/order/class-lp-order.php';
356
357 require_once 'inc/user/lp-user-functions.php';
358 require_once 'inc/user/class-lp-user-factory.php';
359 require_once 'inc/user/abstract-lp-user.php';
360 require_once 'inc/user/class-lp-user.php';
361 require_once 'inc/user/class-lp-profile.php';
362 require_once 'inc/user-item/class-lp-user-item.php';
363 require_once 'inc/user-item/class-lp-user-item-course.php';
364 require_once 'inc/user-item/class-lp-user-item-quiz.php';
365 require_once 'inc/user-item/class-lp-quiz-results.php';
366 require_once 'inc/class-lp-session-handler.php';
367
368 require_once 'inc/class-lp-shortcodes.php';
369
370 // include template functions .
371 require_once 'inc/lp-template-functions.php';
372 require_once 'inc/templates/abstract-template.php';
373 //require_once 'inc/class-lp-template.php';
374
375 // Cart
376 require_once 'inc/cart/class-lp-cart.php';
377 require_once 'inc/cart/lp-cart-functions.php';
378
379 // Block Templates
380 require_once 'inc/block-template/class-block-until.php';
381 require_once 'inc/block-template/class-block-controller.php';
382
383 // API
384 require_once 'inc/abstracts/abstract-rest-api.php';
385 require_once 'inc/abstracts/abstract-rest-controller.php';
386 require_once 'inc/rest-api/class-lp-core-api.php';
387 require_once 'inc/rest-api/class-lp-admin-core-api.php';
388
389 /** Jwt */
390 include_once 'inc/jwt/class-jwt-auth.php';
391
392 require_once 'inc/class-lp-widget.php';
393 require_once 'inc/lp-widget-functions.php';
394
395 // For plugin Elementor
396 if ( defined( 'ELEMENTOR_VERSION' ) ) {
397 require_once 'inc/external-plugin/elementor/class-lp-elementor.php';
398 }
399
400 // TODO: update frontend editor before move to function include_files_admin.
401 require_once 'inc/admin/views/meta-boxes/class-lp-meta-box.php';
402
403 require_once 'inc/class-lp-page-controller.php';
404
405 require_once 'inc/gateways/class-lp-gateway-abstract.php';
406 require_once 'inc/gateways/class-lp-gateways.php';
407 }
408
409 /**
410 * Include file run on backend
411 */
412 private function include_files_admin() {
413 if ( ! is_admin() ) {
414 return;
415 }
416
417 require_once 'inc/admin/class-lp-admin-ajax.php';
418
419 require_once 'inc/admin/class-lp-admin-notice.php';
420
421 // File handle install LP
422 require_once 'inc/class-lp-install.php';
423
424 // Meta box helper
425 require_once 'inc/admin/meta-box/class-lp-meta-box-helper.php';
426
427 require_once 'inc/admin/class-lp-admin.php';
428 // require_once 'inc/admin/settings/abstract-settings-page.php';
429 }
430
431 /**
432 * Include file run on frontend
433 */
434 private function include_files_frontend() {
435 if ( is_admin() ) {
436 return;
437 }
438
439 require_once 'inc/class-lp-assets.php';
440
441 require_once 'inc/course/class-model-user-can-view-course-item.php';
442
443 require_once 'inc/class-lp-ajax.php';
444 }
445
446 /**
447 * Initial common hooks
448 */
449 public function init_hooks() {
450 // Add links setting|document|addon on plugins page.
451 add_filter( 'plugin_action_links_' . LP_PLUGIN_BASENAME, array( $this, 'plugin_links' ) );
452
453 register_activation_hook( LP_PLUGIN_FILE, array( $this, 'on_activate' ) );
454 register_deactivation_hook( LP_PLUGIN_FILE, array( $this, 'on_deactivate' ) );
455 // add_action( 'deactivate_' . LP_PLUGIN_BASENAME, array( $this, 'on_deactivate' ) );
456
457 if ( ! LP_Install::instance()->tables_install_done() ) {
458 return;
459 }
460
461 add_action( 'wp_loaded', array( $this, 'wp_loaded' ), 20 );
462 //add_action( 'after_setup_theme', array( $this, 'setup_theme' ) );
463 add_action( 'plugins_loaded', array( $this, 'plugin_loaded' ), - 10 );
464
465 // Check require version thim-core.
466 add_action( 'before_thim_core_init', array( $this, 'check_thim_core_version_require' ) );
467 }
468
469 /**
470 * Add links to Documentation and Extensions in plugin's list of action links
471 *
472 * @since 4.3.11
473 *
474 * @param array $links Array of action links
475 *
476 * @return array
477 */
478 public function plugin_links( array $links ): array {
479 $links[] = sprintf( '<a href="%s">%s</a>', admin_url( 'admin.php?page=learn-press-settings' ), __( 'Settings', 'learnpress' ) );
480 $links[] = sprintf( '<a href="%s" target="_blank">%s</a>', 'https://docspress.thimpress.com/learnpress-4-0/', __( 'Documentation', 'learnpress' ) );
481 $links[] = sprintf( '<a href="%s" target="_blank">%s</a>', get_admin_url() . '/admin.php?page=learn-press-addons', __( 'Add-ons', 'learnpress' ) );
482
483 return $links;
484 }
485
486 /**
487 * Trigger this function while activating Learnpress.
488 *
489 * @since 3.0.0
490 * @version 4.1.4.1
491 */
492 public function on_activate() {
493 LP_Install::instance()->on_activate();
494 }
495
496 /**
497 * Trigger this function while deactivating Learnpress.
498 *
499 * $since 3.0.0
500 *
501 * @hook learn_press_deactivate
502 */
503 public function on_deactivate() {
504 do_action( 'learn-press/deactivate', $this );
505 }
506
507 /**
508 * Trigger WP loaded actions.
509 *
510 * @since 3.0.0
511 */
512 public function wp_loaded() {
513 if ( $this->is_request( 'frontend' ) ) {
514 $this->gateways = LP_Gateways::instance()->get_available_payment_gateways();
515 }
516 }
517
518 /**
519 * Setup courses thumbnail.
520 *
521 * @since 3.0.0
522 */
523 public function setup_theme() {
524 if ( ! current_theme_supports( 'post-thumbnails' ) ) {
525 add_theme_support( 'post-thumbnails' );
526 }
527 add_post_type_support( LP_COURSE_CPT, 'thumbnail' );
528
529 $size = LP_Settings::get_option(
530 'course_thumbnail_dimensions',
531 array(
532 500,
533 300,
534 )
535 );
536
537 $size = array_values( (array) $size );
538
539 add_image_size( 'course_thumbnail', $size[0], $size[1], true );
540 }
541
542 /**
543 * Trigger Learnpress loaded actions.
544 *
545 * @since 3.0.0
546 * @version 1.0.2
547 * @editor tungnx
548 */
549 public function plugin_loaded() {
550 do_action( 'learnpress/hook/before-addons-call-hook-learnpress-ready' );
551
552 // Polylang
553 if ( defined( 'POLYLANG_VERSION' ) ) {
554 require_once 'inc/external-plugin/polylang/class-lp-polylang.php';
555 LP_Polylang::instance();
556 }
557
558 $this->init();
559
560 require_once 'inc/lp-template-hooks.php';
561
562 /**
563 * Check version addons valid version require.
564 * If not valid will be to deactivate.
565 * Reload page, so not affect to hook "learn-press/ready"
566 */
567 $addons_valid = true;
568 $plugins = get_option( 'active_plugins' );
569
570 $list_lp_addon_activated = preg_grep( '/^learnpress-.*/i', $plugins );
571
572 // Remove hook deactivate addon assignments v3.
573 add_action(
574 'deactivate_learnpress-assignments/learnpress-assignments.php',
575 array( $this, 'lp_assignment_install' ),
576 - 10
577 );
578
579 foreach ( $list_lp_addon_activated as $lp_addon ) {
580 $lp_addon_info = get_file_data(
581 WP_PLUGIN_DIR . '/' . $lp_addon,
582 array(
583 'Require_LP_Version' => 'Require_LP_Version',
584 'Version' => 'Version',
585 )
586 );
587
588 // $lp_addon_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $lp_addon );
589 $lp_addon_version = $lp_addon_info['Version'];
590
591 $addon = new Lp_Addon();
592 $addon->version = $lp_addon_version;
593 $addon->plugin_base = $lp_addon;
594 $addon->require_version = $lp_addon_info['Require_LP_Version'];
595 $addon_valid = $addon->check_require_version_addon();
596
597 if ( $addons_valid ) {
598 $addon_valid = $addon->check_require_version_lp();
599 }
600
601 if ( ! $addon_valid ) {
602 $addons_valid = false;
603 }
604 }
605 // End check addons valid.
606
607 if ( ! $addons_valid ) {
608 return;
609 }
610
611 // let third parties know that we're ready .
612 do_action( 'learn-press/ready' );
613 }
614
615 /**
616 * Remove hook deactivate addon assignments v3.
617 */
618 public function lp_assignment_install() {
619 remove_action( 'deactivate_learnpress-assignments/learnpress-assignments.php', 'lp_assignment_remove' );
620 }
621
622 /**
623 * Get instance of class LP_Template.
624 *
625 * @param string $type
626 *
627 * @return LP_Template_Course|LP_Template_Profile|LP_Template_General|LP_Abstract_Template|LP_Template
628 *
629 * @throws Exception
630 * @since 3.3.0
631 */
632 public function template( $type = '' ) {
633 $this->template = LP_Template::instance();
634 $templates = (array) $this->template->get_templates();
635
636 return $templates[ $type ] ?? $this->template;
637 }
638
639 /**
640 * Init LearnPress when WP initialises
641 */
642 public function init() {
643 $this->api = new LP_Core_API();
644 $this->admin_api = new LP_Admin_Core_API();
645
646 $this->get_session();
647
648 $this->settings = $this->settings();
649
650 if ( $this->is_request( 'frontend' ) ) {
651 $this->get_cart();
652 }
653
654 // Email hook notify
655 include_once 'inc/emails/class-lp-email-hooks.php';
656 // Init emails
657 LP_Emails::instance();
658 }
659
660 /**
661 * Get session object instance.
662 *
663 * @return mixed
664 */
665 public function get_session() {
666 if ( ! $this->session ) {
667 $this->session = LP_Session_Handler::instance();
668 }
669
670 return $this->session;
671 }
672
673 /**
674 * Get settings object instance.
675 *
676 * @return bool|LP_Settings
677 */
678 public function settings() {
679 return LP_Settings::instance();
680 }
681
682 /**
683 * Get cart object instance for online learning market.
684 *
685 * @return LP_Cart
686 */
687 public function get_cart() : LP_Cart {
688 if ( ! $this->cart ) {
689 $this->cart = LP_Cart::instance();
690 }
691
692 return $this->cart;
693 }
694
695 /**
696 * Check type of request.
697 *
698 * @param string $type ajax, frontend or admin.
699 *
700 * @return bool
701 */
702 public function is_request( $type ) {
703 switch ( $type ) {
704 case 'admin':
705 return is_admin();
706 case 'ajax':
707 return defined( 'LP_DOING_AJAX' );
708 case 'cron':
709 return defined( 'DOING_CRON' );
710 case 'frontend':
711 return ( ! is_admin() || defined( 'LP_DOING_AJAX' ) ) && ! defined( 'DOING_CRON' );
712 default:
713 return strtolower( $_SERVER['REQUEST_METHOD'] ) == $type;
714 }
715 }
716
717 /**
718 * Get the plugin url.
719 *
720 * @param string $sub_dir
721 *
722 * @return string
723 */
724 public function plugin_url( $sub_dir = '' ) {
725 return LP_PLUGIN_URL . ( $sub_dir ? "{$sub_dir}" : '' );
726 }
727
728 /**
729 * Get the plugin path.
730 *
731 * @param string $sub_dir
732 *
733 * @return string
734 */
735 public function plugin_path( $sub_dir = '' ) {
736 return LP_PLUGIN_PATH . ( $sub_dir ? "{$sub_dir}" : '' );
737 }
738
739 /**
740 * Get checkout object instance
741 *
742 * @return LP_Checkout
743 */
744 public function checkout() {
745 return LP_Checkout::instance();
746 }
747
748 /**
749 * Short way to return image file is located in LearnPress directory.
750 *
751 * @param string
752 *
753 * @return string
754 */
755 public function image( $file ) {
756 if ( ! preg_match( '/.(jpg|png)$/', $file ) ) {
757 $file .= '.jpg';
758 }
759
760 return $this->plugin_url( "assets/images/{$file}" );
761 }
762
763 /**
764 * Check require version thim-core
765 */
766 public function check_thim_core_version_require() {
767 // Get thim-core info for LP check .
768 include_once ABSPATH . 'wp-admin/includes/plugin.php';
769 $thim_core_info = get_file_data(
770 WP_PLUGIN_DIR . '/thim-core/thim-core.php',
771 array(
772 'Name' => 'Plugin Name',
773 'Require_LP_Version' => 'Require_LP_Version',
774 'Version' => 'Version',
775 )
776 );
777
778 if ( version_compare( $this->thim_core_version_require, $thim_core_info['Version'], '>' ) ) {
779 deactivate_plugins( 'thim-core/thim-core.php' );
780
781 if ( isset( $_GET['activate'] ) ) {
782 unset( $_GET['activate'] );
783 }
784
785 $message = sprintf(
786 '%s %s You can download %s. Read guide on %s',
787 'LP4 require version Thim-core:',
788 $this->thim_core_version_require,
789 '<a href="https://thimpresswp.github.io/thim-core/thim-core.zip">latest version</a>',
790 '<a href="https://docspress.thimpress.com/upgrade-database-how-to-fix-some-issue/">here</a>'
791 );
792 ?>
793 <div class="notice notice-error">
794 <p><?php echo wp_kses_post( $message ); ?></p>
795 </div>
796 <?php
797 die;
798 }
799 }
800
801 /**
802 * Main plugin instance.
803 *
804 * @return LearnPress
805 */
806 public static function instance() {
807 if ( is_null( self::$_instance ) ) {
808 self::$_instance = new self();
809 }
810
811 return self::$_instance;
812 }
813
814 /**
815 * Copy class-lp-mu-plugin.php to mu_plugins folder
816 *
817 * @return void
818 */
819 public function mu_plugin() {
820 try {
821 // Remove file mu plugin create on version 4.1.7.
822 $name = 'class-lp-mu-plugin.php';
823 $mu_plugins_path = WPMU_PLUGIN_DIR;
824 $mu_plugin_file_path = $mu_plugins_path . '/' . $name;
825 if ( file_exists( $mu_plugin_file_path ) ) {
826 LP_WP_Filesystem::instance()->lp_filesystem->delete( $mu_plugin_file_path );
827 }
828 } catch ( Throwable $e ) {
829 error_log( $e->getMessage() );
830 }
831 }
832 }
833 }
834
835 /**
836 * Short way to load main instance of plugin
837 *
838 * @return LearnPress
839 * @since 1.0
840 * @author thimpress
841 */
842 function LP() {
843 return LearnPress::instance();
844 }
845
846 /**
847 * Done! entry point of the plugin
848 * Create new instance of LearnPress and put it to global
849 */
850 $GLOBALS['LearnPress'] = LearnPress::instance();
851