PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.6.9.2
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.6.9.2
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.6.9.2, at inc/class-lp-ajax.php

383 lines 11.0 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 // 'upload-user-avatar',
15 'checkout:nopriv',
16 'complete-lesson',
17 'finish-course', // finish_course.
18 // 'retake-course', // retake_course.
19 'external-link:nopriv',
20 // 'save-uploaded-user-avatar',
21 // 'load-more-courses',
22 );
23
24 $ajax_events = apply_filters( 'learn-press/ajax/events', $ajax_events );
25
26 foreach ( $ajax_events as $action => $callback ) {
27
28 if ( is_numeric( $action ) ) {
29 $action = $callback;
30 }
31
32 $actions = LP_Request::parse_action( $action );
33 $method = $actions['action'];
34
35 if ( ! is_callable( $callback ) ) {
36 $method = preg_replace( '/-/', '_', $method );
37 $callback = array( __CLASS__, $method );
38 }
39
40 LP_Request::register_ajax( $action, $callback );
41 }
42
43 //add_action( 'wp_ajax_learnpress_upload-user-avatar', array( __CLASS__, 'upload_user_avatar' ) );
44 }
45
46 /**
47 * @depecated v4.1.6.4
48 */
49 /*public static function load_more_courses() {
50 _deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.1.6.4' );
51 $type = LP_Request::get( 'type' );
52 $user_id = LP_Request::get_int( 'user', 0 );
53 $paged = LP_Request::get_int( 'current_page', 1 );
54 $template = LP_Request::get( 'template' );
55
56 $user = learn_press_get_user( $user_id );
57 $template_args = array();
58
59 if ( in_array( $type, array( 'featured', 'latest' ) ) ) {
60 $query_args = array(
61 'paginate' => true,
62 'return' => 'ids',
63 'author' => $user->get_id(),
64 'paged' => $paged,
65 );
66
67 if ( 'featured' === $type ) {
68 $query_args['featured'] = 1;
69 }
70
71 $query = new LP_Course_Query( $query_args );
72 $template_args = (array) $query->get_courses();
73 $template = "profile/dashboard/{$type}-courses";
74
75 } else {
76 $profile = LP_Profile::instance( $user_id );
77 $filter_status = LP_Request::get_string( 'filter-status' );
78 $query = $profile->query_courses( 'purchased', array( 'status' => $filter_status ) );
79 }
80
81 learn_press_get_template( $template, $template_args );
82
83 wp_die();
84 }*/
85
86 public static function external_link() {
87 $nonce = LP_Request::get( 'nonce' );
88 $id = LP_Request::get( 'id' );
89 $course = learn_press_get_course( $id );
90
91 if ( ! $course ) {
92 return;
93 }
94
95 $link = $course->get_external_link();
96
97 if ( ! wp_verify_nonce( $nonce, 'external-link-' . $link ) ) {
98 return;
99 }
100
101 if ( apply_filters( 'learn-press/course-redirect-external-link', $id ) ) {
102 wp_redirect( $link );
103 exit();
104 }
105 }
106
107 public static function checkout() {
108 LP()->checkout()->process_checkout_handler();
109 }
110
111 public static function request_become_a_teacher() {
112 LP_Forms_Handler::process_become_teacher();
113 }
114
115 public static function recover_order() {
116 if ( ! LP_Request::verify_nonce( 'recover-order' ) ) {
117 return;
118 }
119
120 $factory = new LP_Order_CURD();
121 $user_id = get_current_user_id();
122 $order_key = LP_Request::get_string( 'order-key' );
123 $order = $factory->recover( $order_key, $user_id );
124 $result = array( 'result' => 'success' );
125
126 if ( is_wp_error( $order ) ) {
127 $result['message'] = $order->get_error_message();
128 $result['result'] = 'error';
129 } else {
130 $result['message'] = sprintf(
131 __( 'The order %s has been successfully recovered.', 'learnpress' ),
132 $order_key
133 );
134 $result['redirect'] = $order->get_view_order_url();
135 }
136
137 $result = apply_filters( 'learn-press/order/recover-result', $result, $order_key, $user_id );
138
139 learn_press_maybe_send_json( $result );
140
141 if ( ! empty( $result['message'] ) ) {
142 learn_press_add_message( $result['message'] );
143 }
144
145 if ( ! empty( $result['redirect'] ) ) {
146 wp_redirect( $result['redirect'] );
147 exit();
148 }
149 }
150
151 public static function checkout_user_email_exists() {
152 $email = LP_Request::get_email( 'email' );
153 $response = array(
154 'exists' => 0,
155 );
156
157 if ( email_exists( $email ) ) {
158 $response['exists'] = $email;
159 $output = '<div class="lp-guest-checkout-output">' . __(
160 'Your email is already exists. Continue with this email?',
161 'learnpress'
162 ) . '</div>';
163 } else {
164 $output = '<label class="lp-guest-checkout-output">
165 <input type="checkbox" name="checkout-email-option" value="new-account">
166 ' . __(
167 'Create new account with this email? Account information will be sent to this email.',
168 'learnpress'
169 ) . '
170 </label>';
171 }
172
173 $response['output'] = apply_filters( 'learnpress/guest_checkout_email_exist_output', $output, $email );
174
175 learn_press_maybe_send_json( $response );
176 }
177
178 /*public static function upload_user_avatar() {
179 $file = $_FILES['lp-upload-avatar'];
180 $upload_dir = learn_press_user_profile_picture_upload_dir();
181
182 add_filter( 'upload_dir', array( __CLASS__, '_user_avatar_upload_dir' ), 10000 );
183
184 $result = wp_handle_upload(
185 $file,
186 array(
187 'test_form' => false,
188 )
189 );
190
191 remove_filter( 'upload_dir', array( __CLASS__, '_user_avatar_upload_dir' ), 10000 );
192
193 if ( is_array( $result ) ) {
194 $result['name'] = $upload_dir['subdir'] . '/' . basename( $result['file'] );
195 unset( $result['file'] );
196 } else {
197 $result = array(
198 'error' => __( 'Profile picture upload failed', 'learnpress' ),
199 );
200 }
201
202 learn_press_send_json( $result );
203 }*/
204
205 public static function _user_avatar_upload_dir( $dir ) {
206 $dir = learn_press_user_profile_picture_upload_dir();
207
208 return $dir;
209 }
210
211 /**
212 * Request finish course
213 *
214 * TODO: should move this function to api - tungnx
215 */
216 public static function finish_course() {
217 $nonce = LP_Request::get_string( 'finish-course-nonce' );
218 $course_id = LP_Request::get_int( 'course-id' );
219 $course = learn_press_get_course( $course_id );
220 $user = learn_press_get_current_user();
221
222 $nonce_action = sprintf( 'finish-course-%d-%d', $course_id, $user->get_id() );
223
224 if ( ! $user->get_id() || ! $course || ! wp_verify_nonce( $nonce, $nonce_action ) ) {
225 wp_die( __( 'Access denied!', 'learnpress' ) );
226 }
227
228 $finished = $user->finish_course( $course_id );
229 $lp_redirect = LP_Settings::get_option( 'course_finish_redirect' );
230 $redirect = ! empty( $lp_redirect ) ? $lp_redirect : get_the_permalink( $course_id );
231
232 $response = array(
233 'redirect' => apply_filters(
234 'learn-press/finish-course-redirect',
235 $redirect,
236 $course_id
237 ),
238 );
239
240 if ( $finished ) {
241 learn_press_update_user_item_meta( $finished, 'finishing_type', 'click' );
242 learn_press_add_message( sprintf( __( 'You have finished this course "%s"', 'learnpress' ), $course->get_title() ) );
243 $response['result'] = 'success';
244 } else {
245 learn_press_add_message( __( 'Error! You cannot finish this course. Please contact your administrator for more information.', 'learnpress' ) );
246 $response['result'] = 'error';
247 }
248
249 learn_press_maybe_send_json( $response );
250
251 if ( ! empty( $response['redirect'] ) ) {
252 wp_redirect( $response['redirect'] );
253 exit();
254 }
255 }
256
257 /**
258 * Complete lesson
259 */
260 public static function complete_lesson() {
261 $nonce = LP_Request::get_string( 'complete-lesson-nonce' );
262 $item_id = LP_Request::get_int( 'id' );
263 $course_id = LP_Request::get_int( 'course_id' );
264
265 $post = get_post( $item_id );
266 $user = learn_press_get_current_user();
267 $course = learn_press_get_course( $course_id );
268 if ( ! $course ) {
269 return;
270 }
271
272 $response = array(
273 'result' => 'success',
274 'redirect' => $course->get_item_link( $item_id ),
275 );
276
277 try {
278 // security check
279 if ( ! $post || ( $post && ! wp_verify_nonce( $nonce, 'lesson-complete' ) ) ) {
280 throw new Exception( __( 'Error! Invalid lesson or failed security check.', 'learnpress' ), 8000 );
281 }
282
283 $item = $course->get_item( $item_id );
284 if ( ! $item instanceof LP_Course_Item ) {
285 throw new Exception( 'Item is invalid!' );
286 }
287
288 $result = $user->complete_lesson( $item_id );
289
290 if ( ! is_wp_error( $result ) ) {
291 if ( $course->get_next_item() ) {
292 $next = $course->get_next_item();
293 $response['redirect'] = $course->get_item_link( $next );
294 }
295
296 learn_press_add_message( sprintf( __( 'Congrats! You have completed "%s".', 'learnpress' ), $item->get_title() ) );
297 } else {
298 throw new Exception( $result->get_error_message(), 'error' );
299 }
300
301 $response = apply_filters( 'learn-press/user-completed-lesson-result', $response, $item_id, $course_id, $user->get_id() );
302 } catch ( Exception $ex ) {
303 learn_press_add_message( $ex->getMessage(), 'error' );
304 }
305
306 if ( learn_press_message_count( 'error' ) ) {
307 $response['result'] = 'error';
308 }
309
310 learn_press_maybe_send_json( $response );
311
312 if ( ! empty( $response['redirect'] ) ) {
313 // wp_cache_flush();
314 wp_redirect( $response['redirect'] );
315 exit();
316 }
317 }
318
319 /**
320 * Retake course action
321 *
322 * @TODO move this function to API
323 */
324 /*
325 public static function retake_course() {
326 $security = LP_Request::get_string( 'retake-course-nonce' );
327 $course_id = LP_Request::get_int( 'retake-course' );
328 $user = learn_press_get_current_user();
329 $course = learn_press_get_course( $course_id );
330 $response = array(
331 'result' => 'error',
332 );
333
334 $security_action = sprintf( 'retake-course-%d-%d', $course->get_id(), $user->get_id() );
335 // security check
336 if ( ! wp_verify_nonce( $security, $security_action ) ) {
337 learn_press_add_message( __( 'Error! Invalid course or failed security check.', 'learnpress' ),
338 'error' );
339 } else {
340 if ( $user->can_retake_course( $course_id ) ) {
341 $result = $user->retry_course( $course_id );
342
343 if ( ! $result ) {
344 learn_press_add_message( __( 'Error!', 'learnpress' ), 'error' );
345 } else {
346 learn_press_add_message( sprintf( __( 'You have retaken the course "%s"', 'learnpress' ),
347 $course->get_title() ) );
348 $response['result'] = 'success';
349 }
350 } else {
351 learn_press_add_message( __( 'Error! You can not retake the course', 'learnpress' ), 'error' );
352 }
353 }
354
355 if ( learn_press_message_count( 'error' ) == 0 ) {
356 $item = $course->get_item_at( 0 );
357
358 if ( $item ) {
359 $redirect = $course->get_item_link( $item );
360 } else {
361 $redirect = $course->get_permalink();
362 }
363 $response['redirect'] = apply_filters( 'learn-press/user-retake-course-redirect', $redirect );
364 $response = apply_filters( 'learn-press/user-retaken-course-result', $response, $course_id,
365 $user->get_id() );
366 } else {
367 $response['redirect'] = $course->get_permalink();
368 $response = apply_filters( 'learn-press/user-retake-course-failed-result', $response,
369 $course_id, $user->get_id() );
370 }
371
372 learn_press_maybe_send_json( $response );
373
374 if ( ! empty( $response['redirect'] ) ) {
375 wp_redirect( $response['redirect'] );
376 exit();
377 }
378 }*/
379 }
380 }
381
382 LP_AJAX::init();
383