ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilTestResultsToXML.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
11 include_once './Services/Xml/classes/class.ilXmlWriter.php';
12 
14 {
15  private $test_id = 0;
16  private $anonymized = false;
17  private $active_ids;
18 
20 
21  public function __construct($test_id, $anonymized = false)
22  {
23  parent::__construct();
24  $this->test_id = $test_id;
25  $this->anonymized = $anonymized;
26  }
27 
32  {
34  }
35 
40  {
41  $this->includeRandomTestQuestionsEnabled = $includeRandomTestQuestionsEnabled;
42  }
43 
44  protected function exportActiveIDs()
45  {
46  global $DIC;
47  $ilDB = $DIC['ilDB'];
48  $ilSetting = $DIC['ilSetting'];
49 
50  include_once "./Modules/Test/classes/class.ilObjTestAccess.php";
51  $assessmentSetting = new ilSetting("assessment");
52  $user_criteria = $assessmentSetting->get("user_criteria");
53  if (strlen($user_criteria) == 0) {
54  $user_criteria = 'usr_id';
55  }
56 
57  if ($this->anonymized) {
58  $result = $ilDB->queryF(
59  "SELECT * FROM tst_active WHERE test_fi = %s",
60  array('integer'),
61  array($this->test_id)
62  );
63  } else {
64  $result = $ilDB->queryF(
65  "SELECT tst_active.*, usr_data." . $user_criteria . " FROM tst_active, usr_data WHERE tst_active.test_fi = %s AND tst_active.user_fi = usr_data.usr_id",
66  array('integer'),
67  array($this->test_id)
68  );
69  }
70  $this->xmlStartTag("tst_active", null);
71  while ($row = $ilDB->fetchAssoc($result)) {
72  $attrs = array(
73  'active_id' => $row['active_id'],
74  'user_fi' => $row['user_fi'],
75  'anonymous_id' => $row['anonymous_id'],
76  'test_fi' => $row['test_fi'],
77  'lastindex' => $row['lastindex'],
78  'tries' => $row['tries'],
79  'last_started_pass' => $row['last_started_pass'],
80  'last_finished_pass' => $row['last_finished_pass'],
81  'submitted' => $row['submitted'],
82  'submittimestamp' => $row['submittimestamp'],
83  'tstamp' => $row['tstamp']
84  );
85  $attrs['fullname'] = ilObjTestAccess::_getParticipantData($row['active_id']);
86  if (!$this->anonymized) {
87  $attrs['user_criteria'] = $user_criteria;
88  $attrs[$user_criteria] = $row[$user_criteria];
89  }
90  array_push($this->active_ids, $row['active_id']);
91  $this->xmlElement("row", $attrs);
92  }
93  $this->xmlEndTag("tst_active");
94  }
95 
96  protected function exportPassResult()
97  {
98  global $DIC;
99  $ilDB = $DIC['ilDB'];
100 
101  $query = "SELECT * FROM tst_pass_result WHERE " . $ilDB->in('active_fi', $this->active_ids, false, 'integer') . " ORDER BY active_fi, pass";
102  $result = $ilDB->query($query);
103  $this->xmlStartTag("tst_pass_result", null);
104  while ($row = $ilDB->fetchAssoc($result)) {
105  $attrs = array(
106  'active_fi' => $row['active_fi'],
107  'pass' => $row['pass'],
108  'points' => $row['points'],
109  'maxpoints' => $row['maxpoints'],
110  'questioncount' => $row['questioncount'],
111  'answeredquestions' => $row['answeredquestions'],
112  'workingtime' => $row['workingtime'],
113  'tstamp' => $row['tstamp']
114  );
115  $this->xmlElement("row", $attrs);
116  }
117  $this->xmlEndTag("tst_pass_result");
118  }
119 
120  protected function exportResultCache()
121  {
122  global $DIC;
123  $ilDB = $DIC['ilDB'];
124 
125  $query = "SELECT * FROM tst_result_cache WHERE " . $ilDB->in('active_fi', $this->active_ids, false, 'integer') . " ORDER BY active_fi";
126  $result = $ilDB->query($query);
127  $this->xmlStartTag("tst_result_cache", null);
128  while ($row = $ilDB->fetchAssoc($result)) {
129  $attrs = array(
130  'active_fi' => $row['active_fi'],
131  'pass' => $row['pass'],
132  'max_points' => $row['max_points'],
133  'reached_points' => $row['reached_points'],
134  'mark_short' => $row['mark_short'],
135  'mark_official' => $row['mark_official'],
136  'passed' => $row['passed'],
137  'failed' => $row['failed'],
138  'tstamp' => $row['tstamp']
139  );
140  $this->xmlElement("row", $attrs);
141  }
142  $this->xmlEndTag("tst_result_cache");
143  }
144 
145  protected function exportTestSequence()
146  {
147  global $DIC;
148  $ilDB = $DIC['ilDB'];
149 
150  $query = "SELECT * FROM tst_sequence WHERE " . $ilDB->in('active_fi', $this->active_ids, false, 'integer') . " ORDER BY active_fi, pass";
151  $result = $ilDB->query($query);
152  $this->xmlStartTag("tst_sequence", null);
153  while ($row = $ilDB->fetchAssoc($result)) {
154  $attrs = array(
155  'active_fi' => $row['active_fi'],
156  'pass' => $row['pass'],
157  'sequence' => $row['sequence'],
158  'postponed' => $row['postponed'],
159  'hidden' => $row['hidden'],
160  'tstamp' => $row['tstamp']
161  );
162  $this->xmlElement("row", $attrs);
163  }
164  $this->xmlEndTag("tst_sequence");
165  }
166 
167  protected function exportTestSolutions()
168  {
169  global $DIC;
170  $ilDB = $DIC['ilDB'];
171 
172  $query = "SELECT * FROM tst_solutions WHERE " . $ilDB->in('active_fi', $this->active_ids, false, 'integer') . " ORDER BY solution_id";
173  $result = $ilDB->query($query);
174  $this->xmlStartTag("tst_solutions", null);
175  while ($row = $ilDB->fetchAssoc($result)) {
176  $attrs = array(
177  'solution_id' => $row['solution_id'],
178  'active_fi' => $row['active_fi'],
179  'question_fi' => $row['question_fi'],
180  'points' => $row['points'],
181  'pass' => $row['pass'],
182  'value1' => $row['value1'],
183  'value2' => $row['value2'],
184  'tstamp' => $row['tstamp']
185  );
186  $this->xmlElement("row", $attrs);
187  }
188  $this->xmlEndTag("tst_solutions");
189  }
190 
191  protected function exportRandomTestQuestions()
192  {
193  global $DIC;
194  $ilDB = $DIC['ilDB'];
195 
196  $result = $ilDB->query("
197  SELECT * FROM tst_test_rnd_qst
198  WHERE {$ilDB->in('active_fi', $this->active_ids, false, 'integer')}
199  ORDER BY test_random_question_id
200  ");
201 
202  $this->xmlStartTag('tst_test_rnd_qst', null);
203  while ($row = $ilDB->fetchAssoc($result)) {
204  $attrs = array();
205 
206  foreach ($row as $field => $value) {
207  $attrs[$field] = $value;
208  }
209 
210  $this->xmlElement('row', $attrs);
211  }
212  $this->xmlEndTag('tst_test_rnd_qst');
213  }
214 
215 
216  protected function exportTestResults()
217  {
218  global $DIC;
219  $ilDB = $DIC['ilDB'];
220 
221  $query = "SELECT * FROM tst_test_result WHERE " . $ilDB->in('active_fi', $this->active_ids, false, 'integer') . " ORDER BY active_fi";
222  $result = $ilDB->query($query);
223  $this->xmlStartTag("tst_test_result", null);
224  while ($row = $ilDB->fetchAssoc($result)) {
225  $attrs = array(
226  'test_result_id' => $row['test_result_id'],
227  'active_fi' => $row['active_fi'],
228  'question_fi' => $row['question_fi'],
229  'points' => $row['points'],
230  'pass' => $row['pass'],
231  'manual' => $row['manual'],
232  'tstamp' => $row['tstamp']
233  );
234  $this->xmlElement("row", $attrs);
235  }
236  $this->xmlEndTag("tst_test_result");
237  }
238 
239  protected function exportTestTimes()
240  {
241  global $DIC;
242  $ilDB = $DIC['ilDB'];
243 
244  $query = "SELECT * FROM tst_times WHERE " . $ilDB->in('active_fi', $this->active_ids, false, 'integer') . " ORDER BY active_fi";
245  $result = $ilDB->query($query);
246  $this->xmlStartTag("tst_times", null);
247  while ($row = $ilDB->fetchAssoc($result)) {
248  $attrs = array(
249  'times_id' => $row['times_id'],
250  'active_fi' => $row['active_fi'],
251  'started' => $row['started'],
252  'finished' => $row['finished'],
253  'pass' => $row['pass'],
254  'tstamp' => $row['tstamp']
255  );
256  $this->xmlElement("row", $attrs);
257  }
258  $this->xmlEndTag("tst_times");
259  }
260 
261  public function getXML()
262  {
263  $this->active_ids = array();
264  $this->xmlHeader();
265  $attrs = array("version" => "4.1.0");
266  $this->xmlStartTag("results", $attrs);
267  $this->exportActiveIDs();
268 
270  $this->exportRandomTestQuestions();
271  }
272 
273  $this->exportPassResult();
274  $this->exportResultCache();
275  $this->exportTestSequence();
276  $this->exportTestSolutions();
277  $this->exportTestResults();
278  $this->exportTestTimes();
279  $this->xmlEndTag("results");
280  }
281 
282  public function xmlDumpMem($format = true)
283  {
284  $this->getXML();
285  return parent::xmlDumpMem($format);
286  }
287 
288  public function xmlDumpFile($file, $format = true)
289  {
290  $this->getXML();
291  return parent::xmlDumpFile($file, $format);
292  }
293 }
xmlDumpFile($file, $format=true)
xmlStartTag($tag, $attrs=null, $empty=false, $encode=true, $escape=true)
Writes a starttag.
setIncludeRandomTestQuestionsEnabled($includeRandomTestQuestionsEnabled)
__construct($test_id, $anonymized=false)
$format
Definition: metadata.php:141
static _getParticipantData($active_id)
Retrieves a participant name from active id.
$result
global $DIC
Definition: saml.php:7
XML writer class.
Test results to XML class.
xmlEndTag($tag)
Writes an endtag.
xmlHeader()
Writes xml header public.
$query
$row
xmlElement($tag, $attrs=null, $data=null, $encode=true, $escape=true)
Writes a basic element (no children, just textual content)
global $ilSetting
Definition: privfeed.php:17
global $ilDB