PluginProbe
Tutor LMS – eLearning and online course solution / 1.6.6
Tutor LMS – eLearning and online course solution v1.6.6
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/Lesson.php +332 -332 1.6.51.6.6 View file →
@@ -1,332 +1,332 @@
1 -<?php
2 -namespace TUTOR;
3 -
4 -if ( ! defined( 'ABSPATH' ) )
5 - exit;
6 -
7 -class Lesson extends Tutor_Base {
8 - public function __construct() {
9 - parent::__construct();
10 -
11 - add_action( 'add_meta_boxes', array($this, 'register_meta_box') );
12 - add_action('save_post_'.$this->lesson_post_type, array($this, "save_lesson_meta"));
13 -
14 - add_action('wp_ajax_tutor_load_edit_lesson_modal', array($this, "tutor_load_edit_lesson_modal"));
15 - add_action('wp_ajax_tutor_modal_create_or_update_lesson', array($this, "tutor_modal_create_or_update_lesson"));
16 - add_action('wp_ajax_tutor_delete_lesson_by_id', array($this, "tutor_delete_lesson_by_id"));
17 -
18 - add_filter('get_sample_permalink', array($this, 'change_lesson_permalink'), 10, 2);
19 - add_action('admin_init', array($this, 'flush_rewrite_rules'));
20 -
21 - /**
22 - * Add Column
23 - */
24 -
25 - add_filter( "manage_{$this->lesson_post_type}_posts_columns", array($this, 'add_column'), 10,1 );
26 - add_action( "manage_{$this->lesson_post_type}_posts_custom_column" , array($this, 'custom_lesson_column'), 10, 2 );
27 -
28 - //Frontend Action
29 - add_action('template_redirect', array($this, 'mark_lesson_complete'));
30 -
31 - add_action('wp_ajax_tutor_render_lesson_content', array($this, "tutor_render_lesson_content"));
32 -
33 - /**
34 - * Autoplay next video
35 - * @since v.1.4.9
36 - */
37 - add_action('wp_ajax_autoload_next_course_content', array($this, 'autoload_next_course_content'));
38 -
39 - /**
40 - * Load next course item after click complete button
41 - * @since v.1.5.3
42 - */
43 - add_action('tutor_lesson_completed_after', array($this, 'tutor_lesson_completed_after'), 999);
44 - }
45 -
46 - /**
47 - * Registering metabox
48 - */
49 - public function register_meta_box(){
50 - $lesson_post_type = $this->lesson_post_type;
51 -
52 - add_meta_box( 'tutor-course-select', __( 'Select Course', 'tutor' ), array($this, 'lesson_metabox'), $lesson_post_type );
53 - add_meta_box( 'tutor-lesson-videos', __( 'Lesson Video', 'tutor' ), array($this, 'lesson_video_metabox'), $lesson_post_type );
54 - add_meta_box( 'tutor-lesson-attachments', __( 'Attachments', 'tutor' ), array($this, 'lesson_attachments_metabox'), $lesson_post_type );
55 - }
56 -
57 - public function lesson_metabox(){
58 - include tutor()->path.'views/metabox/lesson-metabox.php';
59 - }
60 -
61 - public function lesson_video_metabox(){
62 - include tutor()->path.'views/metabox/video-metabox.php';
63 - }
64 -
65 - public function lesson_attachments_metabox(){
66 - include tutor()->path.'views/metabox/lesson-attachments-metabox.php';
67 - }
68 -
69 - /**
70 - * @param $post_ID
71 - *
72 - * Saving lesson meta and assets
73 - *
74 - */
75 - public function save_lesson_meta($post_ID){
76 - //Course
77 - if (isset($_POST['selected_course'])) {
78 - $course_id = (int) sanitize_text_field( $_POST['selected_course'] );
79 - if ( $course_id ) {
80 - update_post_meta( $post_ID, '_tutor_course_id_for_lesson', $course_id );
81 - }
82 - }
83 -
84 - //Video
85 - $video_source = tutils()->array_get('video.source', $_POST);
86 - if ( $video_source === '-1'){
87 - delete_post_meta($post_ID, '_video');
88 - }elseif($video_source) {
89 - $video = tutor_utils()->array_get('video', $_POST);
90 - update_post_meta($post_ID, '_video', $video);
91 - }
92 -
93 - //Attachments
94 - $attachments = array();
95 - if ( ! empty($_POST['tutor_attachments'])){
96 - $attachments = tutor_utils()->sanitize_array($_POST['tutor_attachments']);
97 - $attachments = array_unique($attachments);
98 - }
99 - update_post_meta($post_ID, '_tutor_attachments', $attachments);
100 - }
101 -
102 - public function tutor_load_edit_lesson_modal(){
103 - $lesson_id = (int) tutor_utils()->avalue_dot('lesson_id', $_POST);
104 - $topic_id = (int) sanitize_text_field( $_POST['topic_id'] );
105 -
106 - /**
107 - * If Lesson Not Exists, create One
108 - */
109 - if ( ! $lesson_id){
110 - $course_id = (int) sanitize_text_field( $_POST['course_id'] );
111 -
112 - $post_arr = array(
113 - 'post_type' => $this->lesson_post_type,
114 - 'post_title' => __('Draft Lesson', 'tutor'),
115 - 'post_status' => 'publish',
116 - 'post_author' => get_current_user_id(),
117 - 'post_parent' => $topic_id,
118 - );
119 - $lesson_id = wp_insert_post( $post_arr );
120 - if ($lesson_id ) {
121 - do_action('tutor/lesson/created', $lesson_id);
122 - update_post_meta( $lesson_id, '_tutor_course_id_for_lesson', $course_id );
123 - }
124 - }
125 -
126 - $post = get_post($lesson_id);
127 - ob_start();
128 - include tutor()->path.'views/modal/edit-lesson.php';
129 - $output = ob_get_clean();
130 -
131 - wp_send_json_success(array('output' => $output));
132 - }
133 -
134 - /**
135 - * @since v.1.0.0
136 - * @updated v.1.5.1
137 - */
138 - public function tutor_modal_create_or_update_lesson(){
139 - $lesson_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('lesson_id', $_POST));
140 - $_lesson_thumbnail_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('_lesson_thumbnail_id', $_POST));
141 -
142 - $title = sanitize_text_field($_POST['lesson_title']);
143 - $lesson_content = wp_kses_post($_POST['lesson_content']);
144 -
145 - $lesson_data = array(
146 - 'ID' => $lesson_id,
147 - 'post_title' => $title,
148 - 'post_name' => sanitize_title($title),
149 - 'post_content' => $lesson_content,
150 - );
151 -
152 - do_action('tutor/lesson_update/before', $lesson_id);
153 - wp_update_post($lesson_data);
154 - if ($_lesson_thumbnail_id){
155 - update_post_meta($lesson_id, '_thumbnail_id', $_lesson_thumbnail_id);
156 - }else{
157 - delete_post_meta($lesson_id, '_thumbnail_id');
158 - }
159 - do_action('tutor/lesson_update/after', $lesson_id);
160 -
161 - $course_id = tutor_utils()->get_course_id_by_lesson($lesson_id);
162 -
163 - ob_start();
164 - include tutor()->path.'views/metabox/course-contents.php';
165 - $course_contents = ob_get_clean();
166 -
167 - wp_send_json_success(array('course_contents' => $course_contents));
168 - }
169 -
170 - /**
171 - * Delete Lesson from course builder
172 - */
173 - public function tutor_delete_lesson_by_id(){
174 - $lesson_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('lesson_id', $_POST));
175 - wp_delete_post($lesson_id, true);
176 - delete_post_meta($lesson_id, '_tutor_course_id_for_lesson');
177 - wp_send_json_success();
178 - }
179 -
180 -
181 - /**
182 - * @param $uri
183 - * @param $lesson_id
184 - *
185 - * @return mixed
186 - *
187 - * Changed the URI based
188 - */
189 -
190 - public function change_lesson_permalink($uri, $lesson_id){
191 - $post = get_post($lesson_id);
192 -
193 - if ($post && $post->post_type === $this->lesson_post_type){
194 - $uri_base = trailingslashit(site_url());
195 -
196 - $sample_course = "sample-course";
197 - $is_course = get_post_meta(get_the_ID(), '_tutor_course_id_for_lesson', true);
198 - if ($is_course){
199 - $course = get_post($is_course);
200 - if ($course){
201 - $sample_course = $course->post_name;
202 - }
203 - }
204 -
205 - $new_course_base = $uri_base."course/{$sample_course}/lesson/%pagename%/";
206 - $uri[0] = $new_course_base;
207 - }
208 -
209 - return $uri;
210 - }
211 -
212 -
213 - public function flush_rewrite_rules(){
214 - $is_required_flush = get_option('required_rewrite_flush');
215 - if ($is_required_flush){
216 - flush_rewrite_rules();
217 - }
218 - }
219 -
220 -
221 - public function add_column($columns){
222 - $date_col = $columns['date'];
223 - unset($columns['date']);
224 - $columns['course'] = __('Course', 'tutor');
225 - $columns['date'] = $date_col;
226 -
227 - return $columns;
228 - }
229 -
230 - /**
231 - * @param $column
232 - * @param $post_id
233 - *
234 - */
235 - public function custom_lesson_column($column, $post_id ){
236 - if ($column === 'course'){
237 -
238 - $course_id = get_post_meta($post_id, '_tutor_course_id_for_lesson', true);
239 - if ($course_id){
240 - echo '<a href="'.admin_url('post.php?post='.$course_id.'&action=edit').'">'.get_the_title($course_id).'</a>';
241 - }
242 -
243 - }
244 - }
245 -
246 - /**
247 - *
248 - * Mark lesson completed
249 - *
250 - * @since v.1.0.0
251 - */
252 - public function mark_lesson_complete(){
253 - if ( ! isset($_POST['tutor_action']) || $_POST['tutor_action'] !== 'tutor_complete_lesson' ){
254 - return;
255 - }
256 - //Checking nonce
257 - tutor_utils()->checking_nonce();
258 -
259 - $user_id = get_current_user_id();
260 -
261 - //TODO: need to show view if not signed_in
262 - if ( ! $user_id){
263 - die(__('Please Sign-In', 'tutor'));
264 - }
265 -
266 - $lesson_id = (int) sanitize_text_field($_POST['lesson_id']);
267 -
268 - do_action('tutor_lesson_completed_before', $lesson_id);
269 - /**
270 - * Marking lesson at user meta, meta format, _tutor_completed_lesson_id_{id} and value = tutor_time();
271 - */
272 - tutor_utils()->mark_lesson_complete($lesson_id);
273 -
274 - do_action('tutor_lesson_completed_after', $lesson_id);
275 - }
276 -
277 - /**
278 - * Render the lesson content
279 - */
280 - public function tutor_render_lesson_content(){
281 - $lesson_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('lesson_id', $_POST));
282 -
283 - ob_start();
284 - global $post;
285 -
286 - $post = get_post($lesson_id);
287 - setup_postdata($post);
288 - tutor_lesson_content();
289 - wp_reset_postdata();
290 -
291 - $html = ob_get_clean();
292 - wp_send_json_success(array('html' => $html));
293 - }
294 -
295 - /**
296 - * Load next course item automatically
297 - *
298 - * @since v.1.4.9
299 - */
300 - public function autoload_next_course_content(){
301 - tutor_utils()->checking_nonce();
302 - $post_id = sanitize_text_field($_POST['post_id']);
303 - $content_id = tutils()->get_post_id($post_id);
304 - $contents = tutor_utils()->get_course_prev_next_contents_by_id($content_id);
305 -
306 - $autoload_course_content = (bool) get_tutor_option('autoload_next_course_content');
307 - $next_url = false;
308 - if($autoload_course_content) {
309 - $next_url = get_the_permalink($contents->next_id);
310 - }
311 - wp_send_json_success(array('next_url' => $next_url));
312 - }
313 -
314 - /**
315 - * Load next course item after click complete button
316 - *
317 - * @since v.1.5.3
318 - */
319 - public function tutor_lesson_completed_after($content_id){
320 - $contents = tutor_utils()->get_course_prev_next_contents_by_id($content_id);
321 - $autoload_course_content = (bool) get_tutor_option('autoload_next_course_content');
322 - if($autoload_course_content) {
323 - wp_redirect(get_the_permalink($contents->next_id));
324 - } else {
325 - wp_redirect(get_the_permalink($content_id));
326 - }
327 - die();
328 - }
329 -
330 -}
331 -
332 -
1 +<?php
2 +namespace TUTOR;
3 +
4 +if ( ! defined( 'ABSPATH' ) )
5 + exit;
6 +
7 +class Lesson extends Tutor_Base {
8 + public function __construct() {
9 + parent::__construct();
10 +
11 + add_action( 'add_meta_boxes', array($this, 'register_meta_box') );
12 + add_action('save_post_'.$this->lesson_post_type, array($this, "save_lesson_meta"));
13 +
14 + add_action('wp_ajax_tutor_load_edit_lesson_modal', array($this, "tutor_load_edit_lesson_modal"));
15 + add_action('wp_ajax_tutor_modal_create_or_update_lesson', array($this, "tutor_modal_create_or_update_lesson"));
16 + add_action('wp_ajax_tutor_delete_lesson_by_id', array($this, "tutor_delete_lesson_by_id"));
17 +
18 + add_filter('get_sample_permalink', array($this, 'change_lesson_permalink'), 10, 2);
19 + add_action('admin_init', array($this, 'flush_rewrite_rules'));
20 +
21 + /**
22 + * Add Column
23 + */
24 +
25 + add_filter( "manage_{$this->lesson_post_type}_posts_columns", array($this, 'add_column'), 10,1 );
26 + add_action( "manage_{$this->lesson_post_type}_posts_custom_column" , array($this, 'custom_lesson_column'), 10, 2 );
27 +
28 + //Frontend Action
29 + add_action('template_redirect', array($this, 'mark_lesson_complete'));
30 +
31 + add_action('wp_ajax_tutor_render_lesson_content', array($this, "tutor_render_lesson_content"));
32 +
33 + /**
34 + * Autoplay next video
35 + * @since v.1.4.9
36 + */
37 + add_action('wp_ajax_autoload_next_course_content', array($this, 'autoload_next_course_content'));
38 +
39 + /**
40 + * Load next course item after click complete button
41 + * @since v.1.5.3
42 + */
43 + add_action('tutor_lesson_completed_after', array($this, 'tutor_lesson_completed_after'), 999);
44 + }
45 +
46 + /**
47 + * Registering metabox
48 + */
49 + public function register_meta_box(){
50 + $lesson_post_type = $this->lesson_post_type;
51 +
52 + add_meta_box( 'tutor-course-select', __( 'Select Course', 'tutor' ), array($this, 'lesson_metabox'), $lesson_post_type );
53 + add_meta_box( 'tutor-lesson-videos', __( 'Lesson Video', 'tutor' ), array($this, 'lesson_video_metabox'), $lesson_post_type );
54 + add_meta_box( 'tutor-lesson-attachments', __( 'Attachments', 'tutor' ), array($this, 'lesson_attachments_metabox'), $lesson_post_type );
55 + }
56 +
57 + public function lesson_metabox(){
58 + include tutor()->path.'views/metabox/lesson-metabox.php';
59 + }
60 +
61 + public function lesson_video_metabox(){
62 + include tutor()->path.'views/metabox/video-metabox.php';
63 + }
64 +
65 + public function lesson_attachments_metabox(){
66 + include tutor()->path.'views/metabox/lesson-attachments-metabox.php';
67 + }
68 +
69 + /**
70 + * @param $post_ID
71 + *
72 + * Saving lesson meta and assets
73 + *
74 + */
75 + public function save_lesson_meta($post_ID){
76 + //Course
77 + if (isset($_POST['selected_course'])) {
78 + $course_id = (int) sanitize_text_field( $_POST['selected_course'] );
79 + if ( $course_id ) {
80 + update_post_meta( $post_ID, '_tutor_course_id_for_lesson', $course_id );
81 + }
82 + }
83 +
84 + //Video
85 + $video_source = tutils()->array_get('video.source', $_POST);
86 + if ( $video_source === '-1'){
87 + delete_post_meta($post_ID, '_video');
88 + }elseif($video_source) {
89 + $video = tutor_utils()->array_get('video', $_POST);
90 + update_post_meta($post_ID, '_video', $video);
91 + }
92 +
93 + //Attachments
94 + $attachments = array();
95 + if ( ! empty($_POST['tutor_attachments'])){
96 + $attachments = tutor_utils()->sanitize_array($_POST['tutor_attachments']);
97 + $attachments = array_unique($attachments);
98 + }
99 + update_post_meta($post_ID, '_tutor_attachments', $attachments);
100 + }
101 +
102 + public function tutor_load_edit_lesson_modal(){
103 + $lesson_id = (int) tutor_utils()->avalue_dot('lesson_id', $_POST);
104 + $topic_id = (int) sanitize_text_field( $_POST['topic_id'] );
105 +
106 + /**
107 + * If Lesson Not Exists, create One
108 + */
109 + if ( ! $lesson_id){
110 + $course_id = (int) sanitize_text_field( $_POST['course_id'] );
111 +
112 + $post_arr = array(
113 + 'post_type' => $this->lesson_post_type,
114 + 'post_title' => __('Draft Lesson', 'tutor'),
115 + 'post_status' => 'publish',
116 + 'post_author' => get_current_user_id(),
117 + 'post_parent' => $topic_id,
118 + );
119 + $lesson_id = wp_insert_post( $post_arr );
120 + if ($lesson_id ) {
121 + do_action('tutor/lesson/created', $lesson_id);
122 + update_post_meta( $lesson_id, '_tutor_course_id_for_lesson', $course_id );
123 + }
124 + }
125 +
126 + $post = get_post($lesson_id);
127 + ob_start();
128 + include tutor()->path.'views/modal/edit-lesson.php';
129 + $output = ob_get_clean();
130 +
131 + wp_send_json_success(array('output' => $output));
132 + }
133 +
134 + /**
135 + * @since v.1.0.0
136 + * @updated v.1.5.1
137 + */
138 + public function tutor_modal_create_or_update_lesson(){
139 + $lesson_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('lesson_id', $_POST));
140 + $_lesson_thumbnail_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('_lesson_thumbnail_id', $_POST));
141 +
142 + $title = sanitize_text_field($_POST['lesson_title']);
143 + $lesson_content = wp_kses_post($_POST['lesson_content']);
144 +
145 + $lesson_data = array(
146 + 'ID' => $lesson_id,
147 + 'post_title' => $title,
148 + 'post_name' => sanitize_title($title),
149 + 'post_content' => $lesson_content,
150 + );
151 +
152 + do_action('tutor/lesson_update/before', $lesson_id);
153 + wp_update_post($lesson_data);
154 + if ($_lesson_thumbnail_id){
155 + update_post_meta($lesson_id, '_thumbnail_id', $_lesson_thumbnail_id);
156 + }else{
157 + delete_post_meta($lesson_id, '_thumbnail_id');
158 + }
159 + do_action('tutor/lesson_update/after', $lesson_id);
160 +
161 + $course_id = tutor_utils()->get_course_id_by_lesson($lesson_id);
162 +
163 + ob_start();
164 + include tutor()->path.'views/metabox/course-contents.php';
165 + $course_contents = ob_get_clean();
166 +
167 + wp_send_json_success(array('course_contents' => $course_contents));
168 + }
169 +
170 + /**
171 + * Delete Lesson from course builder
172 + */
173 + public function tutor_delete_lesson_by_id(){
174 + $lesson_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('lesson_id', $_POST));
175 + wp_delete_post($lesson_id, true);
176 + delete_post_meta($lesson_id, '_tutor_course_id_for_lesson');
177 + wp_send_json_success();
178 + }
179 +
180 +
181 + /**
182 + * @param $uri
183 + * @param $lesson_id
184 + *
185 + * @return mixed
186 + *
187 + * Changed the URI based
188 + */
189 +
190 + public function change_lesson_permalink($uri, $lesson_id){
191 + $post = get_post($lesson_id);
192 +
193 + if ($post && $post->post_type === $this->lesson_post_type){
194 + $uri_base = trailingslashit(site_url());
195 +
196 + $sample_course = "sample-course";
197 + $is_course = get_post_meta(get_the_ID(), '_tutor_course_id_for_lesson', true);
198 + if ($is_course){
199 + $course = get_post($is_course);
200 + if ($course){
201 + $sample_course = $course->post_name;
202 + }
203 + }
204 +
205 + $new_course_base = $uri_base."course/{$sample_course}/lesson/%pagename%/";
206 + $uri[0] = $new_course_base;
207 + }
208 +
209 + return $uri;
210 + }
211 +
212 +
213 + public function flush_rewrite_rules(){
214 + $is_required_flush = get_option('required_rewrite_flush');
215 + if ($is_required_flush){
216 + flush_rewrite_rules();
217 + }
218 + }
219 +
220 +
221 + public function add_column($columns){
222 + $date_col = $columns['date'];
223 + unset($columns['date']);
224 + $columns['course'] = __('Course', 'tutor');
225 + $columns['date'] = $date_col;
226 +
227 + return $columns;
228 + }
229 +
230 + /**
231 + * @param $column
232 + * @param $post_id
233 + *
234 + */
235 + public function custom_lesson_column($column, $post_id ){
236 + if ($column === 'course'){
237 +
238 + $course_id = get_post_meta($post_id, '_tutor_course_id_for_lesson', true);
239 + if ($course_id){
240 + echo '<a href="'.admin_url('post.php?post='.$course_id.'&action=edit').'">'.get_the_title($course_id).'</a>';
241 + }
242 +
243 + }
244 + }
245 +
246 + /**
247 + *
248 + * Mark lesson completed
249 + *
250 + * @since v.1.0.0
251 + */
252 + public function mark_lesson_complete(){
253 + if ( ! isset($_POST['tutor_action']) || $_POST['tutor_action'] !== 'tutor_complete_lesson' ){
254 + return;
255 + }
256 + //Checking nonce
257 + tutor_utils()->checking_nonce();
258 +
259 + $user_id = get_current_user_id();
260 +
261 + //TODO: need to show view if not signed_in
262 + if ( ! $user_id){
263 + die(__('Please Sign-In', 'tutor'));
264 + }
265 +
266 + $lesson_id = (int) sanitize_text_field($_POST['lesson_id']);
267 +
268 + do_action('tutor_lesson_completed_before', $lesson_id);
269 + /**
270 + * Marking lesson at user meta, meta format, _tutor_completed_lesson_id_{id} and value = tutor_time();
271 + */
272 + tutor_utils()->mark_lesson_complete($lesson_id);
273 +
274 + do_action('tutor_lesson_completed_after', $lesson_id);
275 + }
276 +
277 + /**
278 + * Render the lesson content
279 + */
280 + public function tutor_render_lesson_content(){
281 + $lesson_id = (int) sanitize_text_field(tutor_utils()->avalue_dot('lesson_id', $_POST));
282 +
283 + ob_start();
284 + global $post;
285 +
286 + $post = get_post($lesson_id);
287 + setup_postdata($post);
288 + tutor_lesson_content();
289 + wp_reset_postdata();
290 +
291 + $html = ob_get_clean();
292 + wp_send_json_success(array('html' => $html));
293 + }
294 +
295 + /**
296 + * Load next course item automatically
297 + *
298 + * @since v.1.4.9
299 + */
300 + public function autoload_next_course_content(){
301 + tutor_utils()->checking_nonce();
302 + $post_id = sanitize_text_field($_POST['post_id']);
303 + $content_id = tutils()->get_post_id($post_id);
304 + $contents = tutor_utils()->get_course_prev_next_contents_by_id($content_id);
305 +
306 + $autoload_course_content = (bool) get_tutor_option('autoload_next_course_content');
307 + $next_url = false;
308 + if($autoload_course_content) {
309 + $next_url = get_the_permalink($contents->next_id);
310 + }
311 + wp_send_json_success(array('next_url' => $next_url));
312 + }
313 +
314 + /**
315 + * Load next course item after click complete button
316 + *
317 + * @since v.1.5.3
318 + */
319 + public function tutor_lesson_completed_after($content_id){
320 + $contents = tutor_utils()->get_course_prev_next_contents_by_id($content_id);
321 + $autoload_course_content = (bool) get_tutor_option('autoload_next_course_content');
322 + if($autoload_course_content) {
323 + wp_redirect(get_the_permalink($contents->next_id));
324 + } else {
325 + wp_redirect(get_the_permalink($content_id));
326 + }
327 + die();
328 + }
329 +
330 +}
331 +
332 +