|
@@ -10,13 +10,13 @@
|
|
|
**/
|
|
|
class FillBlanks extends Question
|
|
|
{
|
|
|
- public static $typePicture = 'fill_in_blanks.png';
|
|
|
- public static $explanationLangVar = 'FillBlanks';
|
|
|
-
|
|
|
const FILL_THE_BLANK_STANDARD = 0;
|
|
|
const FILL_THE_BLANK_MENU = 1;
|
|
|
const FILL_THE_BLANK_SEVERAL_ANSWER = 2;
|
|
|
|
|
|
+ public static $typePicture = 'fill_in_blanks.png';
|
|
|
+ public static $explanationLangVar = 'FillBlanks';
|
|
|
+
|
|
|
/**
|
|
|
* Constructor
|
|
|
*/
|
|
@@ -32,7 +32,7 @@ class FillBlanks extends Question
|
|
|
*/
|
|
|
public function createAnswersForm($form)
|
|
|
{
|
|
|
- $defaults = array();
|
|
|
+ $defaults = [];
|
|
|
if (!empty($this->id)) {
|
|
|
$objectAnswer = new Answer($this->id);
|
|
|
$answer = $objectAnswer->selectAnswer(1);
|
|
@@ -42,7 +42,7 @@ class FillBlanks extends Question
|
|
|
} else {
|
|
|
$defaults['multiple_answer'] = 0;
|
|
|
}
|
|
|
- //take the complete string except after the last '::'
|
|
|
+ // Take the complete string except after the last '::'
|
|
|
$defaults['answer'] = $listAnswersInfo['text'];
|
|
|
$defaults['select_separator'] = $listAnswersInfo['blankseparatornumber'];
|
|
|
$blankSeparatorNumber = $listAnswersInfo['blankseparatornumber'];
|
|
@@ -54,7 +54,6 @@ class FillBlanks extends Question
|
|
|
|
|
|
$blankSeparatorStart = self::getStartSeparator($blankSeparatorNumber);
|
|
|
$blankSeparatorEnd = self::getEndSeparator($blankSeparatorNumber);
|
|
|
-
|
|
|
$setWeightAndSize = '';
|
|
|
if (isset($listAnswersInfo) && count($listAnswersInfo['tabweighting']) > 0) {
|
|
|
foreach ($listAnswersInfo['tabweighting'] as $i => $weighting) {
|
|
@@ -97,13 +96,16 @@ class FillBlanks extends Question
|
|
|
|
|
|
// disable the save button, if not blanks have been created
|
|
|
$("button").attr("disabled", "disabled");
|
|
|
- $("#defineoneblank").show();
|
|
|
+ $("#defineoneblank").show();
|
|
|
+
|
|
|
var blanks = answer.match(eval(blanksRegexp));
|
|
|
var fields = "<div class=\"form-group \">";
|
|
|
- fields += "<label class=\"col-sm-2 control-label\">'.get_lang('Weighting').'</label>";
|
|
|
+ fields += "<label class=\"col-sm-2 control-label\"></label>";
|
|
|
fields += "<div class=\"col-sm-8\">";
|
|
|
- fields += "<table>";
|
|
|
- fields += "<tr><th style=\"padding:0 20px\">'.get_lang("WordTofind").'</th><th style=\"padding:0 20px\">'.get_lang("QuestionWeighting").'</th><th style=\"padding:0 20px\">'.get_lang("BlankInputSize").'</th></tr>";
|
|
|
+ fields += "<table class=\"data_table\">";
|
|
|
+ fields += "<tr><th style=\"width:220px\">'.get_lang("WordTofind").'</th>";
|
|
|
+ fields += "<th style=\"width:50px\">'.get_lang("QuestionWeighting").'</th>";
|
|
|
+ fields += "<th>'.get_lang("BlankInputSize").'</th></tr>";
|
|
|
|
|
|
if (blanks != null) {
|
|
|
for (var i=0; i < blanks.length; i++) {
|
|
@@ -133,15 +135,16 @@ class FillBlanks extends Question
|
|
|
var value = document.getElementById("weighting["+i+"]").value;
|
|
|
} else {
|
|
|
var value = "1";
|
|
|
- }
|
|
|
+ }
|
|
|
+ var blanksWithColor = trimBlanksBetweenSeparator(blanks[i], blankSeparatorStart, blankSeparatorEnd, 1);
|
|
|
|
|
|
fields += "<tr>";
|
|
|
- fields += "<td>"+blanks[i]+"</td>";
|
|
|
- fields += "<td><input style=\"width:35px\" value=\""+value+"\" type=\"text\" id=\"weighting["+i+"]\" name=\"weighting["+i+"]\" /></td>";
|
|
|
+ fields += "<td>"+blanksWithColor+"</td>";
|
|
|
+ fields += "<td><input class=\"form-control\" style=\"width:60px\" value=\""+value+"\" type=\"text\" id=\"weighting["+i+"]\" name=\"weighting["+i+"]\" /></td>";
|
|
|
fields += "<td>";
|
|
|
fields += "<input class=\"btn btn-default\" type=\"button\" value=\"-\" onclick=\"changeInputSize(-1, "+i+")\"> ";
|
|
|
fields += "<input class=\"btn btn-default\" type=\"button\" value=\"+\" onclick=\"changeInputSize(1, "+i+")\"> ";
|
|
|
- fields += "<input class=\"sample\" id=\"samplesize["+i+"]\" data-btoa=\""+btoaValue+"\" type=\"text\" value=\""+textValue+"\" style=\"width:"+inputSize+"px\" disabled=disabled />";
|
|
|
+ fields += " <input class=\"sample\" id=\"samplesize["+i+"]\" data-btoa=\""+btoaValue+"\" type=\"text\" value=\""+textValue+"\" style=\"width:"+inputSize+"px\" disabled=disabled />";
|
|
|
fields += "<input id=\"sizeofinput["+i+"]\" type=\"hidden\" value=\""+inputSize+"\" name=\"sizeofinput["+i+"]\" />";
|
|
|
fields += "</td>";
|
|
|
fields += "</tr>";
|
|
@@ -152,7 +155,8 @@ class FillBlanks extends Question
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- document.getElementById("blanks_weighting").innerHTML = fields + "</table></div></div>";
|
|
|
+ document.getElementById("blanks_weighting").innerHTML = fields + "</table></div></div>";
|
|
|
+
|
|
|
$(originalOrder).each(function(i, data) {
|
|
|
if (firstTime == false) {
|
|
|
value = data.value;
|
|
@@ -235,7 +239,7 @@ class FillBlanks extends Question
|
|
|
$("#samplesize\\\["+inIdNum+"\\\]").outerWidth(newWidth);
|
|
|
$("#sizeofinput\\\["+inIdNum+"\\\]").attr("value", newWidth);
|
|
|
|
|
|
- updateOrder(blanks);
|
|
|
+ updateOrder(blanks);
|
|
|
}
|
|
|
|
|
|
function removeForbiddenChars(inTxt)
|
|
@@ -279,27 +283,44 @@ class FillBlanks extends Question
|
|
|
|
|
|
// this function is the same than the PHP one
|
|
|
// if modify it modify the php one getAllowedSeparator
|
|
|
- function getSeparatorFromNumber(innumber)
|
|
|
+ function getSeparatorFromNumber(number)
|
|
|
{
|
|
|
- tabSeparator = new Array();
|
|
|
- tabSeparator[0] = new Array("[", "]");
|
|
|
- tabSeparator[1] = new Array("{", "}");
|
|
|
- tabSeparator[2] = new Array("(", ")");
|
|
|
- tabSeparator[3] = new Array("*", "*");
|
|
|
- tabSeparator[4] = new Array("#", "#");
|
|
|
- tabSeparator[5] = new Array("%", "%");
|
|
|
- tabSeparator[6] = new Array("$", "$");
|
|
|
- return tabSeparator[innumber];
|
|
|
+ var separator = new Array();
|
|
|
+ separator[0] = new Array("[", "]");
|
|
|
+ separator[1] = new Array("{", "}");
|
|
|
+ separator[2] = new Array("(", ")");
|
|
|
+ separator[3] = new Array("*", "*");
|
|
|
+ separator[4] = new Array("#", "#");
|
|
|
+ separator[5] = new Array("%", "%");
|
|
|
+ separator[6] = new Array("$", "$");
|
|
|
+ return separator[number];
|
|
|
}
|
|
|
|
|
|
- function trimBlanksBetweenSeparator(inTxt, inSeparatorStart, inSeparatorEnd)
|
|
|
+ function trimBlanksBetweenSeparator(inTxt, inSeparatorStart, inSeparatorEnd, addColor)
|
|
|
{
|
|
|
var result = inTxt
|
|
|
result = result.replace(inSeparatorStart, "");
|
|
|
result = result.replace(inSeparatorEnd, "");
|
|
|
result = result.trim();
|
|
|
+
|
|
|
+ if (addColor == 1) {
|
|
|
+ var resultParts = result.split("|");
|
|
|
+ var partsToString = "";
|
|
|
+ resultParts.forEach(function(item, index) {
|
|
|
+ if (index == 0) {
|
|
|
+ item = "<b><font style=\"color:green\"> " + item +"</font></b>";
|
|
|
+ }
|
|
|
+ if (index < resultParts.length - 1) {
|
|
|
+ item = item + " | ";
|
|
|
+ }
|
|
|
+ partsToString += item;
|
|
|
+ });
|
|
|
+ result = partsToString;
|
|
|
+ }
|
|
|
+
|
|
|
return inSeparatorStart+result+inSeparatorEnd;
|
|
|
}
|
|
|
+
|
|
|
</script>';
|
|
|
|
|
|
// answer
|
|
@@ -312,7 +333,7 @@ class FillBlanks extends Question
|
|
|
'answer',
|
|
|
Display::return_icon('fill_field.png'),
|
|
|
['id' => 'answer'],
|
|
|
- array('ToolbarSet' => 'TestQuestionDescription')
|
|
|
+ ['ToolbarSet' => 'TestQuestionDescription']
|
|
|
);
|
|
|
$form->addRule('answer', get_lang('GiveText'), 'required');
|
|
|
|
|
@@ -321,14 +342,15 @@ class FillBlanks extends Question
|
|
|
$form->addElement(
|
|
|
'select',
|
|
|
'select_separator',
|
|
|
- get_lang("SelectFillTheBlankSeparator"),
|
|
|
+ get_lang('SelectFillTheBlankSeparator'),
|
|
|
self::getAllowedSeparatorForSelect(),
|
|
|
- ' id="select_separator" style="width:150px" onchange="changeBlankSeparator()" '
|
|
|
+ ' id="select_separator" style="width:150px" class="selectpicker" onchange="changeBlankSeparator()" '
|
|
|
);
|
|
|
$form->addLabel(
|
|
|
null,
|
|
|
'<input type="button" onclick="updateBlanks()" value="'.get_lang('RefreshBlanks').'" class="btn btn-default" />'
|
|
|
);
|
|
|
+
|
|
|
$form->addHtml('<div id="blanks_weighting"></div>');
|
|
|
|
|
|
global $text;
|
|
@@ -424,7 +446,7 @@ class FillBlanks extends Question
|
|
|
$answer .= ",";
|
|
|
}
|
|
|
// calculate the global weighting for the question
|
|
|
- $this -> weighting += $form->getSubmitValue('weighting['.$i.']');
|
|
|
+ $this->weighting += (float) $form->getSubmitValue('weighting['.$i.']');
|
|
|
}
|
|
|
|
|
|
// input width
|
|
@@ -499,6 +521,7 @@ class FillBlanks extends Question
|
|
|
) {
|
|
|
$inTabTeacherSolution = $listAnswersInfo['tabwords'];
|
|
|
$inTeacherSolution = $inTabTeacherSolution[$inBlankNumber];
|
|
|
+
|
|
|
switch (self::getFillTheBlankAnswerType($inTeacherSolution)) {
|
|
|
case self::FILL_THE_BLANK_MENU:
|
|
|
$selected = '';
|
|
@@ -512,19 +535,12 @@ class FillBlanks extends Question
|
|
|
|
|
|
$resultOptions = ['' => '--'];
|
|
|
foreach ($listMenu as $item) {
|
|
|
- $item = self::trimOption($item);
|
|
|
- $resultOptions[$item] = $item;
|
|
|
+ $resultOptions[sha1($item)] = $item;
|
|
|
}
|
|
|
|
|
|
- for ($k = 0; $k < count($listMenu); $k++) {
|
|
|
- if ($correctItem == $listMenu[$k]) {
|
|
|
- $selected = $k;
|
|
|
-
|
|
|
- break;
|
|
|
- }
|
|
|
- // if in teacher view, display the first item by default, which is the right answer
|
|
|
- if ($k == 0 && !$displayForStudent) {
|
|
|
- $selected = $k;
|
|
|
+ foreach ($resultOptions as $key => $value) {
|
|
|
+ if ($correctItem == $value) {
|
|
|
+ $selected = $key;
|
|
|
|
|
|
break;
|
|
|
}
|
|
@@ -555,12 +571,17 @@ class FillBlanks extends Question
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Removes double spaces between words
|
|
|
+ * @param string $text
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
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).' ');
|
|
|
+ $text = trim($text);
|
|
|
+ $text = preg_replace("/\s+/", " ", $text);
|
|
|
|
|
|
- return $trimmed;
|
|
|
+ return $text;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -574,8 +595,13 @@ class FillBlanks extends Question
|
|
|
public static function getFillTheBlankMenuAnswers($correctAnswer, $displayForStudent)
|
|
|
{
|
|
|
$list = api_preg_split("/\|/", $correctAnswer);
|
|
|
+ foreach ($list as &$item) {
|
|
|
+ $item = self::trimOption($item);
|
|
|
+ $item = api_html_entity_decode($item);
|
|
|
+ }
|
|
|
+ // The list is always in the same order, there's no option to allow or disable shuffle options.
|
|
|
if ($displayForStudent) {
|
|
|
- shuffle($list);
|
|
|
+ shuffle_assoc($list);
|
|
|
}
|
|
|
|
|
|
return $list;
|
|
@@ -620,33 +646,49 @@ class FillBlanks extends Question
|
|
|
* Return true if student answer is right according to the correctAnswer
|
|
|
* it is not as simple as equality, because of the type of Fill The Blank question
|
|
|
* eg : studentAnswer = 'Un' and correctAnswer = 'Un||1||un'
|
|
|
- * @param string $studentAnswer [studentanswer] of the info array of the answer field
|
|
|
- * @param string $correctAnswer [tabwords] of the info array of the answer field
|
|
|
- *
|
|
|
+ * @param string $studentAnswer [student_answer] of the info array of the answer field
|
|
|
+ * @param string $correctAnswer [words] of the info array of the answer field
|
|
|
+ * @param bool $fromDatabase
|
|
|
* @return bool
|
|
|
*/
|
|
|
- public static function isGoodStudentAnswer($studentAnswer, $correctAnswer)
|
|
|
+ public static function isStudentAnswerGood($studentAnswer, $correctAnswer, $fromDatabase = false)
|
|
|
{
|
|
|
+ $result = false;
|
|
|
switch (self::getFillTheBlankAnswerType($correctAnswer)) {
|
|
|
case self::FILL_THE_BLANK_MENU:
|
|
|
$listMenu = self::getFillTheBlankMenuAnswers($correctAnswer, false);
|
|
|
- $result = self::trimOption($listMenu[0]) == $studentAnswer;
|
|
|
+ if ($studentAnswer != '' && isset($listMenu[0])) {
|
|
|
+ // First item is always the correct one.
|
|
|
+ $item = $listMenu[0];
|
|
|
+ if (!$fromDatabase) {
|
|
|
+ $item = sha1($item);
|
|
|
+ }
|
|
|
+ if ($item === $studentAnswer) {
|
|
|
+ $result = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
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);
|
|
|
-
|
|
|
+ $listSeveral = array_map(
|
|
|
+ function ($item) {
|
|
|
+ return self::trimOption($item);
|
|
|
+ },
|
|
|
+ $listSeveral
|
|
|
+ );
|
|
|
$result = in_array($studentAnswer, $listSeveral);
|
|
|
break;
|
|
|
case self::FILL_THE_BLANK_STANDARD:
|
|
|
default:
|
|
|
+ $correctAnswer = api_html_entity_decode($correctAnswer);
|
|
|
+ $studentAnswer = htmlspecialchars($studentAnswer);
|
|
|
$result = $studentAnswer == self::trimOption($correctAnswer);
|
|
|
+
|
|
|
+
|
|
|
break;
|
|
|
}
|
|
|
+ //var_dump($result);
|
|
|
|
|
|
return $result;
|
|
|
}
|
|
@@ -658,9 +700,9 @@ class FillBlanks extends Question
|
|
|
*/
|
|
|
public static function getFillTheBlankAnswerType($correctAnswer)
|
|
|
{
|
|
|
- if (api_strpos($correctAnswer, "|") && !api_strpos($correctAnswer, "||")) {
|
|
|
+ if (api_strpos($correctAnswer, '|') && !api_strpos($correctAnswer, '||')) {
|
|
|
return self::FILL_THE_BLANK_MENU;
|
|
|
- } elseif (api_strpos($correctAnswer, "||")) {
|
|
|
+ } elseif (api_strpos($correctAnswer, '||')) {
|
|
|
return self::FILL_THE_BLANK_SEVERAL_ANSWER;
|
|
|
} else {
|
|
|
return self::FILL_THE_BLANK_STANDARD;
|
|
@@ -701,20 +743,20 @@ class FillBlanks extends Question
|
|
|
|
|
|
$listAnswerResults['systemstring'] = $listDoubleColon[1];
|
|
|
|
|
|
- // make sure we only take the last bit to find special marks
|
|
|
+ // Make sure we only take the last bit to find special marks
|
|
|
$listArobaseSplit = explode('@', $listDoubleColon[1]);
|
|
|
|
|
|
if (count($listArobaseSplit) < 2) {
|
|
|
$listArobaseSplit[1] = '';
|
|
|
}
|
|
|
|
|
|
- // take the complete string except after the last '::'
|
|
|
+ // Take the complete string except after the last '::'
|
|
|
$listDetails = explode(":", $listArobaseSplit[0]);
|
|
|
|
|
|
// < number of item after the ::[score]:[size]:[separator_id]@ , here there are 3
|
|
|
if (count($listDetails) < 3) {
|
|
|
$listWeightings = explode(',', $listDetails[0]);
|
|
|
- $listSizeOfInput = array();
|
|
|
+ $listSizeOfInput = [];
|
|
|
for ($i = 0; $i < count($listWeightings); $i++) {
|
|
|
$listSizeOfInput[] = 200;
|
|
|
}
|
|
@@ -757,12 +799,12 @@ class FillBlanks extends Question
|
|
|
}
|
|
|
$value = trim($value, $trimChars);
|
|
|
},
|
|
|
- array($blankCharStart, $blankCharEnd)
|
|
|
+ [$blankCharStart, $blankCharEnd]
|
|
|
);
|
|
|
$listAnswerResults['tabwords'] = $listWords[0];
|
|
|
}
|
|
|
|
|
|
- // get all common words
|
|
|
+ // Get all common words
|
|
|
$commonWords = api_preg_replace(
|
|
|
'/'.$blankCharStartForRegexp.'[^'.$blankCharEndForRegexp.']*'.$blankCharEndForRegexp.'/',
|
|
|
"::",
|
|
@@ -771,9 +813,8 @@ class FillBlanks extends Question
|
|
|
|
|
|
// if student answer, the second [] is the student answer,
|
|
|
// the third is if student scored or not
|
|
|
- $listBrackets = array();
|
|
|
- $listWords = array();
|
|
|
-
|
|
|
+ $listBrackets = [];
|
|
|
+ $listWords = [];
|
|
|
if ($isStudentAnswer) {
|
|
|
for ($i = 0; $i < count($listAnswerResults['tabwords']); $i++) {
|
|
|
$listBrackets[] = $listAnswerResults['tabwordsbracket'][$i];
|
|
@@ -797,7 +838,6 @@ class FillBlanks extends Question
|
|
|
}
|
|
|
|
|
|
$listAnswerResults['commonwords'] = explode("::", $commonWords);
|
|
|
- //echo strip_tags($commonWords);
|
|
|
|
|
|
return $listAnswerResults;
|
|
|
}
|
|
@@ -839,7 +879,7 @@ class FillBlanks extends Question
|
|
|
$courseId = api_get_course_int_id();
|
|
|
// If no user has answered questions, no need to go further. Return empty array.
|
|
|
if (empty($studentsIdList)) {
|
|
|
- return array();
|
|
|
+ return [];
|
|
|
}
|
|
|
// request to have all the answers of student for this question
|
|
|
// student may have doing it several time
|
|
@@ -861,7 +901,7 @@ class FillBlanks extends Question
|
|
|
';
|
|
|
|
|
|
$res = Database::query($sql);
|
|
|
- $tabUserResult = array();
|
|
|
+ $tabUserResult = [];
|
|
|
// foreach attempts for all students starting with his older attempt
|
|
|
while ($data = Database::fetch_array($res)) {
|
|
|
$tabAnswer = self::getAnswerInfo($data['answer'], true);
|
|
@@ -1039,17 +1079,15 @@ class FillBlanks extends Question
|
|
|
*/
|
|
|
public static function getAllowedSeparator()
|
|
|
{
|
|
|
- $fillBlanksAllowedSeparator = array(
|
|
|
- array('[', ']'),
|
|
|
- array('{', '}'),
|
|
|
- array('(', ')'),
|
|
|
- array('*', '*'),
|
|
|
- array('#', '#'),
|
|
|
- array('%', '%'),
|
|
|
- array('$', '$'),
|
|
|
- );
|
|
|
-
|
|
|
- return $fillBlanksAllowedSeparator;
|
|
|
+ return [
|
|
|
+ ['[', ']'],
|
|
|
+ ['{', '}'],
|
|
|
+ ['(', ')'],
|
|
|
+ ['*', '*'],
|
|
|
+ ['#', '#'],
|
|
|
+ ['%', '%'],
|
|
|
+ ['$', '$'],
|
|
|
+ ];
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1085,10 +1123,10 @@ class FillBlanks extends Question
|
|
|
*/
|
|
|
public static function getAllowedSeparatorForSelect()
|
|
|
{
|
|
|
- $listResults = array();
|
|
|
- $fillBlanksAllowedSeparator = self::getAllowedSeparator();
|
|
|
- for ($i = 0; $i < count($fillBlanksAllowedSeparator); $i++) {
|
|
|
- $listResults[] = $fillBlanksAllowedSeparator[$i][0]."...".$fillBlanksAllowedSeparator[$i][1];
|
|
|
+ $listResults = [];
|
|
|
+ $allowedSeparator = self::getAllowedSeparator();
|
|
|
+ foreach ($allowedSeparator as $part) {
|
|
|
+ $listResults[] = $part[0]."...".$part[1];
|
|
|
}
|
|
|
|
|
|
return $listResults;
|
|
@@ -1257,7 +1295,9 @@ class FillBlanks extends Question
|
|
|
* return HTML code for correct answer
|
|
|
* @param string $answer
|
|
|
* @param string $correct
|
|
|
- * @param bool $resultsDisabled
|
|
|
+ * @param string $feedbackType
|
|
|
+ * @param bool $resultsDisabled
|
|
|
+ * @param bool $showTotalScoreAndUserChoices
|
|
|
*
|
|
|
* @return string
|
|
|
*/
|
|
@@ -1282,6 +1322,7 @@ class FillBlanks extends Question
|
|
|
* return HTML code for wrong answer
|
|
|
* @param string $answer
|
|
|
* @param string $correct
|
|
|
+ * @param string $feedbackType
|
|
|
* @param bool $resultsDisabled
|
|
|
*
|
|
|
* @return string
|
|
@@ -1316,8 +1357,8 @@ class FillBlanks extends Question
|
|
|
$isCorrect = true;
|
|
|
|
|
|
foreach ($correctAnswerList as $i => $correctAnswer) {
|
|
|
- $isGoodStudentAnswer = self::isGoodStudentAnswer($studentAnswer[$i], $correctAnswer);
|
|
|
- $isCorrect = $isCorrect && $isGoodStudentAnswer;
|
|
|
+ $value = self::isStudentAnswerGood($studentAnswer[$i], $correctAnswer);
|
|
|
+ $isCorrect = $isCorrect && $value;
|
|
|
}
|
|
|
|
|
|
return $isCorrect;
|