PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.2.0
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.2.0
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 4.2.1 All 138 releases
learnpress / learnpress.php

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

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