/**
  * 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)));
     }
 }