| @@ -35,8 +35,9 @@ | ||
| 35 | 35 | * @see clone_tables |
| 36 | 36 | * @see modify_tb_lp_user_items |
| 37 | 37 | * @see remove_course_status_cancelled |
| 38 | 38 | * @see convert_result_graduation_item |
| 39 | + * @see convert_result_items | |
| 39 | 40 | * @see convert_result_questions |
| 40 | 41 | * @see convert_retake_quiz |
| 41 | 42 | * @see create_col_extra_value_on_tb_lp_user_itemmeta |
| 42 | 43 | * @see convert_meta_value_longtext |
| @@ -87,8 +88,13 @@ | ||
| 87 | 88 | 'learnpress_user_item_results' |
| 88 | 89 | ), |
| 89 | 90 | 'convert_result_graduation_item' => new LP_Step( |
| 90 | 91 | 'convert_result_graduation_item', |
| 92 | + 'Convert Data Graduation items of courses', | |
| 93 | + '' | |
| 94 | + ), | |
| 95 | + 'convert_result_items' => new LP_Step( | |
| 96 | + 'convert_result_items', | |
| 91 | 97 | 'Convert Data Result courses, items\' courses', |
| 92 | 98 | '' |
| 93 | 99 | ), |
| 94 | 100 | 'convert_result_questions' => new LP_Step( |
| @@ -488,14 +494,15 @@ | ||
| 488 | 494 | * |
| 489 | 495 | * @return LP_Step |
| 490 | 496 | */ |
| 491 | 497 | protected function convert_result_graduation_item( array $data ): LP_Step { |
| 492 | - $response = new LP_Step( __FUNCTION__, '' ); | |
| 493 | - $lp_db = LP_Database::getInstance(); | |
| 494 | - $page = 0; | |
| 495 | - $offset = 0; | |
| 496 | - $limit = 100; | |
| 497 | - $total_row = 0; | |
| 498 | + $response = new LP_Step( __FUNCTION__, '' ); | |
| 499 | + $lp_db = LP_Database::getInstance(); | |
| 500 | + $page = 0; | |
| 501 | + $offset = 0; | |
| 502 | + $limit = 100; | |
| 503 | + $total_row = 0; | |
| 504 | + $suffix_table_bk = '_bk'; | |
| 498 | 505 | |
| 499 | 506 | try { |
| 500 | 507 | if ( empty( $data ) ) { |
| 501 | 508 | // Check total rows. |
| @@ -500,9 +507,9 @@ | ||
| 500 | 507 | if ( empty( $data ) ) { |
| 501 | 508 | // Check total rows. |
| 502 | 509 | $query = $lp_db->wpdb->prepare( |
| 503 | 510 | " |
| 504 | - SELECT COUNT(learnpress_user_item_id) FROM $lp_db->tb_lp_user_itemmeta | |
| 511 | + SELECT COUNT(learnpress_user_item_id) FROM $lp_db->tb_lp_user_itemmeta{$suffix_table_bk} | |
| 505 | 512 | WHERE meta_key = %s |
| 506 | 513 | ", |
| 507 | 514 | 'grade' |
| 508 | 515 | ); |
| @@ -517,9 +524,9 @@ | ||
| 517 | 524 | // Select . |
| 518 | 525 | $query = $lp_db->wpdb->prepare( |
| 519 | 526 | " |
| 520 | 527 | SELECT learnpress_user_item_id AS user_item_id, meta_value AS grade |
| 521 | - FROM $lp_db->tb_lp_user_itemmeta | |
| 528 | + FROM $lp_db->tb_lp_user_itemmeta{$suffix_table_bk} | |
| 522 | 529 | WHERE meta_key = %s |
| 523 | 530 | LIMIT %d, %d |
| 524 | 531 | ", |
| 525 | 532 | 'grade', |
| @@ -527,14 +534,8 @@ | ||
| 527 | 534 | $limit |
| 528 | 535 | ); |
| 529 | 536 | $user_item_grades = $lp_db->wpdb->get_results( $query ); |
| 530 | 537 | |
| 531 | - $percent = LP_Helper::progress_percent( $offset, $limit, $total_row ); | |
| 532 | - | |
| 533 | - if ( empty( $user_item_grades ) || 100 === $percent ) { | |
| 534 | - return $this->finish_step( $response, __FUNCTION__ . ' finished' ); | |
| 535 | - } | |
| 536 | - | |
| 537 | 538 | /** |
| 538 | 539 | * Copy value of meta_key "grade" table learnpress_user_itemmeta LP3 |
| 539 | 540 | * to column "graduation" LP4 table learnpress_user_items |
| 540 | 541 | */ |
| @@ -543,9 +544,9 @@ | ||
| 543 | 544 | " |
| 544 | 545 | UPDATE $lp_db->tb_lp_user_items |
| 545 | 546 | SET graduation = %s |
| 546 | 547 | WHERE user_item_id = %d; |
| 547 | - ", | |
| 548 | + ", | |
| 548 | 549 | $user_item_grade->grade, |
| 549 | 550 | $user_item_grade->user_item_id |
| 550 | 551 | ); |
| 551 | 552 | |
| @@ -552,8 +553,31 @@ | ||
| 552 | 553 | $lp_db->wpdb->query( $query ); |
| 553 | 554 | $lp_db->check_execute_has_error(); |
| 554 | 555 | } |
| 555 | 556 | |
| 557 | + $percent = LP_Helper::progress_percent( $offset, $limit, $total_row ); | |
| 558 | + if ( empty( $user_item_grades ) || 100 == $percent ) { | |
| 559 | + // Update graduation for case grade wrong (null or lesson completed but still 'in-progress'). | |
| 560 | + $lp_db->wpdb->query( | |
| 561 | + " | |
| 562 | + UPDATE $lp_db->tb_lp_user_items | |
| 563 | + SET graduation = 'passed' | |
| 564 | + WHERE status = 'completed' | |
| 565 | + AND item_type = 'lp_lesson' | |
| 566 | + " | |
| 567 | + ); | |
| 568 | + // Update graduation for case status empty and grade null | |
| 569 | + $lp_db->wpdb->query( | |
| 570 | + " | |
| 571 | + UPDATE $lp_db->tb_lp_user_items | |
| 572 | + SET graduation = 'in-progress' | |
| 573 | + WHERE (status = '' OR status = 'enrolled') | |
| 574 | + " | |
| 575 | + ); | |
| 576 | + | |
| 577 | + return $this->finish_step( $response, __FUNCTION__ . ' finished' ); | |
| 578 | + } | |
| 579 | + | |
| 556 | 580 | $response->status = 'success'; |
| 557 | 581 | $response->message = 'Insert success'; |
| 558 | 582 | $response->percent = $percent; |
| 559 | 583 | $response->data->p = ++ $page; |
| @@ -565,8 +589,100 @@ | ||
| 565 | 589 | return $response; |
| 566 | 590 | } |
| 567 | 591 | |
| 568 | 592 | /** |
| 593 | + * Convert result items (lesson). | |
| 594 | + * | |
| 595 | + * @param array $data | |
| 596 | + * | |
| 597 | + * @return LP_Step | |
| 598 | + */ | |
| 599 | + protected function convert_result_items( array $data ): LP_Step { | |
| 600 | + $response = new LP_Step( __FUNCTION__, '' ); | |
| 601 | + $lp_db = LP_Database::getInstance(); | |
| 602 | + $page = 0; | |
| 603 | + $offset = 0; | |
| 604 | + $limit = 100; | |
| 605 | + $total_row = 0; | |
| 606 | + | |
| 607 | + try { | |
| 608 | + if ( empty( $data ) ) { | |
| 609 | + // Check total rows. | |
| 610 | + $query = " | |
| 611 | + SELECT COUNT(learnpress_user_item_id) FROM $lp_db->tb_lp_user_itemmeta | |
| 612 | + WHERE meta_key LIKE '%course_results_evaluate%' | |
| 613 | + "; | |
| 614 | + | |
| 615 | + $total_row = $response->data->total_rows = (int) $lp_db->wpdb->get_var( $query ); | |
| 616 | + } else { | |
| 617 | + $page = $data['p']; | |
| 618 | + $offset = $limit * $page; | |
| 619 | + $total_row = $data['total_rows']; | |
| 620 | + } | |
| 621 | + | |
| 622 | + // Convert rows. | |
| 623 | + $query = $lp_db->wpdb->prepare( | |
| 624 | + " | |
| 625 | + SELECT learnpress_user_item_id AS user_item_id, meta_value AS result | |
| 626 | + FROM $lp_db->tb_lp_user_itemmeta | |
| 627 | + WHERE meta_key LIKE '%course_results_evaluate%' | |
| 628 | + LIMIT %d offset %d | |
| 629 | + ", | |
| 630 | + $limit, | |
| 631 | + $offset | |
| 632 | + ); | |
| 633 | + | |
| 634 | + $result_lessons = $lp_db->wpdb->get_results( $query ); | |
| 635 | + if ( 0 === count( $result_lessons ) ) { | |
| 636 | + return $this->finish_step( $response, 'Convert result question success' ); | |
| 637 | + } | |
| 638 | + | |
| 639 | + foreach ( $result_lessons as $result_lesson_obj ) { | |
| 640 | + $result_lesson = maybe_unserialize( ( $result_lesson_obj->result ) ); | |
| 641 | + if ( ! $result_lesson ) { | |
| 642 | + continue; | |
| 643 | + } | |
| 644 | + | |
| 645 | + $result_json = json_encode( $result_lesson ); | |
| 646 | + | |
| 647 | + // Check exists user_item_id value on table learnpress_user_item_results. | |
| 648 | + $check = $lp_db->wpdb->get_var( | |
| 649 | + $lp_db->wpdb->prepare( | |
| 650 | + " | |
| 651 | + SELECT user_item_id FROM $lp_db->tb_lp_user_item_results | |
| 652 | + WHERE user_item_id = %d | |
| 653 | + ", | |
| 654 | + $result_lesson_obj->user_item_id | |
| 655 | + ) | |
| 656 | + ); | |
| 657 | + | |
| 658 | + if ( empty( $check ) ) { | |
| 659 | + $lp_db->wpdb->insert( | |
| 660 | + $lp_db->tb_lp_user_item_results, | |
| 661 | + array( | |
| 662 | + 'result' => $result_json, | |
| 663 | + 'user_item_id' => $result_lesson_obj->user_item_id, | |
| 664 | + ) | |
| 665 | + ); | |
| 666 | + $lp_db->check_execute_has_error(); | |
| 667 | + } | |
| 668 | + } | |
| 669 | + | |
| 670 | + $percent = LP_Helper::progress_percent( $offset, $limit, $total_row ); | |
| 671 | + | |
| 672 | + $response->status = 'success'; | |
| 673 | + $response->message = 'Insert lesson result success'; | |
| 674 | + $response->percent = $percent; | |
| 675 | + $response->data->p = ++ $page; | |
| 676 | + $response->data->total_rows = $total_row; | |
| 677 | + } catch ( Throwable $e ) { | |
| 678 | + $response->message = $this->error_step( $response->name, $e->getMessage() ); | |
| 679 | + } | |
| 680 | + | |
| 681 | + return $response; | |
| 682 | + } | |
| 683 | + | |
| 684 | + /** | |
| 569 | 685 | * Convert value of meta_key "_question_answers" table learnpress_user_itemmeta LP3 to column result LP4 table learnpress_user_item_results |
| 570 | 686 | * |
| 571 | 687 | * @param array $data . |
| 572 | 688 | * |
| @@ -1137,62 +1253,20 @@ | ||
| 1137 | 1253 | protected function convert_question_type_fill_in_blank( array $data = array() ): LP_Step { |
| 1138 | 1254 | $response = new LP_Step( __FUNCTION__, '' ); |
| 1139 | 1255 | $lp_db = LP_Database::getInstance(); |
| 1140 | 1256 | $wpdb = $lp_db->wpdb; |
| 1141 | - $page = 0; | |
| 1142 | - $offset = 0; | |
| 1143 | - $limit = 100; | |
| 1144 | - $total_row = 0; | |
| 1145 | 1257 | |
| 1146 | 1258 | try { |
| 1147 | - if ( empty( $data ) ) { | |
| 1148 | - // Check total rows. | |
| 1149 | - $query = $lp_db->wpdb->prepare( | |
| 1150 | - " | |
| 1151 | - SELECT COUNT(meta_id) FROM $lp_db->tb_postmeta | |
| 1152 | - WHERE meta_key = %s | |
| 1153 | - AND meta_value = %s | |
| 1154 | - ", | |
| 1155 | - 'lp_type', | |
| 1156 | - 'fill_in_blank' | |
| 1157 | - ); | |
| 1158 | - | |
| 1159 | - $total_row = $response->data->total_rows = (int) $lp_db->wpdb->get_var( $query ); | |
| 1160 | - } else { | |
| 1161 | - $page = $data['p']; | |
| 1162 | - $offset = $limit * $page; | |
| 1163 | - $total_row = $data['total_rows']; | |
| 1164 | - } | |
| 1165 | - | |
| 1166 | - $query_get_question_ids = $wpdb->prepare( | |
| 1167 | - " | |
| 1168 | - SELECT meta_id | |
| 1169 | - FROM {$lp_db->tb_postmeta} | |
| 1170 | - WHERE meta_key = %s | |
| 1171 | - AND meta_value = %s | |
| 1172 | - LIMIT %d, %d | |
| 1173 | - ", | |
| 1174 | - '_lp_type', | |
| 1175 | - 'fill_in_blank', | |
| 1176 | - $offset, | |
| 1177 | - $limit | |
| 1178 | - ); | |
| 1179 | - | |
| 1180 | - $question_ids = $lp_db->wpdb->get_col( $query_get_question_ids ); | |
| 1181 | - | |
| 1182 | - if ( empty( $question_ids ) ) { | |
| 1183 | - return $this->finish_step( $response, __FUNCTION__ . ' finished' ); | |
| 1184 | - } | |
| 1185 | - | |
| 1186 | - $question_ids_str = implode( ',', $question_ids ); | |
| 1187 | - | |
| 1188 | 1259 | $query = $wpdb->prepare( |
| 1189 | 1260 | " |
| 1190 | 1261 | UPDATE {$lp_db->tb_postmeta} |
| 1191 | 1262 | SET meta_value = %s |
| 1192 | - WHERE meta_id IN ($question_ids_str) | |
| 1263 | + WHERE meta_key = %s | |
| 1264 | + AND meta_value = %s | |
| 1193 | 1265 | ", |
| 1194 | - 'fill_in_blanks' | |
| 1266 | + 'fill_in_blanks', | |
| 1267 | + '_lp_type', | |
| 1268 | + 'fill_in_blank' | |
| 1195 | 1269 | ); |
| 1196 | 1270 | $lp_db->wpdb->query( $query ); |
| 1197 | 1271 | |
| 1198 | 1272 | if ( $lp_db->wpdb->last_error ) { |
| @@ -1198,15 +1272,9 @@ | ||
| 1198 | 1272 | if ( $lp_db->wpdb->last_error ) { |
| 1199 | 1273 | throw new Exception( $lp_db->wpdb->last_error ); |
| 1200 | 1274 | } |
| 1201 | 1275 | |
| 1202 | - $percent = LP_Helper::progress_percent( $offset, $limit, $total_row ); | |
| 1203 | - | |
| 1204 | - $response->status = 'success'; | |
| 1205 | - $response->message = 'Convert question FIB success'; | |
| 1206 | - $response->percent = $percent; | |
| 1207 | - $response->data->p = ++ $page; | |
| 1208 | - $response->data->total_rows = $total_row; | |
| 1276 | + return $this->finish_step( $response, __FUNCTION__ . ' finished' ); | |
| 1209 | 1277 | } catch ( Exception $e ) { |
| 1210 | 1278 | $response->message = $this->error_step( $response->name, $e->getMessage() ); |
| 1211 | 1279 | } |
| 1212 | 1280 | |