]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-15538 - Rework attempt.php to use attemptlib.php - I had broken processing of...
authortjhunt <tjhunt>
Tue, 8 Jul 2008 18:22:18 +0000 (18:22 +0000)
committertjhunt <tjhunt>
Tue, 8 Jul 2008 18:22:18 +0000 (18:22 +0000)
lang/en_utf8/quiz.php
lib/questionlib.php
mod/quiz/attempt.php
mod/quiz/attemptlib.php
mod/quiz/locallib.php

index 3d681b5cbab79c730d6ff9e51b6b040b57190c4a..3060013bd74511b433d005abd3e06281b1fb5ab9 100644 (file)
@@ -42,6 +42,7 @@ $string['alwaysavailable'] = 'Always available';
 $string['analysisoptions'] = 'Analysis options';
 $string['analysistitle'] = 'Item Analysis Table';
 $string['answer'] = 'Answer';
+$string['answered'] = 'Answered';
 $string['answerhowmany'] = 'One or multiple answers?';
 $string['answers'] = 'Answers';
 $string['answersingleno'] = 'Multiple answers allowed';
index ebdf50bab24c5c35cfe4cb9c75f58cfac0b7e49c..670dbb262f24d06ed2a0e8d7b66df20d132adc44 100644 (file)
@@ -1040,7 +1040,7 @@ function restore_question_state(&$question, &$state) {
 *                         most recent responses are in ->responses. The object
 *                         is updated to hold the new ->id.
 */
-function save_question_session(&$question, &$state) {
+function save_question_session($question, $state) {
     global $QTYPES, $DB;
     // Check if the state has changed
     if (!$state->changed && isset($state->id)) {
@@ -1336,7 +1336,7 @@ function regrade_question_in_attempt($question, $attempt, $cmoptions, $verbose=f
 *                         during grading its ->sumgrades field can be updated
 * @return boolean         Indicates success/failure
 */
-function question_process_responses(&$question, &$state, $action, $cmoptions, &$attempt) {
+function question_process_responses($question, &$state, $action, $cmoptions, &$attempt) {
     global $QTYPES;
 
     // if no responses are set initialise to empty response
index 885b8a506847940df0a9a32ef58ac39def3b2b32..786fec11768674ddd456af7795fddeb7dbfc2902 100644 (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();
 
     /// 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;
             }
             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
 
     /// 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;
             }
                 $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)) {
index 3c050d55e98e70364f3e376aa3a88fd723838185..5ad9179d96cc5a6b1c68a6807ddce272790b4e5e 100644 (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:
index a0e17ee8375ad65dd79fa71ae499797ef4d06a3d..7215e741c3e6372d34b7e2e4c8d45f6638201a85 100644 (file)
  * @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
  */