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; }