PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.9
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.9
4.4.9 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 All 140 releases
← All changes | inc/user/class-lp-user-factory.php +352 -193 4.1.7 → 4.4.9 View file →
@@ -1,6 +1,11 @@
1 1 <?php
2 2
3 +use LearnPress\Background\LPBackgroundAjax;
4 +use LearnPress\Models\CourseModel;
5 +use LearnPress\Models\UserItems\UserCourseModel;
6 +use LearnPress\Models\UserItems\UserItemModel;
7 +
3 8 defined( 'ABSPATH' ) || exit;
4 9
5 10 /**
6 11 * Class LP_User_Factory
@@ -6,32 +11,11 @@
6 11 * Class LP_User_Factory
7 12 */
8 13 class LP_User_Factory {
9 14 /**
10 - * @var array
11 - */
12 - protected static $_users = array();
13 -
14 - /**
15 - * @var int
16 - */
17 - protected static $_guest_transient = 0;
18 -
19 - public static $_deleted_users = array();
20 -
21 - /**
22 15 * Init hooks
23 16 */
24 17 public static function init() {
25 - self::$_guest_transient = WEEK_IN_SECONDS;
26 - add_action( 'learn-press/user/quiz-started', array( __CLASS__, 'start_quiz' ), 10, 3 );
27 - add_action( 'learn_press_activate', array( __CLASS__, 'register_event' ), 15 );
28 -
29 - /**
30 - * Filters into wp users manager
31 - */
32 - add_filter( 'users_list_table_query_args', array( __CLASS__, 'exclude_temp_users' ) );
33 -
34 18 add_action( 'learn-press/order/status-changed', array( __CLASS__, 'update_user_items' ), 10, 3 );
35 19 }
36 20
37 21 /**
@@ -39,13 +23,14 @@
39 23 *
40 24 * @param $the_id
41 25 * @param $old_status
42 26 * @param $new_status
27 + *
43 28 * @Todo tungnx - should write on class LP_Order
44 29 */
45 30 public static function update_user_items( $the_id, $old_status, $new_status ) {
31 + ini_set( 'max_execution_time', 0 );
46 32 $order = learn_press_get_order( $the_id );
47 -
48 33 if ( ! $order ) {
49 34 return;
50 35 }
51 36
@@ -50,15 +35,16 @@
50 35 }
51 36
52 37 try {
53 38 switch ( $new_status ) {
54 - case 'pending':
55 - case 'processing':
56 - case 'cancelled':
57 - case 'failed':
39 + case LP_ORDER_PENDING:
40 + case LP_ORDER_PROCESSING:
41 + case LP_ORDER_CANCELLED:
42 + case LP_ORDER_FAILED:
43 + case LP_ORDER_REFUNDED:
58 44 self::_update_user_item_order_pending( $order, $old_status, $new_status );
59 45 break;
60 - case 'completed':
46 + case LP_ORDER_COMPLETED:
61 47 self::_update_user_item_order_completed( $order, $old_status, $new_status );
62 48 break;
63 49 }
64 50 } catch ( Exception $ex ) {
@@ -63,12 +49,14 @@
63 49 }
64 50 } catch ( Exception $ex ) {
65 51 error_log( __METHOD__ . ': ' . $ex->getMessage() );
66 52 }
53 + ini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );
67 54 }
68 55
69 56 /**
70 57 * Update lp_user_items has Order
58 + * Only handle when change status LP Order from Completed to another status
71 59 *
72 60 * @param LP_Order $order
73 61 * @param string $old_status
74 62 * @param string $new_status
@@ -76,34 +64,55 @@
76 64 * @throws Exception
77 65 * @author Nhamdv <[email protected]>
78 66 * @editor tungnx
79 67 * @modify 4.1.4
80 - * @version 1.0.1
68 + * @version 1.0.4
81 69 */
82 70 protected static function _update_user_item_order_pending( $order, $old_status, $new_status ) {
83 - $items = $order->get_items();
84 - $lp_order_db = LP_Order_DB::getInstance();
85 - $lp_user_items_db = LP_User_Items_DB::getInstance();
71 + $items = $order->get_all_items();
72 + if ( ! $items ) {
73 + return;
74 + }
86 75
87 - if ( ! $items ) {
76 + if ( $old_status !== LP_ORDER_COMPLETED ) {
88 77 return;
89 78 }
90 79
91 80 foreach ( $order->get_users() as $user_id ) {
81 + $user = learn_press_get_user( $user_id );
82 +
92 83 foreach ( $items as $item ) {
93 - if ( ! isset( $item['course_id'] ) ) {
94 - continue;
95 - }
84 + if ( isset( $item['item_id'] ) && LP_COURSE_CPT === $item['item_type'] ) {
85 + $course_id = $item['item_id'];
96 86
97 - $course_id = $item['course_id'];
87 + if ( $user_id ) {
88 + $userCourse = UserCourseModel::find( $user_id, $course_id, true );
89 + // Check course is learning is sample order_id with order which is changing status
90 + if ( ! $userCourse || $userCourse->ref_id != $order->get_id() ) {
91 + continue;
92 + }
98 93
99 - // Check this order is the latest by user and course_id
100 - $last_order_id = $lp_order_db->get_last_lp_order_id_of_user_course( $user_id, $course_id );
101 - if ( $last_order_id && $last_order_id != $order->get_id() ) {
102 - continue;
94 + // Only change status of user_item to cancel, not delete user_item and user_item_results.
95 + $userCourse->status = UserItemModel::STATUS_CANCEL;
96 + $userCourse->save();
97 + } else {
98 + $userCourseGuest = self::get_user_course_guest( $course_id, $order->get_user_email() );
99 + // Check course is learning is sample order_id with order which is changing status
100 + if ( ! $userCourseGuest || $userCourseGuest->ref_id != $order->get_id() ) {
101 + continue;
102 + }
103 +
104 + $userCourseGuest->status = UserItemModel::STATUS_CANCEL;
105 + $userCourseGuest->save();
106 + }
107 + } else {
108 + // For buy other item type (not course)
109 + // For case item is Certificate, when update code of Certificate, should remove this code
110 + if ( $item['item_type'] === 'lp_cert' ) {
111 + $item['_lp_cert_id'] = $item['item_id'];
112 + }
113 + do_action( 'lp/order-pending/update/user-item', $item, $order, $user );
103 114 }
104 -
105 - $lp_user_items_db->delete_user_items_old( $user_id, $course_id );
106 115 }
107 116 }
108 117 }
109 118
@@ -108,49 +117,116 @@
108 117 }
109 118
110 119 /**
111 120 * Enroll course if Order completed
121 + * 1. Check if order change is the latest order of user for course
122 + * 2. Check if user_course was canceled, only update status to Enrolled
123 + * 3. Handle repurchase course if allow repurchase
124 + * 4. Create new user_course if first purchase course
125 + * 5. Enroll course free or no enroll requirement
126 + * 6. Enroll course for guest if auto enroll enable
127 + * 7. Send email background when user enroll course
112 128 *
113 129 * @param LP_Order $order
114 130 * @param string $old_status
115 131 * @param string $new_status
132 + *
116 133 * @throws Exception
117 134 * @editor tungnx
118 135 * @modify 4.1.2
119 - * @version 1.0.2
136 + * @version 1.0.6
120 137 */
121 138 protected static function _update_user_item_order_completed( LP_Order $order, string $old_status, string $new_status ) {
122 139 $lp_order_db = LP_Order_DB::getInstance();
123 - $items = $order->get_items();
124 -
140 + $items = $order->get_all_items();
125 141 if ( ! $items ) {
126 142 return;
127 143 }
128 144
129 - $created_via = $order->get_created_via();
130 -
145 + $usersCourses = [];
131 146 foreach ( $order->get_users() as $user_id ) {
132 147 $user = learn_press_get_user( $user_id );
133 148
134 149 foreach ( $items as $item ) {
135 - if ( ! isset( $item['course_id'] ) || get_post_type( $item['course_id'] ) !== LP_COURSE_CPT ) {
150 + if ( isset( $item['item_id'] ) && LP_COURSE_CPT === $item['item_type'] ) {
151 + $course_id = $item['item_id'];
152 +
153 + // Check order_id of user_item current must < new order_id
154 + $userCourse = UserCourseModel::find( $user_id, $course_id, true );
155 + if ( $user_id && $userCourse && $userCourse->ref_id > $order->get_id() ) {
156 + continue;
157 + } elseif ( ! $user_id ) {
158 + $userCourseGuest = self::get_user_course_guest( $course_id, $order->get_user_email() );
159 + if ( $userCourseGuest && $userCourseGuest->ref_id > $order->get_id() ) {
160 + continue;
161 + }
162 + }
163 +
164 + // Check user course was canceled? If yes, only update status to Enrolled
165 + if ( $user_id && $userCourse && $userCourse->ref_id == $order->get_id() ) {
166 + if ( $userCourse->get_status() === UserItemModel::STATUS_CANCEL ) {
167 + if ( ! empty( $userCourse->get_end_time() ) ) {
168 + $userCourse->status = UserItemModel::STATUS_FINISHED;
169 + } else {
170 + $userCourse->status = UserItemModel::STATUS_ENROLLED;
171 + }
172 + $userCourse->save();
173 + }
174 +
175 + continue;
176 + }
177 +
178 + if ( $order->is_manual() ) {
179 + $usersCourses[] = self::handle_item_manual_order_completed( $order, $user, $item );
180 + } else {
181 + $usersCourses[] = self::handle_item_order_completed( $order, $user, $item );
182 + }
183 + } else {
184 + // For buy other item type (not course)
185 + // For case item is Certificate, when update code of Certificate, should remove this code
186 + if ( $item['item_type'] === 'lp_cert' ) {
187 + $item['_lp_cert_id'] = $item['item_id'];
188 + // Fixed for old Certificate <= v4.1.2
189 + $item['_lp_course_id_of_cert'] = learn_press_get_order_item_meta(
190 + $item['order_item_id'],
191 + '_lp_course_id_of_cert'
192 + );
193 + }
194 + do_action( 'lp/order-completed/update/user-item', $item, $order, $user );
195 + }
196 + }
197 + }
198 +
199 + // Run background send emails when users enroll courses (send for instructor, admin, student...)
200 + if ( ! empty( $usersCourses ) ) {
201 + $userCourseIds = [];
202 + foreach ( $usersCourses as $userCourse ) {
203 + if ( ! $userCourse instanceof UserCourseModel ) {
136 204 continue;
137 205 }
138 206
139 - $course_id = $item['course_id'];
140 -
141 - // Check this order is the latest by user and course_id
142 - $last_order_id = $lp_order_db->get_last_lp_order_id_of_user_course( $user_id, $course_id );
143 - if ( $last_order_id && $last_order_id != $order->get_id() ) {
207 + if ( $userCourse->get_status() !== UserItemModel::STATUS_ENROLLED ) {
144 208 continue;
145 209 }
146 210
147 - if ( 'manual' === $created_via ) {
148 - self::handle_item_manual_order_completed( $order, $user, $item );
149 - } else {
150 - self::handle_item_order_completed( $order, $user, $item );
151 - }
211 + $userCourseIds[] = [
212 + 'user_id' => $userCourse->user_id,
213 + 'course_id' => $userCourse->item_id,
214 + ];
152 215 }
216 +
217 + if ( empty( $userCourseIds ) ) {
218 + return;
219 + }
220 +
221 + /**
222 + * @uses SendEmailAjax::send_mail_users_enrolled_courses
223 + */
224 + $data_send = [
225 + 'user_course_ids' => $userCourseIds,
226 + 'lp-load-ajax' => 'send_mail_users_enrolled_courses',
227 + ];
228 + LPBackgroundAjax::handle( $data_send );
153 229 }
154 230 }
155 231
156 232 /**
@@ -157,17 +233,24 @@
157 233 * Handle something when Order completed
158 234 *
159 235 * @author tungnx
160 236 * @since 4.1.3
161 - * @version 1.0.2
237 + * @version 1.1.1
162 238 */
163 - protected static function handle_item_order_completed( LP_Order $order, LP_User $user, $item ) {
164 - $lp_user_items_db = LP_User_Items_DB::getInstance();
239 + protected static function handle_item_order_completed( LP_Order $order, $user, $item ) {
240 + $lp_user_items_db = LP_User_Items_DB::getInstance();
241 + $userCourseResponse = null;
165 242
166 243 try {
167 - $course = learn_press_get_course( $item['course_id'] );
168 - $auto_enroll = LP_Settings::is_auto_start_course();
244 + $course_id = intval( $item['course_id'] ?? $item['item_id'] ?? 0 );
245 + $courseModel = CourseModel::find( $course_id, true );
246 + if ( ! $courseModel ) {
247 + return null;
248 + }
169 249
250 + $auto_enroll = LP_Settings::is_auto_start_course();
251 + $keep_progress_items_course = false;
252 +
170 253 $user_id = $user->get_id();
171 254 if ( $user instanceof LP_User_Guest ) {
172 255 $user_id = 0;
173 256 }
@@ -172,78 +255,141 @@
172 255 $user_id = 0;
173 256 }
174 257
175 258 /** Get the newest user_item_id of course for allow_repurchase */
176 - $filter = new LP_User_Items_Filter();
177 - $filter->user_id = $user_id;
178 - $filter->item_id = $item['course_id'];
179 - $user_course = $lp_user_items_db->get_last_user_course( $filter );
259 + $userCourse = UserCourseModel::find( $user_id, $course_id, true );
180 260
181 - $latest_user_item_id = 0;
182 - $allow_repurchase_type = '';
261 + $latest_user_item_id = 0;
262 + $allow_repurchase_option = $courseModel->get_type_repurchase();
263 + $allow_repurchase_type = '';
183 264
184 265 // Data user_item for save database
185 266 $user_item_data = [
186 - 'user_id' => $user_id,
187 - 'item_id' => $course->get_id(),
188 - 'ref_id' => $order->get_id(),
267 + 'user_id' => $user_id,
268 + 'item_id' => $course_id,
269 + 'ref_id' => $order->get_id(),
270 + 'start_time' => gmdate( LP_Datetime::$format, time() ),
271 + 'graduation' => UserItemModel::GRADUATION_IN_PROGRESS,
189 272 ];
190 273
191 - if ( ! $user instanceof LP_User_Guest && $user_course && isset( $user_course->user_item_id ) ) {
192 - $latest_user_item_id = $user_course->user_item_id;
274 + if ( $user_id && $userCourse ) {
275 + $latest_user_item_id = $userCourse->get_user_item_id();
193 276
194 277 /** Get allow_repurchase_type for reset, update. Add in: rest-api/v1/frontend/class-lp-courses-controller.php: purchase_course */
195 278 $allow_repurchase_type = learn_press_get_user_item_meta( $latest_user_item_id, '_lp_allow_repurchase_type' );
196 279 }
197 280
281 + $is_no_required_enroll = $courseModel->has_no_enroll_requirement();
282 + $is_in_stock = $courseModel->is_in_stock();
283 +
198 284 // If > 1 time purchase same course and allow repurchase
199 - if ( ! empty( $allow_repurchase_type ) && $course->allow_repurchase() && ! empty( $latest_user_item_id ) && ! $course->is_free() ) {
285 + if ( $courseModel->enable_allow_repurchase() && ! empty( $latest_user_item_id )
286 + && ! $courseModel->is_free() && ! $is_no_required_enroll ) {
287 + if ( $allow_repurchase_option !== 'popup' ) {
288 + $allow_repurchase_type = $allow_repurchase_option;
289 + } elseif ( empty( $allow_repurchase_type ) ) {
290 + // For case course set repurchase Popup but buy via Upsell, PMS, Woo can't set allow_repurchase_type
291 + $allow_repurchase_type = 'keep';
292 + }
293 +
200 294 /**
201 295 * If keep course progress will reset start_time, end_time, status, graduation
202 296 * where user_item_id = $latest_user_item_id
203 297 */
204 298 if ( $allow_repurchase_type === 'keep' ) {
299 + $keep_progress_items_course = true;
205 300 // Set data for update user item
206 301 $user_item_data['user_item_id'] = $latest_user_item_id;
207 - $user_item_data['start_time'] = current_time( 'mysql', true );
208 302 $user_item_data['end_time'] = null;
209 - $user_item_data['status'] = LP_COURSE_ENROLLED;
210 - $user_item_data['graduation'] = LP_COURSE_GRADUATION_IN_PROGRESS;
303 + $user_item_data['status'] = UserItemModel::STATUS_ENROLLED;
211 304
212 305 do_action( 'lp/allow_repurchase_options/continue/db/update', $user_item_data, $latest_user_item_id );
213 306 } elseif ( $allow_repurchase_type === 'reset' ) {
214 - if ( $auto_enroll ) {
215 - $user_item_data['status'] = LP_COURSE_ENROLLED;
216 - $user_item_data['graduation'] = LP_COURSE_GRADUATION_IN_PROGRESS;
217 - } else {
218 - $user_item_data['status'] = LP_COURSE_PURCHASED;
219 - }
307 + $user_item_data['end_time'] = null;
308 + $user_item_data['status'] = UserItemModel::STATUS_ENROLLED;
220 309 }
221 310
222 311 learn_press_delete_user_item_meta( $latest_user_item_id, '_lp_allow_repurchase_type' );
223 - } elseif ( ! $course->is_free() ) { // First purchase course
312 + } elseif ( ! $courseModel->is_free() && ! $is_no_required_enroll && $is_in_stock ) { // First purchase course
224 313 // Set data for create user_item
225 314 if ( $auto_enroll ) {
226 - $user_item_data['status'] = LP_COURSE_ENROLLED;
227 - $user_item_data['graduation'] = LP_COURSE_GRADUATION_IN_PROGRESS;
315 + $user_item_data['status'] = UserItemModel::STATUS_ENROLLED;
228 316 } else {
229 - $user_item_data['status'] = LP_COURSE_PURCHASED;
317 + $user_item_data['status'] = UserItemModel::STATUS_PURCHASED;
318 + $user_item_data['graduation'] = '';
230 319 }
231 - } else { // Enroll course free
320 + } elseif ( $user_id && ( $is_in_stock || $is_no_required_enroll ) ) { // Enroll course free or No enroll requirement.
232 321 // Set data for create user_item
233 - $user_item_data['status'] = LP_COURSE_ENROLLED;
234 - $user_item_data['graduation'] = LP_COURSE_GRADUATION_IN_PROGRESS;
322 + $user_item_data['status'] = UserItemModel::STATUS_ENROLLED;
323 + } elseif ( LP_Checkout::instance()->is_enable_guest_checkout()
324 + && $auto_enroll && ( $is_in_stock || $is_no_required_enroll ) ) {
325 + $user_item_data['status'] = UserItemModel::STATUS_ENROLLED;
326 + } else {
327 + return null;
235 328 }
236 329
237 - $user_item_new_or_update = new LP_User_Item_Course( $user_item_data );
238 - $result = $user_item_new_or_update->update();
330 + $user_item_data = apply_filters(
331 + 'learn-press/order/user-course-data',
332 + $user_item_data,
333 + $order,
334 + $item,
335 + $courseModel,
336 + $user_id
337 + );
239 338
240 - if ( $result && isset( $user_item_data['status'] ) && LP_COURSE_ENROLLED == $user_item_data['status'] ) {
339 + $another_case = apply_filters(
340 + 'learn-press/order/completed/update-user-item/another-case/bool',
341 + false,
342 + $user_item_data,
343 + $order,
344 + $item,
345 + $courseModel,
346 + $user_id
347 + );
348 +
349 + if ( $another_case ) { // Handle another case to handle user_item
350 + $userCourseResponse = apply_filters(
351 + 'learn-press/order/completed/update-user-item/another-case',
352 + null,
353 + $user_item_data,
354 + $order,
355 + $item,
356 + $courseModel,
357 + $user_id
358 + );
359 + } elseif ( $keep_progress_items_course ) { // Update user_item to keep course progress
360 + $userCourse->ref_id = $order->get_id();
361 + $userCourse->status = $user_item_data['status'];
362 + $userCourse->graduation = $user_item_data['graduation'];
363 + $userCourse->start_time = $user_item_data['start_time'];
364 + $userCourse->end_time = null;
365 + $userCourse->save();
366 + $userCourseResponse = $userCourse;
367 + } else { // Create new user_item
368 + // Delete items old
369 + if ( ! $user_id ) {
370 + $userGuestCourse = self::get_user_course_guest( $course_id, $order->get_user_email() );
371 + if ( $userGuestCourse ) {
372 + $userGuestCourse->delete();
373 + }
374 + } elseif ( $userCourse ) {
375 + //$lp_user_items_db->delete_user_items_old( $user_id, $course_id );
376 + $userCourse->delete();
377 + }
378 +
379 + $userCourseNew = new UserCourseModel( $user_item_data );
380 + $userCourseNew->save();
381 + $userCourseResponse = $userCourseNew;
382 + }
383 +
384 + if ( isset( $user_item_data['status'] ) && UserItemModel::STATUS_ENROLLED == $user_item_data['status'] ) {
241 385 do_action( 'learnpress/user/course-enrolled', $order->get_id(), $user_item_data['item_id'], $user_item_data['user_id'] );
242 386 }
243 387 } catch ( Throwable $e ) {
244 - error_log( __FUNCTION__ . ': ' . $e->getMessage() );
388 + LP_Debug::error_log( $e );
245 389 }
390 +
391 + return $userCourseResponse;
246 392 }
247 393
248 394 /**
249 395 * Handle something when Manual Order completed
@@ -249,96 +395,141 @@
249 395 * Handle something when Manual Order completed
250 396 *
251 397 * @author tungnx
252 398 * @since 4.1.3
253 - * @version 1.0.1
399 + * @version 1.0.4
254 400 */
255 - protected static function handle_item_manual_order_completed( LP_Order $order, LP_User $user, $item ) {
401 + protected static function handle_item_manual_order_completed( LP_Order $order, $user, $item ) {
402 + $userCourseResponse = null;
403 +
256 404 try {
257 - $course = learn_press_get_course( $item['course_id'] );
258 - $auto_enroll = LP_Settings::is_auto_start_course();
405 + $courseModel = CourseModel::find( $item['course_id'] ?? $item['item_id'] ?? 0, true );
406 + if ( ! $courseModel ) {
407 + return $userCourseResponse;
408 + }
259 409
410 + if ( $user instanceof LP_User_Guest ) {
411 + return $userCourseResponse;
412 + }
413 +
260 414 // Data user_item for save database
261 415 $user_item_data = [
262 416 'user_id' => $user->get_id(),
263 - 'item_id' => $course->get_id(),
417 + 'item_id' => $courseModel->get_id(),
264 418 'ref_id' => $order->get_id(),
265 419 ];
266 420
421 + $auto_enroll = LP_Settings::is_auto_start_course();
267 422 if ( $auto_enroll ) {
268 - $user_item_data['status'] = LP_COURSE_ENROLLED;
269 - $user_item_data['graduation'] = LP_COURSE_GRADUATION_IN_PROGRESS;
423 + $user_item_data['status'] = UserItemModel::STATUS_ENROLLED;
424 + $user_item_data['graduation'] = UserItemModel::GRADUATION_IN_PROGRESS;
270 425 } else {
271 - $user_item_data['status'] = LP_COURSE_PURCHASED;
426 + $user_item_data['status'] = UserItemModel::STATUS_PURCHASED;
272 427 }
273 428
274 - $user_item_data = apply_filters( 'learnpress/lp_order/item/handle_item_manual_order_completed', $user_item_data, $order, $user, $course, $item );
429 + $user_item_data = apply_filters(
430 + 'learn-press/order/manual/user-course-data',
431 + $user_item_data,
432 + $order,
433 + $item,
434 + $courseModel
435 + );
275 436
276 437 // Delete lp_user_items old
277 - LP_User_Items_DB::getInstance()->delete_user_items_old( $user->get_id(), $course->get_id() );
438 + LP_User_Items_DB::getInstance()->delete_user_items_old( $user->get_id(), $courseModel->get_id() );
278 439 // End
279 440
280 - if ( isset( $user_item_data['status'] ) ) {
281 - $user_item_new = new LP_User_Item_Course( $user_item_data );
282 - $result = $user_item_new->update();
441 + $userCourseModelNew = new UserCourseModel( $user_item_data );
442 + $userCourseModelNew->save();
443 + $userCourseResponse = $userCourseModelNew;
283 444
284 - if ( $result && LP_COURSE_ENROLLED == $user_item_data['status'] ) {
285 - do_action( 'learnpress/user/course-enrolled', $order->get_id(), $user_item_data['item_id'], $user_item_data['user_id'] );
286 - }
445 + if ( UserItemModel::STATUS_ENROLLED == $userCourseResponse->get_status() ) {
446 + do_action( 'learnpress/user/course-enrolled', $order->get_id(), $user_item_data['item_id'], $user_item_data['user_id'] );
287 447 }
288 448 } catch ( Throwable $e ) {
289 449 error_log( __FUNCTION__ . ': ' . $e->getMessage() );
290 450 }
451 +
452 + return $userCourseResponse;
291 453 }
292 454
293 455 /**
456 + * Get user_course of user Guest
457 + *
458 + * @param $course_id
459 + * @param $email_guest
460 + *
461 + * @return UserCourseModel|false
462 + * @throws Exception
463 + * @since 4.2.7.3
464 + * @version 1.0.0
465 + */
466 + public static function get_user_course_guest( $course_id, $email_guest ) {
467 + $lp_user_items_db = LP_User_Items_DB::getInstance();
468 + $filter = new LP_User_Items_Filter();
469 + $filter->user_id = 0;
470 + $filter->item_id = $course_id;
471 + $filter->join[] = "INNER JOIN {$lp_user_items_db->tb_postmeta} pm ON pm.post_id = ref_id";
472 + $filter->join[] = "INNER JOIN {$lp_user_items_db->tb_postmeta} pm2 ON pm2.post_id = ref_id";
473 + $filter->where[] = "AND pm.meta_key = '_checkout_email'";
474 + $filter->where[] = $lp_user_items_db->wpdb->prepare( 'AND pm2.meta_value = %s', $email_guest );
475 +
476 + return UserCourseModel::get_user_item_model_from_db( $filter );
477 + }
478 +
479 + /**
294 480 * Hook into wp users list to exclude our temp users.
295 481 *
296 482 * @param array $args
297 483 *
298 484 * @return mixed
485 + * @deprecated 4.2.7.3
299 486 */
300 - public static function exclude_temp_users( $args ) {
487 + /*public static function exclude_temp_users( $args ) {
301 488 if ( LP_Request::get_string( 'lp-action' ) == 'pending-request' ) {
302 489 $args['include'] = self::get_pending_requests();
303 490 }
304 491
305 492 return $args;
306 - }
493 + }*/
307 494
308 - public static function get_pending_requests() {
309 - $pending_requests = LP_Object_Cache::get( 'pending-requests', 'lp-users' );
310 - if ( false === $pending_requests ) {
311 - global $wpdb;
312 - $query = $wpdb->prepare(
313 - "
314 - SELECT ID
315 - FROM {$wpdb->users} u
316 - INNER JOIN {$wpdb->usermeta} um ON um.user_id = u.ID AND um.meta_key = %s
317 - WHERE um.meta_value = %s
495 + /**
496 + * Get pending requests be come a Teacher.
497 + *
498 + * @return array
499 + * @deprecated 4.2.7.3
500 + */
501 + /*public static function get_pending_requests() {
502 + global $wpdb;
503 + $query = $wpdb->prepare(
504 + "
505 + SELECT ID
506 + FROM {$wpdb->users} u
507 + INNER JOIN {$wpdb->usermeta} um ON um.user_id = u.ID AND um.meta_key = %s
508 + WHERE um.meta_value = %s
318 509 ",
319 - '_requested_become_teacher',
320 - 'yes'
321 - );
510 + '_requested_become_teacher',
511 + 'yes'
512 + );
322 513
323 - $pending_requests = $wpdb->get_col( $query );
324 - LP_Object_Cache::set( 'pending-requests', $pending_requests, 'lp-users' );
325 - }
514 + return $wpdb->get_col( $query );
515 + }*/
326 516
327 - return $pending_requests;
328 - }
329 -
330 - public static function get_guest_id() {
517 + /**
518 + * @deprecated 4.2.7.3
519 + */
520 + /*public static function get_guest_id() {
331 521 return 0;// empty( $_COOKIE['learn_press_user_guest_id'] ) ? false : $_COOKIE['learn_press_user_guest_id'];
332 - }
522 + }*/
333 523
334 524 /**
335 525 * @param $the_user
336 - * @param bool $force
526 + * @param bool $force
337 527 *
338 528 * @return LP_Abstract_User
529 + * @deprecated 4.2.7.3
339 530 */
340 - public static function get_user( $the_user, $force = false ) {
531 + /*public static function get_user( $the_user, $force = false ) {
341 532 $the_id = 0;
342 533 if ( is_numeric( $the_user ) ) {
343 534 $the_id = $the_user;
344 535 } elseif ( $the_user instanceof LP_Abstract_User ) {
@@ -357,9 +548,9 @@
357 548 self::$_users[ $the_id ] = new $user_class( $the_id );
358 549 }
359 550
360 551 return self::$_users[ $the_id ];
361 - }
552 + }*/
362 553
363 554 /**
364 555 * Get class name for User Object
365 556 *
@@ -365,64 +556,32 @@
365 556 *
366 557 * @param int
367 558 *
368 559 * @return string
560 + * @deprecated 4.2.7.3
369 561 */
370 - public static function get_user_class( $the_id = 0 ) {
371 - $deleted = in_array( $the_id, self::$_deleted_users );
372 - $exists_user = ! $deleted ? get_userdata( $the_id ) : false;
373 - if ( $exists_user ) {
374 - $class = 'LP_User';
375 - } else {
376 - if ( ! $deleted ) {
377 - self::$_deleted_users[] = $the_id;
378 - /**
379 - * Prevent loading user does not exists in database
380 - */
381 - $user = new LP_User_Guest( $the_id );
382 - wp_cache_add( $the_id, $user, 'users' );
383 - wp_cache_add( '', $the_id, 'userlogins' );
384 - wp_cache_add( '', $the_id, 'useremail' );
385 - wp_cache_add( '', $the_id, 'userslugs' );
386 - }
387 - $is_logged_in = function_exists( 'is_user_logged_in' ) && is_user_logged_in();
388 - $class = $is_logged_in ? 'LP_User' : 'LP_User_Guest';
389 - }
390 -
391 - return apply_filters( 'learn_press_user_class', $class );
392 - }
393 -
394 - /**
395 - * @param int $quiz_id
396 - * @param int $course_id
397 - * @param int $user_id
398 - */
399 - public static function start_quiz( $quiz_id, $course_id, $user_id ) {
400 - if ( learn_press_get_user( $user_id ) ) {
401 - $user = learn_press_get_user( $user_id );
402 - if ( $user->get_item_data( $quiz_id, $course_id ) ) {
403 - self::_update_user_item_meta( $user->get_item_data( $quiz_id, $course_id ), $quiz_id, $course_id, $user_id );
404 - }
405 - }
406 - }
407 -
408 - /**
409 - * @param LP_User_Item $item
410 - * @param int $quiz_id
411 - * @param int $course_id
412 - * @param int $user_id
413 - */
414 - private static function _update_user_item_meta( $item, $quiz_id, $course_id, $user_id ) {
415 - if ( get_user_by( 'id', $user_id ) ) {
416 - return;
417 - }
418 -
419 - if ( ! $item ) {
420 - return;
421 - }
422 -
423 - learn_press_add_user_item_meta( $item->get_user_item_id(), 'temp_user_id', 'yes' );
424 - learn_press_add_user_item_meta( $item->get_user_item_id(), 'temp_user_time', gmdate( 'Y-m-d H:i:s', time() ) );
425 - }
562 + // public static function get_user_class( $the_id = 0 ) {
563 + // $deleted = in_array( $the_id, self::$_deleted_users );
564 + // $exists_user = ! $deleted ? get_userdata( $the_id ) : false;
565 + // if ( $exists_user ) {
566 + // $class = 'LP_User';
567 + // } else {
568 + // if ( ! $deleted ) {
569 + // self::$_deleted_users[] = $the_id;
570 + // /**
571 + // * Prevent loading user does not exists in database
572 + // */
573 + // $user = new LP_User_Guest( $the_id );
574 + // wp_cache_add( $the_id, $user, 'users' );
575 + // wp_cache_add( '', $the_id, 'userlogins' );
576 + // wp_cache_add( '', $the_id, 'useremail' );
577 + // wp_cache_add( '', $the_id, 'userslugs' );
578 + // }
579 + // $is_logged_in = function_exists( 'is_user_logged_in' ) && is_user_logged_in();
580 + // $class = $is_logged_in ? 'LP_User' : 'LP_User_Guest';
581 + // }
582 + //
583 + // return apply_filters( 'learn_press_user_class', $class );
584 + // }
426 585 }
427 586
428 587 LP_User_Factory::init();