本文整理汇总了PHP中WooThemes_Sensei_Utils::sensei_grade_question_auto方法的典型用法代码示例。如果您正苦于以下问题:PHP WooThemes_Sensei_Utils::sensei_grade_question_auto方法的具体用法?PHP WooThemes_Sensei_Utils::sensei_grade_question_auto怎么用?PHP WooThemes_Sensei_Utils::sensei_grade_question_auto使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WooThemes_Sensei_Utils
的用法示例。
在下文中一共展示了WooThemes_Sensei_Utils::sensei_grade_question_auto方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: update_question_answer_data
/**
* Update question answers to use new data structure
*
* @since 1.3.0
* @access public
* @return void
*/
public function update_question_answer_data($n = 50, $offset = 0)
{
// Get Total Number of Updates to run
$quiz_count_object = wp_count_posts('quiz');
$quiz_count_published = $quiz_count_object->publish;
// Calculate if this is the last page
if (0 == $offset) {
$current_page = 1;
} else {
$current_page = intval($offset / $n);
}
// End If Statement
$total_pages = intval($quiz_count_published / $n);
$args = array('post_type' => 'quiz', 'numberposts' => $n, 'offset' => $offset, 'post_status' => 'publish', 'suppress_filters' => 0);
$quizzes = get_posts($args);
$old_answers = array();
$right_answers = array();
$old_user_answers = array();
if (is_array($quizzes)) {
foreach ($quizzes as $quiz) {
$quiz_id = $quiz->ID;
// Get current user answers
$comments = WooThemes_Sensei_Utils::sensei_check_for_activity(array('post_id' => $quiz_id, 'type' => 'sensei_quiz_answers'), true);
// Need to always return an array, even with only 1 item
if (!is_array($comments)) {
$comments = array($comments);
}
foreach ($comments as $comment) {
$user_id = $comment->user_id;
$content = maybe_unserialize(base64_decode($comment->comment_content));
$old_user_answers[$quiz_id][$user_id] = $content;
}
// Get correct answers
$questions = WooThemes_Sensei_Utils::sensei_get_quiz_questions($quiz_id);
if (is_array($questions)) {
foreach ($questions as $question) {
$right_answer = get_post_meta($question->ID, '_question_right_answer', true);
$right_answers[$quiz_id][$question->ID] = $right_answer;
}
}
}
}
if (is_array($right_answers)) {
foreach ($right_answers as $quiz_id => $question) {
$count = 0;
if (is_array($question)) {
foreach ($question as $question_id => $answer) {
++$count;
if (isset($old_user_answers[$quiz_id])) {
$answers_linkup[$quiz_id][$count] = $question_id;
}
}
}
}
}
if (is_array($old_user_answers)) {
foreach ($old_user_answers as $quiz_id => $user_answers) {
foreach ($user_answers as $user_id => $answers) {
foreach ($answers as $answer_id => $user_answer) {
$question_id = $answers_linkup[$quiz_id][$answer_id];
$new_user_answers[$question_id] = $user_answer;
WooThemes_Sensei_Utils::sensei_grade_question_auto($question_id, '', $user_answer, $user_id);
}
$lesson_id = get_post_meta($quiz_id, '_quiz_lesson', true);
WooThemes_Sensei_Utils::sensei_start_lesson($lesson_id, $user_id);
WooThemes_Sensei_Utils::sensei_save_quiz_answers($new_user_answers, $user_id);
}
}
}
if ($current_page == $total_pages) {
return true;
} else {
return false;
}
// End If Statement
}
示例2: grade_quiz_auto
/**
* Grade quiz automatically
*
* This function grades each question automatically if there all questions are auto gradable. If not
* the quiz will not be auto gradable.
*
* @since 1.7.4
*
* @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 grade_quiz_auto($quiz_id = 0, $submitted = array(), $total_questions = 0, $quiz_grade_type = 'auto')
{
if (!(intval($quiz_id) > 0) || !$submitted || $quiz_grade_type != 'auto') {
return false;
// exit early
}
global $woothemes_sensei;
$user_id = get_current_user_id();
$lesson_id = $woothemes_sensei->quiz->get_lesson_id($quiz_id);
$quiz_autogradable = true;
/**
* Filter the types of question types that can be automatically graded.
*
* This filter fires inside the auto grade quiz function and provides you with the default list.
*
* @param array {
* 'multiple-choice',
* 'boolean',
* 'gap-fill'.
* }
*/
$autogradable_question_types = apply_filters('sensei_autogradable_question_types', array('multiple-choice', 'boolean', 'gap-fill'));
$grade_total = 0;
$all_question_grades = array();
foreach ($submitted as $question_id => $answer) {
// check if the question is autogradable, either by type, or because the grade is 0
$question_type = $woothemes_sensei->question->get_question_type($question_id);
$achievable_grade = $woothemes_sensei->question->get_question_grade($question_id);
// Question has a zero grade, so skip grading
if (0 == $achievable_grade) {
$all_question_grades[$question_id] = $achievable_grade;
} elseif (in_array($question_type, $autogradable_question_types)) {
// Get user question grade
$question_grade = WooThemes_Sensei_Utils::sensei_grade_question_auto($question_id, $question_type, $answer, $user_id);
$all_question_grades[$question_id] = $question_grade;
$grade_total += $question_grade;
} else {
// There is a question that cannot be autograded
$quiz_autogradable = false;
}
// end if in_array( $question_type...
}
// end for each question
// Only if the whole quiz was autogradable do we set a grade
if ($quiz_autogradable) {
$quiz_total = WooThemes_Sensei_Utils::sensei_get_quiz_total($quiz_id);
// Check for zero total from grades
if (0 < $quiz_total) {
$grade = abs(round(doubleval($grade_total) * 100 / $quiz_total, 2));
} else {
$grade = 0;
}
WooThemes_Sensei_Utils::sensei_grade_quiz($quiz_id, $grade, $user_id, $quiz_grade_type);
} else {
$grade = new WP_Error('autograde', __('This quiz is not able to be automatically graded.', 'woothemes-sensei'));
}
// store the auto gradable grades. If the quiz is not auto gradable the grades can be use as the default
// when doing manual grading.
$woothemes_sensei->quiz->set_user_grades($all_question_grades, $lesson_id, $user_id);
return $grade;
}
示例3: sensei_grade_quiz_auto
/**
* Grade quiz automatically
* @param integer $quiz_id ID of quiz
* @param integer $lesson_id ID of lesson
* @param boolean $submitted Submitted answers
* @param integer $total_questions Total questions in quiz (not used)
* @return boolean Whether quiz was successfully graded or not
*/
public static function sensei_grade_quiz_auto($quiz_id = 0, $submitted = false, $total_questions = 0, $quiz_grade_type = 'auto')
{
if (intval($user_id) == 0) {
$user_id = get_current_user_id();
}
$grade = 0;
$correct_answers = 0;
$quiz_graded = false;
$quiz_autogradable = true;
if (intval($quiz_id) > 0 && $submitted) {
if ($quiz_grade_type == 'auto') {
// Can only autograde these question types
$autogradable_question_types = apply_filters('sensei_autogradable_question_types', array('multiple-choice', 'boolean', 'gap-fill'));
$grade_total = 0;
foreach ($submitted as $question_id => $answer) {
// check if the question is autogradable
$question_type = get_the_terms($question_id, 'question-type');
// Set default question type if one does not exist - prevents errors when grading
if (!$question_type || is_wp_error($question_type) || !is_array($question_type)) {
$question_type = 'multiple-choice';
} else {
$question_type = array_shift($question_type)->slug;
}
if (in_array($question_type, $autogradable_question_types)) {
// Get user question grade
$question_grade = WooThemes_Sensei_Utils::sensei_grade_question_auto($question_id, $question_type, $answer, $user_id);
$grade_total += $question_grade;
} else {
// There is a question that cannot be autograded
$quiz_autogradable = false;
}
}
// Only if the whole quiz was autogradable do we set a grade
if ($quiz_autogradable) {
$quiz_total = WooThemes_Sensei_Utils::sensei_get_quiz_total($quiz_id);
$grade = abs(round(doubleval($grade_total) * 100 / $quiz_total, 2));
$activity_logged = WooThemes_Sensei_Utils::sensei_grade_quiz($quiz_id, $grade, $user_id, $quiz_grade_type);
} else {
$grade = new WP_Error('autograde', __('This quiz is not able to be automatically graded.', 'woothemes-sensei'));
}
}
}
return $grade;
}