/** * Grade quiz automatically * * This function grades each question automatically if the are auto gradable. * It store all question grades. * * @deprecated since 1.7.4 use WooThemes_Sensei_Grading::grade_quiz_auto instead * * @param integer $quiz_id ID of quiz * @param array $submitted questions id ans answers { * @type int $question_id * @type mixed $answer * } * @param integer $total_questions Total questions in quiz (not used) * @param string $quiz_grade_type Optional defaults to auto * * @return int $quiz_grade total sum of all question grades */ public static function sensei_grade_quiz_auto($quiz_id = 0, $submitted = array(), $total_questions = 0, $quiz_grade_type = 'auto') { return Sensei_Grading::grade_quiz_auto($quiz_id, $submitted, $total_questions, $quiz_grade_type); }
/** * Submit the users quiz answers for grading * * This function accepts users answers and stores it but also initiates the grading * if a quiz can be graded automatically it will, if not the answers can be graded by the teacher. * * @since 1.7.4 * @access public * * @param array $quiz_answers * @param array $files from $_FILES * @param int $user_id * @param int $lesson_id * * @return bool $answers_submitted */ public static function submit_answers_for_grading($quiz_answers, $files = array(), $lesson_id, $user_id = 0) { $answers_submitted = false; // get the user_id if none was passed in use the current logged in user if (!intval($user_id) > 0) { $user_id = get_current_user_id(); } // make sure the parameters are valid before continuing if (empty($lesson_id) || empty($user_id) || 'lesson' != get_post_type($lesson_id) || !get_userdata($user_id) || !is_array($quiz_answers)) { return false; } // Default grade $grade = 0; // Get Quiz ID $quiz_id = Sensei()->lesson->lesson_quizzes($lesson_id); // Get quiz grade type $quiz_grade_type = get_post_meta($quiz_id, '_quiz_grade_type', true); // Get quiz pass setting $pass_required = get_post_meta($quiz_id, '_pass_required', true); // Get the minimum percentage need to pass this quiz $quiz_pass_percentage = abs(round(doubleval(get_post_meta($quiz_id, '_quiz_passmark', true)), 2)); // Handle Quiz Questions asked // This is to ensure we save the questions that we've asked this user and that this can't be change unless // the quiz is reset by admin or user( user: only if the setting is enabled ). // get the questions asked when when the quiz questions were generated for the user : Sensei_Lesson::lesson_quiz_questions $user_lesson_status = Sensei_Utils::user_lesson_status($lesson_id, $user_id); $questions_asked = get_comment_meta($user_lesson_status->comment_ID, 'questions_asked', true); if (empty($questions_asked)) { $questions_asked = array_keys($quiz_answers); $questions_asked_string = implode(',', $questions_asked); // Save questions that were asked in this quiz update_comment_meta($user_lesson_status->comment_ID, 'questions_asked', $questions_asked_string); } // Save Quiz Answers for grading, the save function also calls the sensei_start_lesson self::save_user_answers($quiz_answers, $files, $lesson_id, $user_id); // Grade quiz $grade = Sensei_Grading::grade_quiz_auto($quiz_id, $quiz_answers, 0, $quiz_grade_type); // Get Lesson Grading Setting $lesson_metadata = array(); $lesson_status = 'ungraded'; // Default when completing a quiz // At this point the answers have been submitted $answers_submitted = true; // if this condition is false the quiz should manually be graded by admin if ('auto' == $quiz_grade_type && !is_wp_error($grade)) { // Quiz has been automatically Graded if ('on' == $pass_required) { // Student has reached the pass mark and lesson is complete if ($quiz_pass_percentage <= $grade) { $lesson_status = 'passed'; } else { $lesson_status = 'failed'; } // End If Statement } else { // Student only has to partake the quiz $lesson_status = 'graded'; } $lesson_metadata['grade'] = $grade; // Technically already set as part of "WooThemes_Sensei_Utils::sensei_grade_quiz_auto()" above } // end if ! is_wp_error( $grade ... Sensei_Utils::update_lesson_status($user_id, $lesson_id, $lesson_status, $lesson_metadata); if ('passed' == $lesson_status || 'graded' == $lesson_status) { /** * Lesson end action hook * * This hook is fired after a lesson quiz has been graded and the lesson status is 'passed' OR 'graded' * * @param int $user_id * @param int $lesson_id */ do_action('sensei_user_lesson_end', $user_id, $lesson_id); } /** * User quiz has been submitted * * Fires the end of the submit_answers_for_grading function. It will fire irrespective of the submission * results. * * @param int $user_id * @param int $quiz_id * @param string $grade * @param string $quiz_pass_percentage * @param string $quiz_grade_type */ do_action('sensei_user_quiz_submitted', $user_id, $quiz_id, $grade, $quiz_pass_percentage, $quiz_grade_type); return $answers_submitted; }