41 $this->
object->loadFromDb($qId);
50 return $this->
object->feedbackOBJ->isSpecificAnswerFeedbackAvailable($this->
object->getId());
55 return [
'uploadImage',
'removeImage'];
66 $this->tpl->setVariable(
"QUESTION_DATA", $this->
ctrl->getHTML($form));
74 $this->
object->saveToDb();
81 $position = key($_POST[
'cmd'][
'removeImage']);
82 $this->
object->removeAnswerImage($position);
84 $this->
object->saveToDb();
90 if (isset($_POST[
'cmd'][__FUNCTION__]) && count($_POST[
'cmd'][__FUNCTION__])) {
91 $this->
object->moveAnswerDown(key($_POST[
'cmd'][__FUNCTION__]));
92 $this->
object->saveToDb();
100 if (isset($_POST[
'cmd'][__FUNCTION__]) && count($_POST[
'cmd'][__FUNCTION__])) {
101 $this->
object->moveAnswerUp(key($_POST[
'cmd'][__FUNCTION__]));
102 $this->
object->saveToDb();
114 $form->setValuesByPost();
117 $answersInput = $form->getItemByPostVar(
'kprimanswers');
118 $answersInput->setIgnoreMissingUploadsEnabled(
true);
120 if (!$answersInput->checkUploads($_POST[$answersInput->getPostVar()])) {
121 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"form_input_not_valid"));
126 $answersInput->collectValidFiles();
127 } elseif (!$form->checkInput()) {
168 $shuffleAnswers =
new ilCheckboxInputGUI($this->
lng->txt(
"shuffle_answers"),
"shuffle_answers_enabled");
169 $shuffleAnswers->setChecked($this->
object->isShuffleAnswersEnabled());
170 $form->
addItem($shuffleAnswers);
172 if (!$this->
object->getSelfAssessmentEditingMode()) {
175 $answerType->
setOptions($this->
object->getAnswerTypeSelectOptions($this->lng));
176 $answerType->setValue($this->
object->getAnswerType());
180 if (!$this->
object->getSelfAssessmentEditingMode() && $this->
object->isSingleLineAnswerType($this->
object->getAnswerType())) {
183 $thumb_size->setSuffix($this->
lng->txt(
'thumb_size_unit_pixel'));
184 $thumb_size->setInfo($this->
lng->txt(
'thumb_size_info'));
185 $thumb_size->setDecimals(
false);
186 $thumb_size->setMinValue($this->
object->getMinimumThumbSize());
187 $thumb_size->setMaxValue($this->
object->getMaximumThumbSize());
188 $thumb_size->setSize(6);
189 $thumb_size->setValue($this->
object->getThumbSize());
192 $thumb_size->setValue($this->
object->getThumbSize());
198 $optionLabel->
setInfo($this->
lng->txt(
'option_label_info'));
199 $optionLabel->setRequired(
true);
200 $optionLabel->setValue($this->
object->getOptionLabel());
201 foreach ($this->
object->getValidOptionLabelsTranslated($this->lng) as $labelValue => $labelText) {
203 $optionLabel->addOption($option);
205 if ($this->
object->isCustomOptionLabel($labelValue)) {
207 $this->
lng->txt(
'option_label_custom_true'),
208 'option_label_custom_true' 210 $customLabelTrue->setValue($this->
object->getCustomTrueOptionLabel());
211 $option->addSubItem($customLabelTrue);
214 $this->
lng->txt(
'option_label_custom_false'),
215 'option_label_custom_false' 217 $customLabelFalse->setValue($this->
object->getCustomFalseOptionLabel());
218 $option->addSubItem($customLabelFalse);
225 $points->setRequired(
true);
227 $points->allowDecimals(
true);
228 $points->setMinValue(0);
229 $points->setMinvalueShouldBeGreater(
true);
230 $points->setValue($this->
object->getPoints());
234 $scorePartialSolution =
new ilCheckboxInputGUI($this->
lng->txt(
'score_partsol_enabled'),
'score_partsol_enabled');
235 $scorePartialSolution->setInfo($this->
lng->txt(
'score_partsol_enabled_info'));
236 $scorePartialSolution->setChecked($this->
object->isScorePartialSolutionEnabled());
237 $form->
addItem($scorePartialSolution);
247 $old_answer_type = $this->
object->getAnswerType();
249 $this->
object->setShuffleAnswersEnabled($form->
getItemByPostVar(
'shuffle_answers_enabled')->getChecked());
251 if (!$this->
object->getSelfAssessmentEditingMode()) {
252 $this->
object->setAnswerType($form->
getItemByPostVar(
'answer_type')->getValue());
255 if (!$this->
object->getSelfAssessmentEditingMode() && $this->
object->isSingleLineAnswerType($old_answer_type)) {
256 $thumbsize = (
int) ($form->
getItemByPostVar(
'thumb_size')->getValue() ?? $this->
object->getThumbSize());
257 if ($thumbsize !== $this->
object->getThumbSize()) {
258 $this->
object->setThumbSize($thumbsize);
259 $this->rebuild_thumbnails =
true;
263 $this->
object->setOptionLabel($form->
getItemByPostVar(
'option_label')->getValue());
265 if ($this->
object->isCustomOptionLabel($this->object->getOptionLabel())) {
266 $this->
object->setCustomTrueOptionLabel(strip_tags(
269 $this->
object->setCustomFalseOptionLabel(strip_tags(
276 $this->
object->setScorePartialSolutionEnabled($form->
getItemByPostVar(
'score_partsol_enabled')->getChecked());
286 $answers->
setInfo($this->
lng->txt(
'kprim_answers_info'));
287 $answers->setSize(64);
288 $answers->setRequired(
true);
289 $answers->setAllowMove(
true);
290 $answers->setQuestionObject($this->
object);
291 $answers->setSingleline($this->
object->isSingleLineAnswerType($this->object->getAnswerType()));
292 $answers->setValues($this->
object->getAnswers());
308 $this->
object->handleFileUploads($answers, $files);
310 if ($this->rebuild_thumbnails) {
311 $answers = $this->
object->rebuildThumbnails(
312 $this->
object->getAnswerType(),
313 $this->
object->getThumbSize(),
314 $this->
object->getImagePath(),
319 $this->
object->setAnswers($answers);
328 foreach ($answers as
$key => $answer) {
359 $is_postponed =
false,
360 $use_post_solutions =
false,
361 $showInlineFeedback =
false 369 $solutions = $this->
object->getTestOutputSolutions($active_id, $pass);
371 foreach ($solutions as $idx => $solution_value) {
372 $user_solution[$solution_value[
"value1"]] = $solution_value[
"value2"];
376 $template =
new ilTemplate(
"tpl.il_as_qpl_mc_kprim_output.html",
true,
true,
"Modules/TestQuestionPool");
378 foreach ($keys as $answer_id) {
379 $answer = $this->
object->getAnswer($answer_id);
380 if ($answer->getImageFile() !== null
381 && $answer->getImageFile() !==
'') {
382 if ($this->
object->getThumbSize()) {
383 $template->setCurrentBlock(
"preview");
384 $template->setVariable(
"URL_PREVIEW", $answer->getImageWebPath());
385 $template->setVariable(
"TEXT_PREVIEW", $this->
lng->txt(
'preview'));
387 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getThumbWebPath());
388 [$width, $height, $type, $attr] = getimagesize($answer->getImageFsPath());
389 $alt = $answer->getImageFile();
390 if (strlen($answer->getAnswertext())) {
391 $alt = $answer->getAnswertext();
393 $alt = preg_replace(
"/<[^>]*?>/",
"", $alt);
396 $template->parseCurrentBlock();
398 $template->setCurrentBlock(
"answer_image");
399 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getImageWebPath());
400 [$width, $height, $type, $attr] = getimagesize($answer->getImageFsPath());
401 $alt = $answer->getImageFile();
402 if (strlen($answer->getAnswertext())) {
403 $alt = $answer->getAnswertext();
405 $alt = preg_replace(
"/<[^>]*?>/",
"", $alt);
406 $template->setVariable(
"ATTR", $attr);
409 $template->parseCurrentBlock();
413 if ($showInlineFeedback) {
417 $template->setCurrentBlock(
"answer_row");
418 $template->setVariable(
"ANSWER_ID", $answer_id);
420 $template->setVariable(
'VALUE_TRUE', 1);
421 $template->setVariable(
'VALUE_FALSE', 0);
423 if (isset($user_solution[$answer->getPosition()])) {
424 $tplVar = $user_solution[$answer->getPosition()] ?
'CHECKED_ANSWER_TRUE' :
'CHECKED_ANSWER_FALSE';
425 $template->setVariable($tplVar,
" checked=\"checked\"");
428 $template->parseCurrentBlock();
431 $template->setVariable(
"QUESTIONTEXT", $this->
object->getQuestionForHTMLOutput());
432 $template->setVariable(
"INSTRUCTIONTEXT", $this->
object->getInstructionTextTranslation(
434 $this->object->getOptionLabel()
437 $template->setVariable(
"OPTION_LABEL_TRUE", $this->
object->getTrueOptionLabelTranslation(
439 $this->object->getOptionLabel()
442 $template->setVariable(
"OPTION_LABEL_FALSE", $this->
object->getFalseOptionLabelTranslation(
444 $this->object->getOptionLabel()
447 $questionoutput = $template->get();
448 $pageoutput = $this->
outQuestionPage(
"", $is_postponed, $active_id, $questionoutput, $showInlineFeedback);
456 public function getPreview($show_question_only =
false, $showInlineFeedback =
false): string
462 $template =
new ilTemplate(
"tpl.il_as_qpl_mc_kprim_output.html",
true,
true,
"Modules/TestQuestionPool");
464 foreach ($keys as $answer_id) {
465 $answer = $this->
object->getAnswer($answer_id);
466 if ($answer->getImageFile() !== null
467 && $answer->getImageFile() !==
'') {
468 if ($this->
object->getThumbSize()) {
469 $template->setCurrentBlock(
"preview");
470 $template->setVariable(
"URL_PREVIEW", $answer->getImageWebPath());
471 $template->setVariable(
"TEXT_PREVIEW", $this->
lng->txt(
'preview'));
473 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getThumbWebPath());
474 [$width, $height, $type, $attr] = getimagesize($answer->getImageFsPath());
475 $alt = $answer->getImageFile();
476 if (strlen($answer->getAnswertext())) {
477 $alt = $answer->getAnswertext();
479 $alt = preg_replace(
"/<[^>]*?>/",
"", $alt);
482 $template->parseCurrentBlock();
484 $template->setCurrentBlock(
"answer_image");
485 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getImageWebPath());
486 [$width, $height, $type, $attr] = getimagesize($answer->getImageFsPath());
487 $alt = $answer->getImageFile();
488 if (strlen($answer->getAnswertext())) {
489 $alt = $answer->getAnswertext();
491 $alt = preg_replace(
"/<[^>]*?>/",
"", $alt);
492 $template->setVariable(
"ATTR", $attr);
495 $template->parseCurrentBlock();
499 if ($showInlineFeedback) {
503 $template->setCurrentBlock(
"answer_row");
504 $template->setVariable(
"ANSWER_ID", $answer_id);
506 $template->setVariable(
'VALUE_TRUE', 1);
507 $template->setVariable(
'VALUE_FALSE', 0);
509 if (isset($user_solution[$answer->getPosition()])) {
510 $tplVar = $user_solution[$answer->getPosition()] ?
'CHECKED_ANSWER_TRUE' :
'CHECKED_ANSWER_FALSE';
511 $template->setVariable($tplVar,
" checked=\"checked\"");
514 $template->parseCurrentBlock();
516 $questiontext = $this->
object->getQuestionForHTMLOutput();
522 $template->setVariable(
"INSTRUCTIONTEXT", $this->
object->getInstructionTextTranslation(
524 $this->object->getOptionLabel()
527 $template->setVariable(
"OPTION_LABEL_TRUE", $this->
object->getTrueOptionLabelTranslation(
529 $this->object->getOptionLabel()
532 $template->setVariable(
"OPTION_LABEL_FALSE", $this->
object->getFalseOptionLabelTranslation(
534 $this->object->getOptionLabel()
537 $questionoutput = $template->get();
538 if (!$show_question_only) {
542 return $questionoutput;
559 $graphicalOutput =
false,
560 $result_output =
false,
561 $show_question_only =
true,
562 $show_feedback =
false,
563 $show_correct_solution =
false,
564 $show_manual_scoring =
false,
565 $show_question_text =
true 569 if (($active_id > 0) && (!$show_correct_solution)) {
570 $solutions = $this->
object->getSolutionValues($active_id, $pass);
571 foreach ($solutions as $idx => $solution_value) {
573 'value1' => $solution_value[
'value1'],
574 'value2' => $solution_value[
'value2']
579 foreach ($this->
object->getAnswers() as $answer) {
581 'value1' => $answer->getPosition(),
582 'value2' => $answer->getCorrectness()
595 $show_correct_solution,
596 $show_manual_scoring,
604 mixed $user_solutions,
607 bool $graphical_output =
false,
608 bool $result_output =
false,
609 bool $show_question_only =
true,
610 bool $show_feedback =
false,
611 bool $show_correct_solution =
false,
612 bool $show_manual_scoring =
false,
613 bool $show_question_text =
true,
614 bool $show_autosave_title =
false,
615 bool $show_inline_feedback =
false,
619 foreach ($user_solutions as $idx => $solution_value) {
620 $user_solution[$solution_value[
'value1']] = $solution_value[
'value2'];
623 $template =
new ilTemplate(
"tpl.il_as_qpl_mc_kprim_output_solution.html",
true,
true,
"Modules/TestQuestionPool");
625 foreach ($keys as $answer_id) {
626 $answer = $this->
object->getAnswer($answer_id);
628 if (($active_id > 0) &&
629 !$show_correct_solution &&
632 if (isset($user_solution[$answer->getPosition()]) && $user_solution[$answer->getPosition()] == $answer->getCorrectness()) {
635 $template->setCurrentBlock(
"icon_ok");
636 $template->setVariable(
"ICON_OK", $correctness_icon);
637 $template->parseCurrentBlock();
639 if ($answer->getImageFile() !== null
640 && $answer->getImageFile() !==
'') {
641 $template->setCurrentBlock(
"answer_image");
642 if ($this->
object->getThumbSize()) {
643 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getThumbWebPath());
645 $template->setVariable(
"ANSWER_IMAGE_URL", $answer->getImageWebPath());
648 $template->setVariable(
651 $answer->getImageFile()
654 $template->setVariable(
655 "ANSWER_IMAGE_TITLE",
657 $answer->getImageFile()
660 $template->parseCurrentBlock();
663 if ($show_feedback) {
667 $template->setCurrentBlock(
"answer_row");
671 if (isset($user_solution[$answer->getPosition()])) {
672 if ($user_solution[$answer->getPosition()]) {
674 $template->setVariable(
"SOLUTION_ALT_TRUE", $this->
lng->txt(
"checked"));
676 $template->setVariable(
"SOLUTION_ALT_FALSE", $this->
lng->txt(
"unchecked"));
679 $template->setVariable(
"SOLUTION_ALT_TRUE", $this->
lng->txt(
"unchecked"));
681 $template->setVariable(
"SOLUTION_ALT_FALSE", $this->
lng->txt(
"checked"));
685 $template->setVariable(
"SOLUTION_ALT_TRUE", $this->
lng->txt(
"unchecked"));
687 $template->setVariable(
"SOLUTION_ALT_FALSE", $this->
lng->txt(
"unchecked"));
690 $template->setVariable(
'SOL_QID', $this->
object->getId());
691 $template->setVariable(
'SOL_SUFFIX', $show_correct_solution ?
'bestsolution' :
'usersolution');
692 $template->setVariable(
'SOL_POSITION', $answer->getPosition());
694 $template->setVariable(
'SOL_TRUE_VALUE', 1);
695 $template->setVariable(
'SOL_FALSE_VALUE', 0);
697 if (isset($user_solution[$answer->getPosition()])) {
698 if ($user_solution[$answer->getPosition()]) {
699 $template->setVariable(
'SOL_TRUE_CHECKED',
'checked');
701 $template->setVariable(
'SOL_FALSE_CHECKED',
'checked');
706 $template->parseCurrentBlock();
709 if ($show_question_text ==
true) {
710 $questiontext = $this->
object->getQuestionForHTMLOutput();
716 $template->setVariable(
"INSTRUCTIONTEXT", $this->
object->getInstructionTextTranslation(
718 $this->object->getOptionLabel()
722 $template->setVariable(
"OPTION_LABEL_TRUE", $this->
object->getTrueOptionLabelTranslation(
724 $this->object->getOptionLabel()
727 $template->setVariable(
"OPTION_LABEL_FALSE", $this->
object->getFalseOptionLabelTranslation(
729 $this->object->getOptionLabel()
733 $questionoutput = $template->get();
736 $solutiontemplate =
new ilTemplate(
"tpl.il_as_tst_solution_output.html",
true,
true,
"Modules/TestQuestionPool");
738 if (strlen($feedback)) {
744 $solutiontemplate->setVariable(
"ILC_FB_CSS_CLASS", $cssClass);
748 $solutiontemplate->setVariable(
"SOLUTION_OUTPUT", $questionoutput);
750 $solutionoutput = $solutiontemplate->get();
752 if (!$show_question_only) {
756 return $solutionoutput;
761 $choice_keys = array_keys($this->
object->getAnswers());
763 if ($this->
object->isShuffleAnswersEnabled()) {
764 $choice_keys = $this->
object->getShuffler()->transform($choice_keys);
773 if (isset($user_solution[$answer_id])) {
774 $fb = $this->
object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->
object->getId(), 0, $answer_id);
776 $template->setCurrentBlock(
"feedback");
778 $template->parseCurrentBlock();
784 $fb = $this->
object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->
object->getId(), 0, $answer_id);
786 $template->setCurrentBlock(
"feedback");
788 $template->parseCurrentBlock();
793 $answer = $this->
object->getAnswer($answer_id);
795 if ($answer->getCorrectness()) {
796 $fb = $this->
object->feedbackOBJ->getSpecificAnswerFeedbackTestPresentation($this->
object->getId(), 0, $answer_id);
798 $template->setCurrentBlock(
"feedback");
800 $template->parseCurrentBlock();
846 return '<pre>' . print_r($relevant_answers, 1) .
'</pre>';
851 $trueOptionLabel = $this->
object->getTrueOptionLabelTranslation($this->
lng, $this->
object->getOptionLabel());
852 $falseOptionLabel = $this->
object->getFalseOptionLabelTranslation($this->
lng, $this->
object->getOptionLabel());
854 $tpl =
new ilTemplate(
'tpl.il_as_aggregated_kprim_answers_table.html',
true,
true,
"Modules/TestQuestionPool");
856 foreach ($aggregate as $lineData) {
875 foreach ($answers as $answer) {
877 'answertext' => $answer->getAnswerText(),
'count_true' => 0,
'count_false' => 0
880 foreach ($rawSolutionData as $solutionRecord) {
881 if ($solutionRecord[
'value1'] == $answer->getPosition()) {
882 if ($solutionRecord[
'value2']) {
883 $answerAgg[
'count_true']++;
885 $answerAgg[
'count_false']++;
890 $aggregate[] = $answerAgg;
902 foreach ($agg as $ans) {
904 'answer' => $ans[
'answertext'],
905 'frequency_true' => $ans[
'count_true'],
906 'frequency_false' => $ans[
'count_false']
923 $table->setQuestionIndex($questionIndex);
925 $table->initColumns();
934 $points->setRequired(
true);
936 $points->allowDecimals(
true);
937 $points->setMinValue(0);
938 $points->setMinvalueShouldBeGreater(
true);
939 $points->setValue($this->
object->getPoints());
943 $scorePartialSolution =
new ilCheckboxInputGUI($this->
lng->txt(
'score_partsol_enabled'),
'score_partsol_enabled');
944 $scorePartialSolution->setInfo($this->
lng->txt(
'score_partsol_enabled_info'));
945 $scorePartialSolution->setChecked($this->
object->isScorePartialSolutionEnabled());
946 $form->
addItem($scorePartialSolution);
950 $kprimAnswers->
setInfo($this->
lng->txt(
'kprim_answers_info'));
951 $kprimAnswers->setSize(64);
952 $kprimAnswers->setMaxLength(1000);
953 $kprimAnswers->setRequired(
true);
954 $kprimAnswers->setQuestionObject($this->
object);
955 $kprimAnswers->setValues($this->
object->getAnswers());
964 $this->
object->setPoints(
965 (
float) str_replace(
',',
'.', $form->
getInput(
'points'))
968 $this->
object->setScorePartialSolutionEnabled(
969 (
bool) $form->
getInput(
'score_partsol_enabled')
972 $this->
object->setAnswers(
isTestPresentationContext()
writeQuestionSpecificPostData(ilPropertyFormGUI $form)
hasCorrectSolution($activeId, $passIndex)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getAfterParticipationSuppressionQuestionPostVars()
Returns a list of postvars which will be suppressed in the form output when used in scoring adjustmen...
getAnswerFrequencyTableGUI($parentGui, $parentCmd, $relevantAnswers, $questionIndex)
saveCorrectionsFormProperties(ilPropertyFormGUI $form)
generateCorrectnessIconsForCorrectness(int $correctness)
setCurrentBlock(string $blockname=self::DEFAULT_BLOCK)
Sets the template to the given block.
renderSolutionOutput(mixed $user_solutions, int $active_id, ?int $pass, bool $graphical_output=false, bool $result_output=false, bool $show_question_only=true, bool $show_feedback=false, bool $show_correct_solution=false, bool $show_manual_scoring=false, bool $show_question_text=true, bool $show_autosave_title=false, bool $show_inline_feedback=false,)
getAggregatedAnswersView(array $relevant_answers)
Returns an html string containing a question specific representation of the answers so far given in t...
static secureString(string $a_str, bool $a_strip_html=true, string $a_allow="")
buildBasicEditFormObject()
static getImagePath(string $img, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
addBasicQuestionFormProperties(ilPropertyFormGUI $form)
parseCurrentBlock(string $blockname=self::DEFAULT_BLOCK)
Parses the given block.
populateAnswerSpecificFormPart(ilPropertyFormGUI $form)
const CSS_CLASS_FEEDBACK_CORRECT
ilGlobalPageTemplate $tpl
const FEEDBACK_SETTING_CHECKED
getSpecificFeedbackOutput(array $userSolution)
getPreview($show_question_only=false, $showInlineFeedback=false)
populateTaxonomyFormSection(ilPropertyFormGUI $form)
getAdditionalEditQuestionCommands()
addQuestionFormCommandButtons(ilPropertyFormGUI $form)
handleAnswerTextsSubmit($answers)
const ANSWER_TYPE_MULTI_LINE
writeQuestionGenericPostData()
const FEEDBACK_SETTING_CORRECT
getTestOutput( $active_id, $pass, $is_postponed=false, $use_post_solutions=false, $showInlineFeedback=false)
renderAggregateView($aggregate)
writeAnswerSpecificPostData(ilPropertyFormGUI $form)
static getHtmlPath(string $relative_path)
get url of path
const CSS_CLASS_FEEDBACK_WRONG
Basic GUI class for assessment questions.
getAfterParticipationSuppressionAnswerPostVars()
Returns a list of postvars which will be suppressed in the form output when used in scoring adjustmen...
writePostData(bool $always=false)
{}
saveTaxonomyAssignments()
getILIASPage(string $html="")
Returns the ILIAS Page around a question.
outQuestionPage($a_temp_var, $a_postponed=false, $active_id="", $html="", $inlineFeedbackEnabled=false)
const FEEDBACK_SETTING_ALL
editQuestion(ilPropertyFormGUI $form=null)
isRenderPurposePrintPdf()
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
populateCorrectionsFormProperties(ilPropertyFormGUI $form)
aggregateAnswers($rawSolutionData, $answers)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getSolutionOutput( $active_id, $pass=null, $graphicalOutput=false, $result_output=false, $show_question_only=true, $show_feedback=false, $show_correct_solution=false, $show_manual_scoring=false, $show_question_text=true)
setVariable(string $variable, $value='')
Sets the given variable to the given value.
populateSpecificFeedbackInline($user_solution, $answer_id, $template)
getAnswersFrequency($relevantAnswers, $questionIndex)
getParticipantsAnswerKeySequence()
populateQuestionSpecificFormPart(ilPropertyFormGUI $form)
renderPurposeSupportsFormHtml()
getGenericFeedbackOutput(int $active_id, ?int $pass)