19declare(strict_types=1);
75 $cmd = $this->
ctrl->getCmd(self::DEFAULT_CMD);
76 $next_class = $this->
ctrl->getNextClass($this);
77 $this->
ctrl->saveParameter($this,
'sequence');
78 $this->
ctrl->saveParameter($this,
'active_id');
80 switch ($next_class) {
81 case 'iltestpassdetailsoverviewtablegui':
83 $this->
ctrl->forwardCommand($tableGUI);
87 if (in_array($cmd, [
'excel_scored_test_run',
'excel_all_test_runs'])) {
88 $ret = $this->exportEvaluation($cmd);
89 } elseif (in_array($cmd, [
'excel_all_test_runs_a'])) {
90 $ret = $this->exportAggregatedResults($cmd);
107 if ($original_id > 0) {
117 if ($this->
object->getShowSolutionAnswersOnly()) {
125 $this->
ctrl->saveParameterByClass(self::class,
'active_ids');
126 $this->global_screen->tool()->context()->current()->addAdditionalData(
127 PrintLayoutProvider::TEST_CONTEXT_PRINT,
131 $selected_active_ids = explode(
',', $this->testrequest->strVal(
'active_ids'));
132 $results_panel = $this->ui_factory->panel()->report(
133 $this->
lng->txt(
'tst_results'),
135 function (
string $v): SubPanel {
139 return $this->ui_factory->panel()->sub(
151 $this->tpl->setVariable(
153 $this->ui_renderer->render([
155 $this->ui_factory->legacy()->content(
'')->withAdditionalOnLoadCode(
156 fn(
string $id):
string =>
'setTimeout(() => {window.print();}, 50)'
165 $this->
ctrl->saveParameterByClass(self::class,
'active_ids');
166 $selected_active_ids = explode(
',', $this->testrequest->strVal(
'active_ids'));
171 $current_active_id = (
int) $selected_active_ids[0];
172 if (count($selected_active_ids) > 1
173 && ($selected_active_id = $this->testrequest->getActiveId()) > 0
174 && array_search($selected_active_id, $selected_active_ids) !==
false) {
175 $current_active_id = $selected_active_id;
178 if ($this->testrequest->isset(
'attempt')) {
179 $attempt_id = $this->testrequest->int(
'attempt');
184 $results_panel = $this->ui_factory->panel()->report(
189 $this->buildAttemptComponents($current_active_id, $attempt_id,
true,
false)
192 $attempts_ids_array = $this->results_data_factory->getAttemptIdsArrayFor(
197 if (count($attempts_ids_array) > 1) {
198 $results_panel = $results_panel->withViewControls([
206 if (count($selected_active_ids) > 1) {
210 $this->tpl->setVariable(
212 $this->ui_renderer->render($results_panel)
215 $this->
tabs->setBackTarget(
216 $this->
lng->txt(
'back'),
217 $this->ctrl->getLinkTargetByClass([
'ilTestParticipantsGUI'])
223 $this->
tabs->clearSubTabs();
224 $this->
tabs->setBackTarget($this->
lng->txt(
'tst_results_back_overview'), $this->ctrl->getLinkTarget($this));
226 $test_session = $this->test_session_factory->getSession();
228 if (!$this->
object->getShowPassDetails()) {
229 $this->
ctrl->redirectByClass([ilRepositoryGUI::class, ilObjTestGUI::class, ilInfoScreenGUI::class]);
232 $active_id = $test_session->getActiveId();
233 $user_id = $test_session->getUserId();
235 $this->
ctrl->saveParameter($this,
'pass');
236 $pass = $this->testrequest->int(
'pass');
238 $test_result_header_label_builder =
new ResultsTitlesBuilder($this->
lng, $this->obj_cache);
240 $objectives_list =
null;
242 $consider_hidden_questions =
true;
243 $consider_optional_questions =
true;
246 $consider_hidden_questions =
false;
247 $consider_optional_questions =
true;
249 $test_sequence = $this->test_sequence_factory->getSequenceByActiveIdAndPass($active_id, $pass);
250 $test_sequence->loadFromDb();
251 $test_sequence->loadQuestions();
253 if ($this->
object->isRandomTest() && !$test_sequence->isAnsweringOptionalQuestionsConfirmed()) {
254 $consider_optional_questions =
false;
260 $objectives_list->loadObjectivesTitles();
262 $test_result_header_label_builder->setObjectiveOrientedContainerId($test_session->getObjectiveOrientedContainerId());
263 $test_result_header_label_builder->setUserId($test_session->getUserId());
264 $test_result_header_label_builder->setTestObjId($this->
object->getId());
265 $test_result_header_label_builder->setTestRefId($this->
object->getRefId());
266 $test_result_header_label_builder->initObjectiveOrientedMode();
269 $tpl =
new ilTemplate(
'tpl.il_as_tst_pass_details_overview_participants.html',
true,
true,
'components/ILIAS/Test');
281 if ($this->
object->isShowExamIdInTestResultsEnabled()) {
282 if ($this->
object->isShowExamIdInTestResultsEnabled()) {
284 $test_session->getActiveId(),
294 $grading_message_builder->buildMessage();
295 $grading_message_builder->sendMessage();
298 $data = $this->
object->getCompleteEvaluationData();
299 $reached =
$data->getParticipant($active_id)->getPass($pass)->getReachedPoints();
300 $max =
$data->getParticipant($active_id)->getPass($pass)->getMaxPoints();
301 $percent = $max ? $reached / $max * 100.0 : 0;
302 $result =
$data->getParticipant($active_id)->getPass($pass)->getReachedPoints() .
' ' . strtolower($this->
lng->txt(
'of')) .
' ' .
$data->getParticipant($active_id)->getPass($pass)->getMaxPoints() .
' (' . sprintf(
'%2.2f', $percent) .
' %' .
')';
304 $tpl->
setVariable(
'TOTAL_RESULT_TEXT', $this->
lng->txt(
'tst_stat_result_resultspoints'));
308 $tpl->
setVariable(
'TEXT_RESULTS', $test_result_header_label_builder->getPassDetailsHeaderLabel($pass + 1));
316 $settings = $this->results_presentation_factory->getAttemptResultsSettings(
320 $table = $this->results_presentation_factory->getAttemptResultsPresentationTable(
321 $this->results_data_factory->getAttemptResultsFor(
329 $this->buildResultsTitle($this->user->getFullname(), $pass),
337 $this->tpl->setContent(
344 $test_session = $this->test_session_factory->getSession();
345 $active_id = $test_session->getActiveId();
347 $uname = $this->
object->userLookupFullName(
$user_id,
true);
349 if (!$this->
object->canShowTestResults($test_session)) {
350 $this->
ctrl->redirectByClass([ilRepositoryGUI::class, ilObjTestGUI::class, ilInfoScreenGUI::class]);
353 $templatehead =
new ilTemplate(
'tpl.il_as_tst_results_participants.html',
true,
true,
'components/ILIAS/Test');
354 $template =
new ilTemplate(
'tpl.il_as_tst_results_participant.html',
true,
true,
'components/ILIAS/Test');
362 $test_result_header_label_builder =
new ResultsTitlesBuilder($this->
lng, $this->obj_cache);
364 $test_result_header_label_builder->setObjectiveOrientedContainerId($test_session->getObjectiveOrientedContainerId());
365 $test_result_header_label_builder->setUserId($test_session->getUserId());
366 $test_result_header_label_builder->setTestObjId($this->
object->getId());
367 $test_result_header_label_builder->setTestRefId($this->
object->getRefId());
368 $test_result_header_label_builder->initObjectiveOrientedMode();
371 $template->setCurrentBlock(
'pass_overview');
374 $test_passes_selector->setActiveId($test_session->getActiveId());
375 $test_passes_selector->setLastFinishedPass($test_session->getLastFinishedPass());
378 $pass_overview_table_gui->setActiveId($test_session->getActiveId());
379 $pass_overview_table_gui->setResultPresentationEnabled(
true);
380 if ($this->
object->getShowPassDetails()) {
381 $pass_overview_table_gui->setPassDetailsCommand(
'outUserPassDetails');
383 if ($this->
object->isPassDeletionAllowed()) {
384 $pass_overview_table_gui->setPassDeletionCommand(
'confirmDeletePass');
386 $pass_overview_table_gui->init();
387 $pass_overview_table_gui->setData($this->
getPassOverviewTableData($test_session, $test_passes_selector->getReportablePasses(),
true));
388 $pass_overview_table_gui->setTitle($test_result_header_label_builder->getPassOverviewHeaderLabel());
389 $overview = $pass_overview_table_gui->getHTML();
399 $lo_status->setUsrId($test_session->getUserId());
400 $overview .=
'<br />' . $lo_status->getHTML();
402 $template->setVariable(
'PASS_OVERVIEW', $overview);
403 $template->parseCurrentBlock();
407 $grading_message_builder->buildMessage();
408 $grading_message_builder->sendMessage();
414 if ($this->
object->getAnonymity()) {
415 $template->setVariable(
'TEXT_HEADING', $this->
lng->txt(
'tst_result'));
417 $template->setVariable(
'TEXT_HEADING', sprintf($this->
lng->txt(
'tst_result_user_name'), $uname));
418 $template->setVariable(
'USER_DATA', $user_data);
423 $templatehead->setVariable(
'RESULTS_PARTICIPANT', $template->get());
424 $this->tpl->setContent($templatehead->get());
429 if (!$this->
object->getShowSolutionPrintview()) {
430 $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt(
'no_permission'),
true);
431 $this->
ctrl->redirectByClass([ilRepositoryGUI::class, ilObjTestGUI::class, ilInfoScreenGUI::class]);
434 $template =
new ilTemplate(
'tpl.il_as_tst_info_list_of_answers.html',
true,
true,
'components/ILIAS/Test');
438 $test_session = $this->test_session_factory->getSession();
439 $active_id = $test_session->getActiveId();
441 if ($this->testrequest->isset(
'attempt')) {
442 $attempt = $this->testrequest->int(
'attempt');
448 $test_passes_selector->setActiveId($test_session->getActiveId());
449 $test_passes_selector->setLastFinishedPass($test_session->getLastFinishedPass());
451 if (count($test_passes_selector->getClosedPasses()) > 1) {
457 $test_result_header_label_builder =
new ResultsTitlesBuilder($this->
lng, $this->obj_cache);
458 $test_result_header_label_builder->setAttemptLastAccessDate(
459 (
new \DateTimeImmutable(
460 '@' . ilObjTest::lookupLastTestPassAccess($test_session->getActiveId(), $attempt)
461 ))->setTimezone(
new \DateTimeZone($this->
user->getTimeZone()))
462 ->format($this->user->getDateTimeFormat()->toString())
465 $objectives_list =
null;
467 $test_sequence = $this->test_sequence_factory->getSequenceByActiveIdAndPass($active_id, $attempt);
468 $test_sequence->loadFromDb();
469 $test_sequence->loadQuestions();
474 $objectives_list->loadObjectivesTitles();
476 $test_result_header_label_builder->setObjectiveOrientedContainerId($test_session->getObjectiveOrientedContainerId());
477 $test_result_header_label_builder->setUserId($test_session->getUserId());
478 $test_result_header_label_builder->setTestObjId($this->
object->getId());
479 $test_result_header_label_builder->setTestRefId($this->
object->getRefId());
480 $test_result_header_label_builder->initObjectiveOrientedMode();
483 $result_array = $this->
object->getTestResult(
491 $show_all_answers =
true;
493 $show_all_answers =
false;
506 $test_result_header_label_builder
508 $template->setVariable(
'PASS_DETAILS', $answers);
511 $template->setVariable(
'USER_DATA', $user_data);
512 if (strlen($signature)) {
513 $template->setVariable(
'SIGNATURE', $signature);
515 if (!is_null($attempt) && $this->
object->isShowExamIdInTestResultsEnabled()) {
516 $template->setCurrentBlock(
'exam_id_footer');
518 $test_session->getActiveId(),
521 $template->setVariable(
'EXAM_ID_TXT', $this->
lng->txt(
'exam_id'));
522 $template->parseCurrentBlock();
526 $this->tpl->setVariable(
'ADM_CONTENT', $template->get());
537 $this->
lng->txt(
'error_creating_certificate_pdf')
540 $pdfAction->downloadPdf($this->
user->getId(), $this->object->getId());
545 if ($this->testrequest->isset(
'context') && strlen($this->testrequest->raw(
'context'))) {
546 $context = $this->testrequest->raw(
'context');
551 if (!$this->
object->isPassDeletionAllowed()) {
556 $confirm->build($this->testrequest->getActiveId(
'active_id'), $this->testrequest->int(
'pass'),
$context);
558 $this->tpl->setContent($this->
ctrl->getHTML($confirm));
571 $this->
ctrl->redirect($this,
'outUserResultsOverview');
575 $this->
ctrl->redirectByClass([ilRepositoryGUI::class, ilObjTestGUI::class, ilInfoScreenGUI::class]);
582 $active_fi = $this->testrequest->int(
'active_id');
583 $pass = $this->testrequest->int(
'pass');
585 if (!$this->
object->isPassDeletionAllowed()) {
591 if ($active_fi === 0 || !$this->testrequest->isset(
'pass')) {
592 $this->
ctrl->redirect($this,
'outUserResultsOverview');
596 $this->
ctrl->redirect($this,
'outUserResultsOverview');
600 $result =
$ilDB->query(
"
601 SELECT tst_active.tries, tst_active.last_finished_pass, tst_sequence.pass
603 LEFT JOIN tst_sequence
604 ON tst_sequence.active_fi = tst_active.active_id
605 AND tst_sequence.pass = tst_active.tries
606 WHERE tst_active.active_id = {$ilDB->quote($active_fi, 'integer')}
609 $row =
$ilDB->fetchAssoc($result);
611 $tries = $row[
'tries'];
612 $lastFinishedPass = is_numeric($row[
'last_finished_pass']) ? $row[
'last_finished_pass'] : -1;
614 if ($pass < $lastFinishedPass) {
615 $isActivePass =
false;
616 $must_renumber =
true;
617 } elseif ($pass == $lastFinishedPass) {
618 $isActivePass =
false;
620 if ($tries == $row[
'pass']) {
621 $must_renumber =
true;
623 $must_renumber =
false;
625 } elseif ($pass == $row[
'pass']) {
626 $isActivePass =
true;
627 $must_renumber =
false;
629 throw new ilTestException(
'This should not happen, please contact Bjoern Heyser to clean up this pass salad!');
633 $this->
ctrl->redirect($this,
'outUserResultsOverview');
637 ($lastFinishedPass == 0 && $tries == 1 && $tries != $row[
'pass'])
638 || ($isActivePass ==
true)
651 WHERE active_id = ' .
$ilDB->quote($active_fi,
'integer')
653 } elseif (!$isActivePass) {
656 SET tries = ' .
$ilDB->quote($tries - 1,
'integer') .
',
657 last_finished_pass = ' .
$ilDB->quote($lastFinishedPass - 1,
'integer') .
'
658 WHERE active_id = ' .
$ilDB->quote($active_fi,
'integer')
665 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
666 AND pass = ' .
$ilDB->quote($pass,
'integer')
669 if ($must_renumber) {
671 'UPDATE tst_manual_fb
673 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
674 AND pass > ' .
$ilDB->quote($pass,
'integer')
684 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
685 AND pass = ' .
$ilDB->quote($pass,
'integer')
688 if ($must_renumber) {
690 'UPDATE tst_pass_result
692 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
693 AND pass > ' .
$ilDB->quote($pass,
'integer')
700 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
701 AND pass = ' .
$ilDB->quote($pass,
'integer')
704 if ($must_renumber) {
708 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
709 AND pass > ' .
$ilDB->quote($pass,
'integer')
717 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
718 AND pass = ' .
$ilDB->quote($pass,
'integer')
721 if ($must_renumber) {
723 'UPDATE tst_solutions
725 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
726 AND pass > ' .
$ilDB->quote($pass,
'integer')
734 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
735 AND pass = ' .
$ilDB->quote($pass,
'integer')
738 if ($must_renumber) {
740 'UPDATE tst_test_result
742 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
743 AND pass > ' .
$ilDB->quote($pass,
'integer')
753 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
754 AND pass = ' .
$ilDB->quote($pass,
'integer')
757 if ($must_renumber) {
761 WHERE active_fi = ' .
$ilDB->quote($active_fi,
'integer') .
'
762 AND pass > ' .
$ilDB->quote($pass,
'integer')
766 $this->test_result_repository->updateTestResultCache((
int) $active_fi);
773 $this->
ctrl->redirectByClass(ilTestParticipantsGUI::class);
778 $this->
http->saveResponse($this->
http->response()->withBody(
779 Streams::ofString($page)
781 $this->
http->sendResponse();
782 $this->
http->close();
787 if ($this->
object->getAnonymity()) {
789 $this->
lng->txt(
'tst_eval_results_by_pass_lo'),
794 $this->
lng->txt(
'tst_result_user_name_pass'),
803 bool $with_test_results_overview,
806 $settings = $this->results_presentation_factory->getAttemptResultsSettings(
810 $attempt_overview = $this->ui_factory->panel()->sub(
811 $this->
lng->txt(
'question_summary'),
812 $this->results_data_factory->getAttemptOverviewFor(
817 )->getAsDescriptiveListing(
821 'timezone' =>
new DateTimeZone($this->
user->getTimeZone()),
822 'datetimeformat' => $this->user->getDateTimeFormat()->toString()
827 if ($with_test_results_overview) {
828 $attempt_overview = $attempt_overview->withFurtherInformation(
829 $this->ui_factory->card()->standard($this->lng->txt(
'overview'))->withSections([
830 $this->results_data_factory->getOverviewDataForTest($this->object)
831 ->getAsDescriptiveListing(
839 $results_presentation_table = $this->results_presentation_factory->getAttemptResultsPresentationTable(
840 $this->results_data_factory->getAttemptResultsFor(
850 )->getTableComponent();
853 $signal = $results_presentation_table->getExpandAllSignal();
854 $results_presentation_table = [
855 $results_presentation_table,
856 $this->ui_factory->legacy(
'')->withAdditionalOnLoadCode(
857 fn(
string $id):
string =>
"$(document).trigger('{$signal->getId()}',"
858 .
'{"options" : ' . json_encode($signal->getOptions()) .
'}); '
865 $attempt_details = $this->ui_factory->panel()->sub(
866 $this->
lng->txt(
'details'),
867 $results_presentation_table
870 return [$attempt_overview, $attempt_details];
875 $link = $this->
ctrl->getLinkTargetByClass(self::class,
'printResults');
877 $this->ui_factory->button()->standard(
878 $this->lng->txt(
'print'),
881 fn(
$id):
string =>
"document.getElementById('{$id}').addEventListener('click', "
882 .
"(e) => {window.open('{$link}');}"
891 $this->ui_factory->button()->standard(
892 $this->lng->txt(
'print'),
895 fn(
$id):
string =>
"document.getElementById('{$id}').addEventListener('click', "
896 .
"()=>{window.print();}"
905 $this->ui_factory->button()->standard(
906 $this->lng->txt(
'certificate'),
907 $this->ctrl->getLinkTargetByClass(self::class,
'outCertificate')
914 if ($this->testrequest->isset(
'show_best_solutions')) {
916 'tst_results_show_best_solutions',
917 $this->testrequest->int(
'show_best_solutions') === 1
922 $this->
ctrl->setParameter($this,
'show_best_solutions',
'0');
923 $label = $this->
lng->txt(
'tst_btn_hide_best_solutions');
925 $this->
ctrl->setParameter($this,
'show_best_solutions',
'1');
926 $label = $this->
lng->txt(
'tst_btn_show_best_solutions');
929 $this->
toolbar->addSeparator();
931 $this->ui_factory->button()->standard(
933 $this->ctrl->getLinkTargetByClass(self::class, $this->ctrl->getCmd(self::DEFAULT_CMD))
936 $this->
ctrl->clearParameters($this,
'show_best_solutions');
940 array $selected_active_ids,
941 int $current_active_id
943 $this->
toolbar->addSeparator();
945 $this->ui_factory->dropdown()
947 $this->buildParticipantSelectorArray($selected_active_ids, $current_active_id)
948 )->withLabel($this->lng->txt(
'tst_res_jump_to_participant_hint_opt'))
953 array $selected_active_ids,
954 int $current_active_id
956 $this->
ctrl->setParameterByClass(self::class,
'active_ids', implode(
',', $selected_active_ids));
957 unset($selected_active_ids[array_search($current_active_id, $selected_active_ids)]);
958 $available_user_links = array_map(
959 function (
int $v): StandardLink {
960 $this->
ctrl->setParameterByClass(self::class,
'active_id', $v);
961 return $this->ui_factory->link()->
standard(
963 $this->ctrl->getLinkTargetByClass(self::class,
'showResults')
968 $this->
ctrl->clearParameterByClass(self::class,
'active_id');
969 $this->
ctrl->clearParameterByClass(self::class,
'active_ids');
970 return $available_user_links;
974 array $available_attempts,
975 int $selected_attempt
979 $this->buildAttemptSwitchingViewControl(
984 $this->
ctrl->clearParameterByClass(self::class,
'attempt');
988 array $available_attempts,
989 int $selected_attempt
991 return $this->ui_factory->viewControl()->mode(
994 function (array
$c,
int $v): array {
995 $this->
ctrl->setParameterByClass(self::class,
'attempt', $v);
997 $c[
"{$this->lng->txt('tst_attempt')} {$attempt}"] = $this
998 ->ctrl->getLinkTargetByClass(self::class, $this->
ctrl->getCmd(self::DEFAULT_CMD));
1003 $this->
lng->txt(
'select_attempt')
1004 )->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 _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)
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)
buildResultsTitle(string $fullname, int $pass)
addToggleBestSolutionButtonToToolbar()
redirectBackToParticipantsScreen()
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