'; echo Security::remove_XSS($answerHTML, COURSEMANAGERLOWSECURITY); echo ''; } else { echo ''; echo Security::remove_XSS($answerHTML, COURSEMANAGERLOWSECURITY); echo ''; echo ''; } } /** * Shows the answer to a calculated question, as HTML. * * @param Exercise $exercise * @param string Answer text * @param int Exercise ID * @param int Question ID */ public static function display_calculated_answer( $exercise, $feedback_type, $answer, $id, $questionId, $resultsDisabled, $showTotalScoreAndUserChoices, $expectedChoice = '', $choice = '', $status = '' ) { if ($exercise->showExpectedChoice()) { if (empty($id)) { echo ''.Security::remove_XSS($answer).''; echo ''.Security::remove_XSS($choice).''; echo ''.Security::remove_XSS($expectedChoice).''; echo ''.Security::remove_XSS($status).''; echo ''; } else { echo ''; echo Security::remove_XSS($answer); echo ''; echo Security::remove_XSS($choice); echo ''; echo Security::remove_XSS($expectedChoice); echo ''; echo Security::remove_XSS($status); echo ''; echo ''; } } else { if (empty($id)) { echo ''.Security::remove_XSS($answer).''; } else { echo ''; echo Security::remove_XSS($answer); echo ''; } } } /** * Shows the answer to a free-answer question, as HTML. * * @param string Answer text * @param int Exercise ID * @param int Question ID */ public static function display_free_answer( $feedback_type, $answer, $exe_id, $questionId, $questionScore = null, $resultsDisabled = 0 ) { $comments = Event::get_comments($exe_id, $questionId); if (!empty($answer)) { echo ''; echo Security::remove_XSS($answer); echo ''; } if ($feedback_type != EXERCISE_FEEDBACK_TYPE_EXAM) { if ($questionScore > 0 || !empty($comments)) { } else { echo ''; echo Display::tag('td', ExerciseLib::getNotCorrectedYetText(), []); echo ''; } } } /** * @param $feedback_type * @param $answer * @param $id * @param $questionId * @param null $fileUrl * @param int $resultsDisabled * @param int $questionScore */ public static function display_oral_expression_answer( $feedback_type, $answer, $id, $questionId, $fileUrl = null, $resultsDisabled = 0, $questionScore = 0 ) { if (isset($fileUrl)) { echo ' '; } if (empty($id)) { echo ''; if (!empty($answer)) { echo Display::tag('td', Security::remove_XSS($answer), ['width' => '55%']); } echo ''; if (!$questionScore && $feedback_type != EXERCISE_FEEDBACK_TYPE_EXAM) { echo ''; echo Display::tag('td', ExerciseLib::getNotCorrectedYetText(), ['width' => '45%']); echo ''; } else { echo ' '; } } else { echo ''; echo ''; if (!empty($answer)) { echo Security::remove_XSS($answer); } echo ''; echo ''; } } /** * Displays the answer to a hotspot question. * * @param int $feedback_type * @param int $answerId * @param string $answer * @param string $studentChoice * @param string $answerComment * @param int $resultsDisabled * @param int $orderColor * @param bool $showTotalScoreAndUserChoices */ public static function display_hotspot_answer( $feedback_type, $answerId, $answer, $studentChoice, $answerComment, $resultsDisabled, $orderColor, $showTotalScoreAndUserChoices ) { $hide_expected_answer = false; switch ($resultsDisabled) { case RESULT_DISABLE_SHOW_SCORE_ONLY: if ($feedback_type == 0) { $hide_expected_answer = true; } break; case RESULT_DISABLE_DONT_SHOW_SCORE_ONLY_IF_USER_FINISHES_ATTEMPTS_SHOW_ALWAYS_FEEDBACK: case RESULT_DISABLE_SHOW_SCORE_ATTEMPT_SHOW_ANSWERS_LAST_ATTEMPT: $hide_expected_answer = true; if ($showTotalScoreAndUserChoices) { $hide_expected_answer = false; } break; } $hotspot_colors = [ '', // $i starts from 1 on next loop (ugly fix) '#4271B5', '#FE8E16', '#45C7F0', '#BCD631', '#D63173', '#D7D7D7', '#90AFDD', '#AF8640', '#4F9242', '#F4EB24', '#ED2024', '#3B3B3B', '#F7BDE2', ]; $content = ''; $content .= ''; $content .= ''; $content .= ''; if ($feedback_type != EXERCISE_FEEDBACK_TYPE_EXAM) { $content .= ''; } else { $content .= ''; } $content .= ''; echo $content; } /** * Display the answers to a multiple choice question. * * @param Exercise $exercise * @param int $feedbackType Feedback type * @param int $answerType Answer type * @param int $studentChoice Student choice * @param string $answer Textual answer * @param string $answerComment Comment on answer * @param string $answerCorrect Correct answer comment * @param int $id Exercise ID * @param int $questionId Question ID * @param bool $ans Whether to show the answer comment or not * @param bool $resultsDisabled * @param bool $showTotalScoreAndUserChoices * @param bool $export */ public static function display_unique_or_multiple_answer( $exercise, $feedbackType, $answerType, $studentChoice, $answer, $answerComment, $answerCorrect, $id, $questionId, $ans, $resultsDisabled, $showTotalScoreAndUserChoices, $export = false ) { if ($export) { $answer = strip_tags_blacklist($answer, ['title', 'head']); // Fix answers that contains this tags $tags = [ '', '', '', '', ]; $answer = str_replace($tags, '', $answer); } $studentChoiceInt = (int) $studentChoice; $answerCorrectChoice = (int) $answerCorrect; $hideStudentChoice = false; $hide_expected_answer = false; $status = ''; if ($exercise->showExpectedChoice()) { $status = Display::label(get_lang('Incorrect'), 'danger'); if ($answerCorrect || ($answerCorrect && $studentChoiceInt === $answerCorrectChoice)) { $status = Display::label(get_lang('Correct'), 'success'); } } $showComment = false; switch ($resultsDisabled) { case RESULT_DISABLE_SHOW_ONLY_IN_CORRECT_ANSWER: //case RESULT_DISABLE_SHOW_SCORE_AND_EXPECTED_ANSWERS_AND_RANKING: $hideStudentChoice = false; $hide_expected_answer = true; $status = Display::label(get_lang('Correct'), 'success'); $showComment = true; if (!$answerCorrect && empty($studentChoice)) { return ''; } break; case RESULT_DISABLE_SHOW_SCORE_ONLY: if ($feedbackType == 0) { $hide_expected_answer = true; } break; case RESULT_DISABLE_DONT_SHOW_SCORE_ONLY_IF_USER_FINISHES_ATTEMPTS_SHOW_ALWAYS_FEEDBACK: case RESULT_DISABLE_SHOW_SCORE_ATTEMPT_SHOW_ANSWERS_LAST_ATTEMPT: $hide_expected_answer = true; if ($showTotalScoreAndUserChoices) { $hide_expected_answer = false; } break; } $icon = in_array($answerType, [UNIQUE_ANSWER, UNIQUE_ANSWER_NO_OPTION]) ? 'radio' : 'checkbox'; $icon .= $studentChoice ? '_on' : '_off'; $icon .= '.png'; $iconAnswer = in_array($answerType, [UNIQUE_ANSWER, UNIQUE_ANSWER_NO_OPTION]) ? 'radio' : 'checkbox'; $iconAnswer .= $answerCorrect ? '_on' : '_off'; $iconAnswer .= '.png'; $studentChoiceClass = ''; if (in_array($resultsDisabled, [ RESULT_DISABLE_SHOW_ONLY_IN_CORRECT_ANSWER, RESULT_DISABLE_SHOW_SCORE_AND_EXPECTED_ANSWERS_AND_RANKING, ]) ) { if ($answerCorrect) { $studentChoiceClass = 'success'; } } echo ''; if ($hideStudentChoice === false) { echo ''; } if (!$hide_expected_answer) { echo ''; } echo ''; if ($exercise->showExpectedChoice()) { echo ''; } if ($feedbackType != EXERCISE_FEEDBACK_TYPE_EXAM) { $showComment = true; } if ($showComment) { echo ''; } else { echo ''; } echo ''; } /** * Display the answers to a multiple choice question. * * @param Exercise $exercise * @param int Answer type * @param int Student choice * @param string Textual answer * @param string Comment on answer * @param string Correct answer comment * @param int Exercise ID * @param int Question ID * @param bool Whether to show the answer comment or not */ public static function display_multiple_answer_true_false( $exercise, $feedbackType, $answerType, $studentChoice, $answer, $answerComment, $answerCorrect, $id, $questionId, $ans, $resultsDisabled, $showTotalScoreAndUserChoices ) { $hide_expected_answer = false; $hideStudentChoice = false; switch ($resultsDisabled) { //case RESULT_DISABLE_SHOW_SCORE_AND_EXPECTED_ANSWERS_AND_RANKING: case RESULT_DISABLE_SHOW_ONLY_IN_CORRECT_ANSWER: $hideStudentChoice = false; $hide_expected_answer = true; break; case RESULT_DISABLE_SHOW_SCORE_ONLY: if ($feedbackType == 0) { $hide_expected_answer = true; } break; case RESULT_DISABLE_DONT_SHOW_SCORE_ONLY_IF_USER_FINISHES_ATTEMPTS_SHOW_ALWAYS_FEEDBACK: case RESULT_DISABLE_SHOW_SCORE_ATTEMPT_SHOW_ANSWERS_LAST_ATTEMPT: $hide_expected_answer = true; if ($showTotalScoreAndUserChoices) { $hide_expected_answer = false; } break; } $content = ''; if ($hideStudentChoice === false) { $content .= ''; } // Expected choice if (!$hide_expected_answer) { $content .= ''; } $content .= ''; if ($exercise->showExpectedChoice()) { $status = Display::label(get_lang('Incorrect'), 'danger'); if (isset($new_options[$studentChoice])) { if ($studentChoice == $answerCorrect) { $status = Display::label(get_lang('Correct'), 'success'); } } $content .= ''; } if ($feedbackType != EXERCISE_FEEDBACK_TYPE_EXAM) { $content .= ''; } $content .= ''; echo $content; } /** * Display the answers to a multiple choice question. * * @param int $feedbackType * @param int $studentChoice * @param int $studentChoiceDegree * @param string $answer * @param string $answerComment * @param int $answerCorrect * @param int $questionId * @param bool $inResultsDisabled */ public static function displayMultipleAnswerTrueFalseDegreeCertainty( $feedbackType, $studentChoice, $studentChoiceDegree, $answer, $answerComment, $answerCorrect, $questionId, $inResultsDisabled ) { $hideExpectedAnswer = false; if ($feedbackType == 0 && $inResultsDisabled == 2) { $hideExpectedAnswer = true; } echo ''; $degreeInfo = $question->getResponseDegreeInfo( $studentChoice, $answerCorrect, $newOptions[$studentChoiceDegree]['position'] ); echo ' '; if ($feedbackType != EXERCISE_FEEDBACK_TYPE_EXAM) { echo ''; } else { echo ''; } echo ''; } /** * Display the answers to a multiple choice question. * * @param Exercise $exercise * @param int Answer type * @param int Student choice * @param string Textual answer * @param string Comment on answer * @param string Correct answer comment * @param int Exercise ID * @param int Question ID * @param bool Whether to show the answer comment or not */ public static function display_multiple_answer_combination_true_false( $exercise, $feedbackType, $answerType, $studentChoice, $answer, $answerComment, $answerCorrect, $id, $questionId, $ans, $resultsDisabled, $showTotalScoreAndUserChoices ) { $hide_expected_answer = false; $hideStudentChoice = false; switch ($resultsDisabled) { case RESULT_DISABLE_SHOW_SCORE_AND_EXPECTED_ANSWERS_AND_RANKING: case RESULT_DISABLE_SHOW_ONLY_IN_CORRECT_ANSWER: $hideStudentChoice = true; $hide_expected_answer = true; break; case RESULT_DISABLE_SHOW_SCORE_ONLY: if ($feedbackType == 0) { $hide_expected_answer = true; } break; case RESULT_DISABLE_DONT_SHOW_SCORE_ONLY_IF_USER_FINISHES_ATTEMPTS_SHOW_ALWAYS_FEEDBACK: case RESULT_DISABLE_SHOW_SCORE_ATTEMPT_SHOW_ANSWERS_LAST_ATTEMPT: $hide_expected_answer = true; if ($showTotalScoreAndUserChoices) { $hide_expected_answer = false; } break; } echo ''; if ($hideStudentChoice === false) { echo ''; } // Expected choice if (!$hide_expected_answer) { echo ''; } echo ''; if ($exercise->showExpectedChoice()) { $status = ''; if (isset($studentChoice)) { $status = Display::label(get_lang('Incorrect'), 'danger'); if ($studentChoice == $answerCorrect) { $status = Display::label(get_lang('Correct'), 'success'); } } echo ''; } if ($feedbackType != EXERCISE_FEEDBACK_TYPE_EXAM) { echo ''; } else { echo ''; } echo ''; } /** * @param $feedbackType * @param $exe_id * @param $questionId * @param null $questionScore * @param int $resultsDisabled */ public static function displayAnnotationAnswer( $feedbackType, $exe_id, $questionId, $questionScore = null, $resultsDisabled = 0 ) { $comments = Event::get_comments($exe_id, $questionId); if ($feedbackType != EXERCISE_FEEDBACK_TYPE_EXAM) { if ($questionScore <= 0 && empty($comments)) { echo '
'.ExerciseLib::getNotCorrectedYetText(); } } } }
'; $content .= ''; $content .= ''; $content .= "$answerId - $answer"; $content .= ''; if (!$hide_expected_answer) { $status = Display::label(get_lang('Incorrect'), 'danger'); if ($studentChoice) { $status = Display::label(get_lang('Correct'), 'success'); } else { if (in_array($resultsDisabled, [ RESULT_DISABLE_SHOW_ONLY_IN_CORRECT_ANSWER, ]) ) { return ''; } } $content .= $status; } $content .= ''; if ($studentChoice) { $content .= ''.nl2br($answerComment).''; } $content .= ' 
'; echo Display::return_icon($icon, null, null, ICON_SIZE_TINY); echo ''; echo Display::return_icon($iconAnswer, null, null, ICON_SIZE_TINY); echo ''; echo $answer; echo ''; echo $status; echo ''; $color = 'black'; if ($answerCorrect) { $color = 'green'; } if ($hide_expected_answer) { $color = ''; } $comment = ''. Security::remove_XSS($answerComment). ''; echo $comment; echo ' 
'; $course_id = api_get_course_int_id(); $new_options = Question::readQuestionOption($questionId, $course_id); // Your choice if (isset($new_options[$studentChoice])) { $content .= get_lang($new_options[$studentChoice]['name']); } else { $content .= '-'; } $content .= ''; if (isset($new_options[$answerCorrect])) { $content .= get_lang($new_options[$answerCorrect]['name']); } else { $content .= '-'; } $content .= ''; $content .= $answer; $content .= ''; $content .= $status; $content .= ''; $color = 'black'; if (isset($new_options[$studentChoice]) || in_array( $exercise->results_disabled, [ RESULT_DISABLE_SHOW_ONLY_IN_CORRECT_ANSWER, RESULT_DISABLE_SHOW_SCORE_AND_EXPECTED_ANSWERS_AND_RANKING, ] ) ) { if ($studentChoice == $answerCorrect) { $color = 'green'; } if ($hide_expected_answer) { $color = ''; } $content .= ''.nl2br($answerComment).''; } $content .= '
'; $question = new MultipleAnswerTrueFalseDegreeCertainty(); $courseId = api_get_course_int_id(); $newOptions = Question::readQuestionOption($questionId, $courseId); //Your choice if (isset($newOptions[$studentChoice])) { echo get_lang($newOptions[$studentChoice]['name']); } else { echo '-'; } echo ''; // Expected choice if (!$hideExpectedAnswer) { if (isset($newOptions[$answerCorrect])) { echo get_lang($newOptions[$answerCorrect]['name']); } else { echo '-'; } } else { echo '-'; } echo ''; echo $answer; echo ''; if (isset($newOptions[$studentChoiceDegree])) { echo $newOptions[$studentChoiceDegree]['name']; } echo '
'. nl2br($degreeInfo['label']). '
'; if (isset($newOptions[$studentChoice])) { echo ''.nl2br($answerComment).''; } echo ' 
'; // Your choice $question = new MultipleAnswerCombinationTrueFalse(); if (isset($question->options[$studentChoice])) { echo $question->options[$studentChoice]; } else { echo $question->options[2]; } echo ''; if (isset($question->options[$answerCorrect])) { echo $question->options[$answerCorrect]; } else { echo $question->options[2]; } echo ''; echo $answer; echo ''; echo $status; echo ''; //@todo replace this harcoded value if ($studentChoice || in_array($resultsDisabled, [ RESULT_DISABLE_SHOW_ONLY_IN_CORRECT_ANSWER, RESULT_DISABLE_SHOW_SCORE_AND_EXPECTED_ANSWERS_AND_RANKING, ]) ) { $color = 'black'; if ($studentChoice == $answerCorrect) { $color = 'green'; } if ($hide_expected_answer) { $color = ''; } echo ''.nl2br($answerComment).''; } echo '