Tutor LMS – eLearning and online course solution - Version 1.4.6

Version Description

  • 11 November, 2019 =

  • Added: Maintenance Mode

  • Added: Frontend course edit link from Course Edit Page Admin bar LINK

  • Fixed: bug during add topic in course builder

  • Fixed: certificate download fatal error related microtime() in tutor-pro version

Download this release

Release Info

Developer themeum
Plugin Icon wp plugin Tutor LMS – eLearning and online course solution
Version 1.4.6
Comparing to
See all releases

Code changes from version 1.4.5 to 1.4.6

assets/css/tutor-admin.css CHANGED
@@ -3230,4 +3230,49 @@ table.tutor-table p{
3230
 
3231
  /**
3232
  * END Tutor Table
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3233
  */
3230
 
3231
  /**
3232
  * END Tutor Table
3233
+ */
3234
+
3235
+ /**
3236
+ Tools Nav
3237
+ */
3238
+ .tutor-nav-tab-wrapper{
3239
+ margin-bottom: 10px;
3240
+ }
3241
+ .nav-tab-item {
3242
+ float: left;
3243
+ border: 1px solid #ccc;
3244
+ border-bottom: none;
3245
+ margin-left: .5em;
3246
+ padding: 10px 14px;
3247
+ font-size: 14px;
3248
+ line-height: 1.33;
3249
+ font-weight: 600;
3250
+ background: #e5e5e5;
3251
+ color: #555;
3252
+ text-decoration: none;
3253
+ white-space: nowrap
3254
+ }
3255
+ .nav-tab-item:first-child{
3256
+ margin-left: 0;
3257
+ }
3258
+ .nav-tab-item:focus,.nav-tab-item:hover {
3259
+ background-color: #fff;
3260
+ color: #444
3261
+ }
3262
+ .nav-tab-item-active,.nav-tab-item:focus:active {
3263
+ box-shadow: none
3264
+ }
3265
+ .nav-tab-item-active {
3266
+ margin-bottom: -1px;
3267
+ color: #444
3268
+ }
3269
+ .nav-tab-item-active,.nav-tab-item-active:focus,.nav-tab-item-active:focus:active,.nav-tab-item-active:hover {
3270
+ border-bottom: 1px solid #f1f1f1;
3271
+ background: #f1f1f1;
3272
+ color: #000
3273
+ }
3274
+
3275
+
3276
+ /**
3277
+ * END Tools
3278
  */
assets/js/tutor-admin.js CHANGED
@@ -622,4 +622,54 @@ jQuery(document).ready(function($){
622
  }
623
  });
624
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
625
  });
622
  }
623
  });
624
 
625
+ /**
626
+ * LP Migration
627
+ * Since v.1.4.6
628
+ */
629
+
630
+
631
+ $(document).on( 'click', '#migrate_lp_courses_btn', function( e ){
632
+ e.preventDefault();
633
+
634
+ var $that = $(this);
635
+
636
+ $.ajax({
637
+ url : ajaxurl,
638
+ type : 'POST',
639
+ data : {action : 'lp_migrate_course_to_tutor' },
640
+ beforeSend: function () {
641
+ $that.addClass('tutor-updating-message');
642
+ get_live_progress_course_migrating_info();
643
+ },
644
+ success: function (data) {
645
+ if (data.success) {
646
+ window.location.reload();
647
+ }
648
+ },
649
+ complete: function () {
650
+ $that.removeClass('tutor-updating-message');
651
+ }
652
+ });
653
+
654
+ });
655
+
656
+ function get_live_progress_course_migrating_info(){
657
+ $.ajax({
658
+ url : ajaxurl,
659
+ type : 'POST',
660
+ data : {action : '_get_lp_live_progress_course_migrating_info' },
661
+ success: function (data) {
662
+ if (data.success) {
663
+ if (data.data.migrated_count) {
664
+ $('#course_migration_progress').html('<div class="tutor-alert tutor-alert-info">'+data.data.progress_text+'</div>');
665
+ }
666
+
667
+ setTimeout(get_live_progress_course_migrating_info, 2000);
668
+ }
669
+ }
670
+ });
671
+ }
672
+
673
+
674
+
675
  });
