PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7.2
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7.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.2, at learnpress.php

883 lines 22.9 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.2
8 * Author URI: http://thimpress.com
9 * Requires at least: 5.6
10 * Tested up to: 6.0
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/course/class-lp-course-utils.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-notice.php';
419
420 // File handle install LP
421 require_once 'inc/class-lp-install.php';
422
423 // Meta box helper
424 require_once 'inc/admin/meta-box/class-lp-meta-box-helper.php';
425
426 require_once 'inc/admin/class-lp-admin.php';
427 // require_once 'inc/admin/settings/abstract-settings-page.php';
428
429 require_once 'inc/admin/class-lp-admin-ajax.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 if ( 0 !== strcmp( LP_PLUGIN_BASENAME, 'learnpress/learnpress.php' ) ) {
452 add_action( 'admin_notices', array( $this, 'error' ) );
453 }
454
455 // Add links setting|document|addon on plugins page.
456 add_filter( 'plugin_action_links_' . LP_PLUGIN_BASENAME, array( $this, 'plugin_links' ) );
457
458 register_activation_hook( LP_PLUGIN_FILE, array( $this, 'on_activate' ) );
459 register_deactivation_hook( LP_PLUGIN_FILE, array( $this, 'on_deactivate' ) );
460 // add_action( 'deactivate_' . LP_PLUGIN_BASENAME, array( $this, 'on_deactivate' ) );
461
462 if ( ! LP_Install::instance()->tables_install_done() ) {
463 return;
464 }
465
466 add_action( 'wp_loaded', array( $this, 'wp_loaded' ), 20 );
467 //add_action( 'after_setup_theme', array( $this, 'setup_theme' ) );
468 add_action( 'plugins_loaded', array( $this, 'plugin_loaded' ), - 10 );
469
470 // Check require version thim-core.
471 add_action( 'before_thim_core_init', array( $this, 'check_thim_core_version_require' ) );
472 }
473
474 /**
475 * Add links to Documentation and Extensions in plugin's list of action links
476 *
477 * @since 4.3.11
478 *
479 * @param array $links Array of action links
480 *
481 * @return array
482 */
483 public function plugin_links( array $links ): array {
484 $links[] = sprintf( '<a href="%s">%s</a>', admin_url( 'admin.php?page=learn-press-settings' ), __( 'Settings', 'learnpress' ) );
485 $links[] = sprintf( '<a href="%s" target="_blank">%s</a>', 'https://docspress.thimpress.com/learnpress-4-0/', __( 'Documentation', 'learnpress' ) );
486 $links[] = sprintf( '<a href="%s" target="_blank">%s</a>', get_admin_url() . '/admin.php?page=learn-press-addons', __( 'Add-ons', 'learnpress' ) );
487
488 return $links;
489 }
490
491 public function error() {
492 ?>
493 <div class="error">
494 <p>
495 <?php
496 printf(
497 __(
498 'LearnPress plugin base directory must be <strong>learnpress/learnpres.php</strong> (case sensitive) to ensure all functions work properly and fully operational (currently <strong>%s</strong>)',
499 'learnpress'
500 ),
501 LP_PLUGIN_BASENAME
502 );
503 ?>
504 </p>
505 </div>
506 <?php
507 }
508
509 /**
510 * Trigger this function while activating Learnpress.
511 *
512 * @since 3.0.0
513 * @version 4.1.4.1
514 */
515 public function on_activate() {
516 LP_Install::instance()->on_activate();
517 }
518
519 /**
520 * Trigger this function while deactivating Learnpress.
521 *
522 * $since 3.0.0
523 *
524 * @hook learn_press_deactivate
525 */
526 public function on_deactivate() {
527 do_action( 'learn-press/deactivate', $this );
528 }
529
530 /**
531 * Trigger WP loaded actions.
532 *
533 * @since 3.0.0
534 */
535 public function wp_loaded() {
536 if ( $this->is_request( 'frontend' ) ) {
537 $this->gateways = LP_Gateways::instance()->get_available_payment_gateways();
538 }
539 }
540
541 /**
542 * Setup courses thumbnail.
543 *
544 * @since 3.0.0
545 */
546 public function setup_theme() {
547 if ( ! current_theme_supports( 'post-thumbnails' ) ) {
548 add_theme_support( 'post-thumbnails' );
549 }
550 add_post_type_support( LP_COURSE_CPT, 'thumbnail' );
551
552 $size = LP_Settings::get_option(
553 'course_thumbnail_dimensions',
554 array(
555 500,
556 300,
557 )
558 );
559
560 $size = array_values( (array) $size );
561
562 add_image_size( 'course_thumbnail', $size[0], $size[1], true );
563 }
564
565 /**
566 * Trigger Learnpress loaded actions.
567 *
568 * @since 3.0.0
569 * @version 1.0.2
570 * @editor tungnx
571 */
572 public function plugin_loaded() {
573 do_action( 'learnpress/hook/before-addons-call-hook-learnpress-ready' );
574
575 // Polylang
576 if ( defined( 'POLYLANG_VERSION' ) ) {
577 require_once 'inc/external-plugin/polylang/class-lp-polylang.php';
578 LP_Polylang::instance();
579 }
580
581 $this->init();
582
583 require_once 'inc/lp-template-hooks.php';
584
585 /**
586 * Check version addons valid version require.
587 * If not valid will be to deactivate.
588 * Reload page, so not affect to hook "learn-press/ready"
589 */
590 $addons_valid = true;
591 $plugins = get_option( 'active_plugins' );
592
593 $list_lp_addon_activated = preg_grep( '/^learnpress-.*/i', $plugins );
594
595 // Remove hook deactivate addon assignments v3.
596 add_action(
597 'deactivate_learnpress-assignments/learnpress-assignments.php',
598 array( $this, 'lp_assignment_install' ),
599 - 10
600 );
601
602 foreach ( $list_lp_addon_activated as $lp_addon ) {
603 $lp_addon_info = get_file_data(
604 WP_PLUGIN_DIR . '/' . $lp_addon,
605 array(
606 'Require_LP_Version' => 'Require_LP_Version',
607 'Version' => 'Version',
608 )
609 );
610
611 // $lp_addon_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $lp_addon );
612 $lp_addon_version = $lp_addon_info['Version'];
613
614 $addon = new Lp_Addon();
615 $addon->version = $lp_addon_version;
616 $addon->plugin_base = $lp_addon;
617 $addon->require_version = $lp_addon_info['Require_LP_Version'];
618 $addon_valid = $addon->check_require_version_addon();
619
620 if ( $addons_valid ) {
621 $addon_valid = $addon->check_require_version_lp();
622 }
623
624 if ( ! $addon_valid ) {
625 $addons_valid = false;
626 }
627 }
628 // End check addons valid.
629
630 if ( ! $addons_valid ) {
631 return;
632 }
633
634 // let third parties know that we're ready .
635 do_action( 'learn-press/ready' );
636 }
637
638 /**
639 * Remove hook deactivate addon assignments v3.
640 */
641 public function lp_assignment_install() {
642 remove_action( 'deactivate_learnpress-assignments/learnpress-assignments.php', 'lp_assignment_remove' );
643 }
644
645 /**
646 * Get instance of class LP_Template.
647 *
648 * @param string $type
649 *
650 * @return LP_Template_Course|LP_Template_Profile|LP_Template_General|LP_Abstract_Template|LP_Template
651 *
652 * @throws Exception
653 * @since 3.3.0
654 */
655 public function template( $type = '' ) {
656 if ( ! $this->template ) {
657 $this->template = LP_Template::instance();
658 }
659
660 return isset( $this->template[ $type ] ) ? $this->template[ $type ] : $this->template;
661 }
662
663 /**
664 * Init LearnPress when WP initialises
665 */
666 public function init() {
667 $this->api = new LP_Core_API();
668 $this->admin_api = new LP_Admin_Core_API();
669
670 $this->get_session();
671
672 $this->settings = $this->settings();
673
674 if ( $this->is_request( 'frontend' ) ) {
675 $this->get_cart();
676 }
677
678 // Email hook notify
679 include_once 'inc/emails/class-lp-email-hooks.php';
680 // Init emails
681 LP_Emails::instance();
682 }
683
684 /**
685 * Get session object instance.
686 *
687 * @return mixed
688 */
689 public function get_session() {
690 if ( ! $this->session ) {
691 $this->session = LP_Session_Handler::instance();
692 }
693
694 return $this->session;
695 }
696
697 /**
698 * Get settings object instance.
699 *
700 * @return bool|LP_Settings
701 */
702 public function settings() {
703 return LP_Settings::instance();
704 }
705
706 /**
707 * Get cart object instance for online learning market.
708 *
709 * @return LP_Cart
710 */
711 public function get_cart() : LP_Cart {
712 if ( ! $this->cart ) {
713 $this->cart = LP_Cart::instance();
714 }
715
716 return $this->cart;
717 }
718
719 /**
720 * Check type of request.
721 *
722 * @param string $type ajax, frontend or admin.
723 *
724 * @return bool
725 */
726 public function is_request( $type ) {
727 switch ( $type ) {
728 case 'admin':
729 return is_admin();
730 case 'ajax':
731 return defined( 'LP_DOING_AJAX' );
732 case 'cron':
733 return defined( 'DOING_CRON' );
734 case 'frontend':
735 return ( ! is_admin() || defined( 'LP_DOING_AJAX' ) ) && ! defined( 'DOING_CRON' );
736 default:
737 return strtolower( $_SERVER['REQUEST_METHOD'] ) == $type;
738 }
739 }
740
741 /**
742 * Get the plugin url.
743 *
744 * @param string $sub_dir
745 *
746 * @return string
747 */
748 public function plugin_url( $sub_dir = '' ) {
749 return LP_PLUGIN_URL . ( $sub_dir ? "{$sub_dir}" : '' );
750 }
751
752 /**
753 * Get the plugin path.
754 *
755 * @param string $sub_dir
756 *
757 * @return string
758 */
759 public function plugin_path( $sub_dir = '' ) {
760 return LP_PLUGIN_PATH . ( $sub_dir ? "{$sub_dir}" : '' );
761 }
762
763 /**
764 * Get checkout object instance
765 *
766 * @return LP_Checkout
767 */
768 public function checkout() {
769 return LP_Checkout::instance();
770 }
771
772 /**
773 * Short way to return image file is located in LearnPress directory.
774 *
775 * @param string
776 *
777 * @return string
778 */
779 public function image( $file ) {
780 if ( ! preg_match( '/.(jpg|png)$/', $file ) ) {
781 $file .= '.jpg';
782 }
783
784 return $this->plugin_url( "assets/images/{$file}" );
785 }
786
787 /**
788 * Check require version thim-core
789 */
790 public function check_thim_core_version_require() {
791 // Get thim-core info for LP check .
792 include_once ABSPATH . 'wp-admin/includes/plugin.php';
793 $thim_core_info = get_file_data(
794 WP_PLUGIN_DIR . '/thim-core/thim-core.php',
795 array(
796 'Name' => 'Plugin Name',
797 'Require_LP_Version' => 'Require_LP_Version',
798 'Version' => 'Version',
799 )
800 );
801
802 if ( version_compare( $this->thim_core_version_require, $thim_core_info['Version'], '>' ) ) {
803 deactivate_plugins( 'thim-core/thim-core.php' );
804
805 if ( isset( $_GET['activate'] ) ) {
806 unset( $_GET['activate'] );
807 }
808
809 $message = sprintf(
810 '%s %s You can download %s. Read guide on %s',
811 'LP4 require version Thim-core:',
812 $this->thim_core_version_require,
813 '<a href="https://thimpresswp.github.io/thim-core/thim-core.zip">latest version</a>',
814 '<a href="https://docspress.thimpress.com/upgrade-database-how-to-fix-some-issue/">here</a>'
815 );
816 ?>
817 <div class="notice notice-error">
818 <p><?php echo wp_kses_post( $message ); ?></p>
819 </div>
820 <?php
821 die;
822 }
823 }
824
825 /**
826 * Main plugin instance.
827 *
828 * @return LearnPress
829 */
830 public static function instance() {
831 if ( is_null( self::$_instance ) ) {
832 self::$_instance = new self();
833 }
834
835 return self::$_instance;
836 }
837
838 public function admin_notice_require_addon_version() {
839 ?>
840 <div class="notice notice-error">
841 <p><?php echo( '<strong>LearnPress version ' . LEARNPRESS_VERSION . ' require Addon</strong> version 4.0.0 or higher' ); ?></p>
842 </div>
843 <?php
844 }
845
846 /**
847 * Copy class-lp-mu-plugin.php to mu_plugins folder
848 *
849 * @return void
850 */
851 public function mu_plugin() {
852 try {
853 // Remove file mu plugin create on version 4.1.7.
854 $name = 'class-lp-mu-plugin.php';
855 $mu_plugins_path = WPMU_PLUGIN_DIR;
856 $mu_plugin_file_path = $mu_plugins_path . '/' . $name;
857 if ( file_exists( $mu_plugin_file_path ) ) {
858 LP_WP_Filesystem::instance()->lp_filesystem->delete( $mu_plugin_file_path );
859 }
860 } catch ( Throwable $e ) {
861 error_log( $e->getMessage() );
862 }
863 }
864 }
865 }
866
867 /**
868 * Short way to load main instance of plugin
869 *
870 * @return LearnPress
871 * @since 1.0
872 * @author thimpress
873 */
874 function LP() {
875 return LearnPress::instance();
876 }
877
878 /**
879 * Done! entry point of the plugin
880 * Create new instance of LearnPress and put it to global
881 */
882 $GLOBALS['LearnPress'] = LearnPress::instance();
883