PluginProbe
Tutor LMS – eLearning and online course solution / 3.9.15
Tutor LMS – eLearning and online course solution v3.9.15
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 All 191 releases
← All changes | classes/Admin.php +7 -156 trunk3.9.15 View file →
@@ -9,10 +9,8 @@
9 9 */
10 10
11 11 namespace TUTOR;
12 12
13 -defined( 'ABSPATH' ) || exit;
14 -
15 13 use Tutor\Ecommerce\OrderController;
16 14 use Tutor\Helpers\HttpHelper;
17 15 use TUTOR\Input;
18 16 use Tutor\Models\CourseModel;
@@ -17,8 +15,12 @@
17 15 use TUTOR\Input;
18 16 use Tutor\Models\CourseModel;
19 17 use Tutor\Traits\JsonResponse;
20 18
19 +if ( ! defined( 'ABSPATH' ) ) {
20 + exit;
21 +}
22 +
21 23 /**
22 24 * Admin Class
23 25 *
24 26 * @since 1.0.0
@@ -29,12 +31,12 @@
29 31 /**
30 32 * Constructor
31 33 *
32 34 * @since 1.0.0
33 - *
34 35 * @return void
35 36 */
36 37 public function __construct() {
38 +
37 39 add_action( 'admin_notices', array( $this, 'show_unstable_version_admin_notice' ) );
38 40
39 41 add_action( 'admin_menu', array( $this, 'register_menu' ) );
40 42 // Force activate menu for necessary.
@@ -41,9 +43,8 @@
41 43 add_filter( 'parent_file', array( $this, 'parent_menu_active' ) );
42 44 add_filter( 'submenu_file', array( $this, 'submenu_file_active' ), 10, 2 );
43 45
44 46 add_action( 'admin_init', array( $this, 'filter_posts_for_instructors' ) );
45 - add_action( 'admin_init', array( $this, 'redirect_to_welcome_page' ) );
46 47 add_action( 'load-post.php', array( $this, 'check_if_current_users_post' ) );
47 48
48 49 add_filter( 'plugin_action_links_' . plugin_basename( TUTOR_FILE ), array( $this, 'plugin_action_links' ) );
49 50
@@ -60,121 +61,11 @@
60 61
61 62 add_action( 'admin_bar_menu', array( $this, 'add_toolbar_items' ), 100 );
62 63
63 64 add_action( 'wp_ajax_tutor_do_not_show_feature_page', array( $this, 'handle_do_not_show_feature_page' ) );
64 -
65 - add_action( 'upgrader_process_complete', array( $this, 'set_permalink_flag_on_upgrade' ), 10, 2 );
66 -
67 - add_action( 'admin_notices', array( $this, 'show_offer_notice' ) );
68 - add_action( 'wp_ajax_tutor_dismiss_offer_notice', array( $this, 'ajax_dismiss_offer_notice' ) );
69 65 }
70 66
71 67 /**
72 - * Flush Tutor permalink rewrite rules after updates.
73 - *
74 - * @since 4.0.0
75 - *
76 - * @param mixed $upgrader_object Upgrader instance.
77 - * @param array $options Extra arguments passed to the hook.
78 - *
79 - * @return void
80 - */
81 - public function set_permalink_flag_on_upgrade( $upgrader_object, $options ) {
82 - Permalink::set_permalink_reset_flag( $upgrader_object, $options );
83 - }
84 -
85 - /**
86 - * Check offer notice is dismissed.
87 - *
88 - * @since 4.0.0
89 - *
90 - * @return bool
91 - */
92 - private function is_offer_notice_dismissed() {
93 - return '4.0.0' === get_transient( 'tutor_offer_notice_dismissed' );
94 - }
95 -
96 - /**
97 - * Show offer notice
98 - *
99 - * @since 4.0.0
100 - *
101 - * @return void
102 - */
103 - public function show_offer_notice() {
104 - if ( ! User::is_admin() || Input::has( 'welcome', Input::GET_REQUEST ) ) {
105 - return;
106 - }
107 -
108 - $is_free_user = ! tutor()->has_pro;
109 - $cta_label = __( 'Claim 30% OFF', 'tutor' );
110 - $cta_link = 'https://tutorlms.com/pricing/?utm_source=tutor-plugin&utm_medium=notice&utm_campaign=tutor-lms-pro-offer';
111 -
112 - $now = new \DateTimeImmutable( 'now', wp_timezone() );
113 - $expiration_dt = '2026-07-15 23:59:59';
114 - $expiration = new \DateTimeImmutable( $expiration_dt, wp_timezone() );
115 -
116 - $remaining = max( 0, $expiration->getTimestamp() - $now->getTimestamp() );
117 -
118 - $days = floor( $remaining / DAY_IN_SECONDS );
119 - $hours = floor( ( $remaining % DAY_IN_SECONDS ) / HOUR_IN_SECONDS );
120 - $minutes = floor( ( $remaining % HOUR_IN_SECONDS ) / MINUTE_IN_SECONDS );
121 - $seconds = $remaining % MINUTE_IN_SECONDS;
122 -
123 - $expire_in = sprintf(
124 - '%dd:%02dh:%02d:%02d',
125 - $days,
126 - $hours,
127 - $minutes,
128 - $seconds
129 - );
130 -
131 - if ( $is_free_user && $remaining > 0 && ! self::is_offer_notice_dismissed() ) {
132 - ?>
133 - <div class="tutor-offer-notice">
134 - <div class="tutor-offer-notice-wrapper">
135 - <div class="tutor-offer-notice-left">
136 - <div data-subheader><?php esc_html_e( '4.0 launch offer', 'tutor' ); ?></div>
137 - <div data-header><?php esc_html_e( '30% OFF', 'tutor' ); ?></div>
138 - <div data-subtext><?php esc_html_e( 'on all annual plans', 'tutor' ); ?></div>
139 - </div>
140 - <div class="tutor-offer-notice-right">
141 - <div class="tutor-offer-notice-text"><?php esc_html_e( 'Offer ends by', 'tutor' ); ?> <span class="tutor-offer-notice-timer" data-expiry="<?php echo esc_attr( $expiration->getTimestamp() ); ?>"><?php echo esc_html( $expire_in ); ?></span></div>
142 - <a class="tutor-offer-notice-cta" href="<?php echo esc_url( $cta_link ); ?>" target="_blank">
143 - <?php echo esc_html( $cta_label ); ?>
144 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="#fff" d="M13.938 6.937a.55.55 0 0 0-.786 0 .555.555 0 0 0 0 .778l3.338 3.34H5.243a.55.55 0 0 0-.55.551c0 .305.242.558.55.558h11.246l-3.337 3.334a.563.563 0 0 0 0 .785.55.55 0 0 0 .786 0L18.217 12a.543.543 0 0 0 0-.78z"/></svg>
145 - </a>
146 - </div>
147 - </div>
148 - <button type="button" class="tutor-offer-notice-dismiss"><span class="tutor-icon-times"></span></button>
149 - </div>
150 - <?php
151 - }
152 - }
153 -
154 - /**
155 - * Dismiss offer notice.
156 - *
157 - * @since 4.0.0
158 - *
159 - * @return void JSON response.
160 - */
161 - public function ajax_dismiss_offer_notice() {
162 - if ( ! User::is_admin() ) {
163 - $this->response_bad_request( tutor_utils()->error_message() );
164 - }
165 -
166 - if ( self::is_offer_notice_dismissed() ) {
167 - $this->response_bad_request( __( 'You have already dismissed the offer notice.', 'tutor' ) );
168 - }
169 -
170 - // Set expiry until next day.
171 - $expiration = strtotime( 'tomorrow' ) - time();
172 - set_transient( 'tutor_offer_notice_dismissed', '4.0.0', $expiration );
173 - $this->json_response( __( 'Notice dismissed', 'tutor' ) );
174 - }
175 -
176 - /**
177 68 * Show unstable version notice.
178 69 *
179 70 * @since 3.0.0
180 71 *
@@ -441,8 +332,9 @@
441 332 * @return void
442 333 */
443 334 public function feature_promotion_page() {
444 335 include tutor()->path . 'views/pages/welcome.php';
336 + // include tutor()->path . 'views/pages/feature-promotion.php';
445 337 }
446 338
447 339 /**
448 340 * Show students page
@@ -447,9 +339,8 @@
447 339 /**
448 340 * Show students page
449 341 *
450 342 * @since 1.0.0
451 - *
452 343 * @return void
453 344 */
454 345 public function tutor_students() {
455 346 include tutor()->path . 'views/pages/students.php';
@@ -458,9 +349,8 @@
458 349 /**
459 350 * Show instructor page
460 351 *
461 352 * @since 1.0.0
462 - *
463 353 * @return void
464 354 */
465 355 public function tutor_instructors() {
466 356 include tutor()->path . 'views/pages/instructors.php';
@@ -469,9 +359,8 @@
469 359 /**
470 360 * Show announcements page
471 361 *
472 362 * @since 1.0.0
473 - *
474 363 * @return void
475 364 */
476 365 public function tutor_announcements() {
477 366 include tutor()->path . 'views/pages/announcements.php';
@@ -480,9 +369,8 @@
480 369 /**
481 370 * Show Q&A page
482 371 *
483 372 * @since 1.0.0
484 - *
485 373 * @return void
486 374 */
487 375 public function question_answer() {
488 376 include tutor()->path . 'views/pages/question_answer.php';
@@ -491,9 +379,8 @@
491 379 /**
492 380 * Show quiz attempts page
493 381 *
494 382 * @since 1.0.0
495 - *
496 383 * @return void
497 384 */
498 385 public function quiz_attempts() {
499 386 include tutor()->path . 'views/pages/quiz_attempts.php';
@@ -502,9 +389,8 @@
502 389 /**
503 390 * Show the withdraw requests table
504 391 *
505 392 * @since 1.2.0
506 - *
507 393 * @return void
508 394 */
509 395 public function withdraw_requests() {
510 396 include tutor()->path . 'views/pages/withdraw_requests.php';
@@ -513,9 +399,8 @@
513 399 /**
514 400 * Enable or disable addons
515 401 *
516 402 * @since 1.0.0
517 - *
518 403 * @return void
519 404 */
520 405 public function enable_disable_addons() {
521 406 include tutor()->path . 'views/pages/enable_disable_addons.php';
@@ -524,9 +409,8 @@
524 409 /**
525 410 * Tutor tools page (OLD)
526 411 *
527 412 * @since 1.0.0
528 - *
529 413 * @return void
530 414 */
531 415 public function tutor_tools_old() {
532 416 $tutor_admin_tools_page = Input::get( 'tutor_admin_tools_page' );
@@ -559,9 +443,8 @@
559 443 /**
560 444 * Show pro upgrade page
561 445 *
562 446 * @since 1.0.0
563 - *
564 447 * @return void
565 448 */
566 449 public function tutor_get_pro() {
567 450 include tutor()->path . 'views/pages/get-pro.php';
@@ -572,9 +455,8 @@
572 455 *
573 456 * @since 1.0.0
574 457 *
575 458 * @param string $parent_file parent file.
576 - *
577 459 * @return string
578 460 */
579 461 public function parent_menu_active( $parent_file ) {
580 462 $taxonomy = Input::get( 'taxonomy' );
@@ -612,9 +494,8 @@
612 494 /**
613 495 * Filter posts for instructor
614 496 *
615 497 * @since 1.0.0
616 - *
617 498 * @return void
618 499 */
619 500 public function filter_posts_for_instructors() {
620 501 if ( ! current_user_can( 'administrator' ) && current_user_can( tutor()->instructor_role ) ) {
@@ -628,9 +509,8 @@
628 509 *
629 510 * @since 1.0.0
630 511 *
631 512 * @param mixed $clauses clauses.
632 - *
633 513 * @return mixed
634 514 */
635 515 public function posts_clauses_request( $clauses ) {
636 516
@@ -660,9 +540,8 @@
660 540 /**
661 541 * Prevent unauthorised course/lesson edit page by direct URL
662 542 *
663 543 * @since 1.0.0
664 - *
665 544 * @return void
666 545 */
667 546 public function check_if_current_users_post() {
668 547 if ( current_user_can( 'administrator' ) || ! current_user_can( tutor()->instructor_role ) ) {
@@ -701,9 +580,8 @@
701 580 *
702 581 * @since 1.0.0
703 582 *
704 583 * @param string $template_path template file path.
705 - *
706 584 * @return array
707 585 */
708 586 public static function scan_template_files( $template_path = null ) {
709 587 if ( ! $template_path ) {
@@ -733,9 +611,8 @@
733 611 /**
734 612 * Get Template overridden files
735 613 *
736 614 * @since 1.0.0
737 - *
738 615 * @return array
739 616 */
740 617 public static function template_overridden_files() {
741 618 $template_files = self::scan_template_files();
@@ -762,9 +639,8 @@
762 639 *
763 640 * @since 1.0.0
764 641 *
765 642 * @param array $actions action list.
766 - *
767 643 * @return array
768 644 */
769 645 public function plugin_action_links( $actions ) {
770 646 $has_pro = tutor()->has_pro;
@@ -797,9 +673,9 @@
797 673
798 674 if ( tutor()->basename === $plugin_file ) {
799 675 $plugin_meta[] = sprintf(
800 676 '<a href="%s"><strong style="color: #03bd24">%s</strong></a>',
801 - esc_url( 'https://tutorlms.com/docs/?utm_source=tutor&utm_medium=plugins_installation_list&utm_campaign=plugin_docs_link' ),
677 + esc_url( 'https://docs.themeum.com/tutor-lms/?utm_source=tutor&utm_medium=plugins_installation_list&utm_campaign=plugin_docs_link' ),
802 678 esc_html__( 'Documentation', 'tutor' )
803 679 );
804 680 $plugin_meta[] = sprintf(
805 681 '<a href="%s"><strong style="color: #03bd24">%s</strong></a>',
@@ -816,9 +692,8 @@
816 692 *
817 693 * @since 1.0.0
818 694 *
819 695 * @param string $footer_text footer text.
820 - *
821 696 * @return string
822 697 */
823 698 public function admin_footer_text( $footer_text ) {
824 699 $current_screen = get_current_screen();
@@ -851,9 +726,8 @@
851 726 /**
852 727 * Tutor Course List
853 728 *
854 729 * @since 2.0.0
855 - *
856 730 * @return void
857 731 */
858 732 public function tutor_course_list() {
859 733 include tutor()->path . 'views/pages/course-list.php';
@@ -907,9 +781,8 @@
907 781 /**
908 782 * Show welcome page
909 783 *
910 784 * @since 1.0.0
911 - *
912 785 * @return void
913 786 */
914 787 public function welcome_page() {
915 788 Tutor_Setup::mark_as_visited();
@@ -961,28 +834,6 @@
961 834 );
962 835 }
963 836
964 837 return $admin_bar;
965 - }
966 -
967 - /**
968 - * Redirect to welcome page if user is not logged in.
969 - *
970 - * @since 4.0.0
971 - *
972 - * @return void
973 - */
974 - public function redirect_to_welcome_page() {
975 - // Skip for fresh installs, during the setup wizard, or during AJAX.
976 - if ( ! get_option( 'tutor_wizard' ) || 'tutor-setup' === Input::get( 'page' ) || wp_doing_ajax() ) {
977 - return;
978 - }
979 -
980 - $tutor_new_feature = get_option( 'tutor-new-feature' );
981 - if ( version_compare( $tutor_new_feature, '4.0.0-rc.2', '>=' ) ) {
982 - return;
983 - }
984 -
985 - wp_safe_redirect( admin_url( 'admin.php?page=tutor&welcome=1' ) );
986 - update_option( 'tutor-new-feature', TUTOR_VERSION );
987 838 }
988 839 }