19declare(strict_types=1);
39use Psr\Http\Message\ServerRequestInterface;
81 private readonly \
ilTree $tree,
85 private readonly UIFactory $ui_factory,
86 private readonly UIRenderer $ui_renderer,
88 private readonly ServerRequestInterface $request,
95 $this->object_properties = $this->test_gui->getTestObject()->getObjectProperties();
96 $this->main_settings = $this->test_gui->getTestObject()->getMainSettings();
97 $this->main_settings_repository = $this->test_gui->getTestObject()->getMainSettingsRepository();
98 $this->testQuestionSetConfigFactory = new \ilTestQuestionSetConfigFactory(
103 $this->component_repository,
104 $this->test_gui->getTestObject(),
105 $this->questionrepository
108 $this->
lng->loadLanguageModule(
'validation');
109 $this->
lng->loadLanguageModule(
'rep');
119 if (!$this->
access->checkAccess(
'write',
'', $this->test_gui->getRefId())) {
120 $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt(
'cannot_edit_test'),
true);
121 $this->
ctrl->redirectByClass([\ilRepositoryGUI::class, \ilObjTestGUI::class, \ilInfoScreenGUI::class]);
124 $cmd = $this->
ctrl->getCmd(self::CMD_SHOW_FORM);
127 $this->object_data_cache->deleteCachedEntry($this->test_object->getId());
133 $this->ui_factory->link()->standard(
134 $this->lng->txt(
'back'),
135 $this->ctrl->getLinkTargetByClass(self::class,
'showForm')
139 $this->tpl->setContent(
141 $this->main_settings->getIntroductionSettings()->getIntroductionText(),
150 $this->ui_factory->link()->standard(
151 $this->lng->txt(
'back'),
152 $this->ctrl->getLinkTargetByClass(self::class,
'showForm')
156 $this->tpl->setContent(
158 $this->main_settings->getFinishingSettings()->getConcludingRemarksText(),
164 private function showForm(?StandardForm $form =
null, ?InterruptiveModal $modal =
null): void
166 if ($form ===
null) {
170 if ($this->main_settings->getIntroductionSettings()->getIntroductionText() !==
'') {
172 $this->ui_factory->link()->standard(
173 $this->lng->txt(
'show_old_introduction'),
174 $this->ctrl->getLinkTargetByClass(self::class,
'showOldIntroduction')
179 if ($this->main_settings->getFinishingSettings()->getConcludingRemarksText() !==
'') {
181 $this->ui_factory->link()->standard(
182 $this->lng->txt(
'show_old_concluding_remarks'),
183 $this->ctrl->getLinkTargetByClass(self::class,
'showOldConcludingRemarks')
188 $rendered_modal =
'';
189 if ($modal !==
null) {
190 $rendered_modal = $this->ui_renderer->render($modal);
193 $this->tpl->setContent($this->ui_renderer->render($form) . $rendered_modal);
198 $form = $this->
buildForm()->withRequest($this->request);
199 $data = $form->getData();
200 if (
$data ===
null) {
205 $current_question_set_type = $this->main_settings->getGeneralSettings()->getQuestionSetType();
206 $current_question_config = $this->testQuestionSetConfigFactory->getQuestionSetConfig();
209 if ($new_question_set_type !== $current_question_set_type
210 && $current_question_config->doesQuestionSetRelatedDataExist()) {
212 $this->test_object->getObjectProperties()->getPropertyIsOnline()->withOffline();
213 $this->testQuestionSetConfigFactory->getQuestionSetConfig()->removeQuestionSetRelatedData();
217 $this->
logger->deleteParticipantInteractionsForTest($this->test_object->getRefId());
227 $form = $this->
buildForm()->withRequest($this->request);
228 $data = $form->getData();
229 }
catch (InvalidArgumentException) {
230 $this->
ctrl->redirect($this, self::CMD_SHOW_FORM);
234 if (
$data ===
null) {
239 $current_question_set_type = $this->main_settings->getGeneralSettings()->getQuestionSetType();
240 $current_question_config = $this->testQuestionSetConfigFactory->getQuestionSetConfig();
243 if ($new_question_set_type ===
null) {
244 $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt(
'tst_settings_form_reload_needed'));
245 $this->
ctrl->redirect($this, self::CMD_SHOW_FORM);
249 $question_set_modal_required = $new_question_set_type !== $current_question_set_type
250 && $current_question_config->doesQuestionSetRelatedDataExist();
252 $data[self::GENERAL_SETTINGS_SECTION_LABEL][
'anonymity']
255 if ($question_set_modal_required || $anonymity_modal_required) {
257 $question_set_modal_required ? $current_question_set_type :
null,
258 $question_set_modal_required ? $new_question_set_type :
null,
259 $anonymity_modal_required
272 + $this->main_settings->getArrayForLog($this->
logger->getAdditionalInformationGenerator());
273 if ($this->
logger->isLoggingEnabled()) {
274 $this->
logger->logTestAdministrationInteraction(
275 $this->
logger->getInteractionFactory()->buildTestAdministrationInteraction(
276 $this->test_object->getRefId(),
277 $this->active_user->getId(),
278 TestAdministrationInteractionTypes::MAIN_SETTINGS_MODIFIED,
279 $additional_information
284 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'msg_obj_modified'),
true);
285 $this->
ctrl->redirect($this, self::CMD_SHOW_FORM);
290 return $this->main_settings->getGeneralSettings()->getAnonymity() ===
false
291 && $anonymity_form_data ===
true
292 && $this->
logger->testHasParticipantInteractions($this->test_object->getRefId());
297 $title_and_description = $this->object_properties->getPropertyTitleAndDescription();
302 ->getAdditionalInformationGenerator()->getTrueFalseTagForBool(
303 $this->object_properties->getPropertyIsOnline()->getIsOnline()
313 $input_factory = $this->ui_factory->input();
316 $environment[
'participant_data_exists'] = $this->test_object->participantDataExist();
317 $environment[
'user_date_format'] = $this->active_user->getDateTimeFormat();
318 $environment[
'user_time_zone'] = $this->active_user->getTimeZone();
324 self::INTRODUCTION_SETTINGS_SECTION_LABEL => $this->main_settings->getIntroductionSettings()
326 self::ACCESS_SETTINGS_LABEL => $this->main_settings->getAccessSettings()
327 ->toForm(
$lng, $input_factory->field(),
$refinery, $environment),
328 self::TEST_BEHAVIOUR_SETTINGS_LABEL => $this->main_settings->getTestBehaviourSettings()
329 ->toForm(
$lng, $input_factory->field(),
$refinery, $environment),
330 self::QUESTION_BEHAVIOUR_SETTINGS_LABEL => $this->main_settings->getQuestionBehaviourSettings()
331 ->toForm(
$lng, $input_factory->field(),
$refinery, $environment),
332 self::PARTICIPANTS_FUNCTIONALITY_SETTINGS_LABEL => $this->main_settings->getParticipantFunctionalitySettings()
333 ->toForm(
$lng, $input_factory->field(),
$refinery, $environment),
334 self::FINISH_TEST_SETTINGS_LABEL => $this->main_settings->getFinishingSettings()
340 return $input_factory->container()->form()->standard(
341 $this->
ctrl->getFormActionByClass(self::class, self::CMD_SAVE_FORM),
348 return $this->
refinery->custom()->constraint(
349 function (array $vs):
bool {
350 if ($vs[self::PARTICIPANTS_FUNCTIONALITY_SETTINGS_LABEL][
'postponed_questions_behaviour'] ===
true
351 && $vs[self::QUESTION_BEHAVIOUR_SETTINGS_LABEL][
'lock_answers'][
'lock_answer_on_next_question']) {
356 $this->
lng->txt(
'tst_settings_conflict_postpone_and_lock')
361 ?
string $current_question_set_type,
362 ?
string $new_question_set_type,
363 bool $anonymity_modal_required
364 ): InterruptiveModal {
367 if ($current_question_set_type !==
null) {
369 $this->
lng->txt(
'tst_change_quest_set_type_from_old_to_new_with_conflict'),
370 $this->test_object->getQuestionSetTypeTranslation($this->lng, $current_question_set_type),
371 $this->test_object->getQuestionSetTypeTranslation($this->lng, $new_question_set_type)
376 && $this->test_object->hasQuestionsWithoutQuestionpool()) {
377 $message .=
'<br /><br />' . $this->
lng->txt(
'tst_nonpool_questions_get_lost_warning');
380 if ($anonymity_modal_required) {
384 $message .= $this->
lng->txt(
'log_participant_data_delete_warning');
387 $this->tpl->addJavaScript(
'assets/js/settings_confirmation.js');
388 $on_load_code =
static function (
string $id):
string {
389 return 'il.test.confirmSettings.init(' .
$id .
')';
392 $modal = $this->ui_factory->modal()->interruptive(
393 $this->
lng->txt(
'confirm'),
395 $this->
ctrl->getFormActionByClass(self::class, self::CMD_CONFIRMED_SAVE_FORM)
396 )->withActionButtonLabel($this->
lng->txt(
'confirm'))
399 return $modal->withOnLoad($modal->getShowSignal());
404 $old_online_status = $this->test_object->getObjectProperties()->getPropertyIsOnline()->getIsOnline();
405 $this->test_object->getObjectProperties()->storePropertyTitleAndDescription(
406 $data[self::GENERAL_SETTINGS_SECTION_LABEL][
'title_and_description']
408 $general_settings = $this->getGeneralSettingsForStorage(
$data[self::GENERAL_SETTINGS_SECTION_LABEL]);
410 $this->saveAvailabilitySettingsSection(
$data[self::AVAILABILITY_SETTINGS_SECTION_LABEL]);
411 $this->savePresentationSettingsSection(
$data[self::PRESENTATION_SETTINGS_SECTION_LABEL]);
413 $introduction_settings = $this->getIntroductionSettingsForStorage(
414 $data[self::INTRODUCTION_SETTINGS_SECTION_LABEL]
416 $access_settings = $this->getAccessSettingsForStorage(
417 $data[self::ACCESS_SETTINGS_LABEL]
419 $test_behaviour_settings = $this->getTestBehaviourSettingsForStorage(
420 $data[self::TEST_BEHAVIOUR_SETTINGS_LABEL]
422 $question_behaviour_settings = $this->getQuestionBehaviourSettingsForStorage(
423 $data[self::QUESTION_BEHAVIOUR_SETTINGS_LABEL]
425 $participant_functionality_settings = $this->getParticipantsFunctionalitySettingsForStorage(
426 $data[self::PARTICIPANTS_FUNCTIONALITY_SETTINGS_LABEL]
429 $finishing_settings = $this->getFinishingSettingsForStorage(
$data[self::FINISH_TEST_SETTINGS_LABEL]);
431 if (array_key_exists(self::ADDITIONAL_FUNCTIONALITY_SETTINGS_LABEL,
$data)
432 || array_key_exists(self::ECS_FUNCTIONALITY_SETTINGS_LABEL,
$data)) {
433 $this->saveAdditionalFunctionalitySettingsSection(
$data);
436 $additional_settings = $this->getAdditionalFunctionalitySettingsForStorage(
437 $data[self::ADDITIONAL_FUNCTIONALITY_SETTINGS_LABEL] ?? []
441 $this->test_object->getTestId(),
442 $this->test_object->getId(),
444 $introduction_settings,
446 $test_behaviour_settings,
447 $question_behaviour_settings,
448 $participant_functionality_settings,
452 $this->main_settings_repository->store($settings);
453 $this->main_settings = $this->main_settings_repository->getFor($this->test_object->getTestId());
454 $this->test_object->read();
455 $this->test_object->addToNewsOnOnline(
457 $this->test_object->getObjectProperties()->getPropertyIsOnline()->getIsOnline()
463 $field_factory = $this->ui_factory->input()->field();
465 $inputs[
'title_and_description'] = $this->test_object->getObjectProperties()->getPropertyTitleAndDescription()
466 ->toForm($this->
lng, $field_factory, $this->
refinery);
467 $inputs += $this->main_settings->getGeneralSettings()
468 ->toForm($this->
lng, $field_factory, $this->
refinery, $environment);
470 return $field_factory->section(
472 $this->
lng->txt(
'tst_general_properties')
481 if ($this->test_object->participantDataExist()) {
482 return $this->main_settings->getGeneralSettings();
485 return $this->main_settings->getGeneralSettings()
487 ->withAnonymity($section[
'anonymity']);
492 $input_factory = $this->ui_factory->input();
494 $inputs[
'is_online'] = $this->getIsOnlineSettingInput();
496 return $input_factory->field()->section(
498 $this->
lng->txt(
'rep_activation_availability')
504 $field_factory = $this->ui_factory->input()->field();
506 $question_set_config_complete = $this->test_object->isComplete(
507 $this->testQuestionSetConfigFactory->getQuestionSetConfig()
510 $is_online = $this->test_object->getObjectProperties()->getPropertyIsOnline()
511 ->toForm($this->
lng, $field_factory, $this->
refinery);
515 $is_online->getByline() .
' ' . $this->lng->txt(
'rep_activation_online_object_info')
519 if (!$question_set_config_complete) {
520 $is_online = $is_online
521 ->withByline($this->
lng->txt(
'cannot_switch_to_online_no_questions_andor_no_mark_steps'))
522 ->withDisabled(
true);
530 $this->test_object->getObjectProperties()->storePropertyIsOnline($section[
'is_online']);
535 $input_factory = $this->ui_factory->input();
537 $custom_icon_input = $this->test_object->getObjectProperties()->getPropertyIcon()
538 ->toForm($this->
lng, $input_factory->field(), $this->refinery);
540 if ($custom_icon_input !==
null) {
541 $inputs[
'custom_icon'] = $custom_icon_input;
543 $inputs[
'tile_image'] = $this->test_object->getObjectProperties()->getPropertyTileImage()
544 ->toForm($this->
lng, $input_factory->field(), $this->refinery);
546 return $input_factory->field()->section(
548 $this->
lng->txt(
'tst_presentation_settings_section')
554 if (array_key_exists(
'custom_icon', $section)) {
555 $this->test_object->getObjectProperties()->storePropertyIcon($section[
'custom_icon']);
557 $this->test_object->getObjectProperties()->storePropertyTileImage($section[
'tile_image']);
562 return $this->main_settings->getIntroductionSettings()
564 ->withExamConditionsCheckboxEnabled($section[
'conditions_checkbox_enabled']);
569 $access_settings = $this->main_settings->getAccessSettings()
571 ->withStartTime($section[
'access_window'][
'start_time'])
572 ->withEndTimeEnabled($section[
'access_window'][
'end_time_enabled'])
573 ->withEndTime($section[
'access_window'][
'end_time'])
574 ->withPasswordEnabled($section[
'test_password'][
'password_enabled'])
575 ->withPassword($section[
'test_password'][
'password_value'])
576 ->withIpRangeFrom($section[
'ip_range'][
'ip_range_from'])
577 ->withIpRangeTo($section[
'ip_range'][
'ip_range_to'])
578 ->withFixedParticipants($section[
'fixed_participants_enabled']);
580 if ($this->test_object->participantDataExist()) {
581 return $access_settings;
584 return $access_settings->withStartTimeEnabled($section[
'access_window'][
'start_time_enabled'])
585 ->withStartTime($section[
'access_window'][
'start_time']);
590 $test_behaviour_settings = $this->main_settings->getTestBehaviourSettings()
592 ->withExamIdInTestAttemptEnabled($section[
'show_exam_id']);
594 if ($this->test_object->participantDataExist()) {
595 return $test_behaviour_settings;
598 return $test_behaviour_settings
599 ->withNumberOfTries($section[
'limit_attempts'][
'number_of_available_attempts'])
600 ->withBlockAfterPassedEnabled($section[
'limit_attempts'][
'block_after_passed'])
601 ->withPassWaiting($section[
'force_waiting_between_attempts'])
602 ->withProcessingTimeEnabled($section[
'time_limit_for_completion'][
'processing_time_limit'])
603 ->withProcessingTime($section[
'time_limit_for_completion'][
'time_limit_for_completion_value'])
604 ->withResetProcessingTime($section[
'time_limit_for_completion'][
'reset_time_limit_for_completion_by_attempt']);
609 $question_behaviour_settings = $this->main_settings->getQuestionBehaviourSettings()
611 ->withAutosaveEnabled($section[
'autosave'][
'autosave_enabled'])
612 ->withAutosaveInterval($section[
'autosave'][
'autosave_interval'])
613 ->withShuffleQuestions($section[
'shuffle_questions']);
615 if ($this->test_object->participantDataExist()) {
616 return $question_behaviour_settings;
619 return $question_behaviour_settings
620 ->withInstantFeedbackPointsEnabled($section[
'instant_feedback'][
'enabled_feedback_types'][
'instant_feedback_points'])
621 ->withInstantFeedbackGenericEnabled($section[
'instant_feedback'][
'enabled_feedback_types'][
'instant_feedback_generic'])
622 ->withInstantFeedbackSpecificEnabled($section[
'instant_feedback'][
'enabled_feedback_types'][
'instant_feedback_specific'])
623 ->withInstantFeedbackSolutionEnabled($section[
'instant_feedback'][
'enabled_feedback_types'][
'instant_feedback_solution'])
624 ->withForceInstantFeedbackOnNextQuestion($section[
'instant_feedback'][
'feedback_on_next_question'])
625 ->withLockAnswerOnInstantFeedbackEnabled($section[
'lock_answers'][
'lock_answer_on_instant_feedback'])
626 ->withLockAnswerOnNextQuestionEnabled($section[
'lock_answers'][
'lock_answer_on_next_question']);
632 return $this->main_settings->getParticipantFunctionalitySettings()
634 ->withSuspendTestAllowed($section[
'allow_suspend_test'])
635 ->withPostponedQuestionsMoveToEnd($section[
'postponed_questions_behaviour'])
636 ->withUsrPassOverviewMode($section[
'usr_pass_overview'])
637 ->withQuestionMarkingEnabled($section[
'enable_question_marking'])
638 ->withQuestionListEnabled($section[
'enable_question_list']);
643 $redirect_after_finish = $section[
'redirect_after_finish'];
644 $finish_notification = $section[
'finish_notification'];
645 return $this->main_settings->getFinishingSettings()
647 ->withConcludingRemarksEnabled($section[
'show_concluding_remarks'])
648 ->withRedirectionMode($redirect_after_finish[
'redirect_mode'])
649 ->withRedirectionUrl($redirect_after_finish[
'redirect_url'])
650 ->withMailNotificationContentType($finish_notification[
'notification_content_type'])
651 ->withAlwaysSendMailNotification($finish_notification[
'always_notify']);
658 $ecs = new \ilECSTestSettings($this->test_object);
659 $ecs_section = $ecs->getSettingsSection(
660 $this->ui_factory->input()->field(),
664 if ($ecs_section !==
null) {
665 $sections[self::ECS_FUNCTIONALITY_SETTINGS_LABEL] = $ecs_section;
668 $inputs[
'organisational_units_activation'] = $this->getOrganisationalUnitsActivationInput();
670 $inputs += $this->main_settings->getAdditionalSettings()->toForm(
672 $this->ui_factory->input()->field(),
680 $sections[self::ADDITIONAL_FUNCTIONALITY_SETTINGS_LABEL] = $this->ui_factory->input()->field()
681 ->section(
$inputs, $this->
lng->txt(
'obj_features'));
690 $this->test_object->getType()
692 if (!$position_settings->isActive()) {
696 $enable_organisational_units_access = $this->ui_factory->input()->field()
698 $this->
lng->txt(
'obj_orgunit_positions'),
699 $this->lng->txt(
'obj_orgunit_positions_info')
704 if (!$position_settings->isChangeableForObject()) {
705 return $enable_organisational_units_access->withDisabled(
true);
707 return $enable_organisational_units_access;
712 if (array_key_exists(self::ECS_FUNCTIONALITY_SETTINGS_LABEL, $sections)) {
713 $ecs = new \ilECSTestSettings($this->test_object);
714 $ecs->saveSettingsSection($sections[self::ECS_FUNCTIONALITY_SETTINGS_LABEL]);
717 if (!array_key_exists(self::ADDITIONAL_FUNCTIONALITY_SETTINGS_LABEL, $sections)) {
721 $additional_settings_section = $sections[self::ADDITIONAL_FUNCTIONALITY_SETTINGS_LABEL];
722 if (array_key_exists(
'organisational_units_activation', $additional_settings_section)) {
723 $this->saveOrganisationalUnitsActivation($additional_settings_section[
'organisational_units_activation']);
730 $this->test_object->getType()
733 if ($position_settings->isActive() && $position_settings->isChangeableForObject()) {
734 $orgu_object_settings = new \ilOrgUnitObjectPositionSetting($this->test_object->getId());
735 $orgu_object_settings->setActive(
738 $orgu_object_settings->update();
744 $additional_settings = $this->main_settings->getAdditionalSettings()->
withHideInfoTab($section[
'hide_info_tab']);
746 if ($this->test_object->participantDataExist()) {
747 return $additional_settings;
751 return $additional_settings->withSkillsServiceEnabled(
false);
754 return $additional_settings->withSkillsServiceEnabled($section[
'skills_service_activation']);
759 if ($value ===
null || $value === 0) {
763 return \DateTimeImmutable::createFromFormat(
766 )->setTimezone(
new \DateTimeZone($this->active_user->getTimeZone()));
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Builds a Color from either hex- or rgb values.
withStartTimeEnabled(bool $start_time_enabled)
withHideInfoTab(bool $hide_info_tab)
withShowAnswerOverview(bool $show_answer_overview)
withQuestionSetType(string $question_set_type)
withIntroductionEnabled(bool $introduction_enabled)
@ilCtrl_Calls ILIAS\Test\Settings\MainSettings\SettingsMainGUI: ilPropertyFormGUI @ilCtrl_Calls ILIAS...
ilTestQuestionSetConfigFactory $testQuestionSetConfigFactory
const FINISH_TEST_SETTINGS_LABEL
anonymityChanged(bool $anonymity_form_data)
getGeneralSettingsSection(array $environment)
getPresentationSettingsSection()
getParticipantsFunctionalitySettingsForStorage(array $section)
getQuestionBehaviourSettingsForStorage(array $section)
ObjectProperties $object_properties
const ACCESS_SETTINGS_LABEL
getObjectDataArrayForLog()
getFinishingSettingsForStorage(array $section)
const QUESTION_BEHAVIOUR_SETTINGS_LABEL
populateConfirmationModal(?string $current_question_set_type, ?string $new_question_set_type, bool $anonymity_modal_required)
getTestBehaviourSettingsForStorage(array $section)
showForm(?StandardForm $form=null, ?InterruptiveModal $modal=null)
getIntroductionSettingsForStorage(array $section)
const GENERAL_SETTINGS_SECTION_LABEL
const INTRODUCTION_SETTINGS_SECTION_LABEL
finalizeSave(array $data)
const CMD_CONFIRMED_SAVE_FORM
performSaveForm(array $data)
const PARTICIPANTS_FUNCTIONALITY_SETTINGS_LABEL
const CMD_SHOW_RESET_TPL_CONFIRM
buildDateOrNullFromILIASValue(?int $value)
getGeneralSettingsForStorage(array $section)
const PRESENTATION_SETTINGS_SECTION_LABEL
getAdditionalFunctionalitySettingsSections(array $environment)
saveAvailabilitySettingsSection(array $section)
getOrganisationalUnitsActivationInput()
showOldConcludingRemarks()
__construct(private readonly \ilGlobalTemplateInterface $tpl, private readonly \ilToolbarGUI $toolbar, private readonly \ilCtrlInterface $ctrl, private readonly \ilAccessHandler $access, private readonly \ilLanguage $lng, private readonly \ilTree $tree, private readonly \ilDBInterface $db, private readonly \ilObjectDataCache $object_data_cache, private readonly \ilSetting $settings, private readonly UIFactory $ui_factory, private readonly UIRenderer $ui_renderer, private readonly Refinery $refinery, private readonly ServerRequestInterface $request, private readonly \ilComponentRepository $component_repository, private readonly \ilObjUser $active_user, private readonly \ilObjTestGUI $test_gui, private readonly TestLogger $logger, private readonly GeneralQuestionPropertiesRepository $questionrepository)
saveOrganisationalUnitsActivation(bool $activation)
MainSettingsRepository $main_settings_repository
const ADDITIONAL_FUNCTIONALITY_SETTINGS_LABEL
getAccessSettingsForStorage(array $section)
savePresentationSettingsSection(array $section)
getIsOnlineSettingInput()
saveAdditionalFunctionalitySettingsSection(array $sections)
executeCommand()
Command Execution.
getAdditionalFunctionalitySettingsForStorage(array $section)
MainSettings $main_settings
const TEST_BEHAVIOUR_SETTINGS_LABEL
const CMD_CONFIRMED_RESET_TPL
const ECS_FUNCTIONALITY_SETTINGS_LABEL
const AVAILABILITY_SETTINGS_SECTION_LABEL
getAvailabilitySettingsSection()
withUsePreviousAnswerAllowed(bool $use_previous_answers_allowed)
withQuestionTitleOutputMode(int $question_title_output_mode)
withKioskMode(int $kiosk_mode)
const QUESTION_SET_TYPE_FIXED
static _getAllReferences(int $id)
get all reference ids for object ID
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _replaceMediaObjectImageSrc(string $a_text, int $a_direction=0, string $nic='')
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
Skill management settings.
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
A constraint encodes some resrtictions on values.
An entity that renders components to a string output.
Interface ilAccessHandler This interface combines all available interfaces which can be called via gl...
Readable part of repository interface to ilComponentDataDB.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
TestAdministrationInteractionTypes
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
withAdditionalOnLoadCode(Closure $binder)