ILIAS  trunk Revision v12.0_alpha-1221-g4e438232683
Repository.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
24{
25 private const SETTINGS_KEY_DISABLED_QUESTION_TYPES_LEGACY = 'forbidden_questiontypes';
26 private const SETTINGS_KEY_MANUAL_SCORING_LEGACY = 'assessment_manual_scoring';
27
28 private const SETTINGS_KEY_PROCESS_LOCK_MODE = 'ass_process_lock_mode';
29 private const SETTINGS_KEY_IMAGE_MAP_LINE_COLOR = 'imap_line_color';
30 private const SETTINGS_KEY_UNIQUE_USER_IDENTIFIER = 'user_criteria';
31 private const SETTINGS_KEY_SKILL_TRIGGERING_NUMBER_OF_ANSWERS = 'ass_skl_trig_num_answ_barrier';
32 private const SETTINGS_KEY_DISABLED_QUESTION_TYPES = 'disabled_question_types';
33 private const SETTINGS_KEY_MANUAL_SCORING_ENABLED = 'manual_scoring';
34 private const SETTINGS_KEY_ADJUSTING_QUESTIONS_WITH_RESULTS_ALLOWED = 'assessment_adjustments_enabled';
35 private const SETTINGS_KEY_PAGE_EDITOR_ENABLED = 'enable_tst_page_edit';
36
37 private const SETTINGS_KEY_LOGGING_ENABLED = 'assessment_logging';
38 private const SETTINGS_KEY_IP_LOGGING_ENABLED = 'assessment_logging_ip';
39
42
43 public function __construct(
44 private \ilSetting $settings_global,
45 private \ilSetting $settings_test
46 ) {
47 }
48
50 {
51 if ($this->global_test_settings === null) {
52 $this->global_test_settings = $this->buildGlobalTestSettings();
53 }
55 }
56
58 {
59 $global_settings = new GlobalTestSettings();
60
61 if (($process_lock_mode = ProcessLockModes::tryFrom(
62 $this->settings_test->get(self::SETTINGS_KEY_PROCESS_LOCK_MODE) ?? ''
63 )) !== null
64 ) {
65 $global_settings = $global_settings->withProcessLockMode($process_lock_mode);
66 }
67
68 if (($image_map_line_color = $this->settings_test->get(self::SETTINGS_KEY_IMAGE_MAP_LINE_COLOR)) !== null) {
69 $global_settings = $global_settings->withImageMapLineColor($image_map_line_color);
70 }
71
72 if (($user_identifier = UserIdentifiers::tryFrom(
73 $this->settings_test->get(self::SETTINGS_KEY_UNIQUE_USER_IDENTIFIER) ?? ''
74 )) !== null
75 ) {
76 $global_settings = $global_settings->withUserIdentifier($user_identifier);
77 }
78
79 if (($skill_triggering_number_of_answers = $this->settings_test->get(self::SETTINGS_KEY_SKILL_TRIGGERING_NUMBER_OF_ANSWERS)) !== null) {
80 $global_settings = $global_settings->withSkillTriggeringNumberOfAnswers((int) $skill_triggering_number_of_answers);
81 }
82
83 if (($disabled_question_types_legacy = $this->settings_test->get(self::SETTINGS_KEY_DISABLED_QUESTION_TYPES_LEGACY)) !== null) {
84 $this->migrateLegacyQuestionTypes($disabled_question_types_legacy);
85 }
86
87 if (($disabled_question_types = $this->settings_test->get(self::SETTINGS_KEY_DISABLED_QUESTION_TYPES)) !== null) {
88 $global_settings = $global_settings->withDisabledQuestionTypes(explode(',', $disabled_question_types));
89 }
90
91 if (($manual_scoring_legacy = $this->settings_test->get(self::SETTINGS_KEY_MANUAL_SCORING_LEGACY)) !== null) {
92 $this->migrateLegacyManualScoring($manual_scoring_legacy);
93 }
94
95 if (($manual_scoring_enabled = $this->settings_test->get(self::SETTINGS_KEY_MANUAL_SCORING_ENABLED)) !== null) {
96 $global_settings = $global_settings->withManualScoringEnabled($manual_scoring_enabled === '1');
97 }
98
99 if (($adjusting_questions_with_results_allowed = $this->settings_test->get(self::SETTINGS_KEY_ADJUSTING_QUESTIONS_WITH_RESULTS_ALLOWED)) !== null) {
100 $global_settings = $global_settings->withAdjustingQuestionsWithResultsAllowed($adjusting_questions_with_results_allowed === '1');
101 }
102
103 if (($page_editor_enabled = $this->settings_global->get(self::SETTINGS_KEY_PAGE_EDITOR_ENABLED)) !== null) {
104 $global_settings = $global_settings->withPageEditorEnabled($page_editor_enabled === '1');
105 }
106
107 return $global_settings;
108 }
109
110 public function storeGlobalSettings(GlobalTestSettings $global_settings): void
111 {
112 $this->settings_test->set(self::SETTINGS_KEY_PROCESS_LOCK_MODE, $global_settings->getProcessLockMode()->value);
113 $this->settings_test->set(self::SETTINGS_KEY_IMAGE_MAP_LINE_COLOR, $global_settings->getImageMapLineColor());
114 $this->settings_test->set(self::SETTINGS_KEY_UNIQUE_USER_IDENTIFIER, $global_settings->getUserIdentifier()->value);
115 $this->settings_test->set(self::SETTINGS_KEY_SKILL_TRIGGERING_NUMBER_OF_ANSWERS, (string) $global_settings->getSkillTriggeringNumberOfAnswers());
116 $this->settings_test->set(self::SETTINGS_KEY_DISABLED_QUESTION_TYPES, implode(',', $global_settings->getDisabledQuestionTypes()));
117 $this->settings_test->set(self::SETTINGS_KEY_MANUAL_SCORING_ENABLED, $global_settings->isManualScoringEnabled() ? '1' : '0');
118 $this->settings_test->set(self::SETTINGS_KEY_ADJUSTING_QUESTIONS_WITH_RESULTS_ALLOWED, $global_settings->isAdjustingQuestionsWithResultsAllowed() ? '1' : '0');
119
120 $this->global_test_settings = $global_settings;
121 }
122
124 {
125 if ($this->test_logging_settings === null) {
126 $this->test_logging_settings = new TestLoggingSettings(
127 $this->settings_test->get(self::SETTINGS_KEY_LOGGING_ENABLED) === '1',
128 $this->settings_test->get(self::SETTINGS_KEY_IP_LOGGING_ENABLED) !== '0'
129 );
130 }
132 }
133
134 public function storeLoggingSettings(TestLoggingSettings $logging_settings): void
135 {
136 $this->settings_test->set(self::SETTINGS_KEY_LOGGING_ENABLED, $logging_settings->isLoggingEnabled() ? '1' : '0');
137 $this->settings_test->set(self::SETTINGS_KEY_IP_LOGGING_ENABLED, $logging_settings->isIPLoggingEnabled() ? '1' : '0');
138 }
139
140 private function migrateLegacyQuestionTypes(string $legacy_types): void
141 {
142 $this->settings_test->delete(self::SETTINGS_KEY_DISABLED_QUESTION_TYPES_LEGACY);
143 $this->settings_test->set(self::SETTINGS_KEY_DISABLED_QUESTION_TYPES, implode(',', unserialize($legacy_types, ['allowed_classes' => false]) ?? []));
144 }
145
146 private function migrateLegacyManualScoring(string $legacy_manual_scoring): void
147 {
148 $this->settings_test->delete(self::SETTINGS_KEY_MANUAL_SCORING_LEGACY);
149 $this->settings_test->set(self::SETTINGS_KEY_MANUAL_SCORING_ENABLED, array_filter(array_map('intval', explode(',', $legacy_manual_scoring))) !== [] ? '1' : '0');
150 }
151}
migrateLegacyManualScoring(string $legacy_manual_scoring)
Definition: Repository.php:146
storeLoggingSettings(TestLoggingSettings $logging_settings)
Definition: Repository.php:134
__construct(private \ilSetting $settings_global, private \ilSetting $settings_test)
Definition: Repository.php:43
storeGlobalSettings(GlobalTestSettings $global_settings)
Definition: Repository.php:110
migrateLegacyQuestionTypes(string $legacy_types)
Definition: Repository.php:140
ILIAS Setting Class.