PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 4.0.0
Tutor LMS – eLearning and online course solution v4.0.0
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 1.1.0 1.1.1 1.2.0 1.2.1 1.2.11 1.2.12 1.2.13 1.2.20 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.4.0 2.5.0 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 3.9.1 3.9.10 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9
tutor / classes / WhatsNew.php
tutor / classes Last commit date
Addons.php 19 hours ago Admin.php 19 hours ago Ajax.php 19 hours ago Announcements.php 19 hours ago Assets.php 19 hours ago Backend_Page_Trait.php 1 year ago BaseController.php 1 year ago Config.php 19 hours ago Container.php 11 months ago Course.php 19 hours ago Course_Embed.php 3 years ago Course_Filter.php 19 hours ago Course_List.php 19 hours ago Course_Settings_Tabs.php 19 hours ago Course_Widget.php 1 year ago Custom_Validation.php 19 hours ago Dashboard.php 19 hours ago Earnings.php 9 months ago FormHandler.php 19 hours ago Frontend.php 19 hours ago Gutenberg.php 1 year ago Icon.php 19 hours ago Input.php 19 hours ago Instructor.php 19 hours ago Instructors_List.php 19 hours ago Lesson.php 19 hours ago Options_V2.php 19 hours ago Permalink.php 19 hours ago Post_types.php 1 day ago Private_Course_Access.php 19 hours ago Q_And_A.php 19 hours ago Question_Answers_List.php 11 months ago Quiz.php 19 hours ago QuizBuilder.php 19 hours ago Quiz_Attempts_List.php 19 hours ago RestAPI.php 2 years ago Reviews.php 19 hours ago Rewrite_Rules.php 2 years ago SampleCourse.php 19 hours ago Shortcode.php 19 hours ago Singleton.php 1 year ago Student.php 19 hours ago Students_List.php 1 year ago Taxonomies.php 1 year ago Template.php 19 hours ago Theme_Compatibility.php 3 years ago Tools.php 1 year ago Tools_V2.php 4 weeks ago Tutor.php 19 hours ago TutorEDD.php 19 hours ago Tutor_Base.php 2 years ago Tutor_Setup.php 19 hours ago Upgrader.php 19 hours ago User.php 19 hours ago UserPreference.php 19 hours ago Utils.php 19 hours ago Video_Stream.php 3 years ago WhatsNew.php 10 months ago Withdraw.php 19 hours ago Withdraw_Requests_List.php 11 months ago WooCommerce.php 19 hours ago
WhatsNew.php
199 lines
1 <?php
2 /**
3 * Whats new page handler
4 *
5 * @package Tutor\User
6 * @author Themeum <support@themeum.com>
7 * @link https://themeum.com
8 * @since 2.3.0
9 */
10
11 namespace TUTOR;
12
13 /**
14 * Class WhatsNew
15 */
16 class WhatsNew {
17
18 /**
19 * Constructor
20 *
21 * @since 3.8.0
22 *
23 * @return void
24 */
25 public function __construct() {
26 add_filter( 'tutor_admin_menu', array( $this, 'add_whats_new_menu_item' ) );
27 }
28
29 /**
30 * What's new menu item
31 *
32 * @since 3.8.0
33 *
34 * @param array $menu menu.
35 *
36 * @return array
37 */
38 public function add_whats_new_menu_item( $menu ) {
39 $update_required = $this->get_plugin_version_info()[2];
40
41 $menu_text = __( "What's New", 'tutor' );
42 if ( $update_required ) {
43 $menu_text .= ' <span class="update-plugins"><span class="plugin-count">1</span></span>';
44 }
45
46 $menu['group_three']['whats_new'] = array(
47 'parent_slug' => 'tutor',
48 'page_title' => __( "What's New", 'tutor' ),
49 'menu_title' => $menu_text,
50 'capability' => 'manage_options',
51 'menu_slug' => 'tutor-whats-new',
52 'callback' => array( $this, 'whats_new_page' ),
53 );
54
55 return $menu;
56 }
57
58 /**
59 * What's new page.
60 *
61 * @since 2.2.4
62 *
63 * @return void
64 */
65 public function whats_new_page() {
66 list( $remote_version, $installed_version, $update_required ) = $this->get_plugin_version_info();
67 $changelogs = self::build_changelog_array();
68
69 include tutor()->path . 'views/pages/whats-new.php';
70 }
71
72 /**
73 * Get tutor plugin version info
74 *
75 * @since 3.8.0
76 *
77 * @return array
78 */
79 private function get_plugin_version_info() {
80 $transient_key = 'tutor_plugin_info';
81 $plugin_info = get_transient( $transient_key );
82
83 if ( false === $plugin_info ) {
84 $plugin_info = tutils()->get_remote_plugin_info();
85 set_transient( $transient_key, $plugin_info, HOUR_IN_SECONDS );
86 }
87
88 $remote_version = $plugin_info->version ?? TUTOR_VERSION;
89 $installed_version = TUTOR_VERSION;
90 $update_required = version_compare( $remote_version, $installed_version, '>' );
91
92 return array( $remote_version, $installed_version, $update_required );
93 }
94
95 /**
96 * Whats new item.
97 *
98 * @param string $type type of item.
99 * @param array $log changelog item.
100 *
101 * @return void
102 */
103 public static function render_item( $type, $log ) {
104 $obj = (object) $log;
105 ?>
106 <li class="tutor-fs-7"><strong><?php echo esc_html( $type ); ?>:</strong> <span><?php echo esc_html( $obj->title ); ?></span>
107 <?php
108 if ( isset( $obj->is_pro ) && $obj->is_pro ) :
109 ?>
110 <span class="tutor-pro-badge">Pro</span> <?php endif; ?></li>
111 <?php
112 }
113
114 /**
115 * Build changelog array for whats new page.
116 *
117 * @return array
118 */
119 private static function build_changelog_array() {
120 $pro_regex = '/\((Pro|pro)\)\s*|\-\s*Pro|\-\s*pro$/';
121 $new_regex = '/^New:\s?/';
122 $update_regex = '/^Update:\s?/';
123 $fix_regex = '/^Fix:\s?/';
124
125 $lines = self::get_latest_changelog();
126 $changelogs = array();
127
128 foreach ( $lines as $line ) {
129 $line = trim( $line );
130 $log = array();
131
132 if ( preg_match( $new_regex, $line ) ) {
133 $line = preg_replace( $new_regex, '', $line );
134 if ( preg_match( $pro_regex, $line ) ) {
135 $line = preg_replace( $pro_regex, '', $line );
136 $log['is_pro'] = true;
137 }
138
139 $log['title'] = $line;
140 $changelogs['new'][] = $log;
141 }
142
143 if ( preg_match( $update_regex, $line ) ) {
144 $line = preg_replace( $update_regex, '', $line );
145 if ( preg_match( $pro_regex, $line ) ) {
146 $line = preg_replace( $pro_regex, '', $line );
147 $log['is_pro'] = true;
148 }
149
150 $log['title'] = $line;
151 $changelogs['update'][] = $log;
152 }
153
154 if ( preg_match( $fix_regex, $line ) ) {
155 $line = preg_replace( $fix_regex, '', $line );
156 if ( preg_match( $pro_regex, $line ) ) {
157 $line = preg_replace( $pro_regex, '', $line );
158 $log['is_pro'] = true;
159 }
160
161 $log['title'] = $line;
162 $changelogs['fix'][] = $log;
163 }
164 }
165
166 return $changelogs;
167 }
168 /**
169 * Get latest changelog from readme.txt file.
170 *
171 * @return array
172 */
173 public static function get_latest_changelog() {
174 $lines = array();
175 $readme_content = file_get_contents( __DIR__ . '/../readme.txt' );
176 $changelog_pattern = '/== Changelog ==\s*(.*?)==/s';
177
178 // Perform the regex match to extract the changelog section.
179 if ( preg_match( $changelog_pattern, $readme_content, $matches ) ) {
180 $changelog_section = trim( $matches[1] );
181
182 // Split the changelog section into individual entries.
183 $changelog_entries = explode( '= ', $changelog_section );
184
185 // Get the latest changelog entry.
186 if ( ! empty( $changelog_entries[1] ) ) {
187 $latest_changelog = $changelog_entries[1];
188 $latest_changelog = preg_replace( '/(^\d+\.\d+\.\d+).*\s+/', ' ', $latest_changelog );
189 $latest_changelog = trim( $latest_changelog );
190
191 $lines = explode( "\n", $latest_changelog );
192 $lines = array_map( 'trim', $lines );
193 }
194 }
195
196 return $lines;
197 }
198 }
199