assets/js/tutor.js CHANGED
@@ -137,6 +137,51 @@ jQuery(document).ready(function($){
137
  });
138
  });
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  $(document).on('change keyup', '.course-edit-topic-title-input', function (e) {
141
  e.preventDefault();
142
  $(this).closest('.tutor-topics-top').find('.topic-inner-title').html($(this).val());
137
  });
138
  });
139
 
140
+ /**
141
+ * Resorting...
142
+ */
143
+ function enable_sorting_topic_lesson(){
144
+ if (jQuery().sortable) {
145
+ $(".course-contents").sortable({
146
+ handle: ".course-move-handle",
147
+ start: function (e, ui) {
148
+ ui.placeholder.css('visibility', 'visible');
149
+ },
150
+ stop: function (e, ui) {
151
+ tutor_sorting_topics_and_lesson();
152
+ },
153
+ });
154
+ $(".tutor-lessons:not(.drop-lessons)").sortable({
155
+ connectWith: ".tutor-lessons",
156
+ items: "div.course-content-item",
157
+ start: function (e, ui) {
158
+ ui.placeholder.css('visibility', 'visible');
159
+ },
160
+ stop: function (e, ui) {
161
+ tutor_sorting_topics_and_lesson();
162
+ },
163
+ });
164
+ }
165
+ }
166
+
167
+ function tutor_sorting_topics_and_lesson(){
168
+ var topics = {};
169
+ $('.tutor-topics-wrap').each(function(index, item){
170
+ var $topic = $(this);
171
+ var topics_id = parseInt($topic.attr('id').match(/\d+/)[0], 10);
172
+ var lessons = {};
173
+
174
+ $topic.find('.course-content-item').each(function(lessonIndex, lessonItem){
175
+ var $lesson = $(this);
176
+ var lesson_id = parseInt($lesson.attr('id').match(/\d+/)[0], 10);
177
+
178
+ lessons[lessonIndex] = lesson_id;
179
+ });
180
+ topics[index] = { 'topic_id' : topics_id, 'lesson_ids' : lessons };
181
+ });
182
+ $('#tutor_topics_lessons_sorting').val(JSON.stringify(topics));
183
+ }
184
+
185
  $(document).on('change keyup', '.course-edit-topic-title-input', function (e) {
186
  e.preventDefault();
187
  $(this).closest('.tutor-topics-top').find('.topic-inner-title').html($(this).val());
classes/Options.php CHANGED
@@ -149,6 +149,13 @@ class Options {
149
  'default' => '20',
150
  'desc' => __('Number of items you would like displayed "per page" in the pagination', 'tutor'),
151
  ),
 
 
 
 
 
 
 
152
  )
153
  )
154
  ),
149
  'default' => '20',
150
  'desc' => __('Number of items you would like displayed "per page" in the pagination', 'tutor'),
151
  ),
152
+ 'enable_tutor_maintenance_mode' => array(
153
+ 'type' => 'checkbox',
154
+ 'label' => __('Maintenance Mode', 'tutor'),
155
+ 'label_title' => __('Enable', 'tutor'),
156
+ 'default' => '0',
157
+ 'desc' => __('Enabling the maintenance mode allows you to display a custom message on the frontend. During this time, visitors can not access the site content. But the wp-admin dashboard will remain accessible.', 'tutor'),
158
+ ),
159
  )
160
  )
161
  ),
