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

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