|
|
|
@ -29,9 +29,9 @@ class MultipleAnswerTrueFalse extends Question { |
|
|
|
|
*/ |
|
|
|
|
function MultipleAnswerTrueFalse(){ |
|
|
|
|
parent::question(); |
|
|
|
|
$this -> type = MULTIPLE_ANSWER_TRUE_FALSE; |
|
|
|
|
$this -> isContent = $this-> getIsContent(); |
|
|
|
|
$this->options = array('1'=>get_lang('True'),'0' =>get_lang('False'), '2' =>get_lang('Nothing')); |
|
|
|
|
$this->type = MULTIPLE_ANSWER_TRUE_FALSE; |
|
|
|
|
$this->isContent = $this-> getIsContent(); |
|
|
|
|
$this->options = array(1=>get_lang('True'),2 =>get_lang('False'), 3 =>get_lang('DoubtScore')); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -41,18 +41,48 @@ class MultipleAnswerTrueFalse extends Question { |
|
|
|
|
*/ |
|
|
|
|
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['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=' |
|
|
|
|
<div class="row"> |
|
|
|
|
<div class="label"> |
|
|
|
|
'.get_lang('Answers').'<br /><img src="../img/fill_field.png"> |
|
|
|
|
</div> |
|
|
|
|
<div class="formw"> |
|
|
|
|
<table class="data_table"> |
|
|
|
|
|
|
|
|
|
$html.='<div class="row"> |
|
|
|
|
<div class="label"> |
|
|
|
|
'.get_lang('Answers').'<br /><img src="../img/fill_field.png"> |
|
|
|
|
</div> |
|
|
|
|
<div class="formw">'; |
|
|
|
|
|
|
|
|
|
$html2 ='<div class="row"> |
|
|
|
|
<div class="label"> |
|
|
|
|
</div> |
|
|
|
|
<div class="formw">'; |
|
|
|
|
|
|
|
|
|
$form -> addElement ('html', $html2); |
|
|
|
|
$form -> addElement ('html', '<table><tr>'); |
|
|
|
|
$renderer = & $form->defaultRenderer(); |
|
|
|
|
$defaults = array(); |
|
|
|
|
|
|
|
|
|
if (!empty($this->extra)) { |
|
|
|
|
$scores = explode(':',$this->extra); |
|
|
|
|
|
|
|
|
|
if (!empty($scores)) { |
|
|
|
|
for ($i = 1; $i <=3; $i++) { |
|
|
|
|
$defaults['option['.$i.']'] = $scores[$i-1]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 3 scores |
|
|
|
|
$form->addElement('text', 'option[1]',get_lang('True'), array('size'=>'5','value'=>'1')); |
|
|
|
|
$form->addElement('text', 'option[2]',get_lang('False'), array('size'=>'5','value'=>'-0.5')); |
|
|
|
|
$form->addElement('text', 'option[3]',get_lang('DoubtScore'),array('size'=>'5','value'=>'0')); |
|
|
|
|
|
|
|
|
|
$form -> addElement('hidden', 'options_count', 3); |
|
|
|
|
|
|
|
|
|
$form -> addElement ('html', '</tr></table>'); |
|
|
|
|
$form -> addElement ('html', '</div></div>'); |
|
|
|
|
|
|
|
|
|
$html.='<table class="data_table"> |
|
|
|
|
<tr style="text-align: center;"> |
|
|
|
|
<th> |
|
|
|
|
'.get_lang('Number').' |
|
|
|
@ -60,28 +90,25 @@ class MultipleAnswerTrueFalse extends Question { |
|
|
|
|
<th> |
|
|
|
|
'.get_lang('True').' |
|
|
|
|
</th> |
|
|
|
|
<th> |
|
|
|
|
'.get_lang('False').' |
|
|
|
|
</th> |
|
|
|
|
<th> |
|
|
|
|
'.get_lang('Answer').' |
|
|
|
|
</th>'; |
|
|
|
|
// show column comment when feedback is enable |
|
|
|
|
if ($obj_ex->selectFeedbackType() != EXERCISE_FEEDBACK_TYPE_EXAM ) { |
|
|
|
|
$html .='<th> |
|
|
|
|
'.get_lang('Comment').' |
|
|
|
|
</th>'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$html .= '<th> |
|
|
|
|
'.get_lang('Weighting').' |
|
|
|
|
</th> |
|
|
|
|
</tr>'; |
|
|
|
|
// show column comment when feedback is enable |
|
|
|
|
if ($obj_ex->selectFeedbackType() != EXERCISE_FEEDBACK_TYPE_EXAM ) { |
|
|
|
|
$html .='<th>'.get_lang('Comment').'</th>'; |
|
|
|
|
} |
|
|
|
|
$html .= '</tr>'; |
|
|
|
|
$form -> addElement ('html', $html); |
|
|
|
|
|
|
|
|
|
$defaults = array(); |
|
|
|
|
|
|
|
|
|
$correct = 0; |
|
|
|
|
if(!empty($this -> id)) { |
|
|
|
|
if (!empty($this -> id)) { |
|
|
|
|
$answer = new Answer($this -> id); |
|
|
|
|
$answer -> read(); |
|
|
|
|
if(count($answer->nbrAnswers)>0 && !$form->isSubmitted()) { |
|
|
|
|
$answer->read(); |
|
|
|
|
if (count($answer->nbrAnswers) > 0 && !$form->isSubmitted()) { |
|
|
|
|
$nb_answers = $answer->nbrAnswers; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -93,27 +120,44 @@ class MultipleAnswerTrueFalse extends Question { |
|
|
|
|
$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['.$i.']'] = ''; |
|
|
|
|
$defaults['comment['.$i.']'] = ''; |
|
|
|
|
$defaults['weighting['.$i.']'] = '1'; |
|
|
|
|
$defaults['correct['.$i.']'] = ''; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
$renderer = & $form->defaultRenderer(); |
|
|
|
|
$renderer->setElementTemplate('<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}</td>'); |
|
|
|
|
|
|
|
|
|
$answer_number=$form->addElement('text', null,null,'value="'.$i.'"'); |
|
|
|
|
$answer_number->freeze(); |
|
|
|
|
|
|
|
|
|
$form->addElement('checkbox', 'correct['.$i.']', null, null, 'id="'.$i.'" class="checkbox" style="margin-left: 0em;" onchange="multiple_answer_true_false_onchange(this);" ' ); |
|
|
|
|
|
|
|
|
|
// Can be more options |
|
|
|
|
$option_data = Question::readQuestionOption($this->id); |
|
|
|
|
|
|
|
|
|
for ($i = 1 ; $i <= $nb_answers ; ++$i) { |
|
|
|
|
|
|
|
|
|
$renderer->setElementTemplate('<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error -->{label} {element}</td>'); |
|
|
|
|
$answer_number=$form->addElement('text', null,null,'value="'.$i.'"'); |
|
|
|
|
$answer_number->freeze(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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); |
|
|
|
|
|
|
|
|
|
$correct = $answer->correct[$i]; |
|
|
|
|
var_dump($correct); |
|
|
|
|
//$this->options |
|
|
|
|
$defaults['correct['.$i.']'] = $correct; |
|
|
|
|
$j = 1; |
|
|
|
|
if (!empty($option_data)) { |
|
|
|
|
foreach ($option_data as $id=>$data) { |
|
|
|
|
$form->addElement('radio', 'correct['.$i.']', null, null,$id); |
|
|
|
|
$j++; |
|
|
|
|
if ($j == 3) { |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
$form->addElement('radio', 'correct['.$i.']', null, null, 1); |
|
|
|
|
$form->addElement('radio', 'correct['.$i.']', null, null, 2); |
|
|
|
|
|
|
|
|
|
$defaults['answer['.$i.']'] = ''; |
|
|
|
|
$defaults['comment['.$i.']'] = ''; |
|
|
|
|
$defaults['correct['.$i.']'] = ''; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//$form->addElement('select', 'correct['.$i.']',null, $this->options, array('id'=>$i,'onchange'=>'multiple_answer_true_false_onchange(this)')); |
|
|
|
|
|
|
|
|
@ -126,14 +170,12 @@ class MultipleAnswerTrueFalse extends Question { |
|
|
|
|
if ($obj_ex->selectFeedbackType() != EXERCISE_FEEDBACK_TYPE_EXAM) { |
|
|
|
|
$form->addElement('html_editor', 'comment['.$i.']',null, 'style="vertical-align:middle"', array('ToolbarSet' => 'TestProposedAnswer', 'Width' => '100%', 'Height' => '100')); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$form->addElement('text', 'weighting['.$i.']',null, array('id'=>'weighting_'.$i,'style'=>'vertical-align:middle;margin-left: 0em', 'size'=>"5",'value'=>"0")); |
|
|
|
|
$form -> addElement ('html', '</tr>'); |
|
|
|
|
$form->addElement ('html', '</tr>'); |
|
|
|
|
} |
|
|
|
|
$form -> addElement ('html', '</table>'); |
|
|
|
|
$form -> addElement ('html', '<br />'); |
|
|
|
|
|
|
|
|
|
$form -> add_multiple_required_rule ($boxes_names , get_lang('ChooseAtLeastOneCheckbox') , 'multiple_required'); |
|
|
|
|
//$form -> add_multiple_required_rule ($boxes_names , get_lang('ChooseAtLeastOneCheckbox') , 'multiple_required'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$navigator_info = api_get_navigator(); |
|
|
|
@ -176,44 +218,64 @@ class MultipleAnswerTrueFalse extends Question { |
|
|
|
|
* @param the answers number to display |
|
|
|
|
*/ |
|
|
|
|
function processAnswersCreation($form) { |
|
|
|
|
|
|
|
|
|
$questionWeighting = $nbrGoodAnswers = 0; |
|
|
|
|
|
|
|
|
|
$objAnswer = new Answer($this->id); |
|
|
|
|
|
|
|
|
|
$nb_answers = $form -> getSubmitValue('nb_answers'); |
|
|
|
|
|
|
|
|
|
for($i=1 ; $i <= $nb_answers ; $i++) |
|
|
|
|
{ |
|
|
|
|
$answer = trim($form -> getSubmitValue('answer['.$i.']')); |
|
|
|
|
$comment = trim($form -> getSubmitValue('comment['.$i.']')); |
|
|
|
|
$weighting = trim($form -> getSubmitValue('weighting['.$i.']')); |
|
|
|
|
$goodAnswer = trim($form -> getSubmitValue('correct['.$i.']')); |
|
|
|
|
|
|
|
|
|
if($goodAnswer){ |
|
|
|
|
$weighting = abs($weighting); |
|
|
|
|
} else { |
|
|
|
|
$weighting = abs($weighting); |
|
|
|
|
$weighting = -$weighting; |
|
|
|
|
} |
|
|
|
|
if($weighting > 0) |
|
|
|
|
{ |
|
|
|
|
$questionWeighting += $weighting; |
|
|
|
|
$objAnswer = new Answer($this->id); |
|
|
|
|
$nb_answers = $form->getSubmitValue('nb_answers'); |
|
|
|
|
$options_count = $form->getSubmitValue('options_count'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$correct = array(); |
|
|
|
|
$options = Question::readQuestionOption($this->id); |
|
|
|
|
|
|
|
|
|
if (!empty($options)) { |
|
|
|
|
foreach ($options as $option_data) { |
|
|
|
|
$id = $option_data['id']; |
|
|
|
|
unset($option_data['id']); |
|
|
|
|
Question::updateQuestionOption($id, $option_data); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$objAnswer -> createAnswer($answer,$goodAnswer,$comment,$weighting,$i); |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
for ($i=1 ; $i <= 3 ; $i++) { |
|
|
|
|
$last_id = Question::saveQuestionOption($this->id, $this->options[$i], $i); |
|
|
|
|
$correct[$i] = $last_id; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$new_options = Question::readQuestionOption($this->id); |
|
|
|
|
$sorted_by_position = array(); |
|
|
|
|
foreach($new_options as $item) { |
|
|
|
|
$sorted_by_position[$item['position']] = $item; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Saving quiz_question.extra values |
|
|
|
|
$extra_values = array(); |
|
|
|
|
for ($i=1 ; $i <= 3 ; $i++) { |
|
|
|
|
$score = trim($form -> getSubmitValue('option['.$i.']')); |
|
|
|
|
$extra_values[]= $score; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$this->setExtra(implode(':',$extra_values)); |
|
|
|
|
|
|
|
|
|
for ($i=1 ; $i <= $nb_answers ; $i++) { |
|
|
|
|
$answer = trim($form -> getSubmitValue('answer['.$i.']')); |
|
|
|
|
$comment = trim($form -> getSubmitValue('comment['.$i.']')); |
|
|
|
|
$goodAnswer = trim($form -> getSubmitValue('correct['.$i.']')); |
|
|
|
|
if (empty($options)) { |
|
|
|
|
//new |
|
|
|
|
$goodAnswer = $sorted_by_position[$goodAnswer]['id']; |
|
|
|
|
} |
|
|
|
|
$questionWeighting += $correct[1]; |
|
|
|
|
$objAnswer->createAnswer($answer, $goodAnswer, $comment,'',$i); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// saves the answers into the data base |
|
|
|
|
$objAnswer -> save(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// sets the total weighting of the question |
|
|
|
|
$this -> updateWeighting($questionWeighting); |
|
|
|
|
$this -> save(); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
endif; |
|
|
|
|