11 include_once(
"./Services/Xml/classes/class.ilSaxParser.php");
30 parent::__construct($a_xml_file,
true);
31 $this->tst_obj = &$test_object;
33 $this->active_id_mapping = array();
34 $this->question_id_mapping = array();
35 $this->user_criteria_checked =
false;
36 $this->src_pool_def_id_mapping = array();
78 xml_set_object($a_xml_parser, $this);
79 xml_set_element_handler($a_xml_parser,
'handlerBeginTag',
'handlerEndTag');
80 xml_set_character_data_handler($a_xml_parser,
'handlerParseCharacterData');
91 $this->sametag =
false;
92 $this->characterbuffer =
"";
93 $this->depth[$a_xml_parser]++;
94 $this->path[$this->depth[$a_xml_parser]] = strtolower($a_name);
95 $this->qti_element = $a_name;
97 switch (strtolower($a_name)) {
101 switch ($this->table) {
103 if (!$this->user_criteria_checked) {
104 $this->user_criteria_checked =
true;
105 if (
$ilDB->tableColumnExists(
'usr_data', $a_attribs[
'user_criteria'])) {
106 include_once
'./Services/Database/classes/class.ilDBAnalyzer.php';
108 $info = $analyzer->getFieldInformation(
'usr_data');
109 $this->user_criteria_field = $a_attribs[
'user_criteria'];
110 $this->user_criteria_type =
$info[$a_attribs[
'user_criteria']][
'type'];
113 $usr_id = ANONYMOUS_USER_ID;
114 if (strlen($this->user_criteria_field)) {
116 "SELECT usr_id FROM usr_data WHERE " . $this->user_criteria_field .
" = %s",
117 array($this->user_criteria_type),
118 array($a_attribs[$this->user_criteria_field])
122 $usr_id =
$row[
'usr_id'];
125 $next_id =
$ilDB->nextId(
'tst_active');
127 $ilDB->insert(
'tst_active', array(
128 'active_id' => array(
'integer', $next_id),
129 'user_fi' => array(
'integer', $usr_id),
130 'anonymous_id' => array(
'text', strlen($a_attribs[
'anonymous_id']) ? $a_attribs[
'anonymous_id'] : null),
131 'test_fi' => array(
'integer', $this->tst_obj->getTestId()),
132 'lastindex' => array(
'integer', $a_attribs[
'lastindex']),
133 'tries' => array(
'integer', $a_attribs[
'tries']),
134 'submitted' => array(
'integer', $a_attribs[
'submitted']),
135 'submittimestamp' => array(
'timestamp', strlen($a_attribs[
'submittimestamp']) ? $a_attribs[
'submittimestamp'] : null),
136 'tstamp' => array(
'integer', $a_attribs[
'tstamp']),
137 'importname' => array(
'text', $a_attribs[
'fullname']),
140 'answerstatusfilter' => array(
'integer', $this->
fetchAttribute($a_attribs,
'answer_status_filter')),
141 'objective_container' => array(
'integer', $this->
fetchAttribute($a_attribs,
'objective_container'))
143 $this->active_id_mapping[$a_attribs[
'active_id']] = $next_id;
145 case 'tst_test_rnd_qst':
146 $nextId =
$ilDB->nextId(
'tst_test_rnd_qst');
147 $newActiveId = $this->active_id_mapping[$a_attribs[
'active_fi']];
148 $newQuestionId = $this->question_id_mapping[$a_attribs[
'question_fi']];
149 $newSrcPoolDefId = $this->src_pool_def_id_mapping[$a_attribs[
'src_pool_def_fi']];
150 $ilDB->insert(
'tst_test_rnd_qst', array(
151 'test_random_question_id' => array(
'integer', $nextId),
152 'active_fi' => array(
'integer', $newActiveId),
153 'question_fi' => array(
'integer', $newQuestionId),
154 'sequence' => array(
'integer', $a_attribs[
'sequence']),
155 'pass' => array(
'integer', $a_attribs[
'pass']),
156 'tstamp' => array(
'integer', $a_attribs[
'tstamp']),
157 'src_pool_def_fi' => array(
'integer', $newSrcPoolDefId)
160 case 'tst_pass_result':
161 $affectedRows =
$ilDB->manipulateF(
162 "INSERT INTO tst_pass_result (active_fi, pass, points, maxpoints, questioncount, answeredquestions, workingtime, tstamp) VALUES (%s,%s,%s,%s,%s,%s,%s,%s)",
174 $this->active_id_mapping[$a_attribs[
'active_fi']],
175 strlen($a_attribs[
'pass']) ? $a_attribs[
'pass'] : 0,
176 ($a_attribs[
"points"]) ? $a_attribs[
"points"] : 0,
177 ($a_attribs[
"maxpoints"]) ? $a_attribs[
"maxpoints"] : 0,
178 $a_attribs[
"questioncount"],
179 $a_attribs[
"answeredquestions"],
180 ($a_attribs[
"workingtime"]) ? $a_attribs[
"workingtime"] : 0,
185 case 'tst_result_cache':
186 $affectedRows =
$ilDB->manipulateF(
187 "INSERT INTO tst_result_cache (active_fi, pass, max_points, reached_points, mark_short, mark_official, passed, failed, tstamp) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)",
200 $this->active_id_mapping[$a_attribs[
'active_fi']],
201 strlen($a_attribs[
'pass']) ? $a_attribs[
'pass'] : 0,
202 ($a_attribs[
"max_points"]) ? $a_attribs[
"max_points"] : 0,
203 ($a_attribs[
"reached_points"]) ? $a_attribs[
"reached_points"] : 0,
204 strlen($a_attribs[
"mark_short"]) ? $a_attribs[
"mark_short"] :
" ",
205 strlen($a_attribs[
"mark_official"]) ? $a_attribs[
"mark_official"] :
" ",
206 ($a_attribs[
"passed"]) ? 1 : 0,
207 ($a_attribs[
"failed"]) ? 1 : 0,
213 $affectedRows =
$ilDB->insert(
"tst_sequence", array(
214 "active_fi" => array(
"integer", $this->active_id_mapping[$a_attribs[
'active_fi']]),
215 "pass" => array(
"integer", $a_attribs[
'pass']),
216 "sequence" => array(
"clob", $a_attribs[
'sequence']),
217 "postponed" => array(
"text", (strlen($a_attribs[
'postponed'])) ? $a_attribs[
'postponed'] : null),
218 "hidden" => array(
"text", (strlen($a_attribs[
'hidden'])) ? $a_attribs[
'hidden'] : null),
219 "tstamp" => array(
"integer", $a_attribs[
'tstamp'])
222 case 'tst_solutions':
223 $next_id =
$ilDB->nextId(
'tst_solutions');
224 $affectedRows =
$ilDB->insert(
"tst_solutions", array(
225 "solution_id" => array(
"integer", $next_id),
226 "active_fi" => array(
"integer", $this->active_id_mapping[$a_attribs[
'active_fi']]),
227 "question_fi" => array(
"integer", $this->question_id_mapping[$a_attribs[
'question_fi']]),
228 "value1" => array(
"clob", (strlen($a_attribs[
'value1'])) ? $a_attribs[
'value1'] : null),
229 "value2" => array(
"clob", (strlen($a_attribs[
'value2'])) ? $a_attribs[
'value2'] : null),
230 "pass" => array(
"integer", $a_attribs[
'pass']),
231 "tstamp" => array(
"integer", $a_attribs[
'tstamp'])
234 case 'tst_test_result':
235 $next_id =
$ilDB->nextId(
'tst_test_result');
236 $affectedRows =
$ilDB->manipulateF(
237 "INSERT INTO tst_test_result (test_result_id, active_fi, question_fi, points, pass, manual, tstamp) VALUES (%s, %s, %s, %s, %s, %s, %s)",
238 array(
'integer',
'integer',
'integer',
'float',
'integer',
'integer',
'integer'),
239 array($next_id, $this->active_id_mapping[$a_attribs[
'active_fi']], $this->question_id_mapping[$a_attribs[
'question_fi']], $a_attribs[
'points'], $a_attribs[
'pass'], (strlen($a_attribs[
'manual'])) ? $a_attribs[
'manual'] : 0, $a_attribs[
'tstamp'])
243 $next_id =
$ilDB->nextId(
'tst_times');
244 $affectedRows =
$ilDB->manipulateF(
245 "INSERT INTO tst_times (times_id, active_fi, started, finished, pass, tstamp) VALUES (%s, %s, %s, %s, %s, %s)",
246 array(
'integer',
'integer',
'timestamp',
'timestamp',
'integer',
'integer'),
247 array($next_id, $this->active_id_mapping[$a_attribs[
'active_fi']], $a_attribs[
'started'], $a_attribs[
'finished'], $a_attribs[
'pass'], $a_attribs[
'tstamp'])
253 $this->table = $a_name;
263 switch (strtolower($a_name)) {
267 $ilLog->write(
"active id mapping: " . print_r($this->active_id_mapping,
true));
269 case "tst_test_question":
272 $ilLog->write(
"question id mapping: " . print_r($this->question_id_mapping,
true));
296 if (isset($attribs[
'last_finished_pass'])) {
297 return $attribs[
'last_finished_pass'];
300 if ($attribs[
'tries'] > 0) {
301 return $attribs[
'tries'] - 1;
309 if (isset($attribs[
'last_started_pass'])) {
310 return $attribs[
'last_started_pass'];
313 if ($attribs[
'tries'] > 0) {
314 return $attribs[
'tries'] - 1;
setSrcPoolDefIdMapping($src_pool_def_id_mapping)
handlerParseCharacterData($a_xml_parser, $a_data)
handler for character data
handlerEndTag($a_xml_parser, $a_name)
handler for end of element
Base class for sax-based expat parsing extended classes need to overwrite the method setHandlers and ...
setQuestionIdMapping($question_id_mapping)
handlerBeginTag($a_xml_parser, $a_name, $a_attribs)
handler for begin of element parser
__construct($a_xml_file, &$test_object)
Constructor.
fetchLastFinishedPass($attribs)
if(array_key_exists('yes', $_REQUEST)) $attributes
Test results import parser.
fetchLastStartedPass($attribs)
fetchAttribute($attributes, $name)
This class gives all kind of DB information using the database manager and reverse module...
setHandlers($a_xml_parser)
set event handler should be overwritten by inherited class private