как Moodle сохранить ответ на тест пользователя в базе данных?

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

Пожалуйста, направь меня.

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


person Vivek    schedule 16.03.2010    source источник
comment
Релевантно: документация для разработчиков Moodle - docs.moodle.org/en/Development   -  person Sampson    schedule 16.03.2010
comment
@vkwave Ваш вопрос связан с программированием?   -  person Sampson    schedule 16.03.2010
comment
@ Джонатан Сэмпсон: Думаю, да. Похоже, он работает над каким-то расширением Moodle. Вопрос также должен быть помечен как php.   -  person Roberto Aloi    schedule 16.03.2010
comment
@Roberto, я также должен добавить тег php. Спасибо всем. Я нашел решение своими собственными усилиями. Спасибо, что обновили меня.   -  person Vivek    schedule 17.03.2010
comment
@vkwave: если ваше решение отличается от размещенных здесь, я настоятельно рекомендую вам опубликовать его здесь, поскольку у кого-то из сообщества может возникнуть такая же проблема в будущем ...   -  person Roberto Aloi    schedule 17.03.2010
comment
@vkwave Опубликуйте найденное решение и завершите жизненный цикл вопроса.   -  person Sampson    schedule 17.03.2010
comment
Уважаемые все, я не нашел никакого решения, поэтому я кодирую его сам, и он отлично работает с моей стороны. Спасибо   -  person Vivek    schedule 30.04.2010


Ответы (1)


Из файла 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;
}

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

person Roberto Aloi    schedule 16.03.2010