private function _upgrade_order_courses()
 {
     global $wpdb;
     $user_meta_keys = array('_lpr_user_course', '_lpr_course_time', '_lpr_quiz_start_time', '_lpr_quiz_questions', '_lpr_quiz_current_question', '_lpr_quiz_question_answer', '_lpr_quiz_completed');
     $fields = array();
     $join = array();
     $having = array();
     $index = 2;
     foreach ($user_meta_keys as $key) {
         $new_key = preg_replace('!_lpr_!', '', $key);
         $fields[] = sprintf("T{$index}.meta_value AS %s", $new_key);
         $join[] = $wpdb->prepare("LEFT JOIN {$wpdb->usermeta} T{$index} ON T{$index}.user_id = T1.user_id AND T{$index}.meta_key = %s", $key);
         $having[] = $new_key . ' IS NOT NULL';
         $index++;
     }
     $query = sprintf("\n\t\t\tSELECT distinct T1.user_id,\n\t\t\t\t%s\n\t\t\tFROM {$wpdb->usermeta} AS T1\n\t\t\t\t%s\n\t\t\tHAVING (\n\t\t\t\t%s\n\t\t\t)", join(",\n", $fields), join("\n", $join), join("\nOR ", $having));
     $user_meta_rows = $wpdb->get_results($query);
     if (!$user_meta_rows) {
         return;
     }
     foreach ($user_meta_rows as $user_meta) {
         $user_meta = $this->_parse_user_meta($user_meta);
         if (!empty($user_meta->user_course) && !empty($user_meta->course_time)) {
             foreach ($user_meta->user_course as $course_id) {
                 if (!empty(self::$courses_map[$course_id]) && !empty($user_meta->course_time[$course_id])) {
                     $new_course_id = self::$courses_map[$course_id]['id'];
                     $course_time = $user_meta->course_time[$course_id];
                     $course_end_time = !empty($course_time['end']) ? $course_time['end'] : '';
                     if (!empty(self::$course_order_map[$course_id])) {
                         $course_order = reset(self::$course_order_map[$course_id]);
                     } else {
                         $course_order = 0;
                     }
                     $wpdb->insert($wpdb->prefix . 'learnpress_user_courses', array('user_id' => $user_meta->user_id, 'course_id' => $new_course_id, 'start_time' => date('Y-m-d H:i:s', $course_time['start']), 'end_time' => $course_end_time ? date('Y-m-d H:i:s', $course_end_time) : '', 'status' => $course_end_time ? 'completed' : 'started', 'order_id' => !empty(self::$orders_map[$course_order]) ? self::$orders_map[$course_order] : ''));
                 }
             }
         }
         if (!empty($user_meta->quiz_start_time)) {
             foreach ($user_meta->quiz_start_time as $old_quiz_id => $time) {
                 if (empty(self::$quizzes_map[$old_quiz_id])) {
                     continue;
                 }
                 $wpdb->insert($wpdb->prefix . "learnpress_user_quizzes", array('user_id' => $user_meta->user_id, 'quiz_id' => self::$quizzes_map[$old_quiz_id]));
                 $user_quiz_id = $wpdb->insert_id;
                 if (!$user_quiz_id) {
                     continue;
                 }
                 learn_press_add_user_quiz_meta($user_quiz_id, 'start', $time);
                 if (!empty($user_meta->quiz_completed)) {
                     if (!empty($user_meta->quiz_completed[$old_quiz_id])) {
                         learn_press_add_user_quiz_meta($user_quiz_id, 'end', $user_meta->quiz_completed[$old_quiz_id]);
                         learn_press_add_user_quiz_meta($user_quiz_id, 'status', 'completed');
                     }
                 }
                 if (!empty($user_meta->quiz_current_question)) {
                     if (!empty($user_meta->quiz_current_question[$old_quiz_id])) {
                         learn_press_add_user_quiz_meta($user_quiz_id, 'current_question', self::$questions_map[$user_meta->quiz_current_question[$old_quiz_id]]);
                     }
                 }
                 if (!empty($user_meta->quiz_questions)) {
                     if (!empty($user_meta->quiz_questions[$old_quiz_id])) {
                         $quiz_questions = array();
                         foreach ($user_meta->quiz_questions[$old_quiz_id] as $old_question_id) {
                             if (!empty(self::$questions_map[$old_question_id])) {
                                 $quiz_questions[] = self::$questions_map[$old_question_id];
                             }
                         }
                         learn_press_add_user_quiz_meta($user_quiz_id, 'questions', $quiz_questions);
                     }
                 }
                 if (!empty($user_meta->quiz_question_answer)) {
                     if (!empty($user_meta->quiz_question_answer[$old_quiz_id])) {
                         $question_answers = array();
                         foreach ($user_meta->quiz_question_answer[$old_quiz_id] as $old_question_id => $answer) {
                             if (!empty(self::$questions_map[$old_question_id])) {
                                 $question_answers[self::$questions_map[$old_question_id]] = $answer;
                             }
                         }
                         learn_press_add_user_quiz_meta($user_quiz_id, 'question_answers', $question_answers);
                     }
                 }
             }
         }
     }
 }
 private function _create_quiz_history($quiz_id)
 {
     if (empty($this->_quiz_history_id)) {
         global $wpdb;
         $timestamp = current_time('timestamp');
         $wpdb->insert($wpdb->learnpress_user_quizzes, array('user_id' => $this->id, 'quiz_id' => $quiz_id), array('%d', '%d'));
         $user_quiz_id = $wpdb->insert_id;
         $quiz = LP_Quiz::get_quiz($quiz_id);
         $quiz_questions = $quiz->get_questions();
         $user_quiz_data = apply_filters('learn_press_user_quiz_data', array('history_id' => $user_quiz_id, 'start' => $timestamp, 'end' => '', 'status' => 'started', 'results' => '', 'current_question' => '', 'question_answers' => '', 'questions' => $quiz_questions ? array_keys($quiz_questions) : ''));
         foreach ($user_quiz_data as $key => $value) {
             if ($key == 'history_id') {
                 continue;
             }
             learn_press_add_user_quiz_meta($user_quiz_id, $key, $value);
         }
         do_action('learn_press_add_user_quiz_meta', $user_quiz_id, $this);
     } else {
         $user_quiz_data = $this->get_quiz_history($quiz_id, $this->_quiz_history_id);
     }
     return $user_quiz_data;
 }