NOTES ON DEVELOPING EXTENSIONS FOR QUIZ ======================================= Hooks for interacting with a quiz: - hook_quiz_begin($quiz, $rid): This hook is called when a user first begins a quiz. - hook_quiz_finished($quiz, $score, $rid): This hook is called immediately after a user finishes taking a quiz. - hook_quiz_scored($quiz, $score, $rid): This is called when a quiz score is updated. See http://drupal.org/node/460456 DEVELOPING NEW QUESTION TYPES: You need to create a new module that extends the existing question type core. The multichoice question type provides a precise example. Here are the steps: 1. Create a new module 2. Use your module's .install file to create the necessary tables 3. Make sure you module implements hook_quiz_question_info() 4. Define classes that extends QuizQuestion and QuizQuestionResponse. For a complete example, see multichoice.classes.inc. ================================================== How to clean up the database during development ================================================== # see what questions are deleted but still in quizzes SELECT qnr.* FROM quiz_node_relationship qnr LEFT JOIN node n ON qnr.child_nid = n.nid WHERE n.nid IS NULL # delete questions that are deleted but still in quizzes DELETE qnr FROM quiz_node_relationship qnr LEFT JOIN node n ON qnr.child_nid = n.nid WHERE n.nid IS NULL # see what quizzes are deleted but still have questions SELECT qnr.* FROM quiz_node_relationship qnr LEFT JOIN node n ON qnr.parent_nid = n.nid WHERE n.nid IS NULL # delete quizzes that are deleted but still have questions DELETE qnr FROM quiz_node_relationship qnr LEFT JOIN node n ON qnr.parent_nid = n.nid WHERE n.nid IS NULL # see what revisions are stored for nodes that are deleted SELECT nr.* FROM node_revisions nr LEFT JOIN node n ON nr.nid = n.nid WHERE n.nid IS NULL # delete orphaned revisions DELETE nr FROM node_revisions nr LEFT JOIN node n ON nr.nid = n.nid WHERE n.nid IS NULL