mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 08:56:36 +02:00
migrated 'missingtype' questoin creation forms to use formslib
This commit is contained in:
parent
6173f39e7b
commit
71534002d0
4 changed files with 113 additions and 66 deletions
102
question/type/missingtype/edit_missingtype_form.php
Normal file
102
question/type/missingtype/edit_missingtype_form.php
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Defines the editing form for the missingtype question type.
|
||||||
|
*
|
||||||
|
* @copyright © 2007 Jamie Pratt
|
||||||
|
* @author Jamie Pratt me@jamiep.org
|
||||||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
|
||||||
|
* @package questions
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* missingtype editing form definition.
|
||||||
|
*/
|
||||||
|
class question_edit_missingtype_form extends question_edit_form {
|
||||||
|
/**
|
||||||
|
* Add question-type specific form fields.
|
||||||
|
*
|
||||||
|
* @param object $mform the form being built.
|
||||||
|
*/
|
||||||
|
function definition_inner(&$mform) {
|
||||||
|
$creategrades = get_grade_options();
|
||||||
|
$gradeoptions = $creategrades->gradeoptionsfull;
|
||||||
|
$repeated = array();
|
||||||
|
$repeated[] =& $mform->createElement('header', 'choicehdr', get_string('choiceno', 'qtype_multichoice', '{no}'));
|
||||||
|
$repeated[] =& $mform->createElement('text', 'answer', get_string('answer', 'quiz'));
|
||||||
|
$repeated[] =& $mform->createElement('select', 'fraction', get_string('grade'), $gradeoptions);
|
||||||
|
$repeated[] =& $mform->createElement('htmleditor', 'feedback', get_string('feedback', 'quiz'));
|
||||||
|
|
||||||
|
if (isset($this->question->options)){
|
||||||
|
$countanswers = count($this->question->options->answers);
|
||||||
|
} else {
|
||||||
|
$countanswers = 0;
|
||||||
|
}
|
||||||
|
$repeatsatstart = (QUESTION_NUMANS_START > ($countanswers + QUESTION_NUMANS_ADD))?
|
||||||
|
QUESTION_NUMANS_START : ($countanswers + QUESTION_NUMANS_ADD);
|
||||||
|
$repeatedoptions = array();
|
||||||
|
$repeatedoptions['answer']['type'] = PARAM_NOTAGS;//text with no multilang support
|
||||||
|
$repeatedoptions['fraction']['default'] = 0;
|
||||||
|
$this->repeat_elements($repeated, $repeatsatstart, $repeatedoptions, 'noanswers', 'addanswers', QUESTION_NUMANS_ADD, get_string('addmorechoiceblanks', 'qtype_multichoice'));
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_data($question) {
|
||||||
|
if (isset($question->options)){
|
||||||
|
$answers = $question->options->answers;
|
||||||
|
if (count($answers)) {
|
||||||
|
$key = 0;
|
||||||
|
foreach ($answers as $answer){
|
||||||
|
$default_values['answer['.$key.']'] = $answer->answer;
|
||||||
|
$default_values['fraction['.$key.']'] = $answer->fraction;
|
||||||
|
$default_values['feedback['.$key.']'] = $answer->feedback;
|
||||||
|
$key++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$question = (object)((array)$question + $default_values);
|
||||||
|
}
|
||||||
|
parent::set_data($question);
|
||||||
|
}
|
||||||
|
|
||||||
|
function qtype() {
|
||||||
|
return 'missingtype';
|
||||||
|
}
|
||||||
|
|
||||||
|
function validation($data){
|
||||||
|
$errors = array();
|
||||||
|
$answers = $data['answer'];
|
||||||
|
$answercount = 0;
|
||||||
|
|
||||||
|
$totalfraction = 0;
|
||||||
|
$maxfraction = -1;
|
||||||
|
|
||||||
|
foreach ($answers as $key => $answer){
|
||||||
|
//check no of choices
|
||||||
|
$trimmedanswer = trim($answer);
|
||||||
|
if (!empty($trimmedanswer)){
|
||||||
|
$answercount++;
|
||||||
|
}
|
||||||
|
//check grades
|
||||||
|
if ($answer != '') {
|
||||||
|
if ($data['fraction'][$key] > 0) {
|
||||||
|
$totalfraction += $data['fraction'][$key];
|
||||||
|
}
|
||||||
|
if ($data['fraction'][$key] > $maxfraction) {
|
||||||
|
$maxfraction = $data['fraction'][$key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($answercount==0){
|
||||||
|
$errors['answer[0]'] = get_string('notenoughanswers', 'qtype_multichoice', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$totalfraction = round($totalfraction, 2);
|
||||||
|
if ($totalfraction != 1) {
|
||||||
|
$totalfraction = $totalfraction * 100;
|
||||||
|
$errors['fraction[0]'] = get_string('errfractionsaddwrong', 'qtype_multichoice', $totalfraction);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $errors;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -1,41 +0,0 @@
|
||||||
<?php
|
|
||||||
$QTYPES[$question->qtype]->print_question_form_start($question, array(), $course, $usehtmleditor);
|
|
||||||
|
|
||||||
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);
|
|
||||||
?>
|
|
|
@ -1,22 +0,0 @@
|
||||||
<?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(get_string('warningmissingtype', 'quiz'));
|
|
||||||
require("$CFG->dirroot/question/type/missingtype/editquestion.html");
|
|
||||||
|
|
||||||
?>
|
|
|
@ -58,6 +58,14 @@ class question_missingtype_qtype extends default_questiontype {
|
||||||
function grade_responses(&$question, &$state, $cmoptions) {
|
function grade_responses(&$question, &$state, $cmoptions) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function display_question_editing_page(&$mform, $question, $wizardnow){
|
||||||
|
|
||||||
|
print_heading(get_string('warningmissingtype', 'quiz'));
|
||||||
|
|
||||||
|
$mform->display();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//// END OF CLASS ////
|
//// END OF CLASS ////
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue