PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7.3.1
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7.3.1
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
learnpress / inc / class-lp-ajax.php

class-lp-ajax.php in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.1.7.3.1, at inc/class-lp-ajax.php

247 lines 7.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 defined( 'ABSPATH' ) || exit;
3
4 if ( ! class_exists( 'LP_AJAX' ) ) {
5 class LP_AJAX {
6 /**
7 * Init common ajax events
8 */
9 public static function init() {
10 $ajax_events = array(
11 'checkout-user-email-exists:nopriv',
12 'recover-order',
13 'request-become-a-teacher:nonce',
14 'checkout:nopriv',
15 'complete-lesson',
16 'finish-course', // finish_course.
17 'external-link:nopriv',
18 );
19
20 $ajax_events = apply_filters( 'learn-press/ajax/events', $ajax_events );
21
22 foreach ( $ajax_events as $action => $callback ) {
23
24 if ( is_numeric( $action ) ) {
25 $action = $callback;
26 }
27
28 $actions = LP_Request::parse_action( $action );
29 $method = $actions['action'];
30
31 if ( ! is_callable( $callback ) ) {
32 $method = preg_replace( '/-/', '_', $method );
33 $callback = array( __CLASS__, $method );
34 }
35
36 LP_Request::register_ajax( $action, $callback );
37 }
38 }
39
40 public static function external_link() {
41 $nonce = LP_Request::get( 'nonce' );
42 $id = LP_Request::get( 'id' );
43 $course = learn_press_get_course( $id );
44
45 if ( ! $course ) {
46 return;
47 }
48
49 $link = $course->get_external_link();
50
51 if ( ! wp_verify_nonce( $nonce, 'external-link-' . $link ) ) {
52 return;
53 }
54
55 if ( apply_filters( 'learn-press/course-redirect-external-link', $id ) ) {
56 wp_redirect( $link );
57 exit();
58 }
59 }
60
61 public static function checkout() {
62 LearnPress::instance()->checkout()->process_checkout_handler();
63 }
64
65 public static function request_become_a_teacher() {
66 LP_Forms_Handler::process_become_teacher();
67 }
68
69 public static function recover_order() {
70 if ( ! LP_Request::verify_nonce( 'recover-order' ) ) {
71 return;
72 }
73
74 $factory = new LP_Order_CURD();
75 $user_id = get_current_user_id();
76 $order_key = LP_Request::get_string( 'order-key' );
77 $order = $factory->recover( $order_key, $user_id );
78 $result = array( 'result' => 'success' );
79
80 if ( is_wp_error( $order ) ) {
81 $result['message'] = $order->get_error_message();
82 $result['result'] = 'error';
83 } else {
84 $result['message'] = sprintf(
85 __( 'The order %s has been successfully recovered.', 'learnpress' ),
86 $order_key
87 );
88 $result['redirect'] = $order->get_view_order_url();
89 }
90
91 $result = apply_filters( 'learn-press/order/recover-result', $result, $order_key, $user_id );
92
93 learn_press_maybe_send_json( $result );
94
95 if ( ! empty( $result['message'] ) ) {
96 learn_press_add_message( $result['message'] );
97 }
98
99 if ( ! empty( $result['redirect'] ) ) {
100 wp_redirect( $result['redirect'] );
101 exit();
102 }
103 }
104
105 public static function checkout_user_email_exists() {
106 $email = LP_Request::get_email( 'email' );
107 $response = array(
108 'exists' => 0,
109 );
110
111 if ( email_exists( $email ) ) {
112 $response['exists'] = $email;
113 $output = '<div class="lp-guest-checkout-output">' . __(
114 'Your email already exists. Do you want to continue with this email?',
115 'learnpress'
116 ) . '</div>';
117 } else {
118 $output = '<label class="lp-guest-checkout-output">
119 <input type="checkbox" name="checkout-email-option" value="new-account">
120 ' . __(
121 'Create a new account with this email. The account information will be sent with this email.',
122 'learnpress'
123 ) . '
124 </label>';
125 }
126
127 $response['output'] = apply_filters( 'learnpress/guest_checkout_email_exist_output', $output, $email );
128
129 learn_press_maybe_send_json( $response );
130 }
131
132 /**
133 * Request finish course
134 *
135 * TODO: should move this function to api - tungnx
136 */
137 public static function finish_course() {
138 $nonce = LP_Request::get_string( 'finish-course-nonce' );
139 $course_id = LP_Request::get_int( 'course-id' );
140 $course = learn_press_get_course( $course_id );
141 $user = learn_press_get_current_user();
142
143 $nonce_action = sprintf( 'finish-course-%d-%d', $course_id, $user->get_id() );
144
145 if ( ! $user->get_id() || ! $course || ! wp_verify_nonce( $nonce, $nonce_action ) ) {
146 wp_die( __( 'Access denied!', 'learnpress' ) );
147 }
148
149 $finished = $user->finish_course( $course_id );
150 $lp_redirect = LP_Settings::get_option( 'course_finish_redirect' );
151 $redirect = ! empty( $lp_redirect ) ? $lp_redirect : get_the_permalink( $course_id );
152
153 $response = array(
154 'redirect' => apply_filters(
155 'learn-press/finish-course-redirect',
156 $redirect,
157 $course_id
158 ),
159 );
160
161 if ( $finished ) {
162 learn_press_update_user_item_meta( $finished, 'finishing_type', 'click' );
163 learn_press_add_message( sprintf( __( 'You have finished this course "%s"', 'learnpress' ), $course->get_title() ) );
164 $response['result'] = 'success';
165 } else {
166 learn_press_add_message( __( 'Error! You cannot finish this course. Please contact your administrator for more information.', 'learnpress' ) );
167 $response['result'] = 'error';
168 }
169
170 learn_press_maybe_send_json( $response );
171
172 if ( ! empty( $response['redirect'] ) ) {
173 wp_redirect( $response['redirect'] );
174 exit();
175 }
176 }
177
178 /**
179 * Complete lesson
180 */
181 public static function complete_lesson() {
182 $response = array(
183 'result' => 'error',
184 'redirect' => '',
185 );
186
187 try {
188 $nonce = LP_Helper::sanitize_params_submitted( $_POST['complete-lesson-nonce'] ?? '' );
189 $lesson_id = LP_Helper::sanitize_params_submitted( $_POST['id'] ?? 0 );
190 $course_id = LP_Helper::sanitize_params_submitted( $_POST['course_id'] ?? 0 );
191
192 if ( ! wp_verify_nonce( $nonce, 'lesson-complete' ) ) {
193 throw new Exception( __( 'Error! Invalid lesson or failed security check.', 'learnpress' ) );
194 }
195
196 $lesson = get_post( $lesson_id );
197 if ( ! $lesson || $lesson->post_type !== LP_LESSON_CPT ) {
198 throw new Exception( __( 'Error! Invalid lesson.', 'learnpress' ) );
199 }
200
201 $user = learn_press_get_current_user();
202 if ( $user instanceof LP_User_Guest ) {
203 throw new Exception( __( 'Please login.', 'learnpress' ) );
204 }
205
206 $course = learn_press_get_course( $course_id );
207 if ( ! $course ) {
208 throw new Exception( __( 'Course is invalid!.', 'learnpress' ) );
209 }
210
211 $item = $course->get_item( $lesson_id );
212 if ( ! $item instanceof LP_Course_Item ) {
213 throw new Exception( 'Item is invalid!', 'learnpress' );
214 }
215
216 $result = $user->complete_lesson( $lesson_id, $course_id );
217 $response['redirect'] = $course->get_item_link( $lesson_id );
218
219 if ( ! is_wp_error( $result ) ) {
220 if ( $course->get_next_item() ) {
221 $next = $course->get_next_item();
222 $response['redirect'] = $course->get_item_link( $next );
223 }
224
225 learn_press_add_message( sprintf( __( 'Congrats! You have completed "%s".', 'learnpress' ), $item->get_title() ) );
226 $response['result'] = 'success';
227 } else {
228 learn_press_add_message( $result->get_error_message(), 'error' );
229 }
230
231 $response = apply_filters( 'learn-press/user-completed-lesson-result', $response, $lesson_id, $course_id, $user->get_id() );
232 } catch ( Exception $ex ) {
233 learn_press_add_message( $ex->getMessage(), 'error' );
234 }
235
236 //learn_press_maybe_send_json( $response );
237
238 if ( ! empty( $response['redirect'] ) ) {
239 wp_redirect( $response['redirect'] );
240 exit();
241 }
242 }
243 }
244 }
245
246 LP_AJAX::init();
247