ILIAS  release_8 Revision v8.25-1-g13de6a5eca6
class.ilAssQuestionSkillAssignmentXmlParser.php
Go to the documentation of this file.
1<?php
2
26{
30 protected $parsingActive;
31
36
40 protected $curQuestionId;
41
45 protected $curAssignment;
46
50 protected $curExpression;
51
55 protected $assignmentList;
56
60 public function __construct(?string $xmlFile)
61 {
62 $this->parsingActive = false;
63 $this->characterDataBuffer = null;
64 $this->curQuestionId = null;
65 $this->curAssignment = null;
66 $this->curExpression = null;
67 $this->assignmentList = new ilAssQuestionSkillAssignmentImportList();
68 return parent::__construct($xmlFile);
69 }
70
71 public function isParsingActive(): bool
72 {
74 }
75
76 public function setParsingActive(bool $parsingActive): void
77 {
78 $this->parsingActive = $parsingActive;
79 }
80
81 protected function getCharacterDataBuffer(): string
82 {
84 }
85
89 protected function resetCharacterDataBuffer(): void
90 {
91 $this->characterDataBuffer = '';
92 }
93
94 protected function appendToCharacterDataBuffer(string $characterData): void
95 {
96 $this->characterDataBuffer .= $characterData;
97 }
98
99 public function getCurQuestionId(): int
100 {
102 }
103
104 public function setCurQuestionId(?int $curQuestionId): void
105 {
106 $this->curQuestionId = (int) $curQuestionId;
107 }
108
110 {
112 }
113
115 {
116 $this->curAssignment = $curAssignment;
117 }
118
120 {
122 }
123
125 {
127 }
128
130 {
131 $this->curExpression = $curExpression;
132 }
133
134 public function setHandlers($a_xml_parser): void
135 {
136 xml_set_object($a_xml_parser, $this);
137 xml_set_element_handler($a_xml_parser, 'handlerBeginTag', 'handlerEndTag');
138 xml_set_character_data_handler($a_xml_parser, 'handlerCharacterData');
139 }
140
141 public function handlerBeginTag($xmlParser, $tagName, $tagAttributes): void
142 {
143 if ($tagName != 'QuestionSkillAssignments' && !$this->isParsingActive()) {
144 return;
145 }
146
147 switch ($tagName) {
148 case 'QuestionSkillAssignments':
149 $this->setParsingActive(true);
150 break;
151
152 case 'TriggerQuestion':
153 $this->setCurQuestionId((int) $tagAttributes['Id']);
154 break;
155
156 case 'TriggeredSkill':
157 $assignment = new ilAssQuestionSkillAssignmentImport();
158 $assignment->setImportQuestionId($this->getCurQuestionId());
159 $assignment->setImportSkillBaseId((int) $tagAttributes['BaseId']);
160 $assignment->setImportSkillTrefId((int) $tagAttributes['TrefId']);
161 $assignment->initImportSolutionComparisonExpressionList();
162 $this->setCurAssignment($assignment);
163 break;
164
165 case 'OriginalSkillPath':
166 case 'OriginalSkillTitle':
168 break;
169
170 case 'EvalByQuestionResult':
172 $this->getCurAssignment()->setSkillPoints((int) $tagAttributes['Points']);
173 break;
174
175 case 'EvalByQuestionSolution':
177 break;
178
179 case 'SolutionComparisonExpression':
181 $expression->setPoints((int) $tagAttributes['Points']);
182 $expression->setOrderIndex((int) $tagAttributes['Index']);
183 $this->setCurExpression($expression);
185 break;
186 }
187 }
188
189 public function handlerEndTag($xmlParser, $tagName): void
190 {
191 if (!$this->isParsingActive()) {
192 return;
193 }
194
195 switch ($tagName) {
196 case 'QuestionSkillAssignments':
197 $this->setParsingActive(false);
198 break;
199
200 case 'TriggerQuestion':
201 $this->setCurQuestionId(null);
202 break;
203
204 case 'TriggeredSkill':
205 $this->getAssignmentList()->addAssignment($this->getCurAssignment());
206 $this->setCurAssignment(null);
207 break;
208
209 case 'OriginalSkillTitle':
210 $this->getCurAssignment()->setImportSkillTitle($this->getCharacterDataBuffer());
212 break;
213
214 case 'OriginalSkillPath':
215 $this->getCurAssignment()->setImportSkillPath($this->getCharacterDataBuffer());
217 break;
218
219 case 'EvalByQuestionSolution':
220 case 'EvalByQuestionResult':
221 break;
222
223 case 'SolutionComparisonExpression':
224 $this->getCurExpression()->setExpression($this->getCharacterDataBuffer());
225 $this->getCurAssignment()->getImportSolutionComparisonExpressionList()->addExpression($this->getCurExpression());
226 $this->setCurExpression(null);
228 break;
229 }
230 }
231
232 public function handlerCharacterData($xmlParser, $charData): void
233 {
234 if (!$this->isParsingActive()) {
235 return;
236 }
237
238 if ($charData != "\n") {
239 // Replace multiple tabs with one space
240 $charData = preg_replace("/\t+/", " ", $charData);
241
242 $this->appendToCharacterDataBuffer($charData);
243 }
244 }
245}
setCurAssignment(?ilAssQuestionSkillAssignmentImport $curAssignment)
setCurExpression(?ilAssQuestionSolutionComparisonExpressionImport $curExpression)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc