19declare(strict_types=1);
59 $this->participant_repository = TestDIC::dic()[
'participant.repository'];
64 $this->
object->getTestLogger()
80 $cmd = $this->
ctrl->getCmd(self::DEFAULT_CMD);
81 $next_class = $this->
ctrl->getNextClass($this);
82 $this->
ctrl->saveParameter($this,
'sequence');
83 $this->
ctrl->saveParameter($this,
'active_id');
85 switch ($next_class) {
86 case 'iltestpassdetailsoverviewtablegui':
88 $this->
ctrl->forwardCommand($tableGUI);
92 if (in_array($cmd, [
'excel_scored_test_run',
'excel_all_test_runs'])) {
93 $ret = $this->exportEvaluation($cmd);
94 } elseif (in_array($cmd, [
'excel_all_test_runs_a'])) {
95 $ret = $this->exportAggregatedResults($cmd);
112 if ($original_id > 0) {
122 if ($this->
object->getShowSolutionAnswersOnly()) {
130 $this->
ctrl->saveParameterByClass(self::class,
'active_ids');
131 $this->global_screen->tool()->context()->current()->addAdditionalData(
132 PrintLayoutProvider::TEST_CONTEXT_PRINT,
136 $selected_active_ids = explode(
',', $this->testrequest->strVal(
'active_ids'));
137 $results_panel = $this->ui_factory->panel()->report(
138 $this->
lng->txt(
'tst_results'),
140 function (
string $v): SubPanel {
144 return $this->ui_factory->panel()->sub(
153 $this->tpl->setVariable(
155 $this->ui_renderer->render([
157 $this->ui_factory->legacy()->content(
'')->withAdditionalOnLoadCode(
158 fn(
string $id):
string =>
'setTimeout(() => {window.print();}, 50)'
167 $this->
ctrl->saveParameterByClass(self::class,
'active_ids');
168 $selected_active_ids = explode(
',', $this->testrequest->strVal(
'active_ids'));
173 $current_active_id = (
int) $selected_active_ids[0];
174 if (count($selected_active_ids) > 1
175 && ($selected_active_id = $this->testrequest->getActiveId()) > 0
176 && array_search($selected_active_id, $selected_active_ids) !==
false) {
177 $current_active_id = $selected_active_id;
180 if ($this->testrequest->isset(
'attempt')) {
186 $results_panel = $this->ui_factory->panel()->report(
191 $attempts_ids_array = $this->results_data_factory->getAttemptIdsArrayFor(
196 if (count($attempts_ids_array) > 1) {
197 $results_panel = $results_panel->withViewControls([
205 if (count($selected_active_ids) > 1) {
209 $this->tpl->setVariable(
211 $this->ui_renderer->render($results_panel)
214 $this->
tabs->setBackTarget(
215 $this->
lng->txt(
'back'),
216 $this->ctrl->getLinkTargetByClass([
'ilTestParticipantsGUI'])
222 $this->
tabs->clearSubTabs();
223 $this->
tabs->setBackTarget($this->
lng->txt(
'tst_results_back_overview'), $this->ctrl->getLinkTarget($this));
225 $test_session = $this->test_session_factory->getSession();
227 if (!$this->
object->getShowPassDetails()) {
228 $this->
ctrl->redirectByClass([ilRepositoryGUI::class, ilObjTestGUI::class, ilInfoScreenGUI::class]);
231 $active_id = $test_session->getActiveId();
232 $user_id = $test_session->getUserId();
234 $this->
ctrl->saveParameter($this,
'pass');
235 $pass = $this->testrequest->int(
'pass');
237 $test_result_header_label_builder =
new ResultsTitlesBuilder($this->
lng, $this->obj_cache);
239 $objectives_list =
null;
241 $consider_hidden_questions =
true;
242 $consider_optional_questions =
true;
245 $consider_hidden_questions =
false;
246 $consider_optional_questions =
true;
248 $test_sequence = $this->test_sequence_factory->getSequenceByActiveIdAndPass($active_id, $pass);
249 $test_sequence->loadFromDb();
250 $test_sequence->loadQuestions();
252 if ($this->
object->isRandomTest() && !$test_sequence->isAnsweringOptionalQuestionsConfirmed()) {
253 $consider_optional_questions =
false;
259 $objectives_list->loadObjectivesTitles();
261 $test_result_header_label_builder->setObjectiveOrientedContainerId($test_session->getObjectiveOrientedContainerId());
262 $test_result_header_label_builder->setUserId($test_session->getUserId());
263 $test_result_header_label_builder->setTestObjId($this->
object->getId());
264 $test_result_header_label_builder->setTestRefId($this->
object->getRefId());
265 $test_result_header_label_builder->initObjectiveOrientedMode();
268 $tpl =
new ilTemplate(
'tpl.il_as_tst_pass_details_overview_participants.html',
true,
true,
'components/ILIAS/Test');
280 if ($this->
object->isShowExamIdInTestResultsEnabled()) {
281 if ($this->
object->isShowExamIdInTestResultsEnabled()) {
283 $test_session->getActiveId(),
293 $grading_message_builder->buildMessage();
294 $grading_message_builder->sendMessage();
297 $data = $this->
object->getCompleteEvaluationData();
298 $reached =
$data->getParticipant($active_id)->getPass($pass)->getReachedPoints();
299 $max =
$data->getParticipant($active_id)->getPass($pass)->getMaxPoints();
300 $percent = $max ? $reached / $max * 100.0 : 0;
301 $result =
$data->getParticipant($active_id)->getPass($pass)->getReachedPoints() .
' ' . strtolower($this->
lng->txt(
'of')) .
' ' .
$data->getParticipant($active_id)->getPass($pass)->getMaxPoints() .
' (' . sprintf(
'%2.2f', $percent) .
' %' .
')';
303 $tpl->
setVariable(
'TOTAL_RESULT_TEXT', $this->
lng->txt(
'tst_stat_result_resultspoints'));
307 $tpl->
setVariable(
'TEXT_RESULTS', $test_result_header_label_builder->getPassDetailsHeaderLabel($pass + 1));
315 $settings = $this->results_presentation_factory->getAttemptResultsSettings(
319 $table = $this->results_presentation_factory->getAttemptResultsPresentationTable(
320 $this->results_data_factory->getAttemptResultsFor(
328 $this->buildResultsTitle($active_id, $pass),
336 $this->tpl->setContent(
343 $test_session = $this->test_session_factory->getSession();
344 $active_id = $test_session->getActiveId();
346 $uname = $this->
object->userLookupFullName(
$user_id,
true);
348 if (!$this->
object->canShowTestResults($test_session)) {
349 $this->
ctrl->redirectByClass([ilRepositoryGUI::class, ilObjTestGUI::class, ilInfoScreenGUI::class]);
352 $templatehead =
new ilTemplate(
'tpl.il_as_tst_results_participants.html',
true,
true,
'components/ILIAS/Test');
353 $template =
new ilTemplate(
'tpl.il_as_tst_results_participant.html',
true,
true,
'components/ILIAS/Test');
361 $test_result_header_label_builder =
new ResultsTitlesBuilder($this->
lng, $this->obj_cache);
363 $test_result_header_label_builder->setObjectiveOrientedContainerId($test_session->getObjectiveOrientedContainerId());
364 $test_result_header_label_builder->setUserId($test_session->getUserId());
365 $test_result_header_label_builder->setTestObjId($this->
object->getId());
366 $test_result_header_label_builder->setTestRefId($this->
object->getRefId());
367 $test_result_header_label_builder->initObjectiveOrientedMode();
370 $template->setCurrentBlock(
'pass_overview');
373 $test_passes_selector->setActiveId($test_session->getActiveId());
374 $test_passes_selector->setLastFinishedPass($test_session->getLastFinishedPass());
377 $pass_overview_table_gui->setActiveId($test_session->getActiveId());
378 $pass_overview_table_gui->setResultPresentationEnabled(
true);
379 if ($this->
object->getShowPassDetails()) {
380 $pass_overview_table_gui->setPassDetailsCommand(
'outUserPassDetails');
382 if ($this->
object->isPassDeletionAllowed()) {
383 $pass_overview_table_gui->setPassDeletionCommand(
'confirmDeletePass');
385 $pass_overview_table_gui->init();
386 $pass_overview_table_gui->setData($this->
getPassOverviewTableData($test_session, $test_passes_selector->getReportablePasses(),
true));
387 $pass_overview_table_gui->setTitle($test_result_header_label_builder->getPassOverviewHeaderLabel());
388 $overview = $pass_overview_table_gui->getHTML();
398 $lo_status->setUsrId($test_session->getUserId());
399 $overview .=
'<br />' . $lo_status->getHTML();
401 $template->setVariable(
'PASS_OVERVIEW', $overview);
402 $template->parseCurrentBlock();
406 $grading_message_builder->buildMessage();
407 $grading_message_builder->sendMessage();
413 if ($this->
object->getAnonymity()) {
414 $template->setVariable(
'TEXT_HEADING', $this->
lng->txt(
'tst_result'));
416 $template->setVariable(
'TEXT_HEADING', sprintf($this->
lng->txt(
'tst_result_user_name'), $uname));
417 $template->setVariable(
'USER_DATA', $user_data);
422 $templatehead->setVariable(
'RESULTS_PARTICIPANT', $template->get());
423 $this->tpl->setContent($templatehead->get());
428 if (!$this->
object->getShowSolutionPrintview()) {
429 $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt(
'no_permission'),
true);
430 $this->
ctrl->redirectByClass([ilRepositoryGUI::class, ilObjTestGUI::class, ilInfoScreenGUI::class]);
433 $template =
new ilTemplate(
'tpl.il_as_tst_info_list_of_answers.html',
true,
true,
'components/ILIAS/Test');
437 $test_session = $this->test_session_factory->getSession();
438 $active_id = $test_session->getActiveId();
440 if ($this->testrequest->isset(
'attempt')) {
441 $attempt = $this->testrequest->int(
'attempt');
447 $test_passes_selector->setActiveId($test_session->getActiveId());
448 $test_passes_selector->setLastFinishedPass($test_session->getLastFinishedPass());
450 if (count($test_passes_selector->getClosedPasses()) > 1) {
456 $test_result_header_label_builder =
new ResultsTitlesBuilder($this->
lng, $this->obj_cache);
457 $test_result_header_label_builder->setAttemptLastAccessDate(
458 (
new \DateTimeImmutable(
459 '@' . ilObjTest::lookupLastTestPassAccess($test_session->getActiveId(), $attempt)
460 ))->setTimezone(
new \DateTimeZone($this->
user->getTimeZone()))
461 ->format($this->user->getDateTimeFormat()->toString())
464 $objectives_list =
null;
466 $test_sequence = $this->test_sequence_factory->getSequenceByActiveIdAndPass($active_id, $attempt);
467 $test_sequence->loadFromDb();
468 $test_sequence->loadQuestions();
473 $objectives_list->loadObjectivesTitles();
475 $test_result_header_label_builder->setObjectiveOrientedContainerId($test_session->getObjectiveOrientedContainerId());
476 $test_result_header_label_builder->setUserId($test_session->getUserId());
477 $test_result_header_label_builder->setTestObjId($this->
object->getId());
478 $test_result_header_label_builder->setTestRefId($this->
object->getRefId());
479 $test_result_header_label_builder->initObjectiveOrientedMode();
482 $result_array = $this->
object->getTestResult(
490 $show_all_answers =
true;
492 $show_all_answers =
false;
505 $test_result_header_label_builder
507 $template->setVariable(
'PASS_DETAILS', $answers);
510 $template->setVariable(
'USER_DATA', $user_data);
511 if (strlen($signature)) {
512 $template->setVariable(
'SIGNATURE', $signature);
514 if (!is_null($attempt) && $this->
object->isShowExamIdInTestResultsEnabled()) {
515 $template->setCurrentBlock(
'exam_id_footer');
517 $test_session->getActiveId(),
520 $template->setVariable(
'EXAM_ID_TXT', $this->
lng->txt(
'exam_id'));
521 $template->parseCurrentBlock();
525 $this->tpl->setVariable(
'ADM_CONTENT', $template->get());
536 $this->
lng->txt(
'error_creating_certificate_pdf')
539 $pdfAction->downloadPdf($this->
user->getId(), $this->object->getId());
544 if ($this->testrequest->isset(
'context') && strlen($this->testrequest->raw(
'context'))) {
545 $context = $this->testrequest->raw(
'context');
550 if (!$this->
object->isPassDeletionAllowed()) {
555 $confirm->build($this->testrequest->getActiveId(
'active_id'), $this->testrequest->int(
'pass'), $context);
557 $this->tpl->setContent($this->
ctrl->getHTML($confirm));
570 $this->
ctrl->redirect($this);
574 $this->
ctrl->redirectByClass([ilRepositoryGUI::class, ilObjTestGUI::class, ilInfoScreenGUI::class]);
581 $active_fi = $this->testrequest->int(
'active_id');
582 $pass = $this->testrequest->int(
'pass');
584 if (!$this->
object->isPassDeletionAllowed()) {
590 if ($active_fi === 0 || !$this->testrequest->isset(
'pass')) {
591 $this->
ctrl->redirect($this,
'outUserResultsOverview');
595 $this->
ctrl->redirect($this,
'outUserResultsOverview');
599 $result =
$ilDB->query(
"
600 SELECT tst_active.tries, tst_active.last_finished_pass, tst_sequence.pass
602 LEFT JOIN tst_sequence
603 ON tst_sequence.active_fi = tst_active.active_id
604 AND tst_sequence.pass = tst_active.tries
605 WHERE tst_active.active_id = {$ilDB->quote($active_fi, 'integer')}
608 $row =
$ilDB->fetchAssoc($result);
610 $tries = $row[
'tries'];
611 $lastFinishedPass = is_numeric($row[
'last_finished_pass']) ? $row[
'last_finished_pass'] : -1;
613 if ($pass < $lastFinishedPass) {
614 $isActivePass =
false;
615 $must_renumber =
true;
616 } elseif ($pass == $lastFinishedPass) {
617 $isActivePass =
false;
619 if ($tries == $row[
'pass']) {
620 $must_renumber =
true;
622 $must_renumber =
false;
624 } elseif ($pass == $row[
'pass']) {
625 $isActivePass =
true;
626 $must_renumber =
false;
628 throw new ilTestException(
'This should not happen, please contact Bjoern Heyser to clean up this pass salad!');
632 $this->
ctrl->redirect($this,
'outUserResultsOverview');
636 ($lastFinishedPass == 0 && $tries == 1 && $tries != $row[
'pass'])
637 || ($isActivePass ==
true)
650 WHERE active_id = ' .
$ilDB->quote($active_fi,
'integer')
652 } elseif (!$isActivePass) {
655 SET tries = ' .
$ilDB->quote($tries - 1,
'integer') .
',
656 last_finished_pass = ' .
$ilDB->quote($lastFinishedPass - 1,
'integer') .
'
657 WHERE active_id = ' .
$ilDB->quote($active_fi,
'integer')
664 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
665 AND pass = ' .
$ilDB->quote($pass,
'integer')
668 if ($must_renumber) {
670 'UPDATE tst_manual_fb
672 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
673 AND pass > ' .
$ilDB->quote($pass,
'integer')
683 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
684 AND pass = ' .
$ilDB->quote($pass,
'integer')
687 if ($must_renumber) {
689 'UPDATE tst_pass_result
691 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
692 AND pass > ' .
$ilDB->quote($pass,
'integer')
699 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
700 AND pass = ' .
$ilDB->quote($pass,
'integer')
703 if ($must_renumber) {
707 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
708 AND pass > ' .
$ilDB->quote($pass,
'integer')
716 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
717 AND pass = ' .
$ilDB->quote($pass,
'integer')
720 if ($must_renumber) {
722 'UPDATE tst_solutions
724 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
725 AND pass > ' .
$ilDB->quote($pass,
'integer')
733 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
734 AND pass = ' .
$ilDB->quote($pass,
'integer')
737 if ($must_renumber) {
739 'UPDATE tst_test_result
741 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
742 AND pass > ' .
$ilDB->quote($pass,
'integer')
752 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
753 AND pass = ' .
$ilDB->quote($pass,
'integer')
756 if ($must_renumber) {
760 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
761 AND pass > ' .
$ilDB->quote($pass,
'integer')
765 $this->test_result_repository->updateTestResultCache((
int) $active_fi);
772 $this->
ctrl->redirectByClass(ilTestParticipantsGUI::class);
777 $this->
http->saveResponse($this->
http->response()->withBody(
778 Streams::ofString($page)
780 $this->
http->sendResponse();
781 $this->
http->close();
786 if ($this->
object->getAnonymity()) {
788 $this->
lng->txt(
'tst_eval_results_by_pass_lo'),
793 $this->
lng->txt(
'tst_result_user_name_pass'),
795 $this->participant_repository->getParticipantByActiveId($this->object->getTestId(), $active_id)->getDisplayName($this->lng)
802 bool $with_test_results_overview,
805 $settings = $this->results_presentation_factory->getAttemptResultsSettings(
809 $attempt_overview = $this->ui_factory->panel()->sub(
810 $this->
lng->txt(
'question_summary'),
811 $this->results_data_factory->getAttemptOverviewFor(
816 )->getAsDescriptiveListing(
820 'timezone' =>
new DateTimeZone($this->
user->getTimeZone()),
821 'datetimeformat' => $this->user->getDateTimeFormat()->toString()
826 if ($with_test_results_overview) {
827 $attempt_overview = $attempt_overview->withFurtherInformation(
828 $this->ui_factory->card()->standard($this->lng->txt(
'overview'))->withSections([
829 $this->results_data_factory->getOverviewDataForTest($this->object)
830 ->getAsDescriptiveListing(
838 $results_presentation_table = $this->results_presentation_factory->getAttemptResultsPresentationTable(
839 $this->results_data_factory->getAttemptResultsFor(
849 )->getTableComponent();
852 $signal = $results_presentation_table->getExpandAllSignal();
853 $signal_options = json_encode([
'options' => $signal->getOptions()]);
854 $results_presentation_table = [
855 $results_presentation_table,
856 $this->ui_factory->legacy()->content(
'')->withAdditionalOnLoadCode(
857 static fn(
string $id):
string =>
"$(document).trigger('{$signal->getId()}', $signal_options);"
864 $attempt_details = $this->ui_factory->panel()->sub(
865 $this->
lng->txt(
'details'),
866 $results_presentation_table
869 return [$attempt_overview, $attempt_details];
874 $link = $this->
ctrl->getLinkTargetByClass(self::class,
'printResults');
876 $this->ui_factory->button()->standard(
877 $this->lng->txt(
'print'),
880 fn(
$id):
string =>
"document.getElementById('{$id}').addEventListener('click', "
881 .
"(e) => {window.open('{$link}');}"
890 $this->ui_factory->button()->standard(
891 $this->lng->txt(
'print'),
894 fn(
$id):
string =>
"document.getElementById('{$id}').addEventListener('click', "
895 .
"()=>{window.print();}"
904 $this->ui_factory->button()->standard(
905 $this->lng->txt(
'certificate'),
906 $this->ctrl->getLinkTargetByClass(self::class,
'outCertificate')
913 if ($this->testrequest->isset(
'show_best_solutions')) {
915 'tst_results_show_best_solutions',
916 $this->testrequest->int(
'show_best_solutions') === 1
921 $this->
ctrl->setParameter($this,
'show_best_solutions',
'0');
922 $label = $this->
lng->txt(
'tst_btn_hide_best_solutions');
924 $this->
ctrl->setParameter($this,
'show_best_solutions',
'1');
925 $label = $this->
lng->txt(
'tst_btn_show_best_solutions');
928 $this->
toolbar->addSeparator();
930 $this->ui_factory->button()->standard(
932 $this->ctrl->getLinkTargetByClass(self::class, $this->ctrl->getCmd(self::DEFAULT_CMD))
935 $this->
ctrl->clearParameters($this,
'show_best_solutions');
939 array $selected_active_ids,
940 int $current_active_id
942 $this->
toolbar->addSeparator();
944 $this->ui_factory->dropdown()
946 $this->buildParticipantSelectorArray($selected_active_ids, $current_active_id)
947 )->withLabel($this->lng->txt(
'tst_res_jump_to_participant_hint_opt'))
952 array $selected_active_ids,
953 int $current_active_id
955 $this->
ctrl->setParameterByClass(self::class,
'active_ids', implode(
',', $selected_active_ids));
956 unset($selected_active_ids[array_search($current_active_id, $selected_active_ids)]);
957 $available_user_links = array_map(
958 function (
int $v): StandardLink {
959 $this->
ctrl->setParameterByClass(self::class,
'active_id', $v);
960 return $this->ui_factory->link()->
standard(
962 $this->ctrl->getLinkTargetByClass(self::class,
'showResults')
967 $this->
ctrl->clearParameterByClass(self::class,
'active_id');
968 $this->
ctrl->clearParameterByClass(self::class,
'active_ids');
969 return $available_user_links;
973 array $available_attempts,
974 int $selected_attempt
978 $this->buildAttemptSwitchingViewControl(
983 $this->
ctrl->clearParameterByClass(self::class,
'attempt');
987 array $available_attempts,
988 int $selected_attempt
990 return $this->ui_factory->viewControl()->mode(
993 function (array
$c,
int $v): array {
994 $this->
ctrl->setParameterByClass(self::class,
'attempt', $v);
996 $c[
"{$this->lng->txt('tst_attempt')} {$attempt}"] = $this
997 ->ctrl->getLinkTargetByClass(self::class, $this->
ctrl->getCmd(self::DEFAULT_CMD));
1002 $this->
lng->txt(
'select_attempt')
1003 )->withActive(
"{$this->lng->txt('tst_attempt')} {$selected_attempt}");
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Stream factory which enables the user to create streams without the knowledge of the concrete class.
Validates if an active certificate is stored in the database and can be downloaded by the user.
Just a wrapper class to create Unit Test for other classes.
static getInstance(ilTestSession $a_test_session)
static getContentStylePath(int $a_style_id, bool $add_random=true, bool $add_token=true)
get content style path static (to avoid full reading)
static _getResultPass($active_id)
Retrieves the pass number that should be counted for a given user.
static lookupExamId($active_id, $pass)
static _getMaxPass($active_id)
Retrieves the maximum pass of a given user for a given test in which the user answered at least one q...
static _lookupFullname(int $a_user_id)
static get(string $a_var)
static set(string $a_var, $a_val)
Set a value.
special template class to simplify handling of ITX/PEAR
Output class for assessment test evaluation.
addParticipantSelectorToToolbar(array $selected_active_ids, int $current_active_id)
readonly ParticipantRepository $participant_repository
executeCommand()
execute command
addPrintButtonToToolbar()
addCertificateDownloadButtonToToolbar()
__construct(ilObjTest $object)
getEvaluationQuestionId($question_id, $original_id='')
Returns the ID of a question for evaluation purposes.
buildParticipantSelectorArray(array $selected_active_ids, int $current_active_id)
outUserListOfAnswerPasses()
ilTestProcessLockerFactory $processLockerFactory
buildAttemptSwitchingViewControl(array $available_attempts, int $selected_attempt)
setTestAccess($testAccess)
addAttemptSwitchingViewControlToToolbar(array $available_attempts, int $selected_attempt)
addToggleBestSolutionButtonToToolbar()
redirectBackToParticipantsScreen()
buildResultsTitle(int $active_id, int $pass)
buildAttemptComponents(int $active_id, int $attempt_id, bool $with_test_results_overview, bool $for_print)
addPrintResultsButtonToToolbar()
redirectToPassDeletionContext(string $context)
Base Exception for all Exceptions relating to Modules/Test.
const CONTEXT_INFO_SCREEN
const CONTEXT_PASS_OVERVIEW
Service GUI class for tests.
buildPassOverviewTableGUI(ilTestEvaluationGUI $target_gui)
getObjectiveOrientedContainer()
setContextResultPresentation(bool $contextResultPresentation)
buildQuestionRelatedObjectivesList(ilLOTestQuestionAdapter $objectives_adapter, ilTestQuestionSequence $test_sequence)
getResultsSignature()
Returns HTML code for a signature field.
populatePassFinishDate(ilTemplate $tpl, ?int $pass_finish_date)
getPassListOfAnswers(&$result_array, $active_id, $pass, $show_solutions=false, $only_answered_questions=false, $show_question_only=false, $show_reached_points=false, $anchorNav=false, ?ilTestQuestionRelatedObjectivesList $objectives_list=null, ?ResultsTitlesBuilder $testResultHeaderLabelBuilder=null)
Returns the list of answers of a users test pass.
populateExamId(ilTemplate $tpl, int $active_id, int $pass)
readonly ilDBInterface $db
ilGlobalTemplateInterface ilTemplate $tpl
sk 2023-08-01: We need this union type, even if it is wrong! To change this
readonly ilSetting $settings
isGradingMessageRequired()
getAdditionalUsrDataHtmlAndPopulateWindowTitle($testSession, $active_id, $overwrite_anonymity=false)
Returns the user data for a test results output.
getPassOverviewTableData(ilTestSession $test_session, array $passes, bool $with_results)
getGradingMessageBuilder(int $active_id)
static getStyleSheetLocation(string $mode="output", string $a_css_name="")
get full style sheet file name (path inclusive) of current user
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setVariable(string $variable, $value='')
Sets the given variable to the given value.
parseCurrentBlock(string $block_name=self::DEFAULT_BLOCK)
Parses the given block.
setCurrentBlock(string $part=self::DEFAULT_BLOCK)
Sets the template to the given block.
get(string $part=self::DEFAULT_BLOCK)
Renders the given block and returns the html string.
This describes a Sub Panel.
This describes a Mode Control.
static http()
Fetches the global http state from ILIAS.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc