From 04ed1cebd7265c30c86bcc15b80273ff2bd6b099 Mon Sep 17 00:00:00 2001 From: pichetp Date: Wed, 3 Sep 2008 15:22:46 +0000 Subject: [PATCH] Improving multichoice display MDL-14763 merging from HEAD --- .../multianswer/edit_multianswer_form.php | 20 ++- question/type/multianswer/questiontype.php | 118 +++++++++++++++++- question/type/multichoice/questiontype.php | 3 + 3 files changed, 137 insertions(+), 4 deletions(-) diff --git a/question/type/multianswer/edit_multianswer_form.php b/question/type/multianswer/edit_multianswer_form.php index 1aa744864db..cf87c827bf3 100644 --- a/question/type/multianswer/edit_multianswer_form.php +++ b/question/type/multianswer/edit_multianswer_form.php @@ -66,6 +66,9 @@ class question_edit_multianswer_form extends question_edit_form { $mform->addElement('static', 'sub_'.$sub."_".'defaultgrade', get_string('defaultgrade', 'quiz')); $mform->setDefault('sub_'.$sub."_".'defaultgrade',$this->questiondisplay->options->questions[$sub]->defaultgrade); + if ($this->questiondisplay->options->questions[$sub]->qtype =='multichoice' ) { + $mform->addElement('static', 'sub_'.$sub."_".'layout', get_string('layout', 'quiz'),array('cols'=>60, 'rows'=>1)) ;//, $gradeoptions); + } foreach ($this->questiondisplay->options->questions[$sub]->answer as $key =>$ans) { $mform->addElement('static', 'sub_'.$sub."_".'answer['.$key.']', get_string('answer', 'quiz'), array('cols'=>60, 'rows'=>1)); @@ -147,7 +150,22 @@ class question_edit_multianswer_form extends question_edit_form { $answercount = 0; $maxgrade = false; $maxfraction = -1; - + if ($subquestion->qtype == 'multichoice' ) { + $default_values[$prefix.'layout'] = $subquestion->layout ; + switch ($subquestion->layout) { + case '0': + $default_values[$prefix.'layout']= get_string('selectelement', 'qtype_multianswer'); + break; + case '1': + $default_values[$prefix.'layout']= get_string('verticallayout', 'qtype_multianswer'); + break; + case '2': + $default_values[$prefix.'layout']= get_string('horizontallayout', 'qtype_multianswer'); + break; + default: + $default_values[$prefix.'layout']= get_string('unknownlayout', 'qtype_multianswer'); + } + } foreach ($subquestion->answer as $key=>$answer) { if ( $subquestion->qtype == 'numerical' && $key == 0 ) { $default_values[$prefix.'tolerance['.$key.']'] = $subquestion->tolerance[0] ; diff --git a/question/type/multianswer/questiontype.php b/question/type/multianswer/questiontype.php index 54d5a8867d5..358714e264a 100644 --- a/question/type/multianswer/questiontype.php +++ b/question/type/multianswer/questiontype.php @@ -417,6 +417,7 @@ class embedded_cloze_qtype extends default_questiontype { echo $feedbackimg; break; case 'multichoice': + if ($wrapped->options->layout == 0 ){ $outputoptions = ''; // Default empty option foreach ($answers as $mcanswer) { $selected = ''; @@ -441,6 +442,98 @@ class embedded_cloze_qtype extends default_questiontype { echo "pixpath/i/feedback.gif\" alt=\"$feedback\" />"; } echo $feedbackimg; + }else if ($wrapped->options->layout == 1 || $wrapped->options->layout == 2){ + $ordernumber=0; + $anss = Array(); + foreach ($answers as $mcanswer) { + $ordernumber++; + $checked = ''; + $chosen = false; + $type = 'type="radio"'; + $name = "name=\"{$inputname}\""; + if ($response == $mcanswer->id) { + $checked = 'checked="checked"'; + $chosen = true; + } + $a = new stdClass; + $a->id = $question->name_prefix . $mcanswer->id; + $a->class = ''; + $a->feedbackimg = ''; + + // Print the control + $a->control = "id\" $name $checked $type value=\"$mcanswer->id\" />"; + if ($options->correct_responses && $mcanswer->fraction > 0) { + $a->class = question_get_feedback_class(1); + } + if (($options->feedback && $chosen) || $options->correct_responses) { + if ($type == ' type="checkbox" ') { + $a->feedbackimg = question_get_feedback_image($mcanswer->fraction > 0 ? 1 : 0, $chosen && $options->feedback); + } else { + $a->feedbackimg = question_get_feedback_image($mcanswer->fraction, $chosen && $options->feedback); + } + } + + // Print the answer text + $a->text = '' . $ordernumber . '. ' . + format_text($mcanswer->answer, FORMAT_MOODLE, $formatoptions, $cmoptions->course); + + // Print feedback if feedback is on + if (($options->feedback || $options->correct_responses) && ($checked )) { //|| $options->readonly + $a->feedback = format_text($mcanswer->feedback, true, $formatoptions, $cmoptions->course); + } else { + $a->feedback = ''; + } + + $anss[] = clone($a); + } + ?> + options->layout == 1 ){ + ?> + + + + + + + + +
+ control; ?> + + +
+ options->layout == 2 ){ + ?> + + + + + + + + + +
+ control; ?> + + +
+ correctfeedback = ''; $wrapped->partiallycorrectfeedback = ''; $wrapped->incorrectfeedback = ''; + $wrapped->layout = 0; + } else if(!empty($answerregs[ANSWER_REGEX_ANSWER_TYPE_MULTICHOICE_REGULAR])) { + $wrapped->qtype = 'multichoice'; + $wrapped->single = 1; + $wrapped->answernumbering = 0; + $wrapped->correctfeedback = ''; + $wrapped->partiallycorrectfeedback = ''; + $wrapped->incorrectfeedback = ''; + $wrapped->layout = 1; + } else if(!empty($answerregs[ANSWER_REGEX_ANSWER_TYPE_MULTICHOICE_HORIZONTAL])) { + $wrapped->qtype = 'multichoice'; + $wrapped->single = 1; + $wrapped->answernumbering = 0; + $wrapped->correctfeedback = ''; + $wrapped->partiallycorrectfeedback = ''; + $wrapped->incorrectfeedback = ''; + $wrapped->layout = 2; } else { print_error('unknownquestiontype', 'question', '', $answerregs[2]); return false; diff --git a/question/type/multichoice/questiontype.php b/question/type/multichoice/questiontype.php index 1134c689b5f..6549a530235 100644 --- a/question/type/multichoice/questiontype.php +++ b/question/type/multichoice/questiontype.php @@ -104,6 +104,9 @@ class question_multichoice_qtype extends default_questiontype { } $options->answers = implode(",",$answers); $options->single = $question->single; + if(isset($question->layout)){ + $options->layout = $question->layout; + } $options->answernumbering = $question->answernumbering; $options->shuffleanswers = $question->shuffleanswers; $options->correctfeedback = trim($question->correctfeedback);