Как Moodle сохранить ответ пользователя викторины в базе данных? - PullRequest
3 голосов
/ 16 марта 2010

как moodle1.9 сохранить результаты теста пользователя в базе данных и какие таблицы обновляются при попытке пользователя выполнить какой-либо тест?

Пожалуйста, ведите меня.

Если возможно, сообщите мне, какие функции используются для вставки данных о попытках пользователя в базу данных moodle1.9?

1 Ответ

4 голосов
/ 16 марта 2010

Из файла attempt.php (Moodle 1.9.7):

$attempt = quiz_create_attempt($quiz, $attemptnumber);

Тогда:

if (!$attempt->id = insert_record('quiz_attempts', $attempt)) {
            error('Could not create new attempt');
        }

С locallib.php:

/**
 * Creates an object to represent a new attempt at a quiz
 *
 * Creates an attempt object to represent an attempt at the quiz by the current
 * user starting at the current time. The ->id field is not set. The object is
 * NOT written to the database.
 * @return object                The newly created attempt object.
 * @param object $quiz           The quiz to create an attempt for.
 * @param integer $attemptnumber The sequence number for the attempt.
 */
function quiz_create_attempt($quiz, $attemptnumber) {
    global $USER, $CFG;

    if (!$attemptnumber > 1 or !$quiz->attemptonlast or !$attempt = get_record('quiz_attempts', 'quiz', $quiz->id, 'userid', $USER->id, 'attempt', $attemptnumber-1)) {
        // we are not building on last attempt so create a new attempt
        $attempt->quiz = $quiz->id;
        $attempt->userid = $USER->id;
        $attempt->preview = 0;
        if ($quiz->shufflequestions) {
            $attempt->layout = quiz_repaginate($quiz->questions, $quiz->questionsperpage, true);
        } else {
            $attempt->layout = $quiz->questions;
        }
    }

    $timenow = time();
    $attempt->attempt = $attemptnumber;
    $attempt->sumgrades = 0.0;
    $attempt->timestart = $timenow;
    $attempt->timefinish = 0;
    $attempt->timemodified = $timenow;
    $attempt->uniqueid = question_new_attempt_uniqueid();

    return $attempt;
}

Пожалуйста, обратитесь к исходному коду для больших деталей.

...