Merge pull request #594 from AngelFQC/fix-exercise-forms

Fix exercise add/edit unique/multiple answers forms
1.10.x
Angel Fernando Quiroz Campos 11 years ago
commit cdc8786848
  1. 236
      main/exercice/multiple_answer.class.php
  2. 2
      main/exercice/question.class.php
  3. 113
      main/exercice/unique_answer.class.php
  4. 3
      main/inc/lib/formvalidator/FormValidator.class.php
  5. 2
      main/template/default/layout/main.tpl
  6. 2
      main/template/default/layout/show_footer.tpl

@ -26,126 +26,144 @@ class MultipleAnswer extends Question
}
/**
* function which redifines Question::createAnswersForm
* @param the formvalidator instance
* @param the answers number to display
*/
function createAnswersForm ($form)
* function which redifines Question::createAnswersForm
* @param the formvalidator instance
* @param the answers number to display
*/
function createAnswersForm($form)
{
$nb_answers = isset($_POST['nb_answers']) ? $_POST['nb_answers'] : 4; // The previous default value was 2. See task #1759.
$nb_answers += (isset($_POST['lessAnswers']) ? -1 : (isset($_POST['moreAnswers']) ? 1 : 0));
$obj_ex = $_SESSION['objExercise'];
$html='<table class="data_table">
<tr>
<th width="10px">
'.get_lang('Number').'
</th>
<th width="10px">
'.get_lang('True').'
</th>
<th width="50%">
'.get_lang('Answer').'
</th>';
// show column comment when feedback is enable
$html .='<th>
'.get_lang('Comment').'
</th>';
$html .= '<th width="50px">
'.get_lang('Weighting').'
</th>
</tr>';
$form -> addElement ('label', get_lang('Answers').'<br /> <img src="../img/fill_field.png">', $html);
$defaults = array();
$correct = 0;
$editorConfig = array(
'ToolbarSet' => 'TestProposedAnswer',
'Width' => '100%',
'Height' => '125'
);
$nb_answers = isset($_POST['nb_answers']) ? $_POST['nb_answers'] : 4; // The previous default value was 2. See task #1759.
$nb_answers += (isset($_POST['lessAnswers']) ? -1 : (isset($_POST['moreAnswers']) ? 1 : 0));
$obj_ex = $_SESSION['objExercise'];
$form->addHeader(get_lang('Answers'));
$html = '<table class="table table-striped table-hover">
<thead>
<tr>
<th width="10">' . get_lang('Number') . '</th>
<th width="10">' . get_lang('True') . '</th>
<th width="50%">' . get_lang('Answer') . '</th>
<th width="50%">' . get_lang('Comment') . '</th>
<th width="10">' . get_lang('Weighting') . '</th>
</tr>
</thead>
<tbody>';
$form->addHtml($html);
$defaults = array();
$correct = 0;
$answer = false;
if(!empty($this -> id)) {
$answer = new Answer($this -> id);
$answer -> read();
if(count($answer->nbrAnswers)>0 && !$form->isSubmitted()) {
$nb_answers = $answer->nbrAnswers;
}
}
$form -> addElement('hidden', 'nb_answers');
$boxes_names = array();
if ($nb_answers < 1) {
$nb_answers = 1;
Display::display_normal_message(get_lang('YouHaveToCreateAtLeastOneAnswer'));
}
for ($i = 1 ; $i <= $nb_answers ; ++$i) {
if(is_object($answer)) {
$defaults['answer['.$i.']'] = $answer -> answer[$i];
$defaults['comment['.$i.']'] = $answer -> comment[$i];
$defaults['weighting['.$i.']'] = float_format($answer -> weighting[$i], 1);
$defaults['correct['.$i.']'] = $answer -> correct[$i];
} else {
$defaults['answer[1]'] = get_lang('DefaultMultipleAnswer2');
$defaults['comment[1]'] = get_lang('DefaultMultipleComment2');
$defaults['correct[1]'] = true;
$defaults['weighting[1]'] = 10;
$defaults['answer[2]'] = get_lang('DefaultMultipleAnswer1');
$defaults['comment[2]'] = get_lang('DefaultMultipleComment1');
$defaults['correct[2]'] = false;
$defaults['weighting[2]'] = -5;
}
$renderer = & $form->defaultRenderer();
$renderer->setElementTemplate('<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}</td>', 'correct['.$i.']');
$renderer->setElementTemplate('<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}</td>', 'counter['.$i.']');
$renderer->setElementTemplate('<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}</td>', 'answer['.$i.']');
$renderer->setElementTemplate('<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}</td>', 'comment['.$i.']');
$renderer->setElementTemplate('<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}</td>', 'weighting['.$i.']');
$answer_number=$form->addElement('text', 'counter['.$i.']', null, 'value="'.$i.'"');
$answer_number->freeze();
if (!empty($this->id)) {
$answer = new Answer($this->id);
$answer->read();
if (count($answer->nbrAnswers) > 0 && !$form->isSubmitted()) {
$nb_answers = $answer->nbrAnswers;
}
}
$form->addElement('checkbox', 'correct['.$i.']', null, null, 'class="checkbox" style="margin-left: 0em;"');
$boxes_names[] = 'correct['.$i.']';
$form->addElement('hidden', 'nb_answers');
$boxes_names = array();
$form->addElement('html_editor', 'answer['.$i.']',null, array(), array('ToolbarSet' => 'TestProposedAnswer', 'Width' => '100%', 'Height' => '100'));
$form->addRule('answer['.$i.']', get_lang('ThisFieldIsRequired'), 'required');
if ($nb_answers < 1) {
$nb_answers = 1;
Display::display_normal_message(get_lang('YouHaveToCreateAtLeastOneAnswer'));
}
$form->addElement('html_editor', 'comment['.$i.']',null, array(), array('ToolbarSet' => 'TestProposedAnswer', 'Width' => '100%', 'Height' => '100'));
for ($i = 1; $i <= $nb_answers; ++$i) {
$form->addHtml('<tr>');
if (is_object($answer)) {
$defaults['answer[' . $i . ']'] = $answer->answer[$i];
$defaults['comment[' . $i . ']'] = $answer->comment[$i];
$defaults['weighting[' . $i . ']'] = float_format($answer->weighting[$i], 1);
$defaults['correct[' . $i . ']'] = $answer->correct[$i];
} else {
$defaults['answer[1]'] = get_lang('DefaultMultipleAnswer2');
$defaults['comment[1]'] = get_lang('DefaultMultipleComment2');
$defaults['correct[1]'] = true;
$defaults['weighting[1]'] = 10;
$defaults['answer[2]'] = get_lang('DefaultMultipleAnswer1');
$defaults['comment[2]'] = get_lang('DefaultMultipleComment1');
$defaults['correct[2]'] = false;
$defaults['weighting[2]'] = -5;
}
$renderer = & $form->defaultRenderer();
$renderer->setElementTemplate(
'<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}</td>',
'correct[' . $i . ']'
);
$renderer->setElementTemplate(
'<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}</td>',
'counter[' . $i . ']'
);
$renderer->setElementTemplate(
'<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}</td>',
'answer[' . $i . ']'
);
$renderer->setElementTemplate(
'<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}</td>',
'comment[' . $i . ']'
);
$renderer->setElementTemplate(
'<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}</td>',
'weighting[' . $i . ']'
);
$answer_number = $form->addElement('text', 'counter[' . $i . ']', null, 'value="' . $i . '"');
$answer_number->freeze();
$form->addElement('checkbox', 'correct[' . $i . ']', null, null,
'class="checkbox" style="margin-left: 0em;"');
$boxes_names[] = 'correct[' . $i . ']';
$form->addHtmlEditor("answer[$i]", null, null, true, $editorConfig);
$form->addRule('answer[' . $i . ']', get_lang('ThisFieldIsRequired'), 'required');
$form->addHtmlEditor("comment[$i]", null, null, true, $editorConfig);
$form->addElement('text', 'weighting[' . $i . ']', null, array('class' => "span1", 'value' => '0'));
$form->addHtml('</tr>');
}
$form->addElement('text', 'weighting['.$i.']',null, array('class' => "span1", 'value' => '0'));
$form -> addElement ('html', '</tr>');
}
$form -> addElement ('html', '</table>');
$form -> addElement ('html', '<br />');
$form->addHtml('</tbody>');
$form->addHtml('</table>');
$form -> add_multiple_required_rule ($boxes_names , get_lang('ChooseAtLeastOneCheckbox') , 'multiple_required');
$form->add_multiple_required_rule($boxes_names, get_lang('ChooseAtLeastOneCheckbox'), 'multiple_required');
global $text, $class;
if ($obj_ex->edit_exercise_in_lp == true) {
// setting the save button here and not in the question class.php
$form->addElement('style_submit_button', 'lessAnswers', get_lang('LessAnswer'),'class="btn minus"');
$form->addElement('style_submit_button', 'moreAnswers', get_lang('PlusAnswer'),'class="btn plus"');
$form->addElement('style_submit_button','submitQuestion',$text, 'class="'.$class.'"');
}
global $text, $class;
if ($obj_ex->edit_exercise_in_lp == true) {
// setting the save button here and not in the question class.php
$form->addButtonDelete(get_lang('LessAnswer'), 'lessAnswers');
$form->addButtonCreate(get_lang('PlusAnswer'), 'moreAnswers');
$form->addButtonSave($text, 'submitQuestion');
}
$renderer->setElementTemplate('{element}&nbsp;','lessAnswers');
$renderer->setElementTemplate('{element}&nbsp;','submitQuestion');
$renderer->setElementTemplate('{element}&nbsp;','moreAnswers');
$form -> addElement ('html', '</div></div>');
$renderer->setElementTemplate('<div class="form-group"><div class="col-sm-offset-2">{element}', 'lessAnswers');
$renderer->setElementTemplate('{element}', 'moreAnswers');
$renderer->setElementTemplate('{element}</div></div>', 'submitQuestion');
$defaults['correct'] = $correct;
$defaults['correct'] = $correct;
if (!empty($this -> id)) {
$form -> setDefaults($defaults);
} else {
if ($this -> isContent == 1) {
$form -> setDefaults($defaults);
}
}
$form->setConstants(array('nb_answers' => $nb_answers));
}
if (!empty($this->id)) {
$form->setDefaults($defaults);
} else {
if ($this->isContent == 1) {
$form->setDefaults($defaults);
}
}
$form->setConstants(array('nb_answers' => $nb_answers));
}
/**

@ -1254,7 +1254,7 @@ abstract class Question
<a href="javascript://" onclick=" return show_media()"><span id="media_icon"><img style="vertical-align: middle;" src="../img/looknfeel.png" alt="" />&nbsp;'.get_lang('EnrichQuestion').'</span></a>
');
$form->addElement ('html','<div class="HideFCKEditor" id="HiddenFCKquestionDescription" >');
$form->addElement ('html','<div class="HideFCKEditor" id="HiddenFCKquestionDescription" style="display: none;" >');
$form->addHtmlEditor('questionDescription', get_lang('QuestionDescription'), false, false, $editor_config);
$form->addElement ('html','</div>');

@ -45,14 +45,14 @@ class UniqueAnswer extends Question
//this line defines how many questions by default appear when creating a choice question
// The previous default value was 2. See task #1759.
$nb_answers = isset($_POST['nb_answers']) ? (int)$_POST['nb_answers'] : 4;
$nb_answers = isset($_POST['nb_answers']) ? (int) $_POST['nb_answers'] : 4;
$nb_answers += (isset($_POST['lessAnswers']) ? -1 : (isset($_POST['moreAnswers']) ? 1 : 0));
/*
Types of Feedback
$feedback_option[0]=get_lang('Feedback');
$feedback_option[1]=get_lang('DirectFeedback');
$feedback_option[2]=get_lang('NoFeedback');
Types of Feedback
$feedback_option[0]=get_lang('Feedback');
$feedback_option[1]=get_lang('DirectFeedback');
$feedback_option[2]=get_lang('NoFeedback');
*/
$feedback_title = '';
@ -61,34 +61,27 @@ class UniqueAnswer extends Question
//Scenario
$editor_config['Width'] = '250';
$editor_config['Height'] = '110';
$comment_title = '<th width="500px" >' . get_lang('Comment') . '</th>';
$feedback_title = '<th width="350px" >' . get_lang('Scenario') . '</th>';
$comment_title = '<th width="50%" >' . get_lang('Comment') . '</th>';
$feedback_title = '<th width="50%" >' . get_lang('Scenario') . '</th>';
} else {
$comment_title = '<th>' . get_lang('Comment') . '</th>';
$comment_title = '<th width="50%">' . get_lang('Comment') . '</th>';
}
$html = '<table class="data_table">
$html = '<table class="table table-striped table-hover">
<thead>
<tr style="text-align: center;">
<th width="10px">
' . get_lang('Number') . '
</th>
<th width="10px" >
' . get_lang('True') . '
</th>
<th width="50%">
' . get_lang('Answer') . '
</th>
<th width="10">' . get_lang('Number') . '</th>
<th width="10" >' . get_lang('True') . '</th>
<th width="50%">' . get_lang('Answer') . '</th>
' . $comment_title . '
' . $feedback_title . '
<th width="50px">
' . get_lang('Weighting') . '
</th>
</tr>';
$form->addLabel(
get_lang('Answers') . '<br /> <img src="../img/fill_field.png">',
$html
);
<th width="10">' . get_lang('Weighting') . '</th>
</tr>
</thead>
<tbody>';
$form->addHeader(get_lang('Answers'));
$form->addHtml($html);
$defaults = array();
$correct = 0;
@ -113,8 +106,7 @@ class UniqueAnswer extends Question
}
$question = Question::read($questionid);
$select_question[$questionid] = 'Q' . $key . ' :' . cut(
$question->selectTitle(),
20
$question->selectTitle(), 20
);
}
}
@ -139,7 +131,7 @@ class UniqueAnswer extends Question
}
for ($i = 1; $i <= $nb_answers; ++$i) {
$form->addElement('html', '<tr>');
$form->addHtml('<tr>');
if (isset($answer) && is_object($answer)) {
if ($answer->correct[$i]) {
$correct = $i;
@ -208,33 +200,22 @@ class UniqueAnswer extends Question
);
$answer_number = $form->addElement(
'text',
'counter[' . $i . ']',
null,
' value = "' . $i . '"'
'text', 'counter[' . $i . ']', null, ' value = "' . $i . '"'
);
$answer_number->freeze();
$form->addElement(
'radio',
'correct',
null,
null,
$i,
'class="checkbox"'
'radio', 'correct', null, null, $i, 'class="checkbox"'
);
$form->addHtmlEditor('answer[' . $i . ']',null,null,true, $editor_config);
$form->addHtmlEditor('answer[' . $i . ']', null, null, true, $editor_config);
$form->addRule(
'answer[' . $i . ']',
get_lang('ThisFieldIsRequired'),
'required'
'answer[' . $i . ']', get_lang('ThisFieldIsRequired'), 'required'
);
if ($obj_ex->selectFeedbackType() == EXERCISE_FEEDBACK_TYPE_DIRECT) {
$form->addHtmlEditor('comment[' . $i . ']',null,null,false,$editor_config);
$form->addHtmlEditor('comment[' . $i . ']', null, null, false, $editor_config);
// Direct feedback
//Adding extra feedback fields
$group = array();
$group['try' . $i] = $form->createElement(
@ -270,16 +251,15 @@ class UniqueAnswer extends Question
'<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}',
'scenario'
);
} else {
$form->addHtmlEditor('comment[' . $i . ']',null,null,false,$editor_config);
$form->addHtmlEditor('comment[' . $i . ']', null, null, false, $editor_config);
}
$form->addText('weighting[' . $i . ']', null,null, array('class' => "col-md-1", 'value' => '0'));
$form->addElement('html', '</tr>');
$form->addText('weighting[' . $i . ']', null, null, array('class' => "col-md-1", 'value' => '0'));
$form->addHtml('</tr>');
}
$form->addElement('html', '</table>');
$form->addElement('html', '<br />');
$form->addHtml('</tbody>');
$form->addHtml('</table>');
$navigator_info = api_get_navigator();
@ -308,31 +288,15 @@ class UniqueAnswer extends Question
);
} else {
//setting the save button here and not in the question class.php
$form->addElement(
'style_submit_button',
'lessAnswers',
get_lang('LessAnswer'),
'class="btn btn-primary"'
);
$form->addElement(
'style_submit_button',
'moreAnswers',
get_lang('PlusAnswer'),
'class="btn btn-primary"'
);
$form->addElement(
'style_submit_button',
'submitQuestion',
$text,
'class="' . $class . '"'
);
$form->addButtonDelete(get_lang('LessAnswer'), 'lessAnswers');
$form->addButtonCreate(get_lang('PlusAnswer'), 'moreAnswers');
$form->addButtonSave($text, 'submitQuestion');
}
}
$renderer->setElementTemplate('{element}&nbsp;', 'submitQuestion');
$renderer->setElementTemplate('{element}&nbsp;', 'lessAnswers');
$renderer->setElementTemplate('{element}&nbsp;', 'moreAnswers');
$form->addHtml('</div></div>');
$renderer->setElementTemplate('<div class="form-group"><div class="col-sm-offset-2">{element}', 'lessAnswers');
$renderer->setElementTemplate('{element}', 'moreAnswers');
$renderer->setElementTemplate('{element}</div></div>', 'submitQuestion');
// We check the first radio button to be sure a radio button will be check
if ($correct == 0) {
@ -350,7 +314,6 @@ class UniqueAnswer extends Question
} else {
$form->setDefaults(array('correct' => 1));
}
}
$form->setConstants(array('nb_answers' => $nb_answers));
}

@ -118,8 +118,7 @@ class FormValidator extends HTML_QuickForm
$this->setRequiredNote('<span class="form_required">*</span> <small>' . get_lang('ThisFieldIsRequired') . '</small>');
$noteTemplate = <<<EOT
<div class="form-group">
<div class="col-sm-2"></div>
<div class="col-sm-10">{requiredNote}</div>
<div class="col-sm-offset-2 col-sm-10">{requiredNote}</div>
</div>
EOT;
$renderer->setRequiredNoteTemplate($noteTemplate);

@ -13,8 +13,6 @@
{% if show_footer == true %}
</div> <!-- end of #row" -->
</div> <!-- end of #main" -->
</div> <!-- end of #page section -->
</div> <!-- end of #wrapper section -->
{% endif %}
{% include template ~ "/layout/main_footer.tpl" %}
{% endblock %}

@ -19,8 +19,6 @@
{% if show_footer == true %}
</div> <!-- end of #row" -->
</div> <!-- end of #main" -->
</div> <!-- end of #page section -->
</div> <!-- end of #wrapper section -->
{% endif %}

Loading…
Cancel
Save