classes/Post_types.php CHANGED
@@ -35,51 +35,52 @@ class Post_types{
35
  public function register_course_post_types() {
36
 
37
  $labels = array(
38
- 'name' => _x( 'Courses', 'post type general name', 'tutor' ),
39
- 'singular_name' => _x( 'Course', 'post type singular name', 'tutor' ),
40
- 'menu_name' => _x( 'Courses', 'admin menu', 'tutor' ),
41
- 'name_admin_bar' => _x( 'Course', 'add new on admin bar', 'tutor' ),
42
- 'add_new' => _x( 'Add New', $this->course_post_type, 'tutor' ),
43
- 'add_new_item' => __( 'Add New Course', 'tutor' ),
44
- 'new_item' => __( 'New Course', 'tutor' ),
45
- 'edit_item' => __( 'Edit Course', 'tutor' ),
46
- 'view_item' => __( 'View Course', 'tutor' ),
47
- 'all_items' => __( 'Courses', 'tutor' ),
48
- 'search_items' => __( 'Search Courses', 'tutor' ),
49
- 'parent_item_colon' => __( 'Parent Courses:', 'tutor' ),
50
- 'not_found' => __( 'No courses found.', 'tutor' ),
51
- 'not_found_in_trash' => __( 'No courses found in Trash.', 'tutor' )
52
  );
53
 
54
  $args = array(
55
- 'labels' => $labels,
56
- 'description' => __( 'Description.', 'tutor' ),
57
- 'public' => true,
58
- 'publicly_queryable' => true,
59
- 'show_ui' => true,
60
- 'show_in_menu' => 'tutor',
61
- 'query_var' => true,
62
- 'rewrite' => array( 'slug' => $this->course_post_type ),
63
- 'menu_icon' => 'dashicons-book-alt',
64
- 'capability_type' => 'post',
65
- 'has_archive' => true,
66
- 'hierarchical' => false,
67
- 'menu_position' => null,
68
- 'taxonomies' => array( 'course-category', 'course-tag' ),
69
- 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt'),
70
- 'show_in_rest' => true,
71
 
72
  'capabilities' => array(
73
- 'edit_post' => 'edit_tutor_course',
74
- 'read_post' => 'read_tutor_course',
75
- 'delete_post' => 'delete_tutor_course',
76
- 'delete_posts' => 'delete_tutor_courses',
77
- 'edit_posts' => 'edit_tutor_courses',
78
- 'edit_others_posts' => 'edit_others_tutor_courses',
79
- 'publish_posts' => 'publish_tutor_courses',
80
- 'read_private_posts' => 'read_private_tutor_courses',
81
- 'create_posts' => 'edit_tutor_courses',
82
  ),
 
83
  );
84
 
85
  register_post_type($this->course_post_type, $args);
35
  public function register_course_post_types() {
36
 
37
  $labels = array(
38
+ 'name' => _x( 'Courses', 'post type general name', 'tutor' ),
39
+ 'singular_name' => _x( 'Course', 'post type singular name', 'tutor' ),
40
+ 'menu_name' => _x( 'Courses', 'admin menu', 'tutor' ),
41
+ 'name_admin_bar' => _x( 'Course', 'add new on admin bar', 'tutor' ),
42
+ 'add_new' => _x( 'Add New', $this->course_post_type, 'tutor' ),
43
+ 'add_new_item' => __( 'Add New Course', 'tutor' ),
44
+ 'new_item' => __( 'New Course', 'tutor' ),
45
+ 'edit_item' => __( 'Edit Course', 'tutor' ),
46
+ 'view_item' => __( 'View Course', 'tutor' ),
47
+ 'all_items' => __( 'Courses', 'tutor' ),
48
+ 'search_items' => __( 'Search Courses', 'tutor' ),
49
+ 'parent_item_colon' => __( 'Parent Courses:', 'tutor' ),
50
+ 'not_found' => __( 'No courses found.', 'tutor' ),
51
+ 'not_found_in_trash' => __( 'No courses found in Trash.', 'tutor' )
52
  );
53
 
54
  $args = array(
55
+ 'labels' => $labels,
56
+ 'description' => __( 'Description.', 'tutor' ),
57
+ 'public' => true,
58
+ 'publicly_queryable' => true,
59
+ 'show_ui' => true,
60
+ 'show_in_menu' => 'tutor',
61
+ 'query_var' => true,
62
+ 'rewrite' => array( 'slug' => $this->course_post_type, 'with_front' => false ),
63
+ 'menu_icon' => 'dashicons-book-alt',
64
+ 'capability_type' => 'post',
65
+ 'has_archive' => true,
66
+ 'hierarchical' => false,
67
+ 'menu_position' => null,
68
+ 'taxonomies' => array( 'course-category', 'course-tag' ),
69
+ 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt'),
70
+ 'show_in_rest' => true,
71
 
72
  'capabilities' => array(
73
+ 'edit_post' => 'edit_tutor_course',
74
+ 'read_post' => 'read_tutor_course',
75
+ 'delete_post' => 'delete_tutor_course',
76
+ 'delete_posts' => 'delete_tutor_courses',
77
+ 'edit_posts' => 'edit_tutor_courses',
78
+ 'edit_others_posts' => 'edit_others_tutor_courses',
79
+ 'publish_posts' => 'publish_tutor_courses',
80
+ 'read_private_posts' => 'read_private_tutor_courses',
81
+ 'create_posts' => 'edit_tutor_courses',
82
  ),
83
+
84
  );
85
 
86
  register_post_type($this->course_post_type, $args);
classes/Tools.php CHANGED
@@ -11,6 +11,11 @@ class Tools {
11
  public function __construct() {
12
  //add_action('tutor_once_in_day_run_schedule', array($this, 'delete_auto_draft_posts'));
13
  add_action('tutor_action_regenerate_tutor_pages', array($this, 'regenerate_tutor_pages'));
 
 
 
 
 
14
  }
15
 
16
  /**
@@ -40,4 +45,33 @@ class Tools {
40
  }
41
  }
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  }
11
  public function __construct() {
12
  //add_action('tutor_once_in_day_run_schedule', array($this, 'delete_auto_draft_posts'));
13
  add_action('tutor_action_regenerate_tutor_pages', array($this, 'regenerate_tutor_pages'));
14
+
15
+
16
+ add_action('tutor_option_save_after', array($this, 'tutor_option_save_after'));
17
+ add_action('init', array($this, 'check_if_maintenance'));
18
+
19
  }
20
 
21
  /**
45
  }
46
  }
47
 
48
+
49
+ /**
50
+ * Enable Maintenance Mode
51
+ */
52
+
53
+ public function tutor_option_save_after(){
54
+ $maintenance_mode = (bool) get_tutor_option('enable_tutor_maintenance_mode');
55
+ if ($maintenance_mode){
56
+ tutor_maintenance_mode(true);
57
+ }else{
58
+ tutor_maintenance_mode();
59
+ }
60
+ }
61
+
62
+ public function check_if_maintenance(){
63
+ if ( ! is_admin()) {
64
+ $maintenance_mode = (bool) get_tutor_option( 'enable_tutor_maintenance_mode' );
65
+ if ( ! $maintenance_mode){
66
+ return;
67
+ }
68
+
69
+ header( 'Retry-After: 600' );
70
+ include tutor()->path.'views/maintenance.php';
71
+ die();
72
+ }
73
+ }
74
+
75
+
76
+
77
  }
classes/Utils.php CHANGED
@@ -1861,7 +1861,7 @@ class Utils {
1861
 
1862
  do_action('tutor_before_enroll', $course_id);
1863
  $user_id = $this->get_user_id($user_id);
1864
- $title = __('Course Enrolled', 'tutor')." &ndash; ".date_i18n(get_option('date_format')) .' @ '.date_i18n(get_option('time_format') ) ;
1865
 
1866
  $enrolment_status = 'completed';
1867
 
1861
 
1862
  do_action('tutor_before_enroll', $course_id);
1863
  $user_id = $this->get_user_id($user_id);
1864
+ $title = __('Course Enrolled', 'tutor')." &ndash; ".date(get_option('date_format')) .' @ '.date(get_option('time_format') ) ;
1865
 
1866
  $enrolment_status = 'completed';
1867
 
includes/tutor-general-functions.php CHANGED
@@ -512,4 +512,30 @@ if ( ! function_exists('tutor_time')) {
512
  //return current_time( 'timestamp' );
513
  return time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
514
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
515
  }
512
  //return current_time( 'timestamp' );
513
  return time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
514
  }
515
+ }
516
+
517
+ /**
518
+ * Toggle maintenance mode for the site.
519
+ *
520
+ * Creates/deletes the maintenance file to enable/disable maintenance mode.
521
+ *
522
+ * @since v.1.4.6
523
+ *
524
+ * @global WP_Filesystem_Base $wp_filesystem Subclass
525
+ *
526
+ * @param bool $enable True to enable maintenance mode, false to disable.
527
+ */
528
+ if ( ! function_exists('tutor_maintenance_mode')) {
529
+ function tutor_maintenance_mode( $enable = false ) {
530
+ global $wp_filesystem;
531
+ $file = $wp_filesystem->abspath() . '.tutor_maintenance';
532
+ if ( $enable ) {
533
+ // Create maintenance file to signal that we are upgrading
534
+ $maintenance_string = '<?php $upgrading = ' . time() . '; ?>';
535
+ $wp_filesystem->delete( $file );
536
+ $wp_filesystem->put_contents( $file, $maintenance_string, FS_CHMOD_FILE );
537
+ } elseif ( ! $enable && $wp_filesystem->exists( $file ) ) {
538
+ $wp_filesystem->delete( $file );
539
+ }
540
+ }
541
  }
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: lms, course, elearning, education, learning management system
5
  Requires at least: 4.5
6
  Tested up to: 5.2
7
  Requires PHP: 5.4.0
8
- Stable tag: 1.4.5
9
  License: GPLv3
10
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
11
 
@@ -159,7 +159,7 @@ Have the most secure learning management system when creating your online course
159
 
160
  - **Frontend Course Builder:** Build your course on the go using the frontend course builder in Tutor LMS plugin. Instructors can see how their course looks live without even having to go backend. The industry-first frontend course builder in any WordPress LMS plugin ever.
161
 
162
- - **5 Pro Question Patterns:**
163
 
164
  * Short Answer
165
  * Matching
@@ -241,6 +241,14 @@ Tutor enables you to use any third party plugins without facing any compatibilit
241
 
242
  == Changelog ==
243
 
 
 
 
 
 
 
 
 
244
  = 1.4.5 - 21 October, 2019 =
245
 
246
  * Added: Disable Course Review option
5
  Requires at least: 4.5
6
  Tested up to: 5.2
7
  Requires PHP: 5.4.0
8
+ Stable tag: 1.4.6
9
  License: GPLv3
10
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
11
 
159
 
160
  - **Frontend Course Builder:** Build your course on the go using the frontend course builder in Tutor LMS plugin. Instructors can see how their course looks live without even having to go backend. The industry-first frontend course builder in any WordPress LMS plugin ever.
161
 
162
+ - ** 5 Pro Question Patterns: **
163
 
164
  * Short Answer
165
  * Matching
241
 
242
  == Changelog ==
243
 
244
+
245
+ = 1.4.6 - 11 November, 2019 =
246
+
247
+ * Added: Maintenance Mode
248
+ * Added: Frontend course edit link from Course Edit Page Admin bar LINK
249
+ * Fixed: bug during add topic in course builder
250
+ * Fixed: certificate download fatal error related microtime() in tutor-pro version
251
+
252
  = 1.4.5 - 21 October, 2019 =
253
 
254
  * Added: Disable Course Review option
tutor.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Tutor LMS
4
  Plugin URI: https://www.themeum.com/product/tutor-lms/
5
  Description: Tutor is a complete solution for creating a Learning Management System in WordPress way. It can help you to create small to large scale online education site very conveniently. Power features like report, certificate, course preview, private file sharing make Tutor a robust plugin for any educational institutes.
6
  Author: Themeum
7
- Version: 1.4.5
8
  Author URI: http://themeum.com
9
  Requires at least: 4.5
10
  Tested up to: 5.2
@@ -17,7 +17,7 @@ if ( ! defined( 'ABSPATH' ) )
17
  /**
18
  * Defined the tutor main file
19
  */
20
- define('TUTOR_VERSION', '1.4.5');
21
  define('TUTOR_FILE', __FILE__);
22
 
23
  /**
4
  Plugin URI: https://www.themeum.com/product/tutor-lms/
5
  Description: Tutor is a complete solution for creating a Learning Management System in WordPress way. It can help you to create small to large scale online education site very conveniently. Power features like report, certificate, course preview, private file sharing make Tutor a robust plugin for any educational institutes.
6
  Author: Themeum
7
+ Version: 1.4.6
8
  Author URI: http://themeum.com
9
  Requires at least: 4.5
10
  Tested up to: 5.2
17
  /**
18
  * Defined the tutor main file
19
  */
20
+ define('TUTOR_VERSION', '1.4.6');
21
  define('TUTOR_FILE', __FILE__);
22
 
23
  /**
views/maintenance.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <style type="text/css">
2
+ html, body {
3
+ margin: 0 auto;
4
+ font-family: 'Roboto', sans-serif;
5
+ height: 100%;
6
+ background: #eeeef4;
7
+ font-weight: 100;
8
+ user-select: none;
9
+ }
10
+ main {
11
+ height: 100%;
12
+ display: flex;
13
+ margin: 0 20px;
14
+ text-align: center;
15
+ flex-direction: column;
16
+ align-items: center;
17
+ justify-content: center;
18
+ }
19
+ main h1 {
20
+ font-size: 3em;
21
+ font-weight: 100;
22
+ color: #f44;
23
+ margin: 0;
24
+ }
25
+ main h2 {
26
+ font-size: 1.5em;
27
+ font-weight: 100;
28
+ margin-bottom: 0;
29
+ }
30
+ main h3 {
31
+ font-size: 1.5em;
32
+ font-weight: 100;
33
+ margin-top: 0;
34
+ }
35
+ main a {
36
+ font-size: 1.5em;
37
+ font-weight: 300;
38
+ color: #f44;
39
+ text-decoration: none;
40
+ }
41
+
42
+ </style>
43
+
44
+
45
+ <!doctype html>
46
+ <html <?php language_attributes(); ?>>
47
+ <head>
48
+ <meta charset="<?php bloginfo( 'charset' ); ?>">
49
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2.0">
50
+ <link rel="profile" href="http://gmpg.org/xfn/11">
51
+ <title><?php echo get_option('blogname'); ?></title>
52
+ </head>
53
+
54
+ <body>
55
+
56
+ <main>
57
+ <svg xmlns="http://www.w3.org/2000/svg" width="100" height="70" viewBox="0 0 100 68">
58
+ <g id="large">
59
+ <path fill="none" stroke="#F44" d="M55.8 38.5l6.2-1.2c0-1.8-.1-3.5-.4-5.3l-6.3-.2c-.5-2-1.2-4-2.1-6l4.8-4c-.9-1.6-1.9-3-3-4.4l-5.6 3c-1.3-1.6-3-3-4.7-4.1l2-6A30 30 0 0 0 42 8l-3.3 5.4c-2-.7-4.2-1-6.2-1.2L31.3 6c-1.8 0-3.5.1-5.3.4l-.2 6.3c-2 .5-4 1.2-6 2.1l-4-4.8c-1.6.9-3 1.9-4.4 3l3 5.6c-1.6 1.3-3 3-4.1 4.7l-6-2A32.5 32.5 0 0 0 2 26l5.4 3.3c-.7 2-1 4.2-1.2 6.2L0 36.7c0 1.8.1 3.5.4 5.3l6.3.2c.5 2 1.2 4 2.1 6l-4.8 4c.9 1.6 1.9 3 3 4.4l5.6-3c1.4 1.6 3 3 4.7 4.1l-2 6A30.5 30.5 0 0 0 20 66l3.4-5.4c2 .7 4 1 6.1 1.2l1.2 6.2c1.8 0 3.5-.1 5.3-.4l.2-6.3c2-.5 4-1.2 6-2.1l4 4.8c1.6-.9 3-1.9 4.4-3l-3-5.6c1.6-1.3 3-3 4.1-4.7l6 2A32 32 0 0 0 60 48l-5.4-3.3c.7-2 1-4.2 1.2-6.2zm-13.5 4a12.5 12.5 0 1 1-22.6-11 12.5 12.5 0 0 1 22.6 11z"/>
60
+ <animateTransform attributeName="transform" begin="0s" dur="3s" from="0 31 37" repeatCount="indefinite" to="360 31 37" type="rotate"/>
61
+ </g>
62
+ <g id="small">
63
+ <path fill="none" stroke="#F44" d="M93 19.3l6-3c-.4-1.6-1-3.2-1.7-4.8L90.8 13c-.9-1.4-2-2.7-3.4-3.8l2.1-6.3A21.8 21.8 0 0 0 85 .7l-3.6 5.5c-1.7-.4-3.4-.5-5.1-.3l-3-5.9c-1.6.4-3.2 1-4.7 1.7L70 8c-1.5 1-2.8 2-3.9 3.5L60 9.4a20.6 20.6 0 0 0-2.2 4.6l5.5 3.6a15 15 0 0 0-.3 5.1l-5.9 3c.4 1.6 1 3.2 1.7 4.7L65 29c1 1.5 2.1 2.8 3.5 3.9l-2.1 6.3a21 21 0 0 0 4.5 2.2l3.6-5.6c1.7.4 3.5.5 5.2.3l2.9 5.9c1.6-.4 3.2-1 4.8-1.7L86 34c1.4-1 2.7-2.1 3.8-3.5l6.3 2.1a21.5 21.5 0 0 0 2.2-4.5l-5.6-3.6c.4-1.7.5-3.5.3-5.1zM84.5 24a7 7 0 1 1-12.8-6.2 7 7 0 0 1 12.8 6.2z"/>
64
+ <animateTransform attributeName="transform" begin="0s" dur="2s" from="0 78 21" repeatCount="indefinite" to="-360 78 21" type="rotate"/>
65
+ </g>
66
+ </svg>
67
+ <h1>Under Maintanance</h1>
68
+ <h2>Sorry for the inconvenience.</h2>
69
+ </main>
70
+
71
+ </body>
views/pages/tools.php CHANGED
@@ -2,7 +2,7 @@
2
  <h1 class="wp-heading-inline"><?php _e('Tools', 'tutor'); ?></h1>
3
  <hr class="wp-header-end">
4
 
5
- <nav class="nav-tab-wrapper tutor-gradebook-nav-wrapper">
6
  <?php
7
  if (tutils()->count($pages)){
8
  foreach ($pages as $key => $page){
2
  <h1 class="wp-heading-inline"><?php _e('Tools', 'tutor'); ?></h1>
3
  <hr class="wp-header-end">
4
 
5
+ <nav class="nav-tab-wrapper tutor-nav-tab-wrapper">
6
  <?php
7
  if (tutils()->count($pages)){
8
  foreach ($pages as $key => $page){