MDL-15538 - Rework attempt.php to use attemptlib.php - I had broken processing of submitted responses. Hopefully it is fixed again now.

This commit is contained in:
tjhunt 2008-07-08 18:22:18 +00:00
parent 4fc3d7e549
commit 66d07f81a1
5 changed files with 23 additions and 18 deletions

View file

@ -47,9 +47,6 @@
$attemptobj->get_quizid(), $attemptobj->get_cmid());
}
/// Work out which questions we need.
$attemptobj->preload_questions();
/// Get the list of questions needed by this page.
if ($finishattempt) {
$questionids = $attemptobj->get_question_ids();
@ -107,17 +104,17 @@
/// Process each question in turn
$success = true;
$attempt = $attemptobj->get_attempt();
foreach($submittedquestionids as $id) {
if (!isset($actions[$id])) {
$actions[$id]->responses = array('' => '');
$actions[$id]->event = QUESTION_EVENTOPEN;
}
$actions[$id]->timestamp = $timenow;
$state = $attemptobj->get_question_state($id);
if (question_process_responses($attemptobj->get_question($id),
$attemptobj->get_question_state($id), $actions[$id],
$attemptobj->get_quiz(), $attemptobj->get_attempt())) {
save_question_session($attemptobj->get_question($id),
$attemptobj->get_question_state($id));
$state, $actions[$id], $attemptobj->get_quiz(), $attempt)) {
save_question_session($attemptobj->get_question($id), $state);
} else {
$success = false;
}
@ -127,11 +124,13 @@
print_error('errorprocessingresponses', 'question', $attemptobj->attempt_url(0, $page));
}
$attempt = $attemptobj->get_attempt();
$attempt->timemodified = $timenow;
if (!$DB->update_record('quiz_attempts', $attempt)) {
quiz_error($quiz, 'saveattemptfailed');
}
// For now, reload the states to pick up the changes:
$attemptobj->load_question_states($questionids);
}
/// Finish attempt if requested
@ -139,16 +138,16 @@
/// Move each question to the closed state.
$success = true;
$attempt = $attemptobj->get_attempt();
foreach ($attemptobj->get_questions() as $id => $question) {
$action = new stdClass;
$action->event = QUESTION_EVENTCLOSE;
$action->responses = $attemptobj->get_question_state($id)->responses;
$action->timestamp = $attemptobj->get_question_state($id)->timestamp;
$state = $attemptobj->get_question_state($id);
if (question_process_responses($attemptobj->get_question($id),
$attemptobj->get_question_state($id), $action,
$attemptobj->get_quiz(), $attemptobj->get_attempt())) {
save_question_session($attemptobj->get_question($id),
$attemptobj->get_question_state($id));
$state, $action, $attemptobj->get_quiz(), $attempt)) {
save_question_session($attemptobj->get_question($id), $state);
} else {
$success = false;
}
@ -164,7 +163,6 @@
$attemptobj->get_quizid(), $attemptobj->get_cmid());
/// Update the quiz attempt record.
$attempt = $attemptobj->get_attempt();
$attempt->timemodified = $timenow;
$attempt->timefinish = $timenow;
if (!$DB->update_record('quiz_attempts', $attempt)) {

View file

@ -7,7 +7,9 @@
* are loaded.
*//** */
require_once("../../config.php");
if (!defined('MOODLE_INTERNAL')) {
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page.
}
/**
* Class for quiz exceptions. Just saves a couple of arguments on the
@ -410,7 +412,7 @@ class quiz_attempt extends quiz {
if (!$newstates = get_question_states($questionstoprocess, $this->quiz, $this->attempt)) {
throw new moodle_quiz_exception($this, 'cannotrestore');
}
$this->states = $this->states + $newstates;
$this->states = $newstates + $this->states;
}
// Simple getters ======================================================================
@ -499,7 +501,7 @@ class quiz_attempt extends quiz {
case QUESTION_EVENTSAVE:
case QUESTION_EVENTGRADE:
return 'saved';
return 'answered';
case QUESTION_EVENTCLOSEANDGRADE:
case QUESTION_EVENTCLOSE:

View file

@ -16,6 +16,10 @@
* @package quiz
*/
if (!defined('MOODLE_INTERNAL')) {
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page.
}
/**
* Include those library functions that are also used by core Moodle or other modules
*/