From 14d8c0b4099b0d331bf6e766eac046e2259e173a Mon Sep 17 00:00:00 2001 From: moodler Date: Sun, 6 Oct 2002 17:06:54 +0000 Subject: [PATCH] Further work done. It currently can print the quiz form (including images!) but can't mark them yet. I've been constructing quizzes manually in the database and it's helping to refine the database structure. Don't count on anything stable in the quiz module for a few days yet ... --- mod/quiz/attempt.php | 13 ++++-- mod/quiz/db/mysql.php | 4 +- mod/quiz/db/mysql.sql | 19 +++++---- mod/quiz/lib.php | 98 ++++++++++++++++++++++++++++++++++++++++--- mod/quiz/version.php | 2 +- 5 files changed, 116 insertions(+), 20 deletions(-) diff --git a/mod/quiz/attempt.php b/mod/quiz/attempt.php index cb3ab1b4ff..b5ee176bce 100644 --- a/mod/quiz/attempt.php +++ b/mod/quiz/attempt.php @@ -85,23 +85,28 @@ /// Print all the questions echo "
"; - print_simple_box_start("CENTER"); if (!$quiz->questions) { - error("No questions have bee defined!", "view.php?id=$cm->id"); + error("No questions have been defined!", "view.php?id=$cm->id"); } $questions = explode(",", $quiz->questions); + if (!$grades = get_records_sql("SELECT question, grade FROM quiz_question_grades WHERE question in ($quiz->questions)")) { + error("No grades were found for these questions!"); + } + echo "
"; echo "id\">"; foreach ($questions as $key => $questionid) { - quiz_print_question($key+1, $questionid); + print_simple_box_start("CENTER", "90%"); + quiz_print_question($key+1, $questionid, $grades[$questionid]->grade, $course->id); + print_simple_box_end(); + echo "
"; } echo "
"; echo "
"; - print_simple_box_end(); // Finish the page print_footer($course); diff --git a/mod/quiz/db/mysql.php b/mod/quiz/db/mysql.php index d24d36560e..18a5176af3 100644 --- a/mod/quiz/db/mysql.php +++ b/mod/quiz/db/mysql.php @@ -6,7 +6,9 @@ function quiz_upgrade($oldversion) { global $CFG; - if ($oldversion < 2002100300) { + if ($oldversion < 2002110100) { + + echo "The quiz module is under heavy development ... at this stage you should delete all existing quiz tables, as well as the quiz entry in the 'modules' table, then come back here to rebuild them."; } diff --git a/mod/quiz/db/mysql.sql b/mod/quiz/db/mysql.sql index 4b884541c9..ddb835fb1c 100644 --- a/mod/quiz/db/mysql.sql +++ b/mod/quiz/db/mysql.sql @@ -3,7 +3,7 @@ # http://www.phpmyadmin.net/ (download page) # # Host: localhost -# Generation Time: Oct 03, 2002 at 11:15 PM +# Generation Time: Oct 07, 2002 at 12:23 AM # Server version: 3.23.49 # PHP Version: 4.2.3 # Database : `moodle` @@ -39,7 +39,7 @@ CREATE TABLE `quiz` ( CREATE TABLE `quiz_answers` ( `id` int(10) unsigned NOT NULL auto_increment, `question` int(10) unsigned NOT NULL default '0', - `answer` int(10) unsigned NOT NULL default '0', + `answer` varchar(255) NOT NULL default '', `grade` float NOT NULL default '0', `feedback` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) @@ -99,7 +99,8 @@ CREATE TABLE `quiz_multichoice` ( `layout` tinyint(4) NOT NULL default '0', `answers` varchar(255) NOT NULL default '', `single` tinyint(4) NOT NULL default '0', - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + KEY `question` (`question`) ) TYPE=MyISAM COMMENT='Options for multiple choice questions'; # -------------------------------------------------------- @@ -122,12 +123,11 @@ CREATE TABLE `quiz_question_grades` ( CREATE TABLE `quiz_questions` ( `id` int(10) NOT NULL auto_increment, - `course` int(10) NOT NULL default '0', + `category` int(10) NOT NULL default '0', `name` varchar(255) NOT NULL default '', `question` text NOT NULL, + `image` varchar(255) NOT NULL default '', `type` smallint(6) NOT NULL default '0', - `options` int(10) NOT NULL default '0', - `category` int(10) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM COMMENT='The quiz questions themselves'; # -------------------------------------------------------- @@ -155,7 +155,8 @@ CREATE TABLE `quiz_shortanswer` ( `question` int(10) unsigned NOT NULL default '0', `answer` int(10) NOT NULL default '0', `case` tinyint(4) NOT NULL default '0', - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + KEY `question` (`question`) ) TYPE=MyISAM COMMENT='Options for short answer questions'; # -------------------------------------------------------- @@ -168,6 +169,8 @@ CREATE TABLE `quiz_truefalse` ( `question` int(10) unsigned NOT NULL default '0', `true` int(10) unsigned NOT NULL default '0', `false` int(10) unsigned NOT NULL default '0', - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + KEY `question` (`question`) ) TYPE=MyISAM COMMENT='Options for True-False questions'; + diff --git a/mod/quiz/lib.php b/mod/quiz/lib.php index 94d0f5aefd..de777a0a57 100644 --- a/mod/quiz/lib.php +++ b/mod/quiz/lib.php @@ -100,12 +100,98 @@ function quiz_cron () { // Any other quiz functions go here. Each of them must have a name that // starts with quiz_ -function quiz_print_question($number, $questionid) { - echo "

$number

"; - echo ""; - echo "
"; +function quiz_print_question($number, $questionid, $grade, $courseid) { + + if (!$question = get_record("quiz_questions", "id", $questionid)) { + notify("Error: Question not found!"); + } + + $stranswer = get_string("answer", "quiz"); + $strmarks = get_string("marks", "quiz"); + + echo "
"; + echo "

$number
$grade $strmarks

"; + print_spacer(1,100); + echo "
"; + + switch ($question->type) { + case 1: // shortanswer + if (!$options = get_record("quiz_shortanswer", "question", $question->id)) { + notify("Error: Missing question options!"); + } + if (!$answer = get_record("quiz_answers", "id", $options->answer)) { + notify("Error: Missing question answers!"); + } + echo "

$question->question

"; + if ($question->image) { + print_file_picture($question->image, $courseid, 200); + } + echo "

$stranswer: id SIZE=20>

"; + break; + + case 2: // true-false + if (!$options = get_record("quiz_truefalse", "question", $question->id)) { + notify("Error: Missing question options!"); + } + if (!$true = get_record("quiz_answers", "id", $options->true)) { + notify("Error: Missing question answers!"); + } + if (!$false = get_record("quiz_answers", "id", $options->false)) { + notify("Error: Missing question answers!"); + } + if (!$true->answer) { + $true->answer = get_string("true", "quiz"); + } + if (!$false->answer) { + $false->answer = get_string("false", "quiz"); + } + echo "

$question->question

"; + if ($question->image) { + print_file_picture($question->image, $courseid, 200); + } + echo "

$stranswer:  "; + echo "id\" VALUE=\"$true->id\">$true->answer"; + echo "   "; + echo "id\" VALUE=\"$false->id\">$false->answer

"; + break; + + case 3: // multiple-choice + if (!$options = get_record("quiz_multichoice", "question", $question->id)) { + notify("Error: Missing question options!"); + } + if (!$answers = get_records_sql("SELECT * from quiz_answers WHERE id in ($options->answers)")) { + notify("Error: Missing question answers!"); + } + echo "

$question->question

"; + if ($question->image) { + print_file_picture($question->image, $courseid, 200); + } + echo ""; + echo "
$stranswer:  "; + echo ""; + $answerids = explode(",", $options->answers); + foreach ($answerids as $key => $answerid) { + $answer = $answers[$answerid]; + $qnum = $key + 1; + echo ""; + echo ""; + echo ""; + } + echo "
"; + if (!$options->single) { + echo "id VALUE=\"$answer->id\">"; + } else { + echo "id VALUE=\"$answer->id\">"; + } + echo "$qnum. $answer->answer
"; + echo "
"; + break; + + default: + notify("Error: Unknown question type!"); + } + + echo "
"; } diff --git a/mod/quiz/version.php b/mod/quiz/version.php index 203408afa2..d11556c041 100644 --- a/mod/quiz/version.php +++ b/mod/quiz/version.php @@ -5,7 +5,7 @@ // This fragment is called by moodle_needs_upgrading() and /admin/index.php //////////////////////////////////////////////////////////////////////////////// -$module->version = 2002100300; // The (date) version of this module +$module->version = 2002100600; // The (date) version of this module $module->cron = 0; // How often should cron check this module (seconds)? ?> -- 2.39.5