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.1 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 All 141 releases
← All changes | inc/user-item/class-lp-user-item-course.php +64 -27 4.1.7 → 4.4.9 View file →
@@ -1,10 +1,14 @@
1 1 <?php
2 +
3 +use LearnPress\Filters\UserItemsFilter;
4 +use LearnPress\Models\UserItems\UserCourseModel;
5 +
2 6 /**
3 7 * Class LP_User_Item_Course
4 8 */
5 9
6 -class LP_User_Item_Course extends LP_User_Item implements ArrayAccess {
10 +class LP_User_Item_Course extends LP_User_Item {
7 11 public $_item_type = LP_COURSE_CPT;
8 12 public $_ref_type = LP_ORDER_CPT;
9 13
10 14 /**
@@ -153,10 +157,14 @@
153 157 public function get_course_id() {
154 158 return $this->get_data( 'item_id' );
155 159 }
156 160
161 + /**
162 + * @deprecated 4.1.7.3
163 + */
157 164 public function get_finishing_type() {
158 - $type = $this->get_meta( 'finishing_type' );
165 + _deprecated_function( __METHOD__, '4.1.7.3' );
166 + /*$type = $this->get_meta( 'finishing_type' );
159 167
160 168 if ( ! $type ) {
161 169 $type = $this->is_exceeded() <= 0 ? 'exceeded' : 'click';
162 170
@@ -164,9 +172,9 @@
164 172
165 173 $this->set_meta( 'finishing_type', $type );
166 174 }
167 175
168 - return $type;
176 + return $type;*/
169 177 }
170 178
171 179 public function offsetSet( $offset, $value ) {
172 180 // $this->set_data( $offset, $value );
@@ -190,9 +198,9 @@
190 198 }
191 199
192 200 /**
193 201 * @return LP_User_Item|bool
194 - * @depecated 4.1.6.9.2
202 + * @deprecated 4.1.6.9.2
195 203 */
196 204 /*public function get_viewing_item() {
197 205 $item = LP_Global::course_item();
198 206 if ( $item ) {
@@ -280,8 +288,31 @@
280 288 /**
281 289 * Calculate course result
282 290 */
283 291 public function calculate_course_results( bool $force_cache = false ) {
292 + $results = array(
293 + 'count_items' => 0,
294 + 'completed_items' => 0,
295 + 'items' => array(),
296 + 'evaluate_type' => '',
297 + 'pass' => 0,
298 + 'result' => 0,
299 + );
300 +
301 + try {
302 + $userCourseModel = UserCourseModel::find( $this->get_user_id(), $this->get_course_id(), true );
303 + if ( ! $userCourseModel instanceof UserCourseModel ) {
304 + return $results;
305 + }
306 +
307 + $results = $userCourseModel->calculate_course_results();
308 + } catch ( Throwable $e ) {
309 + LP_Debug::error_log( $e );
310 + }
311 +
312 + return $results;
313 +
314 + // Code old
284 315 $items = array();
285 316 $results = array(
286 317 'count_items' => 0,
287 318 'completed_items' => 0,
@@ -311,12 +342,19 @@
311 342 // Todo: tungnx - set cache
312 343 return LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );
313 344 }
314 345
346 + if ( $this->get_status() !== LP_COURSE_ENROLLED ) {
347 + return $results;
348 + }
349 +
315 350 $count_items = $course->count_items();
316 351 $count_items_completed = $this->count_items_completed();
317 352
318 - $evaluate_type = $course->get_data( 'course_result', 'evaluate_lesson' );
353 + $evaluate_type = get_post_meta( $course->get_id(), '_lp_course_result', true );
354 + if ( ! $evaluate_type ) {
355 + $evaluate_type = 'evaluate_lesson';
356 + }
319 357 switch ( $evaluate_type ) {
320 358 case 'evaluate_lesson':
321 359 $results_evaluate = $this->evaluate_course_by_lesson( $count_items_completed, $course->count_items( LP_LESSON_CPT ) );
322 360 break;
@@ -371,9 +409,9 @@
371 409 );
372 410
373 411 LP_Cache::cache_load_first( 'set', $key_first_cache, $results );
374 412 } catch ( Throwable $e ) {
375 -
413 + error_log( __METHOD__ . ': ' . $e->getMessage() );
376 414 }
377 415
378 416 return $results;
379 417 }
@@ -383,9 +421,9 @@
383 421 *
384 422 * @param string $context
385 423 *
386 424 * @return string
387 - * @depecated 4.1.6.9.3
425 + * @deprecated 4.1.6.9.3
388 426 */
389 427 public function get_grade( string $context = '' ): string {
390 428 $grade = $this->get_graduation() ?? '';
391 429
@@ -629,9 +667,9 @@
629 667 continue;
630 668 }
631 669
632 670 if ( $item->type == LP_QUIZ_CPT ) {
633 - $total_questions += count( $itemObj->get_questions() );
671 + $total_questions += count( $itemObj->get_question_ids() );
634 672 $total_mark_question += $itemObj->get_mark();
635 673 }
636 674 }
637 675 }
@@ -693,9 +731,9 @@
693 731 return $level;
694 732 }
695 733
696 734 /**
697 - * @depecated 4.1.6.9.2
735 + * @deprecated 4.1.6.9.2
698 736 */
699 737 /*protected function _is_passed( $result ) {
700 738 $is_passed = LP_COURSE_GRADUATION_FAILED;
701 739 $result = round( $result, 2 );
@@ -769,9 +807,9 @@
769 807 }
770 808
771 809 if ( $type === $item_type ) {
772 810 if ( $item->get_status() == 'completed' ) {
773 - $completed ++;
811 + ++$completed;
774 812 }
775 813 $completed = apply_filters(
776 814 'learn-press/course-item/completed',
777 815 $completed,
@@ -778,9 +816,9 @@
778 816 $item,
779 817 $item->get_status()
780 818 );
781 819 // if ( ! $item->is_preview() ) {
782 - $total ++;
820 + ++$total;
783 821 // }
784 822 }
785 823 }
786 824 }
@@ -805,17 +843,15 @@
805 843 $count_items_completed = new stdClass();
806 844
807 845 try {
808 846 $course = learn_press_get_course( $this->get_course_id() );
809 -
810 847 if ( ! $course ) {
811 - throw new Exception( __FUNCTION__ . ': Course is invalid!' );
848 + throw new Exception( 'Course is invalid!' );
812 849 }
813 850
814 851 $user_course = $this->get_last_user_course();
815 -
816 852 if ( ! $user_course ) {
817 - throw new Exception();
853 + throw new Exception( 'User course is invalid!' );
818 854 }
819 855
820 856 $filter_count = new LP_User_Items_Filter();
821 857 $filter_count->parent_id = $user_course->user_item_id;
@@ -824,9 +860,9 @@
824 860 $filter_count->status = 'completed';
825 861 $filter_count->graduation = LP_COURSE_GRADUATION_PASSED;
826 862 $count_items_completed = $lp_user_items_db->count_items_of_course_with_status( $filter_count );
827 863 } catch ( Throwable $e ) {
828 -
864 + error_log( __METHOD__ . ': ' . $e->getMessage() );
829 865 }
830 866
831 867 return $count_items_completed;
832 868 }
@@ -877,9 +913,8 @@
877 913 /**
878 914 * Check course is completed or not.
879 915 *
880 916 * @return bool
881 - * @throws Exception
882 917 * @editor tungnx
883 918 * @modify 4.1.3
884 919 */
885 920 public function is_finished(): bool {
@@ -896,9 +931,9 @@
896 931 }
897 932
898 933 /**
899 934 * @return bool
900 - * @depecated 4.1.6.9.2
935 + * @deprecated 4.1.6.9.2
901 936 */
902 937 /*public function can_graduated() {
903 938 return $this->get_results( 'result' ) >= $this->get_passing_condition();
904 939 }*/
@@ -907,8 +942,10 @@
907 942 // TODO: Implement __unset() method.
908 943 }
909 944
910 945 /**
946 + * Get item user attend on course by item_id.
947 + *
911 948 * @param int $item_id
912 949 *
913 950 * @return bool|LP_User_Item
914 951 * @editor tungnx
@@ -984,9 +1021,9 @@
984 1021 * @return bool|int
985 1022 */
986 1023 public function increase_retake_count() {
987 1024 $count = $this->get_retaken_count();
988 - $count ++;
1025 + ++$count;
989 1026
990 1027 return $this->update_meta( '_lp_retaken_count', $count );
991 1028 }
992 1029
@@ -993,10 +1030,12 @@
993 1030 /**
994 1031 * Update course item and it's child.
995 1032 *
996 1033 * @TODO: tungnx - review to modify
1034 + * @deprecated 4.1.7.3
997 1035 */
998 1036 public function save() {
1037 + _deprecated_function( __METHOD__, '4.1.7.3' );
999 1038 /**
1000 1039 * @var LP_User_Item $item
1001 1040 */
1002 1041 $this->update();
@@ -1005,18 +1044,16 @@
1005 1044 return false;
1006 1045 }
1007 1046
1008 1047 foreach ( $items as $item_id => $item ) {
1009 -
1010 1048 if ( ! $item->get_status() ) {
1011 1049 continue;
1012 1050 }
1013 1051
1014 1052 /**
1015 - * Auto fill the end-time if it isn't already set
1053 + * Autofill the end-time if it isn't already set
1016 1054 */
1017 1055 if ( in_array( $item->get_status(), array( 'completed', 'finished' ) ) ) {
1018 -
1019 1056 if ( ! $item->get_end_time() || $item->get_end_time()->is_null() ) {
1020 1057 $item->set_end_time( current_time( 'mysql', 1 ) );
1021 1058 }
1022 1059 }
@@ -1034,9 +1071,9 @@
1034 1071 * @param bool $with_total - Optional. Include total if TRUE
1035 1072 * @param int $section_id - Optional. Get in specific section
1036 1073 *
1037 1074 * @return array|bool|mixed
1038 - * @depecated 4.1.6.9
1075 + * @deprecated 4.1.6.9
1039 1076 */
1040 1077 public function get_passed_items( $type = '', $with_total = false, $section_id = 0 ) {
1041 1078 _deprecated_function( __FUNCTION__, '4.1.6.9' );
1042 1079 $this->read_items();
@@ -1080,9 +1117,9 @@
1080 1117 }
1081 1118
1082 1119 if ( $type === $item_type ) {
1083 1120 if ( $item->get_status( 'graduation' ) == 'passed' ) {
1084 - $passed ++;
1121 + ++$passed;
1085 1122 }
1086 1123 $passed = apply_filters(
1087 1124 'learn-press/course-item/passed',
1088 1125 $passed,
@@ -1089,9 +1126,9 @@
1089 1126 $item,
1090 1127 $item->get_status()
1091 1128 );
1092 1129 // if ( ! $item->is_preview() ) {
1093 - $total ++;
1130 + ++$total;
1094 1131 // }
1095 1132 }
1096 1133 }
1097 1134 }
@@ -1155,14 +1192,14 @@
1155 1192
1156 1193 /**
1157 1194 * Get courses only by course's user are learning
1158 1195 *
1159 - * @param LP_User_Items_Filter $filter
1196 + * @param LP_User_Items_Filter|UserItemsFilter $filter
1160 1197 * @param int $total_rows return total row query
1161 1198 *
1162 1199 * @return array|null|int|string
1163 1200 */
1164 - public static function get_user_courses( LP_User_Items_Filter $filter, int &$total_rows = 0 ) {
1201 + public static function get_user_courses( $filter, int &$total_rows = 0 ) {
1165 1202 try {
1166 1203 /*$key_cache = md5( json_encode( $filter ) );
1167 1204 $courses_cache = LP_Cache::instance()->get_cache( $key_cache );
1168 1205