|
|
|
@ -508,29 +508,38 @@ class FillBlanks extends Question |
|
|
|
|
case self::FILL_THE_BLANK_MENU: |
|
|
|
|
$selected = ''; |
|
|
|
|
// the blank menu |
|
|
|
|
$optionMenu = ''; |
|
|
|
|
// display a menu from answer separated with | |
|
|
|
|
// if display for student, shuffle the correct answer menu |
|
|
|
|
$listMenu = self::getFillTheBlankMenuAnswers($inTeacherSolution, $displayForStudent); |
|
|
|
|
$result .= '<select id="choice_id_'.$currentQuestion.'_'.$inBlankNumber.'" name="choice['.$questionId.'][]">'; |
|
|
|
|
$resultOptions = ['' => '--']; |
|
|
|
|
|
|
|
|
|
foreach ($listMenu as $item) { |
|
|
|
|
$item = self::trimOption($item); |
|
|
|
|
|
|
|
|
|
$resultOptions[$item] = $item; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for ($k = 0; $k < count($listMenu); $k++) { |
|
|
|
|
$selected = ''; |
|
|
|
|
if ($correctItem == $listMenu[$k]) { |
|
|
|
|
$selected = " selected=selected "; |
|
|
|
|
$selected = $k; |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
// if in teacher view, display the first item by default, which is the right answer |
|
|
|
|
if ($k == 0 && !$displayForStudent) { |
|
|
|
|
$selected = " selected=selected "; |
|
|
|
|
$selected = $k; |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
$optionMenu .= '<option '.$selected.' value="'.$listMenu[$k].'">'.$listMenu[$k].'</option>'; |
|
|
|
|
} |
|
|
|
|
if ($selected == '') { |
|
|
|
|
// no good answer have been found... |
|
|
|
|
$selected = " selected=selected "; |
|
|
|
|
} |
|
|
|
|
$result .= "<option $selected value=''>--</option>"; |
|
|
|
|
$result .= $optionMenu; |
|
|
|
|
$result .= '</select>'; |
|
|
|
|
|
|
|
|
|
$result = Display::select( |
|
|
|
|
"choice[$questionId][]", |
|
|
|
|
$resultOptions, |
|
|
|
|
$selected, |
|
|
|
|
['class' => 'selectpicker'], |
|
|
|
|
false |
|
|
|
|
); |
|
|
|
|
break; |
|
|
|
|
case self::FILL_THE_BLANK_SEVERAL_ANSWER: |
|
|
|
|
//no break |
|
|
|
@ -549,6 +558,14 @@ class FillBlanks extends Question |
|
|
|
|
return $result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function trimOption($text) |
|
|
|
|
{ |
|
|
|
|
$converted = strtr($text, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES))); |
|
|
|
|
$trimmed = trim($converted, chr(0xC2).chr(0xA0).' '); |
|
|
|
|
|
|
|
|
|
return $trimmed; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Return an array with the different choices available |
|
|
|
|
* when the answers between bracket show as a menu |
|
|
|
@ -616,16 +633,21 @@ class FillBlanks extends Question |
|
|
|
|
switch (self::getFillTheBlankAnswerType($correctAnswer)) { |
|
|
|
|
case self::FILL_THE_BLANK_MENU: |
|
|
|
|
$listMenu = self::getFillTheBlankMenuAnswers($correctAnswer, false); |
|
|
|
|
$result = $listMenu[0] == $studentAnswer; |
|
|
|
|
$result = self::trimOption($listMenu[0]) == $studentAnswer; |
|
|
|
|
break; |
|
|
|
|
case self::FILL_THE_BLANK_SEVERAL_ANSWER: |
|
|
|
|
// the answer must be one of the choice made |
|
|
|
|
$listSeveral = self::getFillTheBlankSeveralAnswers($correctAnswer); |
|
|
|
|
|
|
|
|
|
$listSeveral = array_map(function ($item) { |
|
|
|
|
return self::trimOption($item); |
|
|
|
|
}, $listSeveral); |
|
|
|
|
|
|
|
|
|
$result = in_array($studentAnswer, $listSeveral); |
|
|
|
|
break; |
|
|
|
|
case self::FILL_THE_BLANK_STANDARD: |
|
|
|
|
default: |
|
|
|
|
$result = $studentAnswer == $correctAnswer; |
|
|
|
|
$result = $studentAnswer == self::trimOption($correctAnswer); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|