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

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