| 1 |
<?php |
| 2 |
/** |
| 3 |
* class AjaxBase |
| 4 |
* |
| 5 |
* @since 4.2.7.6 |
| 6 |
* @version 1.0.0 |
| 7 |
*/ |
| 8 |
|
| 9 |
namespace LearnPress\Ajax; |
| 10 |
|
| 11 |
use Exception; |
| 12 |
use LearnPress\Helpers\Template; |
| 13 |
use LearnPress\Models\CourseModel; |
| 14 |
use LearnPress\Models\LessonPostModel; |
| 15 |
use LearnPress\Models\UserItems\UserCourseModel; |
| 16 |
use LearnPress\Models\UserItems\UserItemModel; |
| 17 |
use LearnPress\Models\UserItems\UserLessonModel; |
| 18 |
use LP_Helper; |
| 19 |
use LP_Request; |
| 20 |
use LP_REST_Response; |
| 21 |
use stdClass; |
| 22 |
use Throwable; |
| 23 |
use WP_Error; |
| 24 |
|
| 25 |
class LessonAjax extends AbstractAjax { |
| 26 |
/** |
| 27 |
* User complete lesson ajax handler. |
| 28 |
* |
| 29 |
* @since 4.2.7.6 |
| 30 |
* @version 1.0.1 |
| 31 |
* @return void |
| 32 |
*/ |
| 33 |
public function user_complete_lesson() { |
| 34 |
$link_continue = ''; |
| 35 |
$message_data = [ |
| 36 |
'status' => 'error', |
| 37 |
'content' => '', |
| 38 |
]; |
| 39 |
|
| 40 |
try { |
| 41 |
$lesson_id = LP_Request::get_param( 'lesson_id', 0, 'int', 'post' ); |
| 42 |
$course_id = LP_Request::get_param( 'course_id', 0, 'int', 'post' ); |
| 43 |
|
| 44 |
$courseModel = CourseModel::find( $course_id, true ); |
| 45 |
if ( ! $courseModel ) { |
| 46 |
throw new Exception( __( 'Course is invalid!', 'learnpress' ) ); |
| 47 |
} |
| 48 |
|
| 49 |
$lessonModel = LessonPostModel::find( $lesson_id, true ); |
| 50 |
if ( ! $lessonModel ) { |
| 51 |
throw new Exception( __( 'Lesson is invalid!', 'learnpress' ) ); |
| 52 |
} |
| 53 |
|
| 54 |
$userLessonModel = UserLessonModel::find_user_item( |
| 55 |
get_current_user_id(), |
| 56 |
$lesson_id, |
| 57 |
$lessonModel->post_type, |
| 58 |
$course_id, |
| 59 |
LP_COURSE_CPT, |
| 60 |
true |
| 61 |
); |
| 62 |
if ( ! $userLessonModel instanceof UserLessonModel ) { |
| 63 |
throw new Exception( __( 'You have not started lesson', 'learnpress' ) ); |
| 64 |
} |
| 65 |
|
| 66 |
$userLessonModel->set_complete(); |
| 67 |
$userCourseModel = $userLessonModel->get_user_course_model(); |
| 68 |
$item_model_next = $userCourseModel->get_item_next_when_complete_lesson( $lesson_id ); |
| 69 |
if ( $item_model_next ) { |
| 70 |
$link_continue = $courseModel->get_item_link( $item_model_next->ID, $item_model_next->post_type ); |
| 71 |
} else { |
| 72 |
$link_continue = $courseModel->get_permalink(); |
| 73 |
} |
| 74 |
|
| 75 |
$message_data['status'] = 'success'; |
| 76 |
$message_data['content'] = sprintf( |
| 77 |
__( 'Congrats! You have completed "%s".', 'learnpress' ), |
| 78 |
$lessonModel->get_the_title() |
| 79 |
); |
| 80 |
} catch ( Throwable $e ) { |
| 81 |
$message_data['content'] = $e->getMessage(); |
| 82 |
if ( isset( $courseModel ) && isset( $lessonModel ) ) { |
| 83 |
$link_continue = $courseModel->get_item_link( $lessonModel->ID, $lessonModel->post_type ); |
| 84 |
} |
| 85 |
} |
| 86 |
|
| 87 |
learn_press_set_message( $message_data ); |
| 88 |
|
| 89 |
wp_safe_redirect( $link_continue ); |
| 90 |
die(); |
| 91 |
} |
| 92 |
} |
| 93 |
|