Added question type that is used if a question of unknown type is encountered.
Also removed some of the unnecessary calls to name()
This commit is contained in:
+9
-2
@@ -521,6 +521,10 @@ function get_question_options(&$questions) {
|
||||
$keys = array_keys($questions);
|
||||
// update each question object
|
||||
foreach ($keys as $i) {
|
||||
if (!array_key_exists($questions[$i]->qtype, $QTYPES)) {
|
||||
$questions[$i]->qtype = 'missingtype';
|
||||
}
|
||||
|
||||
// set name prefix
|
||||
$questions[$i]->name_prefix = question_make_name_prefix($i);
|
||||
|
||||
@@ -529,6 +533,9 @@ function get_question_options(&$questions) {
|
||||
}
|
||||
return true;
|
||||
} else { // deal with single question
|
||||
if (!array_key_exists($questions->qtype, $QTYPES)) {
|
||||
$questions->qtype = 'missingtype';
|
||||
}
|
||||
$questions->name_prefix = question_make_name_prefix($questions->id);
|
||||
return $QTYPES[$questions->qtype]->get_question_options($questions);
|
||||
}
|
||||
@@ -1155,12 +1162,12 @@ function print_question_icon($question, $editlink=true, $return = false) {
|
||||
|
||||
$namestr = get_string($question->qtype, 'quiz');
|
||||
$html = '<img border="0" height="16" width="16" src="'.$CFG->wwwroot.'/question/type/'.
|
||||
$QTYPES[$question->qtype]->name().'/icon.gif" alt="'.
|
||||
$question->qtype.'/icon.gif" alt="'.
|
||||
$namestr.'" title="'.$namestr.'" />';
|
||||
|
||||
if ($editlink) {
|
||||
$html = "<a href=\"$CFG->wwwroot/question/question.php?id=$question->id\" title=\""
|
||||
.$QTYPES[$question->qtype]->name()."\">".
|
||||
.$question->qtype."\">".
|
||||
$html."</a>\n";
|
||||
}
|
||||
if ($return) {
|
||||
|
||||
@@ -181,9 +181,15 @@ function quiz_print_question_list($quiz, $allowdelete=true, $showbreaks=true, $r
|
||||
echo "<tr><th colspan=\"3\" nowrap=\"nowrap\" class=\"header\">$strorder</th><th class=\"header\">#</th><th align=\"left\" width=\"100%\" nowrap=\"nowrap\" class=\"header\">$strquestionname</th><th nowrap=\"nowrap\" class=\"header\">$strtype</th><th nowrap=\"nowrap\" class=\"header\">$strgrade</th><th align=\"center\" width=\"60\" nowrap=\"nowrap\" class=\"header\">$straction</th></tr>\n";
|
||||
foreach ($order as $i => $qnum) {
|
||||
|
||||
if ($qnum and empty($questions[$qnum])) {
|
||||
if (!$qnum or empty($questions[$qnum])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the questiontype is missing change the question type
|
||||
if (!array_key_exists($questions[$qnum]->qtype, $QTYPES)) {
|
||||
$questions[$qnum]->qtype = 'missingtype';
|
||||
}
|
||||
|
||||
// Show the re-ordering field if the tool is turned on.
|
||||
// But don't show it in front of pagebreaks if they are hidden.
|
||||
if ($reordertool) {
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
}
|
||||
|
||||
$qtype = $question->qtype;
|
||||
if (!isset($QTYPES[$qtype])) {
|
||||
$qtype = 'missingtype';
|
||||
}
|
||||
|
||||
} else if ($category) { // only for creating new questions
|
||||
if (! $category = get_record("question_categories", "id", $category)) {
|
||||
@@ -346,7 +349,7 @@
|
||||
|
||||
echo '<br />';
|
||||
print_simple_box_start('center');
|
||||
require_once('type/'.$QTYPES[$qtype]->name().'/editquestion.php');
|
||||
require_once('type/'.$qtype.'/editquestion.php');
|
||||
print_simple_box_end();
|
||||
|
||||
if ($usehtmleditor) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<table id="q<?php echo $question->id; ?>" class="question <?php echo $this->name(); ?>"><tr><td>
|
||||
<table id="q<?php echo $question->id; ?>" class="question <?php echo $question->qtype; ?>"><tr><td>
|
||||
<div class="info">
|
||||
<span class="edit"><?php echo $editlink; ?></span>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php notify('This question is of a type that has not been installed on your Moodle yet.<br />Please alert your Moodle administrator.'); ?>
|
||||
<div class="qtext">
|
||||
<?php echo $questiontext; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($image) { ?>
|
||||
<img class="qimage" src="<?php echo $q->imageurl; ?>" alt="" />
|
||||
<?php } ?>
|
||||
|
||||
<div class="ablock clearfix">
|
||||
<div class="prompt">
|
||||
<?php print_string('answers', 'quiz'); ?>
|
||||
</div>
|
||||
|
||||
<table class="answer">
|
||||
<?php $row = 1; foreach ($anss as $answer) { ?>
|
||||
<tr class="<?php echo 'r'.$row = $row ? 0 : 1; ?>">
|
||||
<td class="c1 text">
|
||||
<?php echo $answer->text; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</table>
|
||||
</div>
|
||||
@@ -0,0 +1,127 @@
|
||||
<form name="theform" method="post" action="question.php">
|
||||
<center>
|
||||
<table cellpadding="5">
|
||||
|
||||
<tr valign="top">
|
||||
<td align="right"><b><?php print_string("category", "quiz") ?>:</b></td>
|
||||
<td align="left">
|
||||
<?php question_category_select_menu($course->id, true, true, $question->category); ?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td align="right"><b><?php print_string("questionname", "quiz") ?>:</b></td>
|
||||
<td align="left">
|
||||
<input type="text" name="name" size="40" value="<?php p($question->name) ?>" alt="<?php print_string("questionname", "quiz") ?>" />
|
||||
<?php if (isset($err["name"])) formerr($err["name"]); ?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td align="right"><b><?php print_string("question", "quiz") ?>:</b>
|
||||
<br /><br /><br /><font size="1">
|
||||
<?php
|
||||
if ($usehtmleditor) {
|
||||
helpbutton("richtext", get_string("helprichtext"), "moodle", true, true);
|
||||
} else {
|
||||
helpbutton("text", get_string("helptext"), "moodle", true, true);
|
||||
}
|
||||
?>
|
||||
</font>
|
||||
</td>
|
||||
<td align="left">
|
||||
<?php
|
||||
if (isset($err["questiontext"])) {
|
||||
formerr($err["questiontext"]);
|
||||
echo "<br />";
|
||||
}
|
||||
print_textarea($usehtmleditor, 15, 60, 630, 300, "questiontext", $question->questiontext);
|
||||
if ($usehtmleditor) {
|
||||
echo '<input type="hidden" name="questiontextformat" value="'.FORMAT_HTML.'" />';
|
||||
} else {
|
||||
echo "<div align=\"right\">";
|
||||
print_string("formattexttype");
|
||||
echo ": ";
|
||||
if (!isset($question->questiontextformat)) {
|
||||
$question->questiontextformat = FORMAT_MOODLE;
|
||||
}
|
||||
choose_from_menu(format_text_menu(), "questiontextformat", $question->questiontextformat, "");
|
||||
helpbutton("textformat", get_string("helpformatting"));
|
||||
echo "</div>";
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td align="right"><b><?php print_string("imagedisplay", "quiz") ?>:</b></td>
|
||||
<td align="left">
|
||||
<?php
|
||||
if (empty($images)) {
|
||||
print_string("noimagesyet");
|
||||
} else {
|
||||
choose_from_menu($images, "image", "$question->image", get_string("none"),"","");
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td align="right"><b><?php print_string("defaultgrade", "quiz") ?>:</b></td>
|
||||
<td align="left">
|
||||
<input type="text" name="defaultgrade" size="3" value="<?php p($question->defaultgrade) ?>" alt="<?php print_string("defaultgrade", "quiz") ?>" />
|
||||
|
||||
<?php if (isset($err["defaultgrade"])) formerr($err["defaultgrade"]); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td align="right"><b><?php print_string("penaltyfactor", "quiz") ?>:</b></td>
|
||||
<td align="left">
|
||||
<input type="text" name="penalty" size="3" value="<?php p($question->penalty) ?>" alt="<?php print_string("penaltyfactor", "quiz") ?>" />
|
||||
<?php helpbutton('penalty', get_string('penalty', 'quiz'), 'quiz'); ?>
|
||||
<?php if (isset($err["penalty"])) formerr($err["penalty"]); ?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<?php
|
||||
for ($i=1; $i<=count($answers); $i++) {
|
||||
if (!isset($answers[$i-1]->fraction)) {
|
||||
$answers[$i-1]->answer = '';
|
||||
$answers[$i-1]->fraction = 0;
|
||||
$answers[$i-1]->feedback = '';
|
||||
}
|
||||
?>
|
||||
|
||||
<tr valign="top">
|
||||
<td align="right"><b><?php echo get_string("choice", "quiz")." $i"; ?>:</b></td>
|
||||
<td align="left">
|
||||
<input type="text" name="answer[]" size="50" value="<?php p($answers[$i-1]->answer) ?>" alt="<?php echo get_string("choice", "quiz")." $i"; ?>"/>
|
||||
<?php
|
||||
print_string("grade");
|
||||
echo ": ";
|
||||
choose_from_menu($gradeoptionsfull, "fraction[]", $answers[$i-1]->fraction, "");
|
||||
?>
|
||||
<br />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td align="right"><b><?php print_string("feedback", "quiz") ?>:</b></td>
|
||||
<td align="left">
|
||||
<textarea name="feedback[]" rows="2" cols="50"><?php p($answers[$i-1]->feedback) ?></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td colspan="2"> </td>
|
||||
</tr>
|
||||
|
||||
<?php
|
||||
} /// End of loop, printing answers
|
||||
$QTYPES['missingtype']->print_replacement_options($question, $course, $contextquiz);
|
||||
$QTYPES['missingtype']->print_question_form_end($question);
|
||||
?>
|
||||
</table>
|
||||
|
||||
</center>
|
||||
</form>
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php // $Id$
|
||||
|
||||
if (!empty($options->answers)) {
|
||||
$answersraw = get_records_list("question_answers", "id", $options->answers);
|
||||
|
||||
}
|
||||
|
||||
$answers = array();
|
||||
if (!empty($answersraw)) {
|
||||
foreach ($answersraw as $answer) {
|
||||
$answers[] = $answer; // insert answers into slots
|
||||
}
|
||||
}
|
||||
|
||||
$yesnooptions = array();
|
||||
$yesnooptions[0] = get_string("no");
|
||||
$yesnooptions[1] = get_string("yes");
|
||||
|
||||
print_heading_with_help(get_string("editingmissingtype", "quiz"), "multichoice", "quiz");
|
||||
require("$CFG->dirroot/question/type/missingtype/editquestion.html");
|
||||
|
||||
?>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 214 B |
@@ -0,0 +1,57 @@
|
||||
<?php // $Id$
|
||||
|
||||
///////////////////
|
||||
/// missingtype ///
|
||||
///////////////////
|
||||
|
||||
/// QUESTION TYPE CLASS //////////////////
|
||||
|
||||
/**
|
||||
* Missing question type class
|
||||
*
|
||||
* When a question is encountered with a type that is not installed then its
|
||||
* type is changed to 'missingtype'. This questiontype just makes sure that the
|
||||
* necessary information is printed about the question.
|
||||
*/
|
||||
class question_missingtype_qtype extends default_questiontype {
|
||||
|
||||
function name() {
|
||||
return 'missingtype';
|
||||
}
|
||||
|
||||
function print_question_formulation_and_controls(&$question, &$state, $cmoptions, $options) {
|
||||
global $CFG;
|
||||
|
||||
$answers = &$question->options->answers;
|
||||
|
||||
$formatoptions = new stdClass;
|
||||
$formatoptions->noclean = true;
|
||||
$formatoptions->para = false;
|
||||
|
||||
// Print formulation
|
||||
$questiontext = format_text($question->questiontext,
|
||||
$question->questiontextformat,
|
||||
$formatoptions, $cmoptions->course);
|
||||
$image = get_question_image($question, $cmoptions->course);
|
||||
|
||||
// Print each answer in a separate row
|
||||
foreach ($answers as $answer) {
|
||||
$a->text = format_text("$answer->answer", FORMAT_MOODLE, $formatoptions, $cmoptions->course);
|
||||
|
||||
$anss[] = clone($a);
|
||||
}
|
||||
include("$CFG->dirroot/question/type/missingtype/display.html");
|
||||
}
|
||||
|
||||
function grade_responses(&$question, &$state, $cmoptions) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//// END OF CLASS ////
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//// INITIATION - Without this line the question type is not in use... ///
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
$QTYPES['missingtype']= new question_missingtype_qtype();
|
||||
|
||||
?>
|
||||
@@ -3,7 +3,7 @@
|
||||
* print_question() method.
|
||||
*/
|
||||
?>
|
||||
<table id="q<?php echo $question->id; ?>" class="question <?php echo $this->name(); ?>"><tr><td>
|
||||
<table id="q<?php echo $question->id; ?>" class="question <?php echo $question->qtype; ?>"><tr><td>
|
||||
<div class="info">
|
||||
<span class="no"><?php echo $number; ?></span>
|
||||
<span class="edit"><?php echo $editlink; ?></span>
|
||||
|
||||
@@ -126,10 +126,7 @@ class default_questiontype {
|
||||
* it is not a standard question object.
|
||||
*/
|
||||
function save_question_options($question) {
|
||||
/// This default implementation must be overridden:
|
||||
|
||||
$result->error = "Unsupported question type ($question->qtype)!";
|
||||
return $result;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -330,9 +327,11 @@ class default_questiontype {
|
||||
function get_correct_responses(&$question, &$state) {
|
||||
/* The default implementation returns the response for the first answer
|
||||
that gives full marks. */
|
||||
foreach ($question->options->answers as $answer) {
|
||||
if (((int) $answer->fraction) === 1) {
|
||||
return array('' => $answer->answer);
|
||||
if ($question->options->answers) {
|
||||
foreach ($question->options->answers as $answer) {
|
||||
if (((int) $answer->fraction) === 1) {
|
||||
return array('' => $answer->answer);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user