Still working on grading ...
$modform->grades[$key] = 1; // default score
}
}
- $modform->questions = implode(",", $questions);
+ if ($questions) {
+ $modform->questions = implode(",", $questions);
+ } else {
+ $modform->questions = "";
+ }
}
if ($delete) { /// Delete a question from the list
if (!$options = get_record("quiz_shortanswer", "question", $question->id)) {
notify("Error: Missing question options!");
}
- echo "<P>$question->question</P>";
+ echo text_to_html($question->questiontext);
if ($question->image) {
print_file_picture($question->image, $courseid, 200);
}
if (!$false->answer) {
$false->answer = get_string("false", "quiz");
}
- echo "<P>$question->question</P>";
+ echo text_to_html($question->questiontext);
if ($question->image) {
print_file_picture($question->image, $courseid, 200);
}
if (!$answers = get_records_list("quiz_answers", "id", $options->answers)) {
notify("Error: Missing question answers!");
}
- echo "<P>$question->question</P>";
+ echo text_to_html($question->questiontext);
if ($question->image) {
print_file_picture($question->image, $courseid, 200);
}
echo "<INPUT TYPE=hidden NAME=q VALUE=\"$quiz->id\">";
foreach ($questions as $key => $questionid) {
print_simple_box_start("CENTER", "90%");
- quiz_print_question($key+1, $questionid, $grades[$questionid]->grade, $course->id);
+ quiz_print_question($key+1, $questionid, $grades[$questionid]->grade, $quiz->course);
print_simple_box_end();
echo "<BR>";
}
}
-function quiz_get_answer($question) {
+function quiz_get_answers($question) {
// Given a question, returns the correct answers and grades
switch ($question->type) {
case SHORTANSWER; // Could be multiple answers
- return get_records_sql("SELECT a.*, sa.case, g.grade
+ return get_records_sql("SELECT a.*, sa.usecase, g.grade
FROM quiz_shortanswer sa, quiz_answers a, quiz_question_grades g
WHERE sa.question = '$question->id'
AND sa.question = a.question
$result->sumgrades = 0;
+ global $db;
+ $db->debug=true;
+
foreach ($questions as $question) {
- if (!$answers = quiz_get_answer($question)) {
- error("No answer defined for question id $question->id!");
+ if (!$answers = quiz_get_answers($question)) {
+ error("No answers defined for question id $question->id!");
}
$grade = 0; // default
}
foreach($answers as $answer) { // There might be multiple right answers
$feedback[$answer->id] = $answer->feedback;
- if (!$answer->case) { // Don't compare case
+ if (!$answer->usecase) { // Don't compare case
$answer->answer = strtolower($answer->answer);
$question->answer = strtolower($question->answer);
}
<TR valign=top>\r
<TD align=right><P><B><? print_string("question", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <textarea name="intro" rows=5 cols=50 wrap="virtual"><? p($question->question) ?></textarea>\r
+ <textarea name="questiontext" rows=5 cols=50 wrap="virtual"><? p($question->questiontext)?></textarea>\r
<? helpbutton("text", get_string("helptext")); ?>\r
</TD>\r
</TR>\r
<TR valign=top>\r
- <TD align=right><P><B><? print_string("imageaddress", "quiz") ?>:</B></P></TD>\r
+ <TD align=right><P><B><? print_string("imagedisplay", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <INPUT type="text" name="image" size=80 value="<? p($question->image) ?>">\r
+ <? choose_from_menu($images, "image", "$question->image", get_string("none"),"",""); ?>\r
</TD>\r
</TR>\r
<TR valign=top>\r
<TD align=right><P><B><? print_string("answerhowmany", "quiz") ?>:</B></P></TD>\r
<TD>\r
<?\r
- $options[0] = get_string("answersingleno", "quiz");\r
- $options[1] = get_string("answersingleyes", "quiz");\r
- choose_from_menu($options, "single", "$options->single", "");\r
+ unset($menu);\r
+ $menu[0] = get_string("answersingleno", "quiz");\r
+ $menu[1] = get_string("answersingleyes", "quiz");\r
+ choose_from_menu($menu, "single", "$options->single", "");\r
?>\r
</TD>\r
</TR>\r
<INPUT type="text" name="answer[]" size=50 value="<? p($answers[0]->answer) ?>"> \r
<? print_string("grade", "quiz");\r
echo ": ";\r
- choose_from_menu($gradeoptions, "fraction[]", "$answers[0]->fraction", ""); ?>\r
+ choose_from_menu($gradeoptionsfull, "fraction[]", $answers[0]->fraction, ""); ?>\r
<BR>\r
</TD>\r
</TR>\r
<TR valign=top>\r
<TD align=right><P><B><? print_string("feedback", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <textarea name="feedback" rows=2 cols=50 wrap="virtual"><? p($answers[0]->feedback) ?></textarea>\r
+ <textarea name="feedback[]" rows=2 cols=50 wrap="virtual"><? p($answers[0]->feedback) ?></textarea>\r
</TD>\r
</TR>\r
\r
<INPUT type="text" name="answer[]" size=50 value="<? p($answers[1]->answer) ?>"> \r
<? print_string("grade", "quiz");\r
echo ": ";\r
- choose_from_menu($gradeoptions, "fraction[]", "$answers[1]->fraction", ""); ?>\r
+ choose_from_menu($gradeoptionsfull, "fraction[]", $answers[1]->fraction, ""); ?>\r
<BR>\r
</TD>\r
</TR>\r
<TR valign=top>\r
<TD align=right><P><B><? print_string("feedback", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <textarea name="feedback" rows=2 cols=50 wrap="virtual"><? p($answers[1]->feedback) ?></textarea>\r
+ <textarea name="feedback[]" rows=2 cols=50 wrap="virtual"><? p($answers[1]->feedback) ?></textarea>\r
</TD>\r
</TR>\r
\r
<INPUT type="text" name="answer[]" size=50 value="<? p($answers[2]->answer) ?>"> \r
<? print_string("grade", "quiz");\r
echo ": ";\r
- choose_from_menu($gradeoptions, "fraction[]", "$answers[2]->fraction", ""); ?>\r
+ choose_from_menu($gradeoptionsfull, "fraction[]", $answers[2]->fraction, ""); ?>\r
<BR>\r
</TD>\r
</TR>\r
<TR valign=top>\r
<TD align=right><P><B><? print_string("feedback", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <textarea name="feedback" rows=2 cols=50 wrap="virtual"><? p($answers[2]->feedback) ?></textarea>\r
+ <textarea name="feedback[]" rows=2 cols=50 wrap="virtual"><? p($answers[2]->feedback) ?></textarea>\r
</TD>\r
</TR>\r
\r
<INPUT type="text" name="answer[]" size=50 value="<? p($answers[3]->answer) ?>"> \r
<? print_string("grade", "quiz");\r
echo ": ";\r
- choose_from_menu($gradeoptions, "fraction[]", "$answers[3]->fraction", ""); ?>\r
+ choose_from_menu($gradeoptionsfull, "fraction[]", $answers[3]->fraction, ""); ?>\r
<BR>\r
</TD>\r
</TR>\r
<TR valign=top>\r
<TD align=right><P><B><? print_string("feedback", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <textarea name="feedback" rows=2 cols=50 wrap="virtual"><? p($answers[3]->feedback) ?></textarea>\r
+ <textarea name="feedback[]" rows=2 cols=50 wrap="virtual"><? p($answers[3]->feedback) ?></textarea>\r
</TD>\r
</TR>\r
\r
<INPUT type="text" name="answer[]" size=50 value="<? p($answers[4]->answer) ?>"> \r
<? print_string("grade", "quiz");\r
echo ": ";\r
- choose_from_menu($gradeoptions, "fraction[]", "$answers[4]->fraction", ""); ?>\r
+ choose_from_menu($gradeoptionsfull, "fraction[]", $answers[4]->fraction, ""); ?>\r
<BR>\r
</TD>\r
</TR>\r
<TR valign=top>\r
<TD align=right><P><B><? print_string("feedback", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <textarea name="feedback" rows=2 cols=50 wrap="virtual"><? p($answers[4]->feedback) ?></textarea>\r
+ <textarea name="feedback[]" rows=2 cols=50 wrap="virtual"><? p($answers[4]->feedback) ?></textarea>\r
</TD>\r
</TR>\r
\r
<INPUT type="text" name="answer[]" size=50 value="<? p($answers[5]->answer) ?>"> \r
<? print_string("grade", "quiz");\r
echo ": ";\r
- choose_from_menu($gradeoptions, "fraction[]", "$answers[5]->fraction", ""); ?>\r
+ choose_from_menu($gradeoptionsfull, "fraction[]", $answers[5]->fraction, ""); ?>\r
<BR>\r
</TD>\r
</TR>\r
<TR valign=top>\r
<TD align=right><P><B><? print_string("feedback", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <textarea name="feedback" rows=2 cols=50 wrap="virtual"><? p($answers[5]->feedback) ?></textarea>\r
+ <textarea name="feedback[]" rows=2 cols=50 wrap="virtual"><? p($answers[5]->feedback) ?></textarea>\r
</TD>\r
</TR>\r
</TABLE>\r
require("../../config.php");
require("lib.php");
+ require("../../files/mimetypes.php");
optional_variable($id);
$type = $question->type;
- switch ($type) {
- case SHORTANSWER:
- print_heading(get_string("editingshortanswer", "quiz"));
- require("shortanswer.html");
- break;
- case TRUEFALSE:
- print_heading(get_string("editingtruefalse", "quiz"));
- require("truefalse.html");
- break;
- case MULTICHOICE:
- print_heading(get_string("editingmultichoice", "quiz"));
- require("multichoice.html");
- break;
- }
} else if ($category) {
if (! $category = get_record("quiz_categories", "id", $category)) {
if (match_referer() and isset($HTTP_POST_VARS)) { // question submitted
+ $form = (object)$HTTP_POST_VARS;
+
+ // First, save the basic question itself
+ $question->name = $form->name;
+ $question->questiontext = $form->questiontext;
+ $question->image = $form->image;
+
+ if ($question->id) { // Question already exists
+ if (!update_record("quiz_questions", $question)) {
+ error("Could not update question!");
+ }
+ } else { // Question is a new one
+ $db->debug =true;
+ if (!$question->id = insert_record("quiz_questions", $question)) {
+ error("Could not insert new question!");
+ }
+ }
+
+ // Now to save all the answers and type-specific options
+
+ switch ($question->type) {
+ case SHORTANSWER:
+ // Delete all the old answers
+ delete_records("quiz_answers", "question", $question->id);
+ delete_records("quiz_shortanswer", "question", $question->id);
+
+ $answers = array();
+
+ // Insert all the new answers
+ foreach ($form->answer as $key => $formanswer) {
+ if ($formanswer) {
+ unset($answer);
+ $answer->answer = $formanswer;
+ $answer->question = $question->id;
+ $answer->fraction = $fraction[$key];
+ $answer->feedback = $feedback[$key];
+ if (!$answer->id = insert_record("quiz_answers", $answer)) {
+ error("Could not insert quiz answer!");
+ }
+ $answers[] = $answer->id;
+ }
+ }
+
+ unset($options);
+ $options->question = $question->id;
+ $options->answers = implode(",",$answers);
+ $options->usecase = $form->usecase;
+ if (!insert_record("quiz_shortanswer", $options)) {
+ error("Could not insert quiz shortanswer options!");
+ }
+ break;
+ case TRUEFALSE:
+ delete_records("quiz_answers", "question", $question->id);
+ delete_records("quiz_truefalse", "question", $question->id);
+
+ $true->answer = get_string("true", "quiz");
+ $true->question = $question->id;
+ $true->fraction = "1.0";
+ $true->feedback = $form->feedbacktrue;
+ if (!$true->id = insert_record("quiz_answers", $true)) {
+ error("Could not insert quiz answer \"true\")!");
+ }
+
+ $false->answer = get_string("false", "quiz");
+ $false->question = $question->id;
+ $false->fraction = "0";
+ $false->feedback = $form->feedbackfalse;
+ if (!$false->id = insert_record("quiz_answers", $false)) {
+ error("Could not insert quiz answer \"false\")!");
+ }
+
+ unset($options);
+ $options->question = $question->id;
+ $options->true = $true->id;
+ $options->false = $false->id;
+ if (!insert_record("quiz_truefalse", $options)) {
+ error("Could not insert quiz truefalse options!");
+ }
+ break;
+ case MULTICHOICE:
+ delete_records("quiz_answers", "question", $question->id);
+ delete_records("quiz_multichoice", "question", $question->id);
+
+ $answers = array();
+
+ // Insert all the new answers
+ foreach ($form->answer as $key => $formanswer) {
+ if ($formanswer) {
+ unset($answer);
+ $answer->answer = $formanswer;
+ $answer->question = $question->id;
+ $answer->fraction = $fraction[$key];
+ $answer->feedback = $feedback[$key];
+ if (!$answer->id = insert_record("quiz_answers", $answer)) {
+ error("Could not insert quiz answer!");
+ }
+ $answers[] = $answer->id;
+ }
+ }
+
+ unset($options);
+ $options->question = $question->id;
+ $options->answers = implode(",",$answers);
+ $options->single = $form->single;
+ if (!insert_record("quiz_multichoice", $options)) {
+ error("Could not insert quiz multichoice options!");
+ }
+ break;
+ default:
+ error("Non-existent question type!");
+ break;
+ }
+
redirect("edit.php");
}
- $grades = array(100,90,80,75,70,66.66,60,50,40,33.33,30,25,20,10,5);
+ $grades = array(1,0.9,0.8,0.75,0.70,0.6666,0.60,0.50,0.40,0.3333,0.30,0.25,0.20,0.10,0.05,0);
foreach ($grades as $grade) {
- $gradeoptions[$grade] = "$grade %";
- $gradeoptionsfull[$grade] = "$grade %";
- $gradeoptionsfull[-$grade] = -$grade." %";
+ $percentage = 100 * $grade;
+ $neggrade = -$grade;
+ $gradeoptions["$grade"] = "$percentage %";
+ $gradeoptionsfull["$grade"] = "$percentage %";
+ $gradeoptionsfull["$neggrade"] = -$percentage." %";
}
+ $gradeoptionsfull["0"] = $gradeoptions["0"] = get_string("none");
+
arsort($gradeoptions, SORT_NUMERIC);
arsort($gradeoptionsfull, SORT_NUMERIC);
error("No categories!");
}
+
+ $coursefiles = get_directory_list("$CFG->dataroot/$course->id", $CFG->moddata);
+ foreach ($coursefiles as $filename) {
+ if (mimeinfo("icon", $filename) == "image.gif") {
+ $images["$filename"] = $filename;
+ }
+ }
+
// Print the question editing form
switch ($type) {
<TR valign=top>\r
<TD align=right><P><B><? print_string("question", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <textarea name="intro" rows=6 cols=50 wrap="virtual"><? p($question->question) ?></textarea>\r
+ <textarea name="questiontext" rows=6 cols=50 wrap="virtual"><? p($question->questiontext)?></textarea>\r
<? helpbutton("text", get_string("helptext")); ?>\r
</TD>\r
</TR>\r
<TR valign=top>\r
- <TD align=right><P><B><? print_string("imageaddress", "quiz") ?>:</B></P></TD>\r
+ <TD align=right><P><B><? print_string("imagedisplay", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <INPUT type="text" name="image" size=80 value="<? p($question->image) ?>">\r
+ <? choose_from_menu($images, "image", "$question->image", get_string("none"),"",""); ?>\r
</TD>\r
</TR>\r
<TR valign=top>\r
<TD align=right><P><B><? print_string("casesensitive", "quiz") ?>:</B></P></TD>\r
<TD>\r
<?\r
- $options[0] = get_string("caseno", "quiz");\r
- $options[1] = get_string("caseyes", "quiz");\r
- choose_from_menu($options, "case", "$options->case", "");\r
+ unset($menu);\r
+ $menu[0] = get_string("caseno", "quiz");\r
+ $menu[1] = get_string("caseyes", "quiz");\r
+ choose_from_menu($menu, "usecase", "$options->usecase", "");\r
?>\r
</TD>\r
</TR>\r
<INPUT type="text" name="answer[]" size=50 value="<? p($answers[0]->answer) ?>"> \r
<? print_string("grade", "quiz");\r
echo ": ";\r
- choose_from_menu($gradeoptions, "fraction[]", "$answers[0]->fraction", ""); ?>\r
+ choose_from_menu($gradeoptions, "fraction[]", $answers[0]->fraction,""); ?>\r
<BR>\r
</TD>\r
</TR>\r
<TR valign=top>\r
<TD align=right><P><B><? print_string("feedback", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <textarea name="feedback" rows=2 cols=50 wrap="virtual"><? p($answers[0]->feedback) ?></textarea>\r
+ <textarea name="feedback[]" rows=2 cols=50 wrap="virtual"><? p($answers[0]->feedback) ?></textarea>\r
</TD>\r
</TR>\r
\r
<INPUT type="text" name="answer[]" size=50 value="<? p($answers[1]->answer) ?>"> \r
<? print_string("grade", "quiz");\r
echo ": ";\r
- choose_from_menu($gradeoptions, "fraction[]", "$answers[1]->fraction", ""); ?>\r
+ choose_from_menu($gradeoptions, "fraction[]", $answers[1]->fraction,""); ?>\r
<BR>\r
</TD>\r
</TR>\r
<TR valign=top>\r
<TD align=right><P><B><? print_string("feedback", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <textarea name="feedback" rows=2 cols=50 wrap="virtual"><? p($answers[1]->feedback) ?></textarea>\r
+ <textarea name="feedback[]" rows=2 cols=50 wrap="virtual"><? p($answers[1]->feedback) ?></textarea>\r
</TD>\r
</TR>\r
\r
<INPUT type="text" name="answer[]" size=50 value="<? p($answers[2]->answer) ?>"> \r
<? print_string("grade", "quiz");\r
echo ": ";\r
- choose_from_menu($gradeoptions, "fraction[]", "$answers[2]->fraction", ""); ?>\r
+ choose_from_menu($gradeoptions, "fraction[]", $answers[2]->fraction,""); ?>\r
<BR>\r
</TD>\r
</TR>\r
<TR valign=top>\r
<TD align=right><P><B><? print_string("feedback", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <textarea name="feedback" rows=2 cols=50 wrap="virtual"><? p($answers[2]->feedback) ?></textarea>\r
+ <textarea name="feedback[]" rows=2 cols=50 wrap="virtual"><? p($answers[2]->feedback) ?></textarea>\r
</TD>\r
</TR>\r
+\r
+<TR valign=top>\r
+ <TD colspan=2> </TD>\r
+</TR>\r
+\r
+<TR valign=top>\r
+ <TD align=right><P><B><? print_string("answer", "quiz") ?> 4:</B></P></TD>\r
+ <TD>\r
+ <INPUT type="text" name="answer[]" size=50 value="<? p($answers[3]->answer) ?>"> \r
+ <? print_string("grade", "quiz");\r
+ echo ": ";\r
+ choose_from_menu($gradeoptions, "fraction[]", $answers[3]->fraction,""); ?>\r
+ <BR>\r
+ </TD>\r
+</TR>\r
+<TR valign=top>\r
+ <TD align=right><P><B><? print_string("feedback", "quiz") ?>:</B></P></TD>\r
+ <TD>\r
+ <textarea name="feedback[]" rows=2 cols=50 wrap="virtual"><? p($answers[3]->feedback) ?></textarea>\r
+ </TD>\r
+</TR>\r
+\r
+<TR valign=top>\r
+ <TD colspan=2> </TD>\r
+</TR>\r
+\r
+<TR valign=top>\r
+ <TD align=right><P><B><? print_string("answer", "quiz") ?> 5:</B></P></TD>\r
+ <TD>\r
+ <INPUT type="text" name="answer[]" size=50 value="<? p($answers[4]->answer) ?>"> \r
+ <? print_string("grade", "quiz");\r
+ echo ": ";\r
+ choose_from_menu($gradeoptions, "fraction[]", $answers[4]->fraction,""); ?>\r
+ <BR>\r
+ </TD>\r
+</TR>\r
+<TR valign=top>\r
+ <TD align=right><P><B><? print_string("feedback", "quiz") ?>:</B></P></TD>\r
+ <TD>\r
+ <textarea name="feedback[]" rows=2 cols=50 wrap="virtual"><? p($answers[4]->feedback) ?></textarea>\r
+ </TD>\r
+</TR>\r
+\r
</TABLE>\r
\r
<INPUT type="hidden" name=id value="<? p($question->id) ?>">\r
<TR valign=top>\r
<TD align=right><P><B><? print_string("question", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <textarea name="intro" rows=6 cols=50 wrap="virtual"><? p($question->question) ?></textarea>\r
+ <textarea name="questiontext" rows=6 cols=50 wrap="virtual"><? p($question->questiontext)?></textarea>\r
<? helpbutton("text", get_string("helptext")); ?>\r
</TD>\r
</TR>\r
<TR valign=top>\r
- <TD align=right><P><B><? print_string("imageaddress", "quiz") ?>:</B></P></TD>\r
+ <TD align=right><P><B><? print_string("imagedisplay", "quiz") ?>:</B></P></TD>\r
<TD>\r
- <INPUT type="text" name="image" size=80 value="<? p($question->image) ?>">\r
+ <? choose_from_menu($images, "image", "$question->image", get_string("none"),"",""); ?>\r
</TD>\r
</TR>\r
\r