ILIAS  trunk Revision v12.0_alpha-377-g3641b37b9db
class.ilAssQuestionSkillAssignmentXmlParser.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
28{
29 protected bool $parsing_active = false;
30
31 protected string $character_data_buffer = '';
32
33 protected ?int $cur_question_id = null;
34
36
38
40
41 public function __construct(?string $xml_file)
42 {
43 $this->assignment_list = new ilAssQuestionSkillAssignmentImportList();
45 }
46
47 public function isParsingActive(): bool
48 {
50 }
51
52 public function setParsingActive(bool $parsing_active): void
53 {
54 $this->parsing_active = $parsing_active;
55 }
56
57 protected function getCharacterDataBuffer(): string
58 {
60 }
61
62 protected function resetCharacterDataBuffer(): void
63 {
64 $this->character_data_buffer = '';
65 }
66
67 protected function appendToCharacterDataBuffer(string $characterData): void
68 {
69 $this->character_data_buffer .= $characterData;
70 }
71
72 public function getCurQuestionid(): int
73 {
75 }
76
77 public function setCurQuestionid(?int $cur_question_id): void
78 {
79 $this->cur_question_id = (int) $cur_question_id;
80 }
81
83 {
85 }
86
88 {
89 $this->cur_assignment = $cur_assignment;
90 }
91
93 {
95 }
96
98 {
100 }
101
103 {
104 $this->cur_expression = $cur_expression;
105 }
106
107 public function setHandlers($a_xml_parser): void
108 {
109 xml_set_element_handler($a_xml_parser, $this->handlerBeginTag(...), $this->handlerEndTag(...));
110 xml_set_character_data_handler($a_xml_parser, $this->handlerCharacterData(...));
111 }
112
113 public function handlerBeginTag($xml_parser, $tag_name, $tag_attributes): void
114 {
115 if ($tag_name !== 'SkillAssignments' && !$this->isParsingActive()) {
116 return;
117 }
118
119 switch ($tag_name) {
120 case 'SkillAssignments':
121 $this->setParsingActive(true);
122 break;
123
124 case 'TriggerQuestion':
125 $this->setCurQuestionid((int) $tag_attributes['Id']);
126 break;
127
128 case 'TriggeredSkill':
129 $assignment = new ilAssQuestionSkillAssignmentImport();
130 $assignment->setImportQuestionId($this->getCurQuestionid());
131 $assignment->setImportSkillBaseId((int) $tag_attributes['BaseId']);
132 $assignment->setImportSkillTrefId((int) $tag_attributes['TrefId']);
133 $assignment->initImportSolutionComparisonExpressionList();
134 $this->setCurAssignment($assignment);
135 break;
136
137 case 'OriginalSkillPath':
138 case 'OriginalSkillTitle':
140 break;
141
142 case 'EvalByQuestionResult':
144 $this->getCurAssignment()->setSkillPoints((int) $tag_attributes['Points']);
145 break;
146
147 case 'EvalByQuestionSolution':
149 break;
150
151 case 'SolutionComparisonExpression':
153 $expression->setPoints((int) $tag_attributes['Points']);
154 $expression->setOrderIndex((int) $tag_attributes['Index']);
155 $this->setCurExpression($expression);
157 break;
158 }
159 }
160
161 public function handlerEndTag($xml_parser, $tag_name): void
162 {
163 if (!$this->isParsingActive()) {
164 return;
165 }
166
167 switch ($tag_name) {
168 case 'SkillAssignments':
169 $this->setParsingActive(false);
170 break;
171
172 case 'TriggerQuestion':
173 $this->setCurQuestionid(null);
174 break;
175
176 case 'TriggeredSkill':
177 $this->getAssignmentList()->addAssignment($this->getCurAssignment());
178 $this->setCurAssignment(null);
179 break;
180
181 case 'OriginalSkillTitle':
182 $this->getCurAssignment()->setImportSkillTitle($this->getCharacterDataBuffer());
184 break;
185
186 case 'OriginalSkillPath':
187 $this->getCurAssignment()->setImportSkillPath($this->getCharacterDataBuffer());
189 break;
190
191 case 'EvalByQuestionSolution':
192 case 'EvalByQuestionResult':
193 break;
194
195 case 'SolutionComparisonExpression':
196 $this->getCurExpression()->setExpression($this->getCharacterDataBuffer());
197 $this->getCurAssignment()->getImportSolutionComparisonExpressionList()->addExpression($this->getCurExpression());
198 $this->setCurExpression(null);
200 break;
201 }
202 }
203
204 public function handlerCharacterData($xml_parser, $char_data): void
205 {
206 if (!$this->isParsingActive()) {
207 return;
208 }
209
210 if ($char_data !== "\n") {
211 // Replace multiple tabs with one space
212 $this->appendToCharacterDataBuffer(preg_replace("/\t+/", ' ', $char_data));
213 }
214 }
215}
setCurExpression(?ilAssQuestionSolutionComparisonExpressionImport $cur_expression)
setCurAssignment(?ilAssQuestionSkillAssignmentImport $cur_assignment)
ilAssQuestionSolutionComparisonExpressionImport $cur_expression
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc