diff --git a/includes/QuizQuestionController.class.inc b/includes/QuizQuestionController.class.inc index 398db68..dcdda1c 100644 --- a/includes/QuizQuestionController.class.inc +++ b/includes/QuizQuestionController.class.inc @@ -2,4 +2,15 @@ class QuizQuestionController extends EntityAPIController { -} \ No newline at end of file + /** + * Workaround until we get rid of nid/vid lookups. + */ + function save($entity, \DatabaseTransaction $transaction = NULL) { + if ($qqp_id = db_query("SELECT qqp_id FROM {quiz_question_properties} WHERE nid = :nid and vid = :vid", array(':nid' => $entity->nid, ':vid' => $entity->vid))->fetchField()) { + $entity->qqp_id = $qqp_id; + } + + parent::save($entity, $transaction); + } + +} diff --git a/question_types/long_answer/long_answer.classes.inc b/question_types/long_answer/long_answer.classes.inc index 12e2c41..b8762e2 100644 --- a/question_types/long_answer/long_answer.classes.inc +++ b/question_types/long_answer/long_answer.classes.inc @@ -23,8 +23,7 @@ class LongAnswerQuestion extends QuizQuestion { if ($is_new || $this->node->revision == 1) { $id = db_insert('quiz_long_answer_node_properties') ->fields(array( - 'nid' => $this->node->nid, - 'vid' => $this->node->vid, + 'qqp_id' => $this->quiz_question->qqp_id, 'rubric' => $this->node->rubric, )) ->execute(); @@ -32,8 +31,7 @@ class LongAnswerQuestion extends QuizQuestion { else { db_update('quiz_long_answer_node_properties') ->fields(array('rubric' => $this->node->rubric)) - ->condition('nid', $this->node->nid) - ->condition('vid', $this->node->vid) + ->condition('qqp_id', $this->quiz_question->qqp_id) ->execute(); } } @@ -86,7 +84,7 @@ class LongAnswerQuestion extends QuizQuestion { $props = parent::getNodeProperties(); $res_a = db_query('SELECT rubric FROM {quiz_long_answer_node_properties} - WHERE nid = :nid AND vid = :vid', array(':nid' => $this->node->nid, ':vid' => $this->node->vid))->fetchAssoc(); + WHERE qqp_id = :qqp_id', array(':qqp_id' => $this->quiz_question->qqp_id))->fetchAssoc(); if (is_array($res_a)) { $props = array_merge($props, $res_a); diff --git a/question_types/long_answer/long_answer.install b/question_types/long_answer/long_answer.install index 79a933d..f6027e1 100644 --- a/question_types/long_answer/long_answer.install +++ b/question_types/long_answer/long_answer.install @@ -22,12 +22,10 @@ function long_answer_schema() { // Properties for a question nodes go in here: $schema['quiz_long_answer_node_properties'] = array( 'fields' => array( - 'nid' => array( - 'type' => 'int', - 'unsigned' => TRUE, - 'not null' => TRUE, + 'qla_id' => array( + 'type' => 'serial', ), - 'vid' => array( + 'qqp_id' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, @@ -36,7 +34,12 @@ function long_answer_schema() { 'type' => 'text', ), ), - 'primary key' => array('nid', 'vid'), + 'primary key' => array('qla_id'), + 'unique_keys' => array( + 'qqp_id' => array( + 'qqp_id', + ), + ), ); // User answers go in here. @@ -132,3 +135,10 @@ function long_answer_update_7500() { db_add_unique_key('quiz_long_answer_user_answers', 'result_answer_id', array('result_answer_id')); } + +/** + * Normalize question storage. + */ +function long_answer_update_7501() { + return _quiz_normalize_question_storage_helper('quiz_long_answer_node_properties', 'qla_id'); +} diff --git a/question_types/matching/matching.classes.inc b/question_types/matching/matching.classes.inc index ae31138..c4373d3 100644 --- a/question_types/matching/matching.classes.inc +++ b/question_types/matching/matching.classes.inc @@ -38,8 +38,7 @@ class MatchingQuestion extends QuizQuestion { // Update or insert the question properties db_merge('quiz_matching_properties') ->key(array( - 'nid' => $this->node->nid, - 'vid' => $this->node->vid, + 'qqp_id' => $this->quiz_question->qqp_id, )) ->fields(array( 'choice_penalty' => $this->node->choice_penalty, @@ -54,8 +53,7 @@ class MatchingQuestion extends QuizQuestion { if (!empty($match['question']) && !empty($match['answer'])) { $id = db_insert('quiz_matching_node') ->fields(array( - 'nid' => $this->node->nid, - 'vid' => $this->node->vid, + 'qqp_id' => $this->quiz_question->qqp_id, 'question' => $match['question'], 'answer' => $match['answer'], 'feedback' => $match['feedback'], @@ -148,14 +146,13 @@ class MatchingQuestion extends QuizQuestion { $props = parent::getNodeProperties(); $res_a = db_query('SELECT choice_penalty FROM {quiz_matching_properties} - WHERE nid = :nid AND vid = :vid', array(':nid' => $this->node->nid, ':vid' => $this->node->vid))->fetchAssoc(); + WHERE qqp_id = :qqp_id', array(':qqp_id' => $this->quiz_question->qqp_id))->fetchAssoc(); if (is_array($res_a)) { $props = array_merge($props, $res_a); } - //$sql = "SELECT match_id, question, answer, feedback FROM {quiz_matching_node} WHERE nid = %d AND vid = %d"; - $query = db_query('SELECT match_id, question, answer, feedback FROM {quiz_matching_node} WHERE nid = :nid AND vid = :vid', array(':nid' => $this->node->nid, ':vid' => $this->node->vid)); + $query = db_query('SELECT match_id, question, answer, feedback FROM {quiz_matching_node} WHERE qqp_id = :qqp_id', array(':qqp_id' => $this->quiz_question->qqp_id)); while ($result = $query->fetch()) { $props['match'][] = array( 'match_id' => $result->match_id, @@ -282,8 +279,7 @@ class MatchingQuestion extends QuizQuestion { */ public function getSubquestions() { $matches = $select_option = array(); - //$sql = "SELECT match_id, question, answer, feedback FROM {quiz_matching_node} WHERE nid = %d AND vid = %d"; - $query = db_query('SELECT match_id, question, answer, feedback FROM {quiz_matching_node} WHERE nid = :nid AND vid = :vid', array(':nid' => $this->node->nid, ':vid' => $this->node->vid)); + $query = db_query('SELECT match_id, question, answer, feedback FROM {quiz_matching_node} WHERE qqp_id = :qqp_id', array(':qqp_id' => $this->quiz_question->qqp_id)); while ($result = $query->fetch()) { $matches[] = array( 'match_id' => $result->match_id, @@ -410,7 +406,7 @@ class MatchingQuestion extends QuizQuestion { */ public function getCorrectAnswer() { $correct_answers = array(); - $query = db_query('SELECT match_id, question, answer, feedback FROM {quiz_matching_node} WHERE nid = :nid AND vid = :vid', array(':nid' => $this->node->nid, ':vid' => $this->node->vid)); + $query = db_query('SELECT match_id, question, answer, feedback FROM {quiz_matching_node} WHERE qqp_id = :qqp_id', array(':qqp_id' => $this->quiz_question->qqp_id)); while ($result = $query->fetch()) { $correct_answers[$result->match_id] = array( 'match_id' => $result->match_id, @@ -437,7 +433,7 @@ class MatchingResponse extends QuizQuestionResponse { if (!isset($answer)) { $res = db_query('SELECT ua.answer, score, ua.match_id FROM {quiz_matching_user_answers} ua JOIN {quiz_matching_node} n ON n.match_id = ua.match_id - WHERE n.nid = :nid AND n.vid = :vid AND ua.result_id = :result_id', array(':nid' => $question_node->nid, ':vid' => $question_node->vid, ':result_id' => $result_id)); + WHERE result_answer_id = :raid', array(':raid' => $this->result_answer_id)); $this->answer = array(); while ($obj = $res->fetch()) { $this->answer[$obj->match_id] = $obj->answer; @@ -455,11 +451,11 @@ class MatchingResponse extends QuizQuestionResponse { if (!isset($this->answer) || !is_array($this->answer)) { return; } - $insert = db_insert('quiz_matching_user_answers')->fields(array('match_id', 'result_id', 'answer', 'score')); + $insert = db_insert('quiz_matching_user_answers')->fields(array('match_id', 'result_answer_id', 'answer', 'score')); foreach ($this->answer as $key => $value) { $insert->values(array( 'match_id' => $key, - 'result_id' => $this->result_id, + 'result_answer_id' => $this->result_answer_id, 'answer' => (int) $value, 'score' => ($key == $value) ? 1 : 0, )); @@ -473,10 +469,8 @@ class MatchingResponse extends QuizQuestionResponse { * @see QuizQuestionResponse#delete() */ public function delete() { - $match_id = db_query('SELECT match_id FROM {quiz_matching_node} WHERE nid = :nid AND vid = :vid', array(':nid' => $this->question->nid, ':vid' => $this->question->vid))->fetchCol(); db_delete('quiz_matching_user_answers') - ->condition('match_id', is_array($match_id) ? $match_id : array(0), 'IN') - ->condition('result_id', $this->result_id) + ->condition('result_answer_id', $this->result_answer_id) ->execute(); } diff --git a/question_types/matching/matching.install b/question_types/matching/matching.install index 04439c0..bf0f438 100644 --- a/question_types/matching/matching.install +++ b/question_types/matching/matching.install @@ -22,12 +22,10 @@ function matching_schema() { // Properties for a question nodes go in here: $schema['quiz_matching_properties'] = array( 'fields' => array( - 'nid' => array( - 'type' => 'int', - 'unsigned' => TRUE, - 'not null' => TRUE, + 'qma_id' => array( + 'type' => 'serial', ), - 'vid' => array( + 'qqp_id' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, @@ -40,7 +38,12 @@ function matching_schema() { ), ), 'primary key' => array( - 'nid', 'vid' + 'qma_id', + ), + 'unique_keys' => array( + 'qqp_id' => array( + 'qqp_id', + ), ), ); @@ -51,12 +54,7 @@ function matching_schema() { 'unsigned' => TRUE, 'not null' => TRUE, ), - 'nid' => array( - 'type' => 'int', - 'unsigned' => TRUE, - 'not null' => TRUE, - ), - 'vid' => array( + 'qqp_id' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, @@ -76,7 +74,7 @@ function matching_schema() { ), 'primary key' => array('match_id'), 'indexes' => array( - 'question_id' => array('nid', 'vid'), + 'question_id' => array('qqp_id'), ), ); @@ -93,7 +91,7 @@ function matching_schema() { 'unsigned' => TRUE, 'not null' => TRUE, ), - 'result_id' => array( + 'result_answer_id' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, diff --git a/question_types/multichoice/multichoice.classes.inc b/question_types/multichoice/multichoice.classes.inc index 41c8f47..bffd078 100644 --- a/question_types/multichoice/multichoice.classes.inc +++ b/question_types/multichoice/multichoice.classes.inc @@ -126,8 +126,7 @@ class MultichoiceQuestion extends QuizQuestion { if ($is_new) { $id = db_insert('quiz_multichoice_properties') ->fields(array( - 'nid' => $this->node->nid, - 'vid' => $this->node->vid, + 'qqp_id' => $this->quiz_question->qqp_id, 'choice_multi' => $this->node->choice_multi, 'choice_random' => $this->node->choice_random, 'choice_boolean' => $this->node->choice_boolean, @@ -148,8 +147,7 @@ class MultichoiceQuestion extends QuizQuestion { 'choice_random' => $this->node->choice_random, 'choice_boolean' => $this->node->choice_boolean, )) - ->condition('nid', $this->node->nid) - ->condition('vid', $this->node->vid) + ->condition('qqp_id', $this->quiz_question->qqp_id) ->execute(); // We fetch ids for the existing answers belonging to this question @@ -359,7 +357,7 @@ class MultichoiceQuestion extends QuizQuestion { $props = parent::getNodeProperties(); $res_a = db_query('SELECT choice_multi, choice_random, choice_boolean FROM {quiz_multichoice_properties} - WHERE nid = :nid AND vid = :vid', array(':nid' => $this->node->nid, ':vid' => $this->node->vid))->fetchAssoc(); + WHERE qqp_id = :qqp_id', array(':qqp_id' => $this->quiz_question->qqp_id))->fetchAssoc(); if (is_array($res_a)) { $props = array_merge($props, $res_a); diff --git a/question_types/multichoice/multichoice.install b/question_types/multichoice/multichoice.install index 0c47678..6ce1337 100644 --- a/question_types/multichoice/multichoice.install +++ b/question_types/multichoice/multichoice.install @@ -70,12 +70,10 @@ function multichoice_schema() { $schema['quiz_multichoice_properties'] = array( 'fields' => array( - 'nid' => array( - 'type' => 'int', - 'unsigned' => TRUE, - 'not null' => TRUE, + 'qmc_id' => array( + 'type' => 'serial', ), - 'vid' => array( + 'qqp_id' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, @@ -100,7 +98,12 @@ function multichoice_schema() { ), ), 'primary key' => array( - 'nid', 'vid' + 'qmc_id', + ), + 'unique_keys' => array( + 'qqp_id' => array( + 'qqp_id', + ), ), ); @@ -251,7 +254,7 @@ function multichoice_update_7501() { } /** - * Normalize data storage. + * Normalize response storage. */ function multichoice_update_7502() { db_add_field('quiz_multichoice_user_answers', 'result_answer_id', array( @@ -270,3 +273,10 @@ function multichoice_update_7502() { db_add_unique_key('quiz_multichoice_user_answers', 'result_answer_id', array('result_answer_id')); } + +/** + * Normalize question storage. + */ +function multichoice_update_7503() { + return _quiz_normalize_question_storage_helper('quiz_multichoice_properties', 'qmc_id'); +} diff --git a/question_types/quiz_question/quiz_question.core.inc b/question_types/quiz_question/quiz_question.core.inc index d70a707..4719e93 100644 --- a/question_types/quiz_question/quiz_question.core.inc +++ b/question_types/quiz_question/quiz_question.core.inc @@ -60,6 +60,11 @@ abstract class QuizQuestion { */ public function __construct(stdClass &$node) { $this->node = $node; + if (isset($this->node->nid)) { + if ($entities = entity_load('quiz_question', FALSE, array('nid' => $this->node->nid, 'vid' => $this->node->vid))) { + $this->quiz_question = reset($entities); + } + } } /** @@ -218,23 +223,18 @@ abstract class QuizQuestion { * TRUE when the node is initially created. */ public function save($is_new = FALSE) { - // We call the abstract function saveNodeProperties to save type specific data - $this->saveNodeProperties($this->node->is_new); - - db_merge('quiz_question_properties') - ->key(array( - 'nid' => $this->node->nid, - 'vid' => $this->node->vid, - )) - ->fields(array( + $quiz_question = (object) array( 'nid' => $this->node->nid, 'vid' => $this->node->vid, 'max_score' => $this->getMaximumScore(), 'feedback' => !empty($this->node->feedback['value']) ? $this->node->feedback['value'] : '', 'feedback_format' => !empty($this->node->feedback['format']) ? $this->node->feedback['format'] : filter_default_format(), - )) - ->execute(); + ); + entity_save('quiz_question', $quiz_question); + $this->quiz_question = $quiz_question; + // We call the abstract function saveNodeProperties to save type specific data + $this->saveNodeProperties($this->node->is_new); // Save what quizzes this question belongs to. diff --git a/question_types/quiz_question/quiz_question.install b/question_types/quiz_question/quiz_question.install index be560d0..21ed0f0 100644 --- a/question_types/quiz_question/quiz_question.install +++ b/question_types/quiz_question/quiz_question.install @@ -143,3 +143,30 @@ function quiz_question_update_7502() { db_add_index('quiz_question_properties', 'question_id', array('vid', 'nid')); } } + +/** + * Normalize question storage. + */ +function _quiz_normalize_question_storage_helper($table, $pri) { + db_drop_primary_key($table); + + db_add_field($table, $pri, array( + 'type' => 'serial', + ), array('primary key' => array($pri))); + + db_add_field($table, 'qqp_id', array( + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => FALSE, + )); + + $sql = "UPDATE {{$table}} qt + INNER JOIN {quiz_question_properties} qqp ON (qt.nid = qqp.nid and qt.vid = qqp.vid) + SET qt.qqp_id = qqp.qqp_id"; + db_query($sql); + + db_drop_field($pri, 'nid'); + db_drop_field($pri, 'vid'); + + return t('Normalized long_answer question storage.'); +} diff --git a/question_types/scale/scale.classes.inc b/question_types/scale/scale.classes.inc index 5ad59af..1e746a8 100644 --- a/question_types/scale/scale.classes.inc +++ b/question_types/scale/scale.classes.inc @@ -53,8 +53,7 @@ class ScaleQuestion extends QuizQuestion { if ($is_new_node) { $id = db_insert('quiz_scale_node_properties') ->fields(array( - 'nid' => $this->node->nid, - 'vid' => $this->node->vid, + 'qqp_id' => $this->quiz_question->qqp_id, 'answer_collection_id' => $answer_collection_id, )) ->execute(); @@ -64,8 +63,7 @@ class ScaleQuestion extends QuizQuestion { ->fields(array( 'answer_collection_id' => $answer_collection_id, )) - ->condition('nid', $this->node->nid) - ->condition('vid', $this->node->vid) + ->condition('qqp_id', $this->quiz_question->qqp_id) ->execute(); } } @@ -314,8 +312,8 @@ class ScaleQuestion extends QuizQuestion { $res = db_query('SELECT id, answer, a.answer_collection_id FROM {quiz_scale_node_properties} p JOIN {quiz_scale_answer} a ON (p.answer_collection_id = a.answer_collection_id) - WHERE nid = :nid AND vid = :vid - ORDER BY a.id', array(':nid' => $this->node->nid, ':vid' => $this->node->vid)); + WHERE qqp_id = :qqp_id + ORDER BY a.id', array(':qqp_id' => $this->quiz_question->qqp_id)); foreach ($res as $res_o) { $props[] = $res_o; } diff --git a/question_types/scale/scale.install b/question_types/scale/scale.install index 1151a6a..8494170 100644 --- a/question_types/scale/scale.install +++ b/question_types/scale/scale.install @@ -30,12 +30,10 @@ function scale_schema() { $schema['quiz_scale_node_properties'] = array( 'description' => 'Properties specific to this question type. Holds information about what answer collection this node uses', 'fields' => array( - 'nid' => array( - 'type' => 'int', - 'unsigned' => TRUE, - 'not null' => TRUE, + 'qs_id' => array( + 'type' => 'serial', ), - 'vid' => array( + 'qqp_id' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, @@ -47,7 +45,12 @@ function scale_schema() { ), ), 'primary key' => array( - 'nid', 'vid', + 'qs_id', + ), + 'unique_keys' => array( + 'qqp_id' => array( + 'qqp_id', + ), ), ); // Stores the users answers to a question. @@ -200,3 +203,10 @@ function scale_update_7500() { db_add_unique_key('quiz_scale_user_answers', 'result_answer_id', array('result_answer_id')); } + +/** + * Normalize question storage. + */ +function scale_update_7501() { +return _quiz_normalize_question_storage_helper('quiz_scale_node_properties', 'qs_id'); +} diff --git a/question_types/short_answer/short_answer.classes.inc b/question_types/short_answer/short_answer.classes.inc index 2075e9e..9893b6e 100644 --- a/question_types/short_answer/short_answer.classes.inc +++ b/question_types/short_answer/short_answer.classes.inc @@ -36,8 +36,7 @@ class ShortAnswerQuestion extends QuizQuestion { if ($is_new || $this->node->revision == 1) { $id = db_insert('quiz_short_answer_node_properties') ->fields(array( - 'nid' => $this->node->nid, - 'vid' => $this->node->vid, + 'qqp_id' => $this->quiz_question->qqp_id, 'correct_answer' => $this->node->correct_answer, 'correct_answer_evaluation' => $this->node->correct_answer_evaluation, )) @@ -50,8 +49,7 @@ class ShortAnswerQuestion extends QuizQuestion { 'correct_answer' => $this->node->correct_answer, 'correct_answer_evaluation' => $this->node->correct_answer_evaluation, )) - ->condition('nid', $this->node->nid) - ->condition('vid', $this->node->vid) + ->condition('qqp_id', $this->quiz_question->qqp_id) ->execute(); } } @@ -100,7 +98,7 @@ class ShortAnswerQuestion extends QuizQuestion { } $props = parent::getNodeProperties(); $res_a = db_query('SELECT correct_answer, correct_answer_evaluation FROM {quiz_short_answer_node_properties} - WHERE nid = :nid AND vid = :vid', array(':nid' => $this->node->nid, ':vid' => $this->node->vid))->fetchAssoc(); + WHERE qqp_id = :qqp_id', array(':qqp_id' => $this->quiz_question->qqp_id))->fetchAssoc(); $this->nodeProperties = (is_array($res_a)) ? array_merge($props, $res_a) : $props; return $this->nodeProperties; } diff --git a/question_types/short_answer/short_answer.install b/question_types/short_answer/short_answer.install index 64284be..ac840c3 100644 --- a/question_types/short_answer/short_answer.install +++ b/question_types/short_answer/short_answer.install @@ -21,12 +21,10 @@ function short_answer_schema() { // Properties for a question nodes go in here: $schema['quiz_short_answer_node_properties'] = array( 'fields' => array( - 'nid' => array( - 'type' => 'int', - 'unsigned' => TRUE, - 'not null' => TRUE, + 'qsa_id' => array( + 'type' => 'serial', ), - 'vid' => array( + 'qqp_id' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, @@ -66,7 +64,14 @@ function short_answer_schema() { 'type' => 'text' ), ), - 'primary key' => array('nid', 'vid'), + 'primary key' => array( + 'qsa_id', + ), + 'unique_keys' => array( + 'qqp_id' => array( + 'qqp_id', + ), + ), ); // User answers go in here. @@ -162,3 +167,10 @@ function short_answer_update_7500() { db_add_unique_key('quiz_short_answer_user_answers', 'result_answer_id', array('result_answer_id')); } + +/** + * Normalize question storage. + */ +function short_answer_update_7501() { + return _quiz_normalize_question_storage_helper('quiz_short_answer_node_properties', 'qsa_id'); +} diff --git a/question_types/truefalse/truefalse.classes.inc b/question_types/truefalse/truefalse.classes.inc index 8ea4187..4ce66db 100644 --- a/question_types/truefalse/truefalse.classes.inc +++ b/question_types/truefalse/truefalse.classes.inc @@ -13,15 +13,15 @@ class TrueFalseQuestion extends QuizQuestion { /** * Implementation of saveNodeProperties + * @todo use entity save * * @see QuizQuestion#saveNodeProperties($is_new) */ public function saveNodeProperties($is_new = FALSE) { if ($is_new || $this->node->revision == 1) { - $id = db_insert('quiz_truefalse_node') + db_insert('quiz_truefalse_node') ->fields(array( - 'nid' => $this->node->nid, - 'vid' => $this->node->vid, + 'qqp_id' => $this->quiz_question->qqp_id, 'correct_answer' => $this->node->correct_answer, )) ->execute(); @@ -31,8 +31,7 @@ class TrueFalseQuestion extends QuizQuestion { ->fields(array( 'correct_answer' => (int) $this->node->correct_answer, )) - ->condition('nid', $this->node->nid) - ->condition('vid', $this->node->vid) + ->condition('qqp_id', $this->quiz_question->qqp_id) ->execute(); } } @@ -80,7 +79,7 @@ class TrueFalseQuestion extends QuizQuestion { } $props = parent::getNodeProperties(); - $res_a = db_query('SELECT correct_answer FROM {quiz_truefalse_node} WHERE nid = :nid AND vid = :vid', array(':nid' => $this->node->nid, ':vid' => $this->node->vid))->fetchAssoc(); + $res_a = db_query('SELECT * FROM {quiz_truefalse_node} WHERE qqp_id = :qqp_id', array(':qqp_id' => $this->quiz_question->qqp_id))->fetchAssoc(); if (is_array($res_a)) { $props = array_merge($props, $res_a); @@ -191,7 +190,7 @@ class TrueFalseQuestion extends QuizQuestion { * This is a utility function. It is not defined in the interface. */ public function getCorrectAnswer() { - return db_query('SELECT correct_answer FROM {quiz_truefalse_node} WHERE nid = :nid AND vid = :vid', array(':nid' => $this->node->nid, ':vid' => $this->node->vid))->fetchField(); + return $this->node->correct_answer; } } diff --git a/question_types/truefalse/truefalse.install b/question_types/truefalse/truefalse.install index 547a282..9d3296b 100644 --- a/question_types/truefalse/truefalse.install +++ b/question_types/truefalse/truefalse.install @@ -23,12 +23,10 @@ function truefalse_schema() { // Extensions to nodes for T/F $schema['quiz_truefalse_node'] = array( 'fields' => array( - 'nid' => array( - 'type' => 'int', - 'unsigned' => TRUE, - 'not null' => TRUE, + 'qtf_id' => array( + 'type' => 'serial', ), - 'vid' => array( + 'qqp_id' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, @@ -42,7 +40,12 @@ function truefalse_schema() { ), ), 'primary key' => array( - 'vid', 'nid' + 'qtf_id', + ), + 'unique_keys' => array( + 'qqp_id' => array( + 'qqp_id', + ), ), ); @@ -82,7 +85,7 @@ function truefalse_schema() { } /** - * Normalize data storage. + * Normalize response storage. */ function truefalse_update_7500() { db_drop_primary_key('quiz_truefalse_user_answers'); @@ -104,4 +107,13 @@ function truefalse_update_7500() { db_drop_field('quiz_truefalse_user_answers', 'question_vid'); db_add_unique_key('quiz_truefalse_user_answers', 'result_answer_id', array('result_answer_id')); + + return t('Normalized truefalse response storage.'); +} + +/** + * Normalize question storage. + */ +function truefalse_update_7501() { + return _quiz_normalize_question_storage_helper('quiz_truefalse_node', 'qtf_id'); }