To determine whether a question has been graded we can now no longer look at wether the grade is the empty string because the grade is now always a number. Instead we use the $state->last_graded->event field.

This commit is contained in:
gustav_delius
2006-02-22 00:17:17 +00:00
parent c02131ec37
commit f9cd8ce632
2 changed files with 12 additions and 31 deletions
+10 -29
View File
@@ -259,10 +259,10 @@ function quiz_get_states(&$questions, $cmoptions, $attempt) {
$states[$i]->seq_number = 0;
$states[$i]->timestamp = $attempt->timestart;
$states[$i]->event = ($attempt->timefinish) ? QUIZ_EVENTCLOSE : QUIZ_EVENTOPEN;
$states[$i]->grade = '';
$states[$i]->raw_grade = '';
$states[$i]->penalty = '';
$states[$i]->sumpenalty = '0.0';
$states[$i]->grade = 0;
$states[$i]->raw_grade = 0;
$states[$i]->penalty = 0;
$states[$i]->sumpenalty = 0;
$states[$i]->changed = true;
$states[$i]->last_graded = clone($states[$i]);
$states[$i]->last_graded->responses = array('' => '');
@@ -275,10 +275,10 @@ function quiz_get_states(&$questions, $cmoptions, $attempt) {
$states[$i]->seq_number = 0;
$states[$i]->timestamp = $attempt->timestart;
$states[$i]->event = ($attempt->timefinish) ? QUIZ_EVENTCLOSE : QUIZ_EVENTOPEN;
$states[$i]->grade = '';
$states[$i]->raw_grade = '';
$states[$i]->penalty = '';
$states[$i]->sumpenalty = '0.0';
$states[$i]->grade = 0;
$states[$i]->raw_grade = 0;
$states[$i]->penalty = 0;
$states[$i]->sumpenalty = 0;
$states[$i]->responses = array('' => '');
// Prevent further changes to the session from incrementing the
// sequence number
@@ -349,16 +349,6 @@ function quiz_save_question_session(&$question, &$state) {
// Set the legacy answer field
$state->answer = isset($state->responses['']) ? $state->responses[''] : '';
// Round long grade
if (strlen($state->grade) > 10 && floatval($state->grade)) {
$state->grade = strval(round($state->grade,10-1-strlen(floor($state->grade))));
}
// Round long raw_grade
if (strlen($state->raw_grade) > 10 && floatval($state->raw_grade)) {
$state->raw_grade = strval(round($state->raw_grade,10-1-strlen(floor($state->raw_grade))));
}
// Save the state
if (isset($state->update)) { // this ->update field is only used by the
// regrading function to force the old state record to be overwritten
@@ -685,12 +675,7 @@ function quiz_process_responses(&$question, &$state, $action, $cmoptions, &$atte
}
// Force the state to close (as the attempt is closing)
$state->event = QUIZ_EVENTCLOSE;
// If there is no valid grade, set it to zero
if ('' === $state->grade) {
$state->raw_grade = 0;
$state->penalty = 0;
$state->grade = 0;
}
// Update the last graded state (don't simplify!)
unset($state->last_graded);
$state->last_graded = clone($state);
@@ -699,10 +684,6 @@ function quiz_process_responses(&$question, &$state, $action, $cmoptions, &$atte
$attempt->sumgrades += (float)$state->last_graded->grade;
}
$attempt->timemodified = $action->timestamp;
// Round long sumgrades
if (strlen($attempt->sumgrades) > 10 && floatval($attempt->sumgrades)) {
$attempt->sumgrades = strval(round($attempt->sumgrades,10-1-strlen(floor($state->sumgrades))));
}
return true;
}
@@ -930,7 +911,7 @@ function quiz_get_renderoptions($cmoptions, $state) {
$options->readonly = QUIZ_EVENTCLOSE === $state->event;
// Show feedback once the question has been graded (if allowed by the quiz)
$options->feedback = ('' !== $state->grade) && ($cmoptions->review & QUIZ_REVIEW_FEEDBACK & QUIZ_REVIEW_IMMEDIATELY);
$options->feedback = ($state->event == QUIZ_EVENTGRADE) && ($cmoptions->review & QUIZ_REVIEW_FEEDBACK & QUIZ_REVIEW_IMMEDIATELY);
// Show validation only after a validation event
$options->validation = QUIZ_EVENTVALIDATE === $state->event;
+2 -2
View File
@@ -465,7 +465,7 @@ class quiz_default_questiontype {
$grade = '';
if ($question->maxgrade and $options->scores) {
if ($cmoptions->optionflags & QUIZ_ADAPTIVE) {
$grade = ('' === $state->last_graded->grade) ? '--/' : round($state->last_graded->grade, $cmoptions->decimalpoints).'/';
$grade = (!$state->last_graded->event == QUIZ_EVENTGRADE) ? '--/' : round($state->last_graded->grade, $cmoptions->decimalpoints).'/';
}
$grade .= $question->maxgrade;
}
@@ -543,7 +543,7 @@ class quiz_default_questiontype {
print_string('duplicateresponse', 'quiz');
}
if (!empty($question->maxgrade) && $options->scores) {
if (!('' === $state->last_graded->grade)) {
if ($state->last_graded->event == QUIZ_EVENTGRADE) {
// Display the grading details from the last graded state
$grade->cur = round($state->last_graded->grade, $cmoptions->decimalpoints);
$grade->max = $question->maxgrade;