PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.8
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.8
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
← All changes | inc/class-lp-ajax.php +100 -76 4.2.04.4.8 View file →
@@ -1,5 +1,12 @@
1 1 <?php
2 +
3 +use LearnPress\Helpers\Template;
4 +use LearnPress\Models\CourseModel;
5 +use LearnPress\Models\UserItems\UserCourseModel;
6 +use LearnPress\Models\UserItems\UserItemModel;
7 +use LearnPress\Models\UserModel;
8 +
2 9 defined( 'ABSPATH' ) || exit;
3 10
4 11 if ( ! class_exists( 'LP_AJAX' ) ) {
5 12 class LP_AJAX {
@@ -11,9 +18,9 @@
11 18 'checkout-user-email-exists:nopriv',
12 19 'recover-order',
13 20 'request-become-a-teacher:nonce',
14 21 'checkout:nopriv',
15 - 'complete-lesson',
22 + //'complete-lesson',
16 23 'finish-course', // finish_course.
17 24 'external-link:nopriv',
18 25 );
19 26
@@ -65,9 +72,18 @@
65 72 public static function request_become_a_teacher() {
66 73 LP_Forms_Handler::process_become_teacher();
67 74 }
68 75
76 + /**
77 + * Recover order
78 + *
79 + * @since 4.0.0
80 + * @version 4.0.1
81 + * @return void
82 + */
69 83 public static function recover_order() {
84 + $response = new LP_REST_Response();
85 +
70 86 if ( ! LP_Request::verify_nonce( 'recover-order' ) ) {
71 87 return;
72 88 }
73 89
@@ -74,60 +90,57 @@
74 90 $factory = new LP_Order_CURD();
75 91 $user_id = get_current_user_id();
76 92 $order_key = LP_Request::get_string( 'order-key' );
77 93 $order = $factory->recover( $order_key, $user_id );
78 - $result = array( 'result' => 'success' );
79 94
80 95 if ( is_wp_error( $order ) ) {
81 - $result['message'] = $order->get_error_message();
82 - $result['result'] = 'error';
96 + $response->message = $order->get_error_message();
83 97 } else {
84 - $result['message'] = sprintf(
98 + $response->status = 'success';
99 + $response->message = sprintf(
85 100 __( 'The order %s has been successfully recovered.', 'learnpress' ),
86 101 $order_key
87 102 );
88 - $result['redirect'] = $order->get_view_order_url();
103 + $response->data->redirect = $order->get_view_order_url();
89 104 }
90 105
91 - $result = apply_filters( 'learn-press/order/recover-result', $result, $order_key, $user_id );
106 + wp_send_json( $response );
107 + }
92 108
93 - learn_press_maybe_send_json( $result );
109 + public static function checkout_user_email_exists() {
110 + $response = new LP_REST_Response();
94 111
95 - if ( ! empty( $result['message'] ) ) {
96 - learn_press_add_message( $result['message'] );
97 - }
112 + try {
113 + $email = LP_Request::get_email( 'email' );
114 + $user_can_register = get_option( 'users_can_register' );
115 + $html_wrapper = [
116 + '<label class="lp-guest-checkout-output">' => '</label>',
117 + ];
98 118
99 - if ( ! empty( $result['redirect'] ) ) {
100 - wp_redirect( $result['redirect'] );
101 - exit();
102 - }
103 - }
119 + if ( email_exists( $email ) ) {
120 + $output = __(
121 + 'Your email already exists. Do you want to continue with this email?',
122 + 'learnpress'
123 + );
124 + } elseif ( $user_can_register ) {
125 + $output = sprintf(
126 + '<input type="checkbox" name="checkout-email-option" value="new-account"> <span>%s</span>',
127 + __(
128 + 'Create a new account with this email. The account information will be sent with this email.',
129 + 'learnpress'
130 + )
131 + );
132 + } else {
133 + $output = __( 'The system does not allow the creation of a new account, you must enter an existing account.', 'learnpress' );
134 + }
104 135
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>';
136 + $response->status = 'success';
137 + $response->data->content = Template::instance()->nest_elements( $html_wrapper, $output );
138 + } catch ( Throwable $e ) {
139 + $response->message = $e->getMessage();
125 140 }
126 141
127 - $response['output'] = apply_filters( 'learnpress/guest_checkout_email_exist_output', $output, $email );
128 -
129 - learn_press_maybe_send_json( $response );
142 + wp_send_json( $response );
130 143 }
131 144
132 145 /**
133 146 * Request finish course
@@ -134,52 +147,58 @@
134 147 *
135 148 * TODO: should move this function to api - tungnx
136 149 */
137 150 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();
151 + $link_redirect = '';
152 + $message_data = [
153 + 'status' => 'error',
154 + 'content' => '',
155 + ];
142 156
143 - $nonce_action = sprintf( 'finish-course-%d-%d', $course_id, $user->get_id() );
157 + try {
158 + $nonce = LP_Request::get_param( 'finish-course-nonce', '', 'text', 'post' );
159 + $course_id = LP_Request::get_param( 'course-id', 0, 'int', 'post' );
160 + $courseModel = CourseModel::find( $course_id, true );
161 + $user_id = get_current_user_id();
162 + $userModel = UserModel::find( $user_id, true );
144 163
145 - if ( ! $user->get_id() || ! $course || ! wp_verify_nonce( $nonce, $nonce_action ) ) {
146 - wp_die( __( 'Access denied!', 'learnpress' ) );
147 - }
164 + $nonce_action = sprintf( 'finish-course-%d-%d', $course_id, $user_id );
165 + if ( ! $courseModel || ! $userModel || ! wp_verify_nonce( $nonce, $nonce_action ) ) {
166 + throw new Exception( __( 'Request is invalid!', 'learnpress' ) );
167 + }
148 168
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 );
169 + $userCourseModel = UserCourseModel::find( $user_id, $course_id, true );
170 + if ( ! $userCourseModel instanceof UserCourseModel ) {
171 + throw new Exception( __( 'You have not enrolled in this course.', 'learnpress' ) );
172 + }
152 173
153 - $response = array(
154 - 'redirect' => apply_filters(
155 - 'learn-press/finish-course-redirect',
156 - $redirect,
157 - $course_id
158 - ),
159 - );
174 + $can_finish = $userCourseModel->can_finish();
175 + if ( is_wp_error( $can_finish ) ) {
176 + throw new Exception( $can_finish->get_error_message() );
177 + }
160 178
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';
179 + $userCourseModel->handle_finish();
180 + $lp_redirect = LP_Settings::get_option( 'course_finish_redirect' );
181 + $link_redirect = ! empty( $lp_redirect ) ? $lp_redirect : $courseModel->get_permalink();
182 + $link_redirect = esc_url_raw( $link_redirect );
183 + $message_data['status'] = 'success';
184 + $message_data['content'] = __( 'Course has been finished successfully.', 'learnpress' );
185 + } catch ( Throwable $e ) {
186 + $message_data['content'] = $e->getMessage();
168 187 }
169 188
170 - learn_press_maybe_send_json( $response );
171 -
172 - if ( ! empty( $response['redirect'] ) ) {
173 - wp_redirect( $response['redirect'] );
174 - exit();
189 + learn_press_set_message( $message_data );
190 + if ( ! empty( $link_redirect ) ) {
191 + wp_redirect( $link_redirect );
192 + die();
175 193 }
176 194 }
177 195
178 196 /**
179 197 * Complete lesson
198 + * @deprecated 4.2.7.6
180 199 */
181 - public static function complete_lesson() {
200 + /*public static function complete_lesson() {
182 201 $response = array(
183 202 'result' => 'error',
184 203 'redirect' => '',
185 204 );
@@ -184,11 +203,12 @@
184 203 'redirect' => '',
185 204 );
186 205
187 206 try {
188 - $nonce = LP_Request::get_param( 'complete-lesson-nonce' );
189 - $lesson_id = LP_Request::get_param( 'id', 0, 'int' );
190 - $course_id = LP_Request::get_param( 'course_id', 0, 'int' );
207 + $nonce = LP_Request::get_param( 'complete-lesson-nonce' );
208 + $lesson_id = LP_Request::get_param( 'id', 0, 'int' );
209 + $course_id = LP_Request::get_param( 'course_id', 0, 'int' );
210 + $item_id_next = LP_Request::get_param( 'item_id_next', 0, 'int' );
191 211
192 212 if ( ! wp_verify_nonce( $nonce, 'lesson-complete' ) ) {
193 213 throw new Exception( __( 'Error! Invalid lesson or failed security check.', 'learnpress' ) );
194 214 }
@@ -212,10 +232,14 @@
212 232 if ( ! $item instanceof LP_Course_Item ) {
213 233 throw new Exception( 'Item is invalid!', 'learnpress' );
214 234 }
215 235
216 - $result = $user->complete_lesson( $lesson_id, $course_id );
217 - $response['redirect'] = $course->get_item_link( $lesson_id );
236 + $result = $user->complete_lesson( $lesson_id, $course_id );
237 + if ( $item_id_next ) {
238 + $response['redirect'] = $course->get_item_link( $item_id_next );
239 + } else {
240 + $response['redirect'] = $item->get_permalink();
241 + }
218 242
219 243 if ( ! is_wp_error( $result ) ) {
220 244 if ( $course->get_next_item() ) {
221 245 $next = $course->get_next_item();
@@ -246,9 +270,9 @@
246 270 if ( ! empty( $response['redirect'] ) ) {
247 271 wp_redirect( $response['redirect'] );
248 272 exit();
249 273 }
250 - }
274 + }*/
251 275 }
252 276 }
253 277
254 278 LP_AJAX::init();