/** * Finish a quiz for the user and save all data needed * * @param $quiz_id */ function finish_quiz($quiz_id) { $quiz = LP_Quiz::get_quiz($quiz_id); if (!$quiz) { return; } $time = current_time('timestamp'); $progress = $this->get_quiz_progress($quiz->id); if ($time - $progress->start > $quiz->duration) { $time = $progress->start - $quiz->duration; } learn_press_update_user_quiz_meta($progress->history_id, 'end', $time); learn_press_update_user_quiz_meta($progress->history_id, 'status', 'completed'); /*$course_id = learn_press_get_course_by_quiz( $quiz_id ); if ( !learn_press_user_has_finished_course( $course_id ) ) { if ( learn_press_user_has_completed_all_parts( $course_id, $user_id ) ) { learn_press_finish_course( $course_id, $user_id ); } }*/ do_action('learn_press_user_finish_quiz', $quiz_id, $this); }
function save_user_answer($answer, $quiz_id, $user_id = null) { if ($user_id) { $user = LP_User::get_user($user_id); } else { $user = learn_press_get_current_user(); } if ($progress = $user->get_quiz_progress($quiz_id)) { if (!isset($progress->question_answers)) { $question_answers = array(); } else { $question_answers = $progress->question_answers; } $question_answers[$this->id] = $answer; $question_answers = apply_filters('learn_press_update_user_question_answers', $question_answers, $progress->history_id, $user_id, $this, $quiz_id); learn_press_update_user_quiz_meta($progress->history_id, 'question_answers', $question_answers); } //do_action( 'learn_press_update_user_answer', $progress, $user_id, $this, $quiz_id ); }
/** * Load quiz question */ public static function load_quiz_question() { $quiz_id = !empty($_REQUEST['quiz_id']) ? absint($_REQUEST['quiz_id']) : 0; $question_id = !empty($_REQUEST['question_id']) ? absint($_REQUEST['question_id']) : 0; $user_id = !empty($_REQUEST['user_id']) ? absint($_REQUEST['user_id']) : 0; global $quiz; $quiz = LP_Quiz::get_quiz($quiz_id); // save question if find it self::save_question_if_needed(); //self::update_time_remaining(); $user = learn_press_get_current_user(); if ($user->id != $user_id) { learn_press_send_json(array('result' => 'error', 'message' => __('Load question error. Try again!', 'learn_press'))); } if (!$quiz_id || !$question_id) { learn_press_send_json(array('result' => 'error', 'message' => __('Something is wrong. Try again!', 'learn_press'))); } if ($question = LP_Question_Factory::get_question($question_id)) { ob_start(); if ($progress = $user->get_quiz_progress($quiz->id)) { learn_press_update_user_quiz_meta($progress->history_id, 'current_question', $question_id); } $question_answers = $user->get_question_answers($quiz->id, $question_id); $question->render(array('answered' => $question_answers)); $content = ob_get_clean(); learn_press_send_json(array('result' => 'success', 'content' => $content, 'permalink' => learn_press_get_user_question_url($quiz_id, $question_id))); } }