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();
347 if (!$this->
object->canShowTestResults($test_session)) {
348 $this->
ctrl->redirectByClass([ilRepositoryGUI::class, ilObjTestGUI::class, ilInfoScreenGUI::class]);
351 $templatehead =
new ilTemplate(
'tpl.il_as_tst_results_participants.html',
true,
true,
'components/ILIAS/Test');
352 $template =
new ilTemplate(
'tpl.il_as_tst_results_participant.html',
true,
true,
'components/ILIAS/Test');
360 $test_result_header_label_builder =
new ResultsTitlesBuilder($this->
lng, $this->obj_cache);
362 $test_result_header_label_builder->setObjectiveOrientedContainerId($test_session->getObjectiveOrientedContainerId());
363 $test_result_header_label_builder->setUserId($test_session->getUserId());
364 $test_result_header_label_builder->setTestObjId($this->
object->getId());
365 $test_result_header_label_builder->setTestRefId($this->
object->getRefId());
366 $test_result_header_label_builder->initObjectiveOrientedMode();
369 $template->setCurrentBlock(
'pass_overview');
372 $test_passes_selector->setActiveId($test_session->getActiveId());
373 $test_passes_selector->setLastFinishedPass($test_session->getLastFinishedPass());
376 $pass_overview_table_gui->setActiveId($test_session->getActiveId());
377 $pass_overview_table_gui->setResultPresentationEnabled(
true);
378 if ($this->
object->getShowPassDetails()) {
379 $pass_overview_table_gui->setPassDetailsCommand(
'outUserPassDetails');
381 if ($this->
object->isPassDeletionAllowed()) {
382 $pass_overview_table_gui->setPassDeletionCommand(
'confirmDeletePass');
384 $pass_overview_table_gui->init();
385 $pass_overview_table_gui->setData($this->
getPassOverviewTableData($test_session, $test_passes_selector->getReportablePasses(),
true));
386 $pass_overview_table_gui->setTitle($test_result_header_label_builder->getPassOverviewHeaderLabel());
387 $overview = $pass_overview_table_gui->getHTML();
397 $lo_status->setUsrId($test_session->getUserId());
398 $overview .=
'<br />' . $lo_status->getHTML();
400 $template->setVariable(
'PASS_OVERVIEW', $overview);
401 $template->parseCurrentBlock();
405 $grading_message_builder->buildMessage();
406 $grading_message_builder->sendMessage();
410 $overwrite_anonymity = $test_session->getUserId() ===
$user_id;
411 if (!$overwrite_anonymity && $this->
object->getAnonymity()) {
412 $template->setVariable(
'TEXT_HEADING', $this->
lng->txt(
'tst_result'));
414 $template->setVariable(
417 $this->
lng->txt(
'tst_result_user_name'),
418 $this->object->userLookupFullName(
$user_id, $overwrite_anonymity)
421 $template->setVariable(
429 $templatehead->setVariable(
'RESULTS_PARTICIPANT', $template->get());
430 $this->tpl->setContent($templatehead->get());
435 if (!$this->
object->getShowSolutionPrintview()) {
436 $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt(
'no_permission'),
true);
437 $this->
ctrl->redirectByClass([ilRepositoryGUI::class, ilObjTestGUI::class, ilInfoScreenGUI::class]);
440 $template =
new ilTemplate(
'tpl.il_as_tst_info_list_of_answers.html',
true,
true,
'components/ILIAS/Test');
444 $test_session = $this->test_session_factory->getSession();
445 $active_id = $test_session->getActiveId();
447 if ($this->testrequest->isset(
'attempt')) {
448 $attempt = $this->testrequest->int(
'attempt');
454 $test_passes_selector->setActiveId($test_session->getActiveId());
455 $test_passes_selector->setLastFinishedPass($test_session->getLastFinishedPass());
457 if (count($test_passes_selector->getClosedPasses()) > 1) {
463 $test_result_header_label_builder =
new ResultsTitlesBuilder($this->
lng, $this->obj_cache);
464 $test_result_header_label_builder->setAttemptLastAccessDate(
465 (
new \DateTimeImmutable(
466 '@' . ilObjTest::lookupLastTestPassAccess($test_session->getActiveId(), $attempt)
467 ))->setTimezone(
new \DateTimeZone($this->
user->getTimeZone()))
468 ->format($this->user->getDateTimeFormat()->toString())
471 $objectives_list =
null;
473 $test_sequence = $this->test_sequence_factory->getSequenceByActiveIdAndPass($active_id, $attempt);
474 $test_sequence->loadFromDb();
475 $test_sequence->loadQuestions();
480 $objectives_list->loadObjectivesTitles();
482 $test_result_header_label_builder->setObjectiveOrientedContainerId($test_session->getObjectiveOrientedContainerId());
483 $test_result_header_label_builder->setUserId($test_session->getUserId());
484 $test_result_header_label_builder->setTestObjId($this->
object->getId());
485 $test_result_header_label_builder->setTestRefId($this->
object->getRefId());
486 $test_result_header_label_builder->initObjectiveOrientedMode();
489 $result_array = $this->
object->getTestResult(
497 $show_all_answers =
true;
499 $show_all_answers =
false;
512 $test_result_header_label_builder
514 $template->setVariable(
'PASS_DETAILS', $answers);
518 $test_session->getUserId() ===
$user_id
520 $template->setVariable(
'USER_DATA', $user_data);
521 if (strlen($signature)) {
522 $template->setVariable(
'SIGNATURE', $signature);
524 if (!is_null($attempt) && $this->
object->isShowExamIdInTestResultsEnabled()) {
525 $template->setCurrentBlock(
'exam_id_footer');
527 $test_session->getActiveId(),
530 $template->setVariable(
'EXAM_ID_TXT', $this->
lng->txt(
'exam_id'));
531 $template->parseCurrentBlock();
535 $this->tpl->setVariable(
'ADM_CONTENT', $template->get());
546 $this->
lng->txt(
'error_creating_certificate_pdf')
549 $pdfAction->downloadPdf($this->
user->getId(), $this->object->getId());
554 if ($this->testrequest->isset(
'context') && strlen($this->testrequest->raw(
'context'))) {
555 $context = $this->testrequest->raw(
'context');
560 if (!$this->
object->isPassDeletionAllowed()) {
565 $confirm->build($this->testrequest->getActiveId(
'active_id'), $this->testrequest->int(
'pass'), $context);
567 $this->tpl->setContent($this->
ctrl->getHTML($confirm));
580 $this->
ctrl->redirect($this);
584 $this->
ctrl->redirectByClass([ilRepositoryGUI::class, ilObjTestGUI::class, ilInfoScreenGUI::class]);
591 $active_fi = $this->testrequest->int(
'active_id');
592 $pass = $this->testrequest->int(
'pass');
594 if (!$this->
object->isPassDeletionAllowed()) {
600 if ($active_fi === 0 || !$this->testrequest->isset(
'pass')) {
601 $this->
ctrl->redirect($this,
'outUserResultsOverview');
605 $this->
ctrl->redirect($this,
'outUserResultsOverview');
609 $result =
$ilDB->query(
"
610 SELECT tst_active.tries, tst_active.last_finished_pass, tst_sequence.pass
612 LEFT JOIN tst_sequence
613 ON tst_sequence.active_fi = tst_active.active_id
614 AND tst_sequence.pass = tst_active.tries
615 WHERE tst_active.active_id = {$ilDB->quote($active_fi, 'integer')}
618 $row =
$ilDB->fetchAssoc($result);
620 $tries = $row[
'tries'];
621 $lastFinishedPass = is_numeric($row[
'last_finished_pass']) ? $row[
'last_finished_pass'] : -1;
623 if ($pass < $lastFinishedPass) {
624 $isActivePass =
false;
625 $must_renumber =
true;
626 } elseif ($pass == $lastFinishedPass) {
627 $isActivePass =
false;
629 if ($tries == $row[
'pass']) {
630 $must_renumber =
true;
632 $must_renumber =
false;
634 } elseif ($pass == $row[
'pass']) {
635 $isActivePass =
true;
636 $must_renumber =
false;
638 throw new ilTestException(
'This should not happen, please contact Bjoern Heyser to clean up this pass salad!');
642 $this->
ctrl->redirect($this,
'outUserResultsOverview');
646 ($lastFinishedPass == 0 && $tries == 1 && $tries != $row[
'pass'])
647 || ($isActivePass ==
true)
660 WHERE active_id = ' .
$ilDB->quote($active_fi,
'integer')
662 } elseif (!$isActivePass) {
665 SET tries = ' .
$ilDB->quote($tries - 1,
'integer') .
',
666 last_finished_pass = ' .
$ilDB->quote($lastFinishedPass - 1,
'integer') .
'
667 WHERE active_id = ' .
$ilDB->quote($active_fi,
'integer')
674 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
675 AND pass = ' .
$ilDB->quote($pass,
'integer')
678 if ($must_renumber) {
680 'UPDATE tst_manual_fb
682 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
683 AND pass > ' .
$ilDB->quote($pass,
'integer')
693 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
694 AND pass = ' .
$ilDB->quote($pass,
'integer')
697 if ($must_renumber) {
699 'UPDATE tst_pass_result
701 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
702 AND pass > ' .
$ilDB->quote($pass,
'integer')
709 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
710 AND pass = ' .
$ilDB->quote($pass,
'integer')
713 if ($must_renumber) {
717 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
718 AND pass > ' .
$ilDB->quote($pass,
'integer')
726 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
727 AND pass = ' .
$ilDB->quote($pass,
'integer')
730 if ($must_renumber) {
732 'UPDATE tst_solutions
734 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
735 AND pass > ' .
$ilDB->quote($pass,
'integer')
743 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
744 AND pass = ' .
$ilDB->quote($pass,
'integer')
747 if ($must_renumber) {
749 'UPDATE tst_test_result
751 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
752 AND pass > ' .
$ilDB->quote($pass,
'integer')
762 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
763 AND pass = ' .
$ilDB->quote($pass,
'integer')
766 if ($must_renumber) {
770 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
771 AND pass > ' .
$ilDB->quote($pass,
'integer')
775 $this->test_result_repository->updateTestResultCache((
int) $active_fi);
782 $this->
ctrl->redirectByClass(ilTestParticipantsGUI::class);
787 $this->
http->saveResponse($this->
http->response()->withBody(
788 Streams::ofString($page)
790 $this->
http->sendResponse();
791 $this->
http->close();
796 if ($this->
object->getAnonymity()) {
798 $this->
lng->txt(
'tst_eval_results_by_pass_lo'),
803 $this->
lng->txt(
'tst_result_user_name_pass'),
805 $this->participant_repository->getParticipantByActiveId($this->object->getTestId(), $active_id)->getDisplayName($this->lng)
812 bool $with_test_results_overview,
815 $settings = $this->results_presentation_factory->getAttemptResultsSettings(
819 $attempt_overview = $this->ui_factory->panel()->sub(
820 $this->
lng->txt(
'question_summary'),
821 $this->results_data_factory->getAttemptOverviewFor(
826 )->getAsDescriptiveListing(
830 'timezone' =>
new DateTimeZone($this->
user->getTimeZone()),
831 'datetimeformat' => $this->user->getDateTimeFormat()->toString()
836 if ($with_test_results_overview) {
837 $attempt_overview = $attempt_overview->withFurtherInformation(
838 $this->ui_factory->card()->standard($this->lng->txt(
'overview'))->withSections([
839 $this->results_data_factory->getOverviewDataForTest($this->object)
840 ->getAsDescriptiveListing(
848 $results_presentation_table = $this->results_presentation_factory->getAttemptResultsPresentationTable(
849 $this->results_data_factory->getAttemptResultsFor(
859 )->getTableComponent();
862 $signal = $results_presentation_table->getExpandAllSignal();
863 $signal_options = json_encode([
'options' => $signal->getOptions()]);
864 $results_presentation_table = [
865 $results_presentation_table,
866 $this->ui_factory->legacy()->content(
'')->withAdditionalOnLoadCode(
867 static fn(
string $id):
string =>
"$(document).trigger('{$signal->getId()}', $signal_options);"
874 $attempt_details = $this->ui_factory->panel()->sub(
875 $this->
lng->txt(
'details'),
876 $results_presentation_table
879 return [$attempt_overview, $attempt_details];
884 $link = $this->
ctrl->getLinkTargetByClass(self::class,
'printResults');
886 $this->ui_factory->button()->standard(
887 $this->lng->txt(
'print'),
890 fn(
$id):
string =>
"document.getElementById('{$id}').addEventListener('click', "
891 .
"(e) => {window.open('{$link}');}"
900 $this->ui_factory->button()->standard(
901 $this->lng->txt(
'print'),
904 fn(
$id):
string =>
"document.getElementById('{$id}').addEventListener('click', "
905 .
"()=>{window.print();}"
914 $this->ui_factory->button()->standard(
915 $this->lng->txt(
'certificate'),
916 $this->ctrl->getLinkTargetByClass(self::class,
'outCertificate')
923 if ($this->testrequest->isset(
'show_best_solutions')) {
925 'tst_results_show_best_solutions',
926 $this->testrequest->int(
'show_best_solutions') === 1
931 $this->
ctrl->setParameter($this,
'show_best_solutions',
'0');
932 $label = $this->
lng->txt(
'tst_btn_hide_best_solutions');
934 $this->
ctrl->setParameter($this,
'show_best_solutions',
'1');
935 $label = $this->
lng->txt(
'tst_btn_show_best_solutions');
938 $this->
toolbar->addSeparator();
940 $this->ui_factory->button()->standard(
942 $this->ctrl->getLinkTargetByClass(self::class, $this->ctrl->getCmd(self::DEFAULT_CMD))
945 $this->
ctrl->clearParameters($this,
'show_best_solutions');
949 array $selected_active_ids,
950 int $current_active_id
952 $this->
toolbar->addSeparator();
954 $this->ui_factory->dropdown()
956 $this->buildParticipantSelectorArray($selected_active_ids, $current_active_id)
957 )->withLabel($this->lng->txt(
'tst_res_jump_to_participant_hint_opt'))
962 array $selected_active_ids,
963 int $current_active_id
965 $this->
ctrl->setParameterByClass(self::class,
'active_ids', implode(
',', $selected_active_ids));
966 unset($selected_active_ids[array_search($current_active_id, $selected_active_ids)]);
967 $available_user_links = array_map(
968 function (
int $v): StandardLink {
969 $this->
ctrl->setParameterByClass(self::class,
'active_id', $v);
970 return $this->ui_factory->link()->
standard(
972 $this->ctrl->getLinkTargetByClass(self::class,
'showResults')
977 $this->
ctrl->clearParameterByClass(self::class,
'active_id');
978 $this->
ctrl->clearParameterByClass(self::class,
'active_ids');
979 return $available_user_links;
983 array $available_attempts,
984 int $selected_attempt
988 $this->buildAttemptSwitchingViewControl(
993 $this->
ctrl->clearParameterByClass(self::class,
'attempt');
997 array $available_attempts,
998 int $selected_attempt
1000 return $this->ui_factory->viewControl()->mode(
1002 $available_attempts,
1003 function (array
$c,
int $v): array {
1004 $this->
ctrl->setParameterByClass(self::class,
'attempt', $v);
1006 $c[
"{$this->lng->txt('tst_attempt')} {$attempt}"] = $this
1007 ->ctrl->getLinkTargetByClass(self::class, $this->
ctrl->getCmd(self::DEFAULT_CMD));
1012 $this->
lng->txt(
'select_attempt')
1013 )->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)
getAdditionalUsrDataHtmlAndPopulateWindowTitle(int $active_id, bool $overwrite_anonymity=false)
Returns the user data for a test results output.
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()
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