MDL-20636 Reveiw all throw statements.
authorTim Hunt <T.J.Hunt@open.ac.uk>
Wed, 23 Feb 2011 16:50:09 +0000 (16:50 +0000)
committerTim Hunt <T.J.Hunt@open.ac.uk>
Wed, 23 Feb 2011 16:50:09 +0000 (16:50 +0000)
15 files changed:
lang/en/question.php
mod/quiz/attemptlib.php
mod/quiz/startattempt.php
question/behaviour/behaviourbase.php
question/behaviour/informationitem/behaviour.php
question/behaviour/missing/behaviour.php
question/behaviour/opaque/simpletest/testopaquebehaviour.php
question/engine/bank.php
question/engine/datalib.php
question/engine/lib.php
question/engine/simpletest/helpers.php
question/engine/states.php
question/type/missingtype/question.php
question/type/numerical/question.php
question/type/opaque/locallib.php

index a0d6c8c..071c2fc 100644 (file)
@@ -265,6 +265,7 @@ $string['correct'] = 'Correct';
 $string['correctfeedback'] = 'For any correct response';
 $string['decimalplacesingrades'] = 'Decimal places in grades';
 $string['defaultmark'] = 'Default mark';
+$string['errorsavingflags'] = 'Error saving the flag state.';
 $string['feedback'] = 'Feedback';
 $string['fillincorrect'] = 'Fill in correct responses';
 $string['flagged'] = 'Flagged';
index 65294f9..868093c 100644 (file)
@@ -104,15 +104,9 @@ class quiz {
     static public function create($quizid, $userid) {
         global $DB;
 
-        if (!$quiz = $DB->get_record('quiz', array('id' => $quizid))) {
-            throw new moodle_exception('invalidquizid', 'quiz');
-        }
-        if (!$course = $DB->get_record('course', array('id' => $quiz->course))) {
-            throw new moodle_exception('invalidcoursemodule');
-        }
-        if (!$cm = get_coursemodule_from_instance('quiz', $quiz->id, $course->id)) {
-            throw new moodle_exception('invalidcoursemodule');
-        }
+        $quiz = $DB->get_record('quiz', array('id' => $quizid), '*', MUST_EXIST);
+        $course = $DB->get_record('course', array('id' => $quiz->course), '*', MUST_EXIST);
+        $cm = get_coursemodule_from_instance('quiz', $quiz->id, $course->id, false, MUST_EXIST);
 
         // Update quiz with override information
         $quiz = quiz_update_effective_access($quiz, $userid);
@@ -385,18 +379,10 @@ class quiz_attempt {
 //        quiz_upgrade_states($attempt);
 //    }
 
-        if (!$attempt = $DB->get_record('quiz_attempts', $conditions)) {
-            throw new moodle_exception('invalidattemptid', 'quiz');
-        }
-        if (!$quiz = $DB->get_record('quiz', array('id' => $attempt->quiz))) {
-            throw new moodle_exception('invalidquizid', 'quiz');
-        }
-        if (!$course = $DB->get_record('course', array('id' => $quiz->course))) {
-            throw new moodle_exception('invalidcoursemodule');
-        }
-        if (!$cm = get_coursemodule_from_instance('quiz', $quiz->id, $course->id)) {
-            throw new moodle_exception('invalidcoursemodule');
-        }
+        $attempt = $DB->get_record('quiz_attempts', $conditions, '*', MUST_EXIST);
+        $quiz = $DB->get_record('quiz', array('id' => $attempt->quiz), '*', MUST_EXIST);
+        $course = $DB->get_record('course', array('id' => $quiz->course), '*', MUST_EXIST);
+        $cm = get_coursemodule_from_instance('quiz', $quiz->id, $course->id, false, MUST_EXIST);
 
         // Update quiz with override information
         $quiz = quiz_update_effective_access($quiz, $attempt->userid);
@@ -1002,9 +988,8 @@ class quiz_attempt {
         if ($this->attempt->timefinish) {
             $this->attempt->sumgrades = $this->quba->get_total_mark();
         }
-        if (!$DB->update_record('quiz_attempts', $this->attempt)) {
-            throw new moodle_quiz_exception($this->get_quizobj(), 'saveattemptfailed');
-        }
+        $DB->update_record('quiz_attempts', $this->attempt);
+
         if (!$this->is_preview() && $this->attempt->timefinish) {
             quiz_save_best_grade($this->get_quiz(), $this->get_userid());
         }
@@ -1029,9 +1014,7 @@ class quiz_attempt {
         $this->attempt->timemodified = $timestamp;
         $this->attempt->timefinish = $timestamp;
         $this->attempt->sumgrades = $this->quba->get_total_mark();
-        if (!$DB->update_record('quiz_attempts', $this->attempt)) {
-            throw new moodle_quiz_exception($this->get_quizobj(), 'saveattemptfailed');
-        }
+        $DB->update_record('quiz_attempts', $this->attempt);
 
         if (!$this->is_preview()) {
             quiz_save_best_grade($this->get_quiz());
index 0f45617..3c49673 100644 (file)
@@ -51,9 +51,7 @@ $PAGE->set_url($quizobj->view_url());
 
 // Check login and sesskey.
 require_login($quizobj->get_courseid(), false, $quizobj->get_cm());
-if (!confirm_sesskey()) {
-    throw new moodle_exception('confirmsesskeybad', 'error', $quizobj->view_url());
-}
+require_sesskey();
 $PAGE->set_pagelayout('base');
 
 // if no questions have been set up yet redirect to edit.php
@@ -188,9 +186,7 @@ if (!($quiz->attemptonlast && $lastattempt)) {
 $transaction = $DB->start_delegated_transaction();
 question_engine::save_questions_usage_by_activity($quba);
 $attempt->uniqueid = $quba->get_id();
-if (!$attempt->id = $DB->insert_record('quiz_attempts', $attempt)) {
-    throw new moodle_quiz_exception($quizobj, 'newattemptfail');
-}
+$attempt->id = $DB->insert_record('quiz_attempts', $attempt);
 
 // Log the new attempt.
 if ($attempt->preview) {
index 097faef..1b366e7 100644 (file)
@@ -73,7 +73,7 @@ abstract class question_behaviour {
         $this->question = $qa->get_question();
         $requiredclass = $this->required_question_definition_type();
         if (!$this->question instanceof $requiredclass) {
-            throw new Exception('This behaviour (' . $this->get_name() .
+            throw new coding_exception('This behaviour (' . $this->get_name() .
                     ') cannot work with this question (' . get_class($this->question) . ')');
         }
     }
@@ -543,7 +543,7 @@ abstract class question_behaviour_with_save extends question_behaviour {
         if ($this->qa->get_state()->is_finished()) {
             return question_attempt::DISCARD;
         } else if (!$this->qa->get_state()->is_active()) {
-            throw new Exception('Question is not active, cannot process_actions.');
+            throw new coding_exception('Question is not active, cannot process_actions.');
         }
 
         if ($this->is_same_response($pendingstep)) {
index 82e729a..44f1c96 100644 (file)
@@ -100,7 +100,7 @@ class qbehaviour_informationitem extends question_behaviour {
 
     public function process_comment(question_attempt_pending_step $pendingstep) {
         if ($pendingstep->has_behaviour_var('mark')) {
-            throw new Exception('Information items cannot be graded.');
+            throw new coding_exception('Information items cannot be graded.');
         }
         return parent::process_comment($pendingstep);
     }
index 94bed44..555d707 100644 (file)
@@ -55,14 +55,14 @@ class qbehaviour_missing extends question_behaviour {
     }
 
     public function init_first_step(question_attempt_step $step) {
-        throw new Exception('The behaviour used for this question is not available. No processing is possible.');
+        throw new coding_exception('The behaviour used for this question is not available. No processing is possible.');
     }
 
     public function process_action(question_attempt_pending_step $pendingstep) {
-        throw new Exception('The behaviour used for this question is not available. No processing is possible.');
+        throw new coding_exception('The behaviour used for this question is not available. No processing is possible.');
     }
 
     public function get_min_fraction() {
-        throw new Exception('The behaviour used for this question is not available. No processing is possible.');
+        throw new coding_exception('The behaviour used for this question is not available. No processing is possible.');
     }
 }
index 6c5882e..f78bb90 100644 (file)
@@ -48,7 +48,7 @@ class qbehaviour_opaque_test extends qbehaviour_walkthrough_test_base {
         global $DB;
         $engineid = $DB->get_field('question_opaque_engines', 'MIN(id)', array());
         if (empty($engineid)) {
-            throw new Exception('Cannot test Opaque. No question engines configured.');
+            throw new coding_exception('Cannot test Opaque. No question engines configured.');
         }
 
         question_bank::load_question_definition_classes('opaque');
index 41c9440..4a6227e 100644 (file)
@@ -70,7 +70,7 @@ abstract class question_bank {
         $file = get_plugin_directory('qtype', $qtypename) . '/questiontype.php';
         if (!is_readable($file)) {
             if ($mustexist || $qtypename == 'missingtype') {
-                throw new Exception('Unknown question type ' . $qtypename);
+                throw new coding_exception('Unknown question type ' . $qtypename);
             } else {
                 return self::get_qtype('missingtype');
             }
@@ -186,7 +186,7 @@ abstract class question_bank {
         }
         $file = $CFG->dirroot . '/question/type/' . $qtypename . '/question.php';
         if (!is_readable($file)) {
-            throw new Exception('Unknown question type (no definition) ' . $qtypename);
+            throw new coding_exception('Unknown question type (no definition) ' . $qtypename);
         }
         include_once($file);
         self::$loadedqdefs[$qtypename] = 1;
@@ -256,7 +256,7 @@ abstract class question_bank {
 
     private static function return_test_question_data($questionid) {
         if (!isset(self::$testdata[$questionid])) {
-            throw new Exception('question_bank::return_test_data(' . $questionid .
+            throw new coding_exception('question_bank::return_test_data(' . $questionid .
                     ') called, but no matching question has been loaded by load_test_data.');
         }
         return self::$testdata[$questionid];
@@ -269,7 +269,7 @@ abstract class question_bank {
      */
     public static function load_test_question_data(question_definition $question) {
         if (!self::$testmode) {
-            throw new Exception('question_bank::load_test_data called when not in test mode.');
+            throw new coding_exception('question_bank::load_test_data called when not in test mode.');
         }
         self::$testdata[$question->id] = $question;
     }
index 214f391..df733ea 100644 (file)
@@ -150,7 +150,7 @@ WHERE
         ", array('stepid' => $stepid));
 
         if (!$records) {
-            throw new Exception('Failed to load question_attempt_step ' . $stepid);
+            throw new coding_exception('Failed to load question_attempt_step ' . $stepid);
         }
 
         return question_attempt_step::load_from_records($records, $stepid);
@@ -202,7 +202,7 @@ ORDER BY
         ", array('questionattemptid' => $questionattemptid));
 
         if (!$records) {
-            throw new Exception('Failed to load question_attempt ' . $questionattemptid);
+            throw new coding_exception('Failed to load question_attempt ' . $questionattemptid);
         }
 
         $record = current($records);
@@ -259,7 +259,7 @@ ORDER BY
     ", array('qubaid' => $qubaid));
 
         if (!$records) {
-            throw new Exception('Failed to load questions_usage_by_activity ' . $qubaid);
+            throw new coding_exception('Failed to load questions_usage_by_activity ' . $qubaid);
         }
 
         return question_usage_by_activity::load_from_records($records, $qubaid);
@@ -599,9 +599,7 @@ ORDER BY
         $record->component = addslashes($quba->get_owning_component());
         $record->preferredbehaviour = addslashes($quba->get_preferred_behaviour());
 
-        if (!$this->db->update_record('question_usages', $record)) {
-            throw new Exception('Failed to update question_usage_by_activity ' . $record->id);
-        }
+        $this->db->update_record('question_usages', $record);
     }
 
     /**
@@ -620,9 +618,7 @@ ORDER BY
         $record->responsesummary = addslashes($qa->get_response_summary());
         $record->timemodified = time();
 
-        if (!$this->db->update_record('question_attempts', $record)) {
-            throw new Exception('Failed to update question_attempt ' . $record->id);
-        }
+        $this->db->update_record('question_attempts', $record);
     }
 
     /**
@@ -696,7 +692,7 @@ ORDER BY
     public function update_question_attempt_flag($qubaid, $questionid, $qaid, $slot, $newstate) {
         if (!$this->db->record_exists('question_attempts', array('id' => $qaid,
                 'questionusageid' => $qubaid, 'questionid' => $questionid, 'slot' => $slot))) {
-            throw new Exception('invalid ids');
+            throw new moodle_exception('errorsavingflags', 'question');
         }
 
         $this->db->set_field('question_attempts', 'flagged', $newstate, array('id' => $qaid));
@@ -1002,7 +998,7 @@ class qubaid_list extends qubaid_condition {
         global $DB;
 
         if (is_null($this->columntotest)) {
-            throw new coding_exception('Must call another method that before where().');
+            throw new coding_exception('Must call from_question_attempts before where().');
         }
         if (empty($this->qubaids)) {
             $this->params = array();
index e4326b5..93716ac 100644 (file)
@@ -144,7 +144,7 @@ abstract class question_engine {
         question_engine::load_behaviour_class($preferredbehaviour);
         $class = 'qbehaviour_' . $preferredbehaviour;
         if (!constant($class . '::IS_ARCHETYPAL')) {
-            throw new Exception('The requested behaviour is not actually an archetypal one.');
+            throw new coding_exception('The requested behaviour is not actually an archetypal one.');
         }
         return new $class($qa, $preferredbehaviour);
     }
@@ -200,7 +200,7 @@ abstract class question_engine {
         }
         $file = $CFG->dirroot . '/question/behaviour/' . $behaviour . '/behaviour.php';
         if (!is_readable($file)) {
-            throw new Exception('Unknown question behaviour ' . $behaviour);
+            throw new coding_exception('Unknown question behaviour ' . $behaviour);
         }
         include_once($file);
         self::$loadedbehaviours[$behaviour] = 1;
@@ -545,7 +545,7 @@ abstract class question_flags {
         // probably makes it sufficiently difficult for malicious users to toggle
         // other users flags.
         if ($checksum != question_flags::get_toggle_checksum($qubaid, $questionid, $qaid, $slot)) {
-            throw new Exception('checksum failure');
+            throw new moodle_exception('errorsavingflags', 'question');
         }
 
         $dm = new question_engine_data_mapper();
@@ -785,7 +785,7 @@ class question_usage_by_activity {
      */
     protected function check_slot($slot) {
         if (!array_key_exists($slot, $this->questionattempts)) {
-            throw new exception("There is no question_attempt number $slot in this attempt.");
+            throw new coding_exception("There is no question_attempt number $slot in this attempt.");
         }
     }
 
@@ -1198,7 +1198,7 @@ class question_usage_by_activity {
         while ($record->qubaid != $qubaid) {
             $record = next($records);
             if (!$record) {
-                throw new Exception("Question usage $qubaid not found in the database.");
+                throw new coding_exception("Question usage $qubaid not found in the database.");
             }
         }
 
@@ -1280,10 +1280,10 @@ class question_attempt_iterator implements Iterator, ArrayAccess {
         return $this->quba->get_question_attempt($slot);
     }
     public function offsetSet($slot, $value) {
-        throw new Exception('You are only allowed read-only access to question_attempt::states through a question_attempt_step_iterator. Cannot set.');
+        throw new coding_exception('You are only allowed read-only access to question_attempt::states through a question_attempt_step_iterator. Cannot set.');
     }
     public function offsetUnset($slot) {
-        throw new Exception('You are only allowed read-only access to question_attempt::states through a question_attempt_step_iterator. Cannot unset.');
+        throw new coding_exception('You are only allowed read-only access to question_attempt::states through a question_attempt_step_iterator. Cannot unset.');
     }
 }
 
@@ -1561,7 +1561,7 @@ class question_attempt {
      */
     public function get_step($i) {
         if ($i < 0 || $i >= count($this->steps)) {
-            throw new Exception('Index out of bounds in question_attempt::get_step.');
+            throw new coding_exception('Index out of bounds in question_attempt::get_step.');
         }
         return $this->steps[$i];
     }
@@ -1755,7 +1755,7 @@ class question_attempt {
     /** @return number the maximum mark possible for this question attempt. */
     public function get_min_fraction() {
         if (is_null($this->minfraction)) {
-            throw new Exception('This question_attempt has not been started yet, the min fraction is not yet konwn.');
+            throw new coding_exception('This question_attempt has not been started yet, the min fraction is not yet konwn.');
         }
         return $this->minfraction;
     }
@@ -2207,7 +2207,7 @@ class question_attempt {
         while ($record->questionattemptid != $questionattemptid) {
             $record = next($records);
             if (!$record) {
-                throw new Exception("Question attempt $questionattemptid not found in the database.");
+                throw new coding_exception("Question attempt $questionattemptid not found in the database.");
             }
         }
 
@@ -2384,10 +2384,10 @@ class question_attempt_step_iterator implements Iterator, ArrayAccess {
         return $this->qa->get_step($i);
     }
     public function offsetSet($offset, $value) {
-        throw new Exception('You are only allowed read-only access to question_attempt::states through a question_attempt_step_iterator. Cannot set.');
+        throw new coding_exception('You are only allowed read-only access to question_attempt::states through a question_attempt_step_iterator. Cannot set.');
     }
     public function offsetUnset($offset) {
-        throw new Exception('You are only allowed read-only access to question_attempt::states through a question_attempt_step_iterator. Cannot unset.');
+        throw new coding_exception('You are only allowed read-only access to question_attempt::states through a question_attempt_step_iterator. Cannot unset.');
     }
 }
 
@@ -2554,7 +2554,7 @@ class question_attempt_step {
      */
     public function set_qt_var($name, $value) {
         if ($name[0] != '_') {
-            throw new Exception('Cannot set question type data ' . $name . ' on an attempt step. You can only set variables with names begining with _.');
+            throw new coding_exception('Cannot set question type data ' . $name . ' on an attempt step. You can only set variables with names begining with _.');
         }
         $this->data[$name] = $value;
     }
@@ -2599,7 +2599,7 @@ class question_attempt_step {
      */
     public function set_behaviour_var($name, $value) {
         if ($name[0] != '_') {
-            throw new Exception('Cannot set question type data ' . $name . ' on an attempt step. You can only set variables with names begining with _.');
+            throw new coding_exception('Cannot set question type data ' . $name . ' on an attempt step. You can only set variables with names begining with _.');
         }
         return $this->data['-' . $name] = $value;
     }
@@ -2659,7 +2659,7 @@ class question_attempt_step {
         while ($currentrec->attemptstepid != $attemptstepid) {
             $currentrec = next($records);
             if (!$currentrec) {
-                throw new Exception("Question attempt step $attemptstepid not found in the database.");
+                throw new coding_exception("Question attempt step $attemptstepid not found in the database.");
             }
         }
 
@@ -2750,7 +2750,7 @@ class question_null_step {
     }
 
     public function set_state($state) {
-        throw new Exception('This question has not been started.');
+        throw new coding_exception('This question has not been started.');
     }
 
     public function get_fraction() {
index 5fc409a..985e4fc 100644 (file)
@@ -314,7 +314,7 @@ abstract class testing_db_record_builder {
         $records = array();
         foreach ($table as $row) {
             if (count($row) != count($columns)) {
-                throw new Exception("Row contains the wrong number of fields.");
+                throw new coding_exception("Row contains the wrong number of fields.");
             }
             $rec = new stdClass();
             foreach ($columns as $i => $name) {
index 4c262e1..f8026e6 100644 (file)
@@ -98,7 +98,7 @@ abstract class question_state {
             }
         }
         if (empty($states)) {
-            throw new Exception('unknown summary state ' . $summarystate);
+            throw new coding_exception('unknown summary state ' . $summarystate);
         }
         return $states;
     }
@@ -246,7 +246,7 @@ abstract class question_state {
      * @return int the new state.
      */
     public function corresponding_commented_state($fraction) {
-        throw new Exception('Unexpected question state.');
+        throw new coding_exception('Unexpected question state.');
     }
 
     /**
@@ -295,7 +295,7 @@ class question_state_notstarted extends question_state {
         return false;
     }
     public function get_state_class($showcorrectness) {
-        throw new Exception('Unexpected question state.');
+        throw new coding_exception('Unexpected question state.');
     }
 }
 class question_state_unprocessed extends question_state {
@@ -303,7 +303,7 @@ class question_state_unprocessed extends question_state {
         return false;
     }
     public function get_state_class($showcorrectness) {
-        throw new Exception('Unexpected question state.');
+        throw new coding_exception('Unexpected question state.');
     }
 }
 class question_state_todo extends question_state {
index 5b59209..daee10f 100644 (file)
@@ -80,7 +80,7 @@ class qtype_missingtype_question extends question_definition implements question
     }
 
     public function grade_response(array $response) {
-        throw new Exception('This question is of a type that is not installed on your system. No processing is possible.');
+        throw new coding_exception('This question is of a type that is not installed on your system. No processing is possible.');
     }
 
     public function get_hint($hintnumber, question_attempt $qa) {
index 7a4f71c..c43cab8 100644 (file)
@@ -117,7 +117,7 @@ class qtype_numerical_answer extends question_answer {
 
     public function get_tolerance_interval() {
         if ($this->answer === '*') {
-            throw new Exception('Cannot work out tolerance interval for answer *.');
+            throw new coding_exception('Cannot work out tolerance interval for answer *.');
         }
 
         // We need to add a tiny fraction depending on the set precision to make
@@ -140,7 +140,7 @@ class qtype_numerical_answer extends question_answer {
                 return array($this->answer / $quotient, $this->answer * $quotient);
 
             default:
-                throw new Exception('Unknown tolerance type ' . $this->tolerancetype);
+                throw new coding_exception('Unknown tolerance type ' . $this->tolerancetype);
         }
     }
 
index 6688872..58da392 100644 (file)
@@ -375,7 +375,7 @@ function qtype_opaque_get_step($seq, question_attempt $qa, $pendingstep) {
     if ($seq == $qa->get_num_steps() && !is_null($pendingstep)) {
         return $pendingstep;
     }
-    throw new Exception('Sequence number ' . $seq . ' out of range.');
+    throw new coding_exception('Sequence number ' . $seq . ' out of range.');
 }
 
 /**