ILIAS  trunk Revision v11.0_alpha-1715-g7fc467680fb
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
Repository.php
Go to the documentation of this file.
1 <?php
2 
19 declare(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_EXPORT_ESSAY_QUESTIONS_AS_HTML = 'export_essay_qst_with_html';
33  private const SETTINGS_KEY_DISABLED_QUESTION_TYPES = 'disabled_question_types';
34  private const SETTINGS_KEY_MANUAL_SCORING_ENABLED = 'manual_scoring';
35  private const SETTINGS_KEY_ADJUSTING_QUESTIONS_WITH_RESULTS_ALLOWED = 'assessment_adjustments_enabled';
36  private const SETTINGS_KEY_PAGE_EDITOR_ENABLED = 'enable_tst_page_edit';
37 
38  private const SETTINGS_KEY_LOGGING_ENABLED = 'assessment_logging';
39  private const SETTINGS_KEY_IP_LOGGING_ENABLED = 'assessment_logging_ip';
40 
43 
44  public function __construct(
45  private \ilSetting $settings_global,
46  private \ilSetting $settings_test
47  ) {
48  }
49 
51  {
52  if ($this->global_test_settings === null) {
53  $this->global_test_settings = $this->buildGlobalTestSettings();
54  }
56  }
57 
59  {
60  $global_settings = new GlobalTestSettings();
61 
62  if (($process_lock_mode = ProcessLockModes::tryFrom(
63  $this->settings_test->get(self::SETTINGS_KEY_PROCESS_LOCK_MODE) ?? ''
64  )) !== null
65  ) {
66  $global_settings = $global_settings->withProcessLockMode($process_lock_mode);
67  }
68 
69  if (($image_map_line_color = $this->settings_test->get(self::SETTINGS_KEY_IMAGE_MAP_LINE_COLOR)) !== null) {
70  $global_settings = $global_settings->withImageMapLineColor($image_map_line_color);
71  }
72 
73  if (($user_identifier = UserIdentifiers::tryFrom(
74  $this->settings_test->get(self::SETTINGS_KEY_UNIQUE_USER_IDENTIFIER) ?? ''
75  )) !== null
76  ) {
77  $global_settings = $global_settings->withUserIdentifier($user_identifier);
78  }
79 
80  if (($skill_triggering_number_of_answers = $this->settings_test->get(self::SETTINGS_KEY_SKILL_TRIGGERING_NUMBER_OF_ANSWERS)) !== null) {
81  $global_settings = $global_settings->withSkillTriggeringNumberOfAnswers((int) $skill_triggering_number_of_answers);
82  }
83 
84  if (($export_essay_questions_as_html = $this->settings_test->get(self::SETTINGS_KEY_EXPORT_ESSAY_QUESTIONS_AS_HTML)) !== null) {
85  $global_settings = $global_settings->withExportEssayQuestionsAsHtml($export_essay_questions_as_html === '1');
86  }
87 
88  if (($disabled_question_types_legacy = $this->settings_test->get(self::SETTINGS_KEY_DISABLED_QUESTION_TYPES_LEGACY)) !== null) {
89  $this->migrateLegacyQuestionTypes($disabled_question_types_legacy);
90  }
91 
92  if (($disabled_question_types = $this->settings_test->get(self::SETTINGS_KEY_DISABLED_QUESTION_TYPES)) !== null) {
93  $global_settings = $global_settings->withDisabledQuestionTypes(explode(',', $disabled_question_types));
94  }
95 
96  if (($manual_scoring_legacy = $this->settings_test->get(self::SETTINGS_KEY_MANUAL_SCORING_LEGACY)) !== null) {
97  $this->migrateLegacyManualScoring($manual_scoring_legacy);
98  }
99 
100  if (($manual_scoring_enabled = $this->settings_test->get(self::SETTINGS_KEY_MANUAL_SCORING_ENABLED)) !== null) {
101  $global_settings = $global_settings->withManualScoringEnabled($manual_scoring_enabled === '1');
102  }
103 
104  if (($adjusting_questions_with_results_allowed = $this->settings_test->get(self::SETTINGS_KEY_ADJUSTING_QUESTIONS_WITH_RESULTS_ALLOWED)) !== null) {
105  $global_settings = $global_settings->withAdjustingQuestionsWithResultsAllowed($adjusting_questions_with_results_allowed === '1');
106  }
107 
108  if (($page_editor_enabled = $this->settings_global->get(self::SETTINGS_KEY_PAGE_EDITOR_ENABLED)) !== null) {
109  $global_settings = $global_settings->withPageEditorEnabled($page_editor_enabled === '1');
110  }
111 
112  return $global_settings;
113  }
114 
115  public function storeGlobalSettings(GlobalTestSettings $global_settings): void
116  {
117  $this->settings_test->set(self::SETTINGS_KEY_PROCESS_LOCK_MODE, $global_settings->getProcessLockMode()->value);
118  $this->settings_test->set(self::SETTINGS_KEY_IMAGE_MAP_LINE_COLOR, $global_settings->getImageMapLineColor());
119  $this->settings_test->set(self::SETTINGS_KEY_UNIQUE_USER_IDENTIFIER, $global_settings->getUserIdentifier()->value);
120  $this->settings_test->set(self::SETTINGS_KEY_SKILL_TRIGGERING_NUMBER_OF_ANSWERS, (string) $global_settings->getSkillTriggeringNumberOfAnswers());
121  $this->settings_test->set(self::SETTINGS_KEY_EXPORT_ESSAY_QUESTIONS_AS_HTML, $global_settings->getExportEssayQuestionsAsHtml() ? '1' : '0');
122  $this->settings_test->set(self::SETTINGS_KEY_DISABLED_QUESTION_TYPES, implode(',', $global_settings->getDisabledQuestionTypes()));
123  $this->settings_test->set(self::SETTINGS_KEY_MANUAL_SCORING_ENABLED, $global_settings->isManualScoringEnabled() ? '1' : '0');
124  $this->settings_test->set(self::SETTINGS_KEY_ADJUSTING_QUESTIONS_WITH_RESULTS_ALLOWED, $global_settings->isAdjustingQuestionsWithResultsAllowed() ? '1' : '0');
125 
126  $this->global_test_settings = $global_settings;
127  }
128 
130  {
131  if ($this->test_logging_settings === null) {
132  $this->test_logging_settings = new TestLoggingSettings(
133  $this->settings_test->get(self::SETTINGS_KEY_LOGGING_ENABLED) === '1',
134  $this->settings_test->get(self::SETTINGS_KEY_IP_LOGGING_ENABLED) !== '0'
135  );
136  }
138  }
139 
140  public function storeLoggingSettings(TestLoggingSettings $logging_settings): void
141  {
142  $this->settings_test->set(self::SETTINGS_KEY_LOGGING_ENABLED, $logging_settings->isLoggingEnabled() ? '1' : '0');
143  $this->settings_test->set(self::SETTINGS_KEY_IP_LOGGING_ENABLED, $logging_settings->isIPLoggingEnabled() ? '1' : '0');
144  }
145 
146  private function migrateLegacyQuestionTypes(string $legacy_types): void
147  {
148  $this->settings_test->delete(self::SETTINGS_KEY_DISABLED_QUESTION_TYPES_LEGACY);
149  $this->settings_test->set(self::SETTINGS_KEY_DISABLED_QUESTION_TYPES, implode(',', unserialize($legacy_types, ['allowed_classes' => false]) ?? []));
150  }
151 
152  private function migrateLegacyManualScoring(string $legacy_manual_scoring): void
153  {
154  $this->settings_test->delete(self::SETTINGS_KEY_MANUAL_SCORING_LEGACY);
155  $this->settings_test->set(self::SETTINGS_KEY_MANUAL_SCORING_ENABLED, array_filter(array_map('intval', explode(',', $legacy_manual_scoring))) !== [] ? '1' : '0');
156  }
157 }
__construct(private \ilSetting $settings_global, private \ilSetting $settings_test)
Definition: Repository.php:44
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
migrateLegacyQuestionTypes(string $legacy_types)
Definition: Repository.php:146
migrateLegacyManualScoring(string $legacy_manual_scoring)
Definition: Repository.php:152
storeLoggingSettings(TestLoggingSettings $logging_settings)
Definition: Repository.php:140
storeGlobalSettings(GlobalTestSettings $global_settings)
Definition: Repository.php:115