ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
ilQTIParser Class Reference
+ Inheritance diagram for ilQTIParser:
+ Collaboration diagram for ilQTIParser:

Public Member Functions

 isIgnoreItemsEnabled ()
 
 setIgnoreItemsEnabled ($ignoreItemsEnabled)
 
 __construct ($a_xml_file, $a_mode=IL_MO_PARSE_QTI, $a_qpl_id=0, $a_import_idents="")
 Constructor. More...
 
 getQuestionSetType ()
 
 setQuestionSetType ($questionSetType)
 
 setTestObject (&$a_tst_object)
 
 setParserMode ($a_mode=IL_MO_PARSE_QTI)
 
 setHandlers ($a_xml_parser)
 set event handler should be overwritten by inherited class @access private More...
 
 startParsing ()
 stores xml data in array More...
 
 getParent ($a_xml_parser)
 
 handlerBeginTag ($a_xml_parser, $a_name, $a_attribs)
 handler for begin of element More...
 
 handlerParseBeginTag ($a_xml_parser, $a_name, $a_attribs)
 handler for begin of element parser More...
 
 handlerEndTag ($a_xml_parser, $a_name)
 handler for end of element More...
 
 handlerParseEndTag ($a_xml_parser, $a_name)
 handler for end of element parser More...
 
 handlerCharacterData ($a_xml_parser, $a_data)
 handler for character data More...
 
 handlerParseCharacterData ($a_xml_parser, $a_data)
 handler for character data More...
 
 handlerVerifyBeginTag ($a_xml_parser, $a_name, $a_attribs)
 handler for begin of element verification More...
 
 handlerVerifyEndTag ($a_xml_parser, $a_name)
 handler for end of element verification More...
 
 handlerVerifyCharacterData ($a_xml_parser, $a_data)
 handler for character data verification More...
 
getFoundItems ()
 
 getImportMapping ()
 get array of new created questions for import id More...
 
 getQuestionIdMapping ()
 
 setXMLContent ($a_xml_content)
 
 openXMLFile ()
 open xml file More...
 
 getNumImportedItems ()
 
- Public Member Functions inherited from ilSaxParser
 __construct ($a_xml_file='', $throwException=false)
 Constructor setup ILIAS global object @access public. More...
 
 setXMLContent ($a_xml_content)
 
 getXMLContent ()
 
 getInputType ()
 
 startParsing ()
 stores xml data in array More...
 
 createParser ()
 create parser More...
 
 setOptions ($a_xml_parser)
 set parser options More...
 
 setHandlers ($a_xml_parser)
 set event handler should be overwritten by inherited class @access private More...
 
 openXMLFile ()
 open xml file More...
 
 parse ($a_xml_parser, $a_fp=null)
 parse xml file More...
 
 freeParser ($a_xml_parser)
 free xml parser handle More...
 
 setThrowException ($throwException)
 set error handling More...
 
- Public Member Functions inherited from PEAR
 __construct ($error_class=null)
 Constructor. More...
 
 _PEAR ()
 Destructor (the emulated type of...). More...
 
 registerShutdownFunc ($func, $args=array())
 Use this function to register a shutdown method for static classes. More...
 
 isError ($data, $code=null)
 Tell whether a value is a PEAR error. More...
 
 expectError ($code=' *')
 This method is used to tell which errors you expect to get. More...
 
 popExpect ()
 This method pops one element off the expected error codes stack. More...
 
 _checkDelExpect ($error_code)
 This method checks unsets an error code if available. More...
 
 delExpect ($error_code)
 This method deletes all occurences of the specified element from the expected error codes stack. More...
 
raiseError ($message=null, $code=null, $mode=null, $options=null, $userinfo=null, $error_class=null, $skipmsg=false)
 This method is a wrapper that returns an instance of the configured error class with this object's default error handling applied. More...
 
throwError ($message=null, $code=null, $userinfo=null)
 Simpler form of raiseError with fewer options. More...
 
 staticPushErrorHandling ($mode, $options=null)
 
 staticPopErrorHandling ()
 
 pushErrorHandling ($mode, $options=null)
 Push a new error handler on top of the error handler options stack. More...
 
 popErrorHandling ()
 Pop the last error handler used. More...
 
 loadExtension ($ext)
 OS independant PHP extension load. More...
 

Data Fields

 $lng
 
 $hasRootElement
 
 $path
 
 $items
 
 $item
 
 $depth
 
 $qti_element
 
 $in_presentation
 
 $in_response
 
 $render_type
 
 $response_label
 
 $material
 
 $matimage
 
 $response
 
 $resprocessing
 
 $outcomes
 
 $decvar
 
 $respcondition
 
 $setvar
 
 $displayfeedback
 
 $itemfeedback
 
 $flow_mat
 
 $flow
 
 $presentation
 
 $mattext
 
 $sametag
 
 $characterbuffer
 
 $conditionvar
 
 $parser_mode
 
 $import_idents
 
 $qpl_id
 
 $tst_id
 
 $tst_object
 
 $do_nothing
 
 $gap_index
 
 $assessments
 
 $assessment
 
 $assessmentcontrol
 
 $objectives
 
 $in_assessment = false
 
 $section
 
 $import_mapping
 
 $question_counter = 1
 
 $in_itemmetadata
 
 $in_objectives = false
 
 $founditems = array()
 
 $verifyroot = false
 
 $verifyqticomment = 0
 
 $verifymetadatafield = 0
 
 $verifyfieldlabel = 0
 
 $verifyfieldlabeltext = ""
 
 $verifyfieldentry = 0
 
 $verifyfieldentrytext = ""
 
- Data Fields inherited from ilSaxParser
 $input_type = null
 
 $xml_content = ''
 
 $ilias
 
 $lng
 
 $xml_file
 
 $throwException = false
 
- Data Fields inherited from PEAR
 $_debug = false
 
 $_default_error_mode = null
 
 $_default_error_options = null
 
 $_default_error_handler = ''
 
 $_error_class = 'PEAR_Error'
 
 $_expected_errors = array()
 

Protected Member Functions

 fetchNumericVersionFromVersionDateString ($versionDateString)
 
 fetchSourceNicFromItemIdent ($itemIdent)
 
 cleanInvalidXmlChars ($xmlContent)
 
 isMatImageAvailable ()
 
 virusDetected ($buffer)
 
- Protected Member Functions inherited from ilSaxParser
 handleError ($message, $code)
 use given error handler to handle error message or internal ilias error message handle More...
 

Protected Attributes

 $numImportedItems = 0
 
 $prensentation_material
 
 $in_prensentation_material = false
 
 $ignoreItemsEnabled = false
 
 $questionSetType = null
 

Additional Inherited Members

- Static Public Member Functions inherited from PEAR
static & getStaticProperty ($class, $var)
 If you have a class that's mostly/entirely static, and you need static properties, you can use this method to simulate them. More...
 
static setErrorHandling ($mode=null, $options=null)
 Sets how errors generated by this object should be handled. More...
 

Detailed Description

Definition at line 39 of file class.ilQTIParser.php.

Constructor & Destructor Documentation

◆ __construct()

ilQTIParser::__construct (   $a_xml_file,
  $a_mode = IL_MO_PARSE_QTI,
  $a_qpl_id = 0,
  $a_import_idents = "" 
)

Constructor.

Parameters
string$a_xml_filexml file
integer$a_modeParser mode IL_MO_PARSE_QTI | IL_MO_VERIFY_QTI @access public

Definition at line 146 of file class.ilQTIParser.php.

147 {
148 global $lng;
149
150 $this->setParserMode($a_mode);
151
152 parent::__construct($a_xml_file);
153
154 $this->qpl_id = $a_qpl_id;
155 $this->import_idents = array();
156 if (is_array($a_import_idents)) {
157 $this->import_idents = &$a_import_idents;
158 }
159
160 $this->lng = &$lng;
161 $this->hasRootElement = false;
162 $this->import_mapping = array();
163 $this->assessments = array();
164 $this->assessment = null;
165 $this->section = null;
166 $this->path = array();
167 $this->items = array();
168 $this->item = null;
169 $this->depth = array();
170 $this->do_nothing = false;
171 $this->qti_element = "";
172 $this->in_presentation = false;
173 $this->in_objectives = false;
174 $this->in_reponse = false;
175 $this->render_type = null;
176 $this->render_hotspot = null;
177 $this->response_label = null;
178 $this->material = null;
179 $this->response = null;
180 $this->assessmentcontrol = null;
181 $this->objectives = null;
182 $this->matimage = null;
183 $this->resprocessing = null;
184 $this->outcomes = null;
185 $this->decvar = null;
186 $this->respcondition = null;
187 $this->setvar = null;
188 $this->displayfeedback = null;
189 $this->itemfeedback = null;
190 $this->flow_mat = array();
191 $this->question_counter = 1;
192 $this->flow = 0;
193 $this->gap_index = 0;
194 $this->presentation = null;
195 $this->mattext = null;
196 $this->matapplet = null;
197 $this->sametag = false;
198 $this->in_assessment = false;
199 $this->characterbuffer = "";
200 $this->metadata = array("label" => "", "entry" => "");
201 }
setParserMode($a_mode=IL_MO_PARSE_QTI)
QTI assessment class.

References $lng, and setParserMode().

+ Here is the call graph for this function:

Member Function Documentation

◆ cleanInvalidXmlChars()

ilQTIParser::cleanInvalidXmlChars (   $xmlContent)
protected

Definition at line 1698 of file class.ilQTIParser.php.

1699 {
1700 // http://www.w3.org/TR/xml/#charsets
1701
1702 // DOES ACTUALLY KILL CONTENT, SHOULD CLEAN NON ESCAPED ILLEGAL CHARS, DON'T KNOW
1703 //$reg = '/[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD\u10000-\u10FFFF]/';
1704 //$xmlContent = preg_replace($reg, '', $xmlContent);
1705
1706 // remove illegal chars escaped to html entities
1707 $needles = array();
1708 for ($i = 0x00, $max = 0x08; $i <= $max; $i += 0x01) {
1709 $needles[] = "&#{$i};";
1710 }
1711 for ($i = 0x0b, $max = 0x0c; $i <= $max; $i += 0x01) {
1712 $needles[] = "&#{$i};";
1713 }
1714 for ($i = 0x0e, $max = 0x1f; $i <= $max; $i += 0x01) {
1715 $needles[] = "&#{$i};";
1716 }
1717 for ($i = 0xd800, $max = 0xdfff; $i <= $max; $i += 0x0001) {
1718 $needles[] = "&#{$i};";
1719 }
1720 for ($i = 0xfffe, $max = 0xffff; $i <= $max; $i += 0x0001) {
1721 $needles[] = "&#{$i};";
1722 }
1723 $reg = '/(' . implode('|', $needles) . ')/';
1724 $xmlContent = preg_replace($reg, '', $xmlContent);
1725
1726 return $xmlContent;
1727 }
$i
Definition: disco.tpl.php:19

References $i.

Referenced by openXMLFile(), and setXMLContent().

+ Here is the caller graph for this function:

◆ fetchNumericVersionFromVersionDateString()

ilQTIParser::fetchNumericVersionFromVersionDateString (   $versionDateString)
protected

Definition at line 1676 of file class.ilQTIParser.php.

1677 {
1678 $matches = null;
1679
1680 if (preg_match('/^(\d+\.\d+\.\d+) .*$/', $versionDateString, $matches)) {
1681 return $matches[1];
1682 }
1683
1684 return null;
1685 }

Referenced by handlerParseEndTag().

+ Here is the caller graph for this function:

◆ fetchSourceNicFromItemIdent()

ilQTIParser::fetchSourceNicFromItemIdent (   $itemIdent)
protected

Definition at line 1687 of file class.ilQTIParser.php.

1688 {
1689 $matches = null;
1690
1691 if (preg_match('/^il_(\d+?)_qst_\d+$/', $itemIdent, $matches)) {
1692 return $matches[1];
1693 }
1694
1695 return null;
1696 }

Referenced by handlerParseBeginTag().

+ Here is the caller graph for this function:

◆ getFoundItems()

& ilQTIParser::getFoundItems ( )

Definition at line 1625 of file class.ilQTIParser.php.

1626 {
1627 return $this->founditems;
1628 }

References $founditems.

◆ getImportMapping()

ilQTIParser::getImportMapping ( )

get array of new created questions for import id

Definition at line 1634 of file class.ilQTIParser.php.

1635 {
1636 if (!is_array($this->import_mapping)) {
1637 return array();
1638 } else {
1639 return $this->import_mapping;
1640 }
1641 }

References $import_mapping.

Referenced by getQuestionIdMapping().

+ Here is the caller graph for this function:

◆ getNumImportedItems()

ilQTIParser::getNumImportedItems ( )
Returns
int

Definition at line 1732 of file class.ilQTIParser.php.

1733 {
1735 }

References $numImportedItems.

◆ getParent()

ilQTIParser::getParent (   $a_xml_parser)

Definition at line 260 of file class.ilQTIParser.php.

261 {
262 if ($this->depth[$a_xml_parser] > 0) {
263 return $this->path[$this->depth[$a_xml_parser] - 1];
264 } else {
265 return "";
266 }
267 }

Referenced by handlerParseCharacterData(), and handlerParseEndTag().

+ Here is the caller graph for this function:

◆ getQuestionIdMapping()

ilQTIParser::getQuestionIdMapping ( )
Returns
array

Definition at line 1646 of file class.ilQTIParser.php.

1647 {
1648 $questionIdMapping = array();
1649
1650 foreach ((array) $this->getImportMapping() as $k => $v) {
1651 $oldQuestionId = substr($k, strpos($k, 'qst_') + strlen('qst_'));
1652 $newQuestionId = $v['test']; // yes, this is the new question id ^^
1653
1654 $questionIdMapping[$oldQuestionId] = $newQuestionId;
1655 }
1656
1657 return $questionIdMapping;
1658 }
getImportMapping()
get array of new created questions for import id

References getImportMapping().

+ Here is the call graph for this function:

◆ getQuestionSetType()

ilQTIParser::getQuestionSetType ( )
Returns
null

Definition at line 206 of file class.ilQTIParser.php.

207 {
209 }

References $questionSetType.

◆ handlerBeginTag()

ilQTIParser::handlerBeginTag (   $a_xml_parser,
  $a_name,
  $a_attribs 
)

handler for begin of element

Definition at line 272 of file class.ilQTIParser.php.

273 {
274 switch ($this->parser_mode) {
275 case IL_MO_PARSE_QTI:
276 $this->handlerParseBeginTag($a_xml_parser, $a_name, $a_attribs);
277 break;
278 case IL_MO_VERIFY_QTI:
279 $this->handlerVerifyBeginTag($a_xml_parser, $a_name, $a_attribs);
280 break;
281 }
282 }
const IL_MO_VERIFY_QTI
const IL_MO_PARSE_QTI
handlerVerifyBeginTag($a_xml_parser, $a_name, $a_attribs)
handler for begin of element verification
handlerParseBeginTag($a_xml_parser, $a_name, $a_attribs)
handler for begin of element parser

References handlerParseBeginTag(), handlerVerifyBeginTag(), IL_MO_PARSE_QTI, and IL_MO_VERIFY_QTI.

+ Here is the call graph for this function:

◆ handlerCharacterData()

ilQTIParser::handlerCharacterData (   $a_xml_parser,
  $a_data 
)

handler for character data

Definition at line 1309 of file class.ilQTIParser.php.

1310 {
1311 switch ($this->parser_mode) {
1312 case IL_MO_PARSE_QTI:
1313 $this->handlerParseCharacterData($a_xml_parser, $a_data);
1314 break;
1315 case IL_MO_VERIFY_QTI:
1316 $this->handlerVerifyCharacterData($a_xml_parser, $a_data);
1317 break;
1318 }
1319 }
handlerParseCharacterData($a_xml_parser, $a_data)
handler for character data
handlerVerifyCharacterData($a_xml_parser, $a_data)
handler for character data verification

References handlerParseCharacterData(), handlerVerifyCharacterData(), IL_MO_PARSE_QTI, and IL_MO_VERIFY_QTI.

+ Here is the call graph for this function:

◆ handlerEndTag()

ilQTIParser::handlerEndTag (   $a_xml_parser,
  $a_name 
)

handler for end of element

Definition at line 979 of file class.ilQTIParser.php.

980 {
981 switch ($this->parser_mode) {
982 case IL_MO_PARSE_QTI:
983 $this->handlerParseEndTag($a_xml_parser, $a_name);
984 break;
985 case IL_MO_VERIFY_QTI:
986 $this->handlerVerifyEndTag($a_xml_parser, $a_name);
987 break;
988 }
989 }
handlerVerifyEndTag($a_xml_parser, $a_name)
handler for end of element verification
handlerParseEndTag($a_xml_parser, $a_name)
handler for end of element parser

References handlerParseEndTag(), handlerVerifyEndTag(), IL_MO_PARSE_QTI, and IL_MO_VERIFY_QTI.

+ Here is the call graph for this function:

◆ handlerParseBeginTag()

ilQTIParser::handlerParseBeginTag (   $a_xml_parser,
  $a_name,
  $a_attribs 
)

handler for begin of element parser

Definition at line 287 of file class.ilQTIParser.php.

288 {
289 if ($this->do_nothing) {
290 return;
291 }
292 $this->sametag = false;
293 $this->characterbuffer = "";
294 $this->depth[$a_xml_parser]++;
295 $this->path[$this->depth[$a_xml_parser]] = strtolower($a_name);
296 $this->qti_element = $a_name;
297
298 switch (strtolower($a_name)) {
299 case "assessment":
300 include_once("./Services/QTI/classes/class.ilQTIAssessment.php");
301 $this->assessment = &$this->assessments[array_push($this->assessments, new ilQTIAssessment()) - 1];
302 $this->in_assessment = true;
303 if (is_array($a_attribs)) {
304 foreach ($a_attribs as $attribute => $value) {
305 switch (strtolower($attribute)) {
306 case "title":
307 $this->assessment->setTitle($value);
308 break;
309 case "ident":
310 $this->assessment->setIdent($value);
311 break;
312 }
313 }
314 }
315 break;
316 case "assessmentcontrol":
317 include_once("./Services/QTI/classes/class.ilQTIAssessmentcontrol.php");
318 $this->assessmentcontrol = new ilQTIAssessmentcontrol();
319 if (is_array($a_attribs)) {
320 foreach ($a_attribs as $attribute => $value) {
321 switch (strtolower($attribute)) {
322 case "solutionswitch":
323 $this->assessmentcontrol->setSolutionswitch($value);
324 break;
325 case "hintswitch":
326 $this->assessmentcontrol->setHintswitch($value);
327 break;
328 case "feedbackswitch":
329 $this->assessmentcontrol->setFeedbackswitch($value);
330 break;
331 }
332 }
333 }
334 break;
335 case "objectives":
336 include_once("./Services/QTI/classes/class.ilQTIObjectives.php");
337 $this->objectives = new ilQTIObjectives();
338 $this->in_objectives = true;
339 break;
340 case 'presentation_material':
341 require_once 'Services/QTI/classes/class.ilQTIPresentationMaterial.php';
342 $this->prensentation_material = new ilQTIPresentationMaterial();
343 $this->in_prensentation_material = true;
344 break;
345 case "section":
346 include_once("./Services/QTI/classes/class.ilQTISection.php");
347 $this->section = new ilQTISection();
348 break;
349 case "itemmetadata":
350 $this->in_itemmetadata = true;
351 break;
352 case "qtimetadatafield":
353 $this->metadata = array("label" => "", "entry" => "");
354 break;
355 case "flow":
356 include_once("./Services/QTI/classes/class.ilQTIFlow.php");
357 $this->flow++;
358 break;
359 case "flow_mat":
360 include_once("./Services/QTI/classes/class.ilQTIFlowMat.php");
361 array_push($this->flow_mat, new ilQTIFlowMat());
362 break;
363 case "itemfeedback":
364 include_once("./Services/QTI/classes/class.ilQTIItemfeedback.php");
365 $this->itemfeedback = new ilQTIItemfeedback();
366 if (is_array($a_attribs)) {
367 foreach ($a_attribs as $attribute => $value) {
368 switch (strtolower($attribute)) {
369 case "ident":
370 $this->itemfeedback->setIdent($value);
371 break;
372 case "view":
373 $this->itemfeedback->setView($value);
374 break;
375 }
376 }
377 }
378 break;
379 case "displayfeedback":
380 include_once("./Services/QTI/classes/class.ilQTIDisplayfeedback.php");
381 $this->displayfeedback = new ilQTIDisplayfeedback();
382 if (is_array($a_attribs)) {
383 foreach ($a_attribs as $attribute => $value) {
384 switch (strtolower($attribute)) {
385 case "feedbacktype":
386 $this->displayfeedback->setFeedbacktype($value);
387 break;
388 case "linkrefid":
389 $this->displayfeedback->setLinkrefid($value);
390 break;
391 }
392 }
393 }
394 break;
395 case "setvar":
396 include_once("./Services/QTI/classes/class.ilQTISetvar.php");
397 $this->setvar = new ilQTISetvar();
398 if (is_array($a_attribs)) {
399 foreach ($a_attribs as $attribute => $value) {
400 switch (strtolower($attribute)) {
401 case "action":
402 $this->setvar->setAction($value);
403 break;
404 case "varname":
405 $this->setvar->setVarname($value);
406 break;
407 }
408 }
409 }
410 break;
411 case "conditionvar":
412 include_once("./Services/QTI/classes/class.ilQTIConditionvar.php");
413 $this->conditionvar = new ilQTIConditionvar();
414 break;
415 case "not":
416 if ($this->conditionvar != null) {
417 $this->conditionvar->addNot();
418 }
419 break;
420 case "and":
421 if ($this->conditionvar != null) {
422 $this->conditionvar->addAnd();
423 }
424 break;
425 case "or":
426 if ($this->conditionvar != null) {
427 $this->conditionvar->addOr();
428 }
429 break;
430 case "varequal":
431 include_once("./Services/QTI/classes/class.ilQTIResponseVar.php");
432 $this->responsevar = new ilQTIResponseVar(RESPONSEVAR_EQUAL);
433 if (is_array($a_attribs)) {
434 foreach ($a_attribs as $attribute => $value) {
435 switch (strtolower($attribute)) {
436 case "case":
437 $this->responsevar->setCase($value);
438 break;
439 case "respident":
440 $this->responsevar->setRespident($value);
441 break;
442 case "index":
443 $this->responsevar->setIndex($value);
444 break;
445 }
446 }
447 }
448 break;
449 case "varlt":
450 include_once("./Services/QTI/classes/class.ilQTIResponseVar.php");
451 $this->responsevar = new ilQTIResponseVar(RESPONSEVAR_LT);
452 if (is_array($a_attribs)) {
453 foreach ($a_attribs as $attribute => $value) {
454 switch (strtolower($attribute)) {
455 case "respident":
456 $this->responsevar->setRespident($value);
457 break;
458 case "index":
459 $this->responsevar->setIndex($value);
460 break;
461 }
462 }
463 }
464 break;
465 case "varlte":
466 include_once("./Services/QTI/classes/class.ilQTIResponseVar.php");
467 $this->responsevar = new ilQTIResponseVar(RESPONSEVAR_LTE);
468 if (is_array($a_attribs)) {
469 foreach ($a_attribs as $attribute => $value) {
470 switch (strtolower($attribute)) {
471 case "respident":
472 $this->responsevar->setRespident($value);
473 break;
474 case "index":
475 $this->responsevar->setIndex($value);
476 break;
477 }
478 }
479 }
480 break;
481 case "vargt":
482 include_once("./Services/QTI/classes/class.ilQTIResponseVar.php");
483 $this->responsevar = new ilQTIResponseVar(RESPONSEVAR_GT);
484 if (is_array($a_attribs)) {
485 foreach ($a_attribs as $attribute => $value) {
486 switch (strtolower($attribute)) {
487 case "respident":
488 $this->responsevar->setRespident($value);
489 break;
490 case "index":
491 $this->responsevar->setIndex($value);
492 break;
493 }
494 }
495 }
496 break;
497 case "vargte":
498 include_once("./Services/QTI/classes/class.ilQTIResponseVar.php");
499 $this->responsevar = new ilQTIResponseVar(RESPONSEVAR_GTE);
500 if (is_array($a_attribs)) {
501 foreach ($a_attribs as $attribute => $value) {
502 switch (strtolower($attribute)) {
503 case "respident":
504 $this->responsevar->setRespident($value);
505 break;
506 case "index":
507 $this->responsevar->setIndex($value);
508 break;
509 }
510 }
511 }
512 break;
513 case "varsubset":
514 include_once("./Services/QTI/classes/class.ilQTIResponseVar.php");
515 $this->responsevar = new ilQTIResponseVar(RESPONSEVAR_SUBSET);
516 if (is_array($a_attribs)) {
517 foreach ($a_attribs as $attribute => $value) {
518 switch (strtolower($attribute)) {
519 case "respident":
520 $this->responsevar->setRespident($value);
521 break;
522 case "setmatch":
523 $this->responsevar->setSetmatch($value);
524 break;
525 case "index":
526 $this->responsevar->setIndex($value);
527 break;
528 }
529 }
530 }
531 break;
532 case "varinside":
533 include_once("./Services/QTI/classes/class.ilQTIResponseVar.php");
534 $this->responsevar = new ilQTIResponseVar(RESPONSEVAR_INSIDE);
535 if (is_array($a_attribs)) {
536 foreach ($a_attribs as $attribute => $value) {
537 switch (strtolower($attribute)) {
538 case "respident":
539 $this->responsevar->setRespident($value);
540 break;
541 case "areatype":
542 $this->responsevar->setAreatype($value);
543 break;
544 case "index":
545 $this->responsevar->setIndex($value);
546 break;
547 }
548 }
549 }
550 break;
551 case "varsubstring":
552 include_once("./Services/QTI/classes/class.ilQTIResponseVar.php");
553 $this->responsevar = new ilQTIResponseVar(RESPONSEVAR_SUBSTRING);
554 if (is_array($a_attribs)) {
555 foreach ($a_attribs as $attribute => $value) {
556 switch (strtolower($attribute)) {
557 case "case":
558 $this->responsevar->setCase($value);
559 break;
560 case "respident":
561 $this->responsevar->setRespident($value);
562 break;
563 case "index":
564 $this->responsevar->setIndex($value);
565 break;
566 }
567 }
568 }
569 break;
570 case "respcondition":
571 include_once("./Services/QTI/classes/class.ilQTIRespcondition.php");
572 $this->respcondition = new ilQTIRespcondition();
573 if (is_array($a_attribs)) {
574 foreach ($a_attribs as $attribute => $value) {
575 switch (strtolower($attribute)) {
576 case "continue":
577 $this->respcondition->setContinue($value);
578 break;
579 case "title":
580 $this->respcondition->setTitle($value);
581 break;
582 }
583 }
584 }
585 break;
586 case "outcomes":
587 include_once("./Services/QTI/classes/class.ilQTIOutcomes.php");
588 $this->outcomes = new ilQTIOutcomes();
589 break;
590 case "decvar":
591 include_once("./Services/QTI/classes/class.ilQTIDecvar.php");
592 $this->decvar = new ilQTIDecvar();
593 if (is_array($a_attribs)) {
594 foreach ($a_attribs as $attribute => $value) {
595 switch (strtolower($attribute)) {
596 case "varname":
597 $this->decvar->setVarname($value);
598 break;
599 case "vartype":
600 $this->decvar->setVartype($value);
601 break;
602 case "defaultval":
603 $this->decvar->setDefaultval($value);
604 break;
605 case "minvalue":
606 $this->decvar->setMinvalue($value);
607 break;
608 case "maxvalue":
609 $this->decvar->setMaxvalue($value);
610 break;
611 case "members":
612 $this->decvar->setMembers($value);
613 break;
614 case "cutvalue":
615 $this->decvar->setCutvalue($value);
616 break;
617 }
618 }
619 }
620 break;
621 case "matimage":
622 include_once("./Services/QTI/classes/class.ilQTIMatimage.php");
623 $this->matimage = new ilQTIMatimage();
624 if (is_array($a_attribs)) {
625 foreach ($a_attribs as $attribute => $value) {
626 switch (strtolower($attribute)) {
627 case "imagtype":
628 $this->matimage->setImagetype($value);
629 break;
630 case "label":
631 $this->matimage->setLabel($value);
632 break;
633 case "height":
634 $this->matimage->setHeight($value);
635 break;
636 case "width":
637 $this->matimage->setWidth($value);
638 break;
639 case "uri":
640 $this->matimage->setUri($value);
641 break;
642 case "embedded":
643 $this->matimage->setEmbedded($value);
644 break;
645 case "x0":
646 $this->matimage->setX0($value);
647 break;
648 case "y0":
649 $this->matimage->setY0($value);
650 break;
651 case "entityref":
652 $this->matimage->setEntityref($value);
653 break;
654 }
655 }
656 }
657 if (!$this->matimage->getEmbedded() && strlen($this->matimage->getUri())) {
658 $this->matimage->setContent(@file_get_contents(dirname($this->xml_file) . '/' . $this->matimage->getUri()));
659 }
660 break;
661 case "material":
662 include_once("./Services/QTI/classes/class.ilQTIMaterial.php");
663 $this->material = new ilQTIMaterial();
664 $this->material->setFlow($this->flow);
665 if (is_array($a_attribs)) {
666 foreach ($a_attribs as $attribute => $value) {
667 switch (strtolower($attribute)) {
668 case "label":
669 $this->material->setLabel($value);
670 break;
671 }
672 }
673 }
674 break;
675 case "mattext":
676 include_once("./Services/QTI/classes/class.ilQTIMattext.php");
677 $this->mattext = new ilQTIMattext();
678 if (is_array($a_attribs)) {
679 foreach ($a_attribs as $attribute => $value) {
680 switch (strtolower($attribute)) {
681 case "texttype":
682 $this->mattext->setTexttype($value);
683 break;
684 case "label":
685 $this->mattext->setLabel($value);
686 break;
687 case "charset":
688 $this->mattext->setCharset($value);
689 break;
690 case "uri":
691 $this->mattext->setUri($value);
692 break;
693 case "xml:space":
694 $this->mattext->setXmlspace($value);
695 break;
696 case "xml:lang":
697 $this->mattext->setXmllang($value);
698 break;
699 case "entityref":
700 $this->mattext->setEntityref($value);
701 break;
702 case "height":
703 $this->mattext->setHeight($value);
704 break;
705 case "width":
706 $this->mattext->setWidth($value);
707 break;
708 case "x0":
709 $this->mattext->setX0($value);
710 break;
711 case "y0":
712 $this->mattext->setY0($value);
713 break;
714 }
715 }
716 }
717 break;
718 case "matapplet":
719 include_once("./Services/QTI/classes/class.ilQTIMatapplet.php");
720 $this->matapplet = new ilQTIMatapplet();
721 if (is_array($a_attribs)) {
722 foreach ($a_attribs as $attribute => $value) {
723 switch (strtolower($attribute)) {
724 case "label":
725 $this->matapplet->setLabel($value);
726 break;
727 case "uri":
728 $this->matapplet->setUri($value);
729 break;
730 case "y0":
731 $this->matapplet->setY0($value);
732 break;
733 case "height":
734 $this->matapplet->setHeight($value);
735 break;
736 case "width":
737 $this->matapplet->setWidth($value);
738 break;
739 case "x0":
740 $this->matapplet->setX0($value);
741 break;
742 case "embedded":
743 $this->matapplet->setEmbedded($value);
744 break;
745 case "entityref":
746 $this->matapplet->setEntityref($value);
747 break;
748 }
749 }
750 }
751 break;
752 case "questestinterop":
753 $this->hasRootElement = true;
754 break;
755 case "qticomment":
756 break;
757 case "objectbank":
758 // not implemented yet
759 break;
760 case "section":
761 if ($this->assessment != null) {
762 $this->assessment->addSection($this->section);
763 }
764 $this->section = null;
765 break;
766 case "presentation":
767 $this->in_presentation = true;
768 include_once("./Services/QTI/classes/class.ilQTIPresentation.php");
769 $this->presentation = new ilQTIPresentation();
770 break;
771 case "response_label":
772 if ($this->render_type != null) {
773 include_once("./Services/QTI/classes/class.ilQTIResponseLabel.php");
774 $this->response_label = new ilQTIResponseLabel();
775 foreach ($a_attribs as $attribute => $value) {
776 switch (strtolower($attribute)) {
777 case "rshuffle":
778 $this->response_label->setRshuffle($value);
779 break;
780 case "rarea":
781 $this->response_label->setRarea($value);
782 break;
783 case "rrange":
784 $this->response_label->setRrange($value);
785 break;
786 case "labelrefid":
787 $this->response_label->setLabelrefid($value);
788 break;
789 case "ident":
790 $this->response_label->setIdent($value);
791 break;
792 case "match_group":
793 $this->response_label->setMatchGroup($value);
794 break;
795 case "match_max":
796 $this->response_label->setMatchMax($value);
797 break;
798 }
799 }
800 }
801 break;
802 case "render_choice":
803 if ($this->in_response) {
804 include_once("./Services/QTI/classes/class.ilQTIRenderChoice.php");
805 $this->render_type = new ilQTIRenderChoice();
806 foreach ($a_attribs as $attribute => $value) {
807 switch (strtolower($attribute)) {
808 case "shuffle":
809 $this->render_type->setShuffle($value);
810 break;
811 case 'minnumber':
812 $this->render_type->setMinnumber($value);
813 break;
814 case 'maxnumber':
815 $this->render_type->setMaxnumber($value);
816 break;
817 }
818 }
819 }
820 break;
821 case "render_hotspot":
822 if ($this->in_response) {
823 include_once("./Services/QTI/classes/class.ilQTIRenderHotspot.php");
824 $this->render_type = new ilQTIRenderHotspot();
825 foreach ($a_attribs as $attribute => $value) {
826 switch (strtolower($attribute)) {
827 case "showdraw":
828 $this->render_type->setShuffle($value);
829 break;
830 case "minnumber":
831 $this->render_type->setMinnumber($value);
832 break;
833 case "maxnumber":
834 $this->render_type->setMaxnumber($value);
835 break;
836 }
837 }
838 }
839 break;
840 case "render_fib":
841 if ($this->in_response) {
842 include_once("./Services/QTI/classes/class.ilQTIRenderFib.php");
843 $this->render_type = new ilQTIRenderFib();
844 foreach ($a_attribs as $attribute => $value) {
845 switch (strtolower($attribute)) {
846 case "encoding":
847 $this->render_type->setEncoding($value);
848 break;
849 case "fibtype":
850 $this->render_type->setFibtype($value);
851 break;
852 case "rows":
853 $this->render_type->setRows($value);
854 break;
855 case "maxchars":
856 $this->render_type->setMaxchars($value);
857 break;
858 case "prompt":
859 $this->render_type->setPrompt($value);
860 break;
861 case "columns":
862 $this->render_type->setColumns($value);
863 break;
864 case "charset":
865 $this->render_type->setCharset($value);
866 break;
867 case "maxnumber":
868 $this->render_type->setMaxnumber($value);
869 break;
870 case "minnumber":
871 $this->render_type->setMinnumber($value);
872 break;
873 }
874 }
875 }
876 break;
877 case "response_lid":
878 // Ordering Terms and Definitions or
879 // Ordering Terms and Pictures or
880 // Multiple choice single response or
881 // Multiple choice multiple response
882 case "response_xy":
883 // Imagemap question
884 case "response_str":
885 // Close question
886 case "response_num":
887 case "response_grp":
888 // Matching terms and definitions
889 // Matching terms and images
890 include_once "./Services/QTI/classes/class.ilQTIResponse.php";
891 switch (strtolower($a_name)) {
892 case "response_lid":
893 $response_type = RT_RESPONSE_LID;
894 break;
895 case "response_xy":
896 $response_type = RT_RESPONSE_XY;
897 break;
898 case "response_str":
899 $response_type = RT_RESPONSE_STR;
900 break;
901 case "response_num":
902 $response_type = RT_RESPONSE_NUM;
903 break;
904 case "response_grp":
905 $response_type = RT_RESPONSE_GRP;
906 break;
907 }
908 $this->in_response = true;
909 $this->response = new ilQTIResponse($response_type);
910 $this->response->setFlow($this->flow);
911 if (is_array($a_attribs)) {
912 foreach ($a_attribs as $attribute => $value) {
913 switch (strtolower($attribute)) {
914 case "ident":
915 $this->response->setIdent($value);
916 break;
917 case "rtiming":
918 $this->response->setRTiming($value);
919 break;
920 case "rcardinality":
921 $this->response->setRCardinality($value);
922 break;
923 case "numtype":
924 $this->response->setNumtype($value);
925 break;
926 }
927 }
928 }
929 break;
930 case "item":
931 include_once("./Services/QTI/classes/class.ilQTIItem.php");
932 $this->gap_index = 0;
933 $this->item = &$this->items[array_push($this->items, new ilQTIItem()) - 1];
934 if (is_array($a_attribs)) {
935 foreach ($a_attribs as $attribute => $value) {
936 switch (strtolower($attribute)) {
937 case "ident":
938 $this->item->setIdent($value);
939 $this->item->setIliasSourceNic(
940 $this->fetchSourceNicFromItemIdent($value)
941 );
942 if ($this->isIgnoreItemsEnabled()) {
943 $this->do_nothing = true;
944 } elseif (count($this->import_idents) > 0) {
945 if (!in_array($value, $this->import_idents)) {
946 $this->do_nothing = true;
947 }
948 }
949 break;
950 case "title":
951 $this->item->setTitle($value);
952 break;
953 case "maxattempts":
954 $this->item->setMaxattempts($value);
955 break;
956 }
957 }
958 }
959 break;
960 case "resprocessing":
961 include_once("./Services/QTI/classes/class.ilQTIResprocessing.php");
962 $this->resprocessing = new ilQTIResprocessing();
963 if (is_array($a_attribs)) {
964 foreach ($a_attribs as $attribute => $value) {
965 switch (strtolower($attribute)) {
966 case "scoremodel":
967 $this->resprocessing->setScoremodel($value);
968 break;
969 }
970 }
971 }
972 break;
973 }
974 }
const RESPONSEVAR_GTE
const RESPONSEVAR_LT
const RESPONSEVAR_EQUAL
const RESPONSEVAR_LTE
const RESPONSEVAR_INSIDE
const RESPONSEVAR_SUBSTRING
const RESPONSEVAR_SUBSET
const RESPONSEVAR_GT
const RT_RESPONSE_LID
const RT_RESPONSE_XY
const RT_RESPONSE_STR
const RT_RESPONSE_NUM
const RT_RESPONSE_GRP
fetchSourceNicFromItemIdent($itemIdent)
Class ilQTIPresentationMaterial.

References fetchSourceNicFromItemIdent(), isIgnoreItemsEnabled(), RESPONSEVAR_EQUAL, RESPONSEVAR_GT, RESPONSEVAR_GTE, RESPONSEVAR_INSIDE, RESPONSEVAR_LT, RESPONSEVAR_LTE, RESPONSEVAR_SUBSET, RESPONSEVAR_SUBSTRING, RT_RESPONSE_GRP, RT_RESPONSE_LID, RT_RESPONSE_NUM, RT_RESPONSE_STR, and RT_RESPONSE_XY.

Referenced by handlerBeginTag().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handlerParseCharacterData()

ilQTIParser::handlerParseCharacterData (   $a_xml_parser,
  $a_data 
)

handler for character data

Definition at line 1324 of file class.ilQTIParser.php.

1325 {
1326 if ($this->do_nothing) {
1327 return;
1328 }
1329 $this->characterbuffer .= $a_data;
1330 $a_data = $this->characterbuffer;
1331 switch ($this->qti_element) {
1332 case "fieldlabel":
1333 $this->metadata["label"] = $a_data;
1334 break;
1335 case "fieldentry":
1336 $this->metadata["entry"] = $a_data;
1337 break;
1338 case "response_label":
1339 if ($this->response_label != null) {
1340 $this->response_label->setContent($a_data);
1341 }
1342 break;
1343 case "setvar":
1344 if ($this->setvar != null) {
1345 $this->setvar->setContent($a_data);
1346 }
1347 break;
1348 case "displayfeedback":
1349 if ($this->displayfeedback != null) {
1350 $this->displayfeedback->setContent($a_data);
1351 }
1352 break;
1353 case "varequal":
1354 case "varlt":
1355 case "varlte":
1356 case "vargt":
1357 case "vargte":
1358 case "varsubset":
1359 case "varinside":
1360 case "varsubstring":
1361 if ($this->responsevar != null) {
1362 $this->responsevar->setContent($a_data);
1363 }
1364 break;
1365 case "decvar":
1366 if (strlen($a_data)) {
1367 if ($this->decvar != null) {
1368 $this->decvar->setContent($a_data);
1369 }
1370 }
1371 break;
1372 case "mattext":
1373 if ($this->mattext != null) {
1374 $this->mattext->setContent($a_data);
1375 }
1376 break;
1377 case "matapplet":
1378 if ($this->matapplet != null) {
1379 $this->matapplet->setContent($a_data);
1380 }
1381 break;
1382 case "matimage":
1383 if ($this->matimage != null) {
1384 $this->matimage->setContent($a_data);
1385 }
1386 break;
1387 case "duration":
1388 switch ($this->getParent($a_xml_parser)) {
1389 case "assessment":
1390 // to be done
1391 break;
1392 case "section":
1393 // to be done
1394 break;
1395 case "item":
1396 $this->item->setDuration($a_data);
1397 break;
1398 }
1399 break;
1400 case "qticomment":
1401 switch ($this->getParent($a_xml_parser)) {
1402 case "item":
1403 $this->item->setComment($a_data);
1404 break;
1405 case "assessment":
1406 $this->assessment->setComment($a_data);
1407 break;
1408 default:
1409 break;
1410 }
1411 break;
1412 }
1413 $this->sametag = true;
1414 }
getParent($a_xml_parser)

References $characterbuffer, and getParent().

Referenced by handlerCharacterData().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handlerParseEndTag()

ilQTIParser::handlerParseEndTag (   $a_xml_parser,
  $a_name 
)

handler for end of element parser

Definition at line 994 of file class.ilQTIParser.php.

995 {
996 if (($this->do_nothing) && (strcmp(strtolower($a_name), "item") != 0)) {
997 return;
998 }
999 switch (strtolower($a_name)) {
1000 case "assessment":
1001 if (is_object($this->tst_object)) {
1002 $this->tst_object->fromXML($this->assessment);
1003 }
1004 $this->in_assessment = false;
1005 break;
1006 case "assessmentcontrol":
1007 $this->assessment->addAssessmentcontrol($this->assessmentcontrol);
1008 $this->assessmentcontrol = null;
1009 break;
1010 case "objectives":
1011 if (strcmp(strtolower($this->getParent($a_xml_parser)), "assessment") == 0) {
1012 $this->assessment->addObjectives($this->objectives);
1013 }
1014 $this->in_objectives = false;
1015 break;
1016 case 'presentation_material':
1017 $this->assessment->setPresentationMaterial($this->prensentation_material);
1018 $this->in_prensentation_material = false;
1019 break;
1020 case "itemmetadata":
1021 $this->in_itemmetadata = false;
1022 break;
1023 case "qtimetadatafield":
1024 // handle only specific ILIAS metadata
1025 switch ($this->metadata["label"]) {
1026 case "ILIAS_VERSION":
1027 if ($this->item != null) {
1028 $this->item->setIliasSourceVersion(
1029 $this->fetchNumericVersionFromVersionDateString($this->metadata["entry"])
1030 );
1031 }
1032 break;
1033 case "QUESTIONTYPE":
1034 if ($this->item != null) {
1035 $this->item->setQuestiontype($this->metadata["entry"]);
1036 }
1037 break;
1038 case "AUTHOR":
1039 if ($this->item != null) {
1040 $this->item->setAuthor($this->metadata["entry"]);
1041 }
1042 // no break
1043 default:
1044 if ($this->item != null) {
1045 $this->item->addMetadata($this->metadata);
1046 }
1047 break;
1048 }
1049 if ($this->in_assessment) {
1050 $this->assessment->addQtiMetadata($this->metadata);
1051 }
1052 $this->metadata = array("label" => "", "entry" => "");
1053 break;
1054 case "flow":
1055 $this->flow--;
1056 break;
1057 case "flow_mat":
1058 if (count($this->flow_mat)) {
1059 $flow_mat = array_pop($this->flow_mat);
1060 if (count($this->flow_mat)) {
1061 $this->flow_mat[count($this->flow_mat) - 1]->addFlow_mat($flow_mat);
1062 } elseif ($this->in_prensentation_material) {
1063 $this->prensentation_material->addFlowMat($flow_mat);
1064 } elseif ($this->itemfeedback != null) {
1065 $this->itemfeedback->addFlow_mat($flow_mat);
1066 } elseif ($this->response_label != null) {
1067 $this->response_label->addFlow_mat($flow_mat);
1068 }
1069 }
1070 break;
1071 case "itemfeedback":
1072 if ($this->item != null) {
1073 if ($this->itemfeedback != null) {
1074 $this->item->addItemfeedback($this->itemfeedback);
1075 }
1076 }
1077 $this->itemfeedback = null;
1078 break;
1079 case "displayfeedback":
1080 if ($this->respcondition != null) {
1081 if ($this->displayfeedback != null) {
1082 $this->respcondition->addDisplayfeedback($this->displayfeedback);
1083 }
1084 }
1085 $this->displayfeedback = null;
1086 break;
1087 case "setvar":
1088 if ($this->respcondition != null) {
1089 if ($this->setvar != null) {
1090 $this->respcondition->addSetvar($this->setvar);
1091 }
1092 }
1093 $this->setvar = null;
1094 break;
1095 case "conditionvar":
1096 if ($this->respcondition != null) {
1097 $this->respcondition->setConditionvar($this->conditionvar);
1098 }
1099 $this->conditionvar = null;
1100 break;
1101 case "varequal":
1102 case "varlt":
1103 case "varlte":
1104 case "vargt":
1105 case "vargte":
1106 case "varsubset":
1107 case "varinside":
1108 case "varsubstring":
1109 if ($this->conditionvar != null) {
1110 if ($this->responsevar != null) {
1111 $this->conditionvar->addResponseVar($this->responsevar);
1112 }
1113 }
1114 $this->responsevar = null;
1115 break;
1116 case "respcondition":
1117 if ($this->resprocessing != null) {
1118 $this->resprocessing->addRespcondition($this->respcondition);
1119 }
1120 $this->respcondition = null;
1121 break;
1122 case "outcomes":
1123 if ($this->resprocessing != null) {
1124 $this->resprocessing->setOutcomes($this->outcomes);
1125 }
1126 $this->outcomes = null;
1127 break;
1128 case "decvar":
1129 if ($this->outcomes != null) {
1130 $this->outcomes->addDecvar($this->decvar);
1131 }
1132 $this->decvar = null;
1133 break;
1134 case "presentation":
1135 $this->in_presentation = false;
1136 if ($this->presentation != null) {
1137 if ($this->item != null) {
1138 $this->item->setPresentation($this->presentation);
1139 }
1140 }
1141 $this->presentation = null;
1142 break;
1143 case "response_label":
1144 if ($this->render_type != null) {
1145 $this->render_type->addResponseLabel($this->response_label);
1146 $this->response_label = null;
1147 }
1148 break;
1149 case "render_choice":
1150 case "render_hotspot":
1151 case "render_fib":
1152 if ($this->in_response) {
1153 if ($this->response != null) {
1154 if ($this->render_type != null) {
1155 $this->response->setRenderType($this->render_type);
1156 $this->render_type = null;
1157 }
1158 }
1159 }
1160 break;
1161 case "response_lid":
1162 case "response_xy":
1163 case "response_str":
1164 case "response_num":
1165 case "response_grp":
1166 $this->gap_index++;
1167 if ($this->presentation != null) {
1168 if ($this->response != null) {
1169 $this->presentation->addResponse($this->response);
1170 if ($this->item != null) {
1171 $this->item->addPresentationitem($this->response);
1172 }
1173 }
1174 }
1175 $this->response = null;
1176 $this->in_response = false;
1177 break;
1178 case "item":
1179 if ($this->do_nothing) {
1180 $this->do_nothing = false;
1181 return;
1182 }
1183 if (strlen($this->item->getQuestionType())) {
1184 // this is an ILIAS QTI question
1185 } else {
1186 // this is a QTI question which wasn't generated by ILIAS
1187 }
1188 global $ilDB;
1189 global $ilUser;
1190 // save the item directly to save memory
1191 // the database id's of the created items are exported. if the import fails
1192 // ILIAS can delete the already imported items
1193
1194 // problems: the object id of the parent questionpool is not yet known. must be set later
1195 // the complete flag must be calculated?
1196 $qt = $this->item->determineQuestionType();
1197 $presentation = $this->item->getPresentation();
1198
1200 return;
1201 }
1202
1203 include_once "./Modules/TestQuestionPool/classes/class.assQuestion.php";
1205 $question = new $qt();
1206 $fbt = str_replace('ass', 'ilAss', $qt) . 'Feedback';
1207 $question->feedbackOBJ = new $fbt(
1208 $question,
1209 $GLOBALS['ilCtrl'],
1210 $GLOBALS['ilDB'],
1211 $GLOBALS['lng']
1212 );
1213 $question->fromXML($this->item, $this->qpl_id, $this->tst_id, $this->tst_object, $this->question_counter, $this->import_mapping);
1214 $this->numImportedItems++;
1215 break;
1216 case "material":
1217 if ($this->material) {
1218 $mat = $this->material->getMaterial(0);
1219 if ((strcmp($mat["type"], "mattext") == 0) && (strcmp($mat["material"]->getLabel(), "suggested_solution") == 0)) {
1220 $this->item->addSuggestedSolution($mat["material"], $this->gap_index);
1221 }
1222 if ($this->in_objectives) {
1223 $this->objectives->addMaterial($this->material);
1224 } elseif (($this->render_type != null) && (strcmp(strtolower($this->getParent($a_xml_parser)), "render_hotspot") == 0)) {
1225 $this->render_type->addMaterial($this->material);
1226 } elseif (count($this->flow_mat) && (strcmp(strtolower($this->getParent($a_xml_parser)), "flow_mat") == 0)) {
1227 $this->flow_mat[count($this->flow_mat) - 1]->addMaterial($this->material);
1228 } elseif ($this->itemfeedback != null) {
1229 $this->itemfeedback->addMaterial($this->material);
1230 } elseif ($this->response_label != null) {
1231 $this->response_label->addMaterial($this->material);
1232 } elseif ($this->response != null) {
1233 if ($this->response->hasRendering()) {
1234 $this->response->setMaterial2($this->material);
1235 } else {
1236 $this->response->setMaterial1($this->material);
1237 }
1238 } elseif (($this->in_presentation) && (!$this->in_response)) {
1239 if (!is_object($this->item->getQuestiontext())) {
1240 $this->item->setQuestiontext($this->material);
1241 }
1242 $this->presentation->addMaterial($this->material);
1243 } elseif ($this->presentation != null) {
1244 $this->presentation->addMaterial($this->material);
1245 if ($this->item != null) {
1246 $this->item->addPresentationitem($this->material);
1247 }
1248 }
1249 }
1250 $this->material = null;
1251 break;
1252 case "matimage":
1253
1254 if (!$this->isMatImageAvailable()) {
1255 break;
1256 }
1257
1258 if ($this->virusDetected($this->matimage->getRawContent())) {
1259 break;
1260 }
1261
1262 require_once 'Services/QTI/classes/class.ilQtiMatImageSecurity.php';
1263 try {
1264 $matImageSecurity = new ilQtiMatImageSecurity($this->matimage);
1265 $matImageSecurity->sanitizeLabel();
1266 } catch (Exception $e) {
1267 break;
1268 }
1269 if (!$matImageSecurity->validate()) {
1270 break;
1271 }
1272
1273 $this->material->addMatimage($this->matimage);
1274 $this->matimage = null;
1275 break;
1276
1277 // add support for matbreak element
1278 case "matbreak":
1279 $this->mattext = new ilQTIMattext();
1280 $this->mattext->setContent('<br />');
1281 $this->material->addMattext($this->mattext);
1282 $this->mattext = null;
1283 break;
1284 case "resprocessing":
1285 if ($this->item != null) {
1286 $this->item->addResprocessing($this->resprocessing);
1287 }
1288 $this->resprocessing = null;
1289 break;
1290 case "mattext":
1291 if ($this->material != null) {
1292 $this->material->addMattext($this->mattext);
1293 }
1294 $this->mattext = null;
1295 break;
1296 case "matapplet":
1297 if ($this->material != null) {
1298 $this->material->addMatapplet($this->matapplet);
1299 }
1300 $this->matapplet = null;
1301 break;
1302 }
1303 $this->depth[$a_xml_parser]--;
1304 }
static _includeClass($question_type, $gui=0)
Include the php class file for a given question type.
static isImportable($questionTypeTag)
fetchNumericVersionFromVersionDateString($versionDateString)
virusDetected($buffer)
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
global $ilDB
$ilUser
Definition: imgupload.php:18

References $flow_mat, $GLOBALS, $ilDB, $ilUser, $presentation, assQuestion\_includeClass(), fetchNumericVersionFromVersionDateString(), getParent(), ilAssQuestionTypeList\isImportable(), isMatImageAvailable(), and virusDetected().

Referenced by handlerEndTag().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handlerVerifyBeginTag()

ilQTIParser::handlerVerifyBeginTag (   $a_xml_parser,
  $a_name,
  $a_attribs 
)

handler for begin of element verification

Definition at line 1419 of file class.ilQTIParser.php.

1420 {
1421 $this->qti_element = $a_name;
1422
1423 switch (strtolower($a_name)) {
1424 case "assessment":
1425 include_once("./Services/QTI/classes/class.ilQTIAssessment.php");
1426 $this->assessment = &$this->assessments[array_push($this->assessments, new ilQTIAssessment()) - 1];
1427 $this->in_assessment = true;
1428 if (is_array($a_attribs)) {
1429 foreach ($a_attribs as $attribute => $value) {
1430 switch (strtolower($attribute)) {
1431 case "title":
1432 $this->assessment->setTitle($value);
1433 break;
1434 case "ident":
1435 $this->assessment->setIdent($value);
1436 break;
1437 }
1438 }
1439 }
1440 break;
1441 case "questestinterop":
1442 $this->verifyroot = true;
1443 break;
1444 case "qtimetadatafield":
1445 $this->metadata = array("label" => "", "entry" => "");
1446 $this->verifymetadatafield = 1;
1447 break;
1448 case "fieldlabel":
1449 $this->verifyfieldlabeltext = "";
1450 if ($this->verifymetadatafield == 1) {
1451 $this->verifyfieldlabel = 1;
1452 }
1453 break;
1454 case "fieldentry":
1455 $this->verifyfieldentrytext = "";
1456 if ($this->verifymetadatafield == 1) {
1457 $this->verifyfieldentry = 1;
1458 }
1459 break;
1460 case "item":
1461 $title = "";
1462 if (is_array($a_attribs)) {
1463 foreach ($a_attribs as $attribute => $value) {
1464 switch (strtolower($attribute)) {
1465 case "title":
1466 $title = $value;
1467 break;
1468 }
1469 }
1470 }
1471 array_push($this->founditems, array("title" => "$title", "type" => "", "ident" => $a_attribs["ident"]));
1472 break;
1473 case "response_lid":
1474 if (strlen($this->founditems[count($this->founditems) - 1]["type"]) == 0) {
1475 // test for non ILIAS generated question types
1476 if (is_array($a_attribs)) {
1477 foreach ($a_attribs as $attribute => $value) {
1478 switch (strtolower($attribute)) {
1479 case "rcardinality":
1480 include_once "./Services/QTI/classes/class.ilQTIItem.php";
1481 switch (strtolower($value)) {
1482 case "single":
1483 $this->founditems[count($this->founditems) - 1]["type"] = QT_MULTIPLE_CHOICE_SR;
1484 break;
1485 case "multiple":
1486 $this->founditems[count($this->founditems) - 1]["type"] = QT_MULTIPLE_CHOICE_MR;
1487 break;
1488 case "ordered":
1489 $this->founditems[count($this->founditems) - 1]["type"] = QT_ORDERING;
1490 break;
1491 }
1492 break;
1493 }
1494 }
1495 }
1496 }
1497 break;
1498 case "response_str":
1499 if (strlen($this->founditems[count($this->founditems) - 1]["type"]) == 0) {
1500 // test for non ILIAS generated question types
1501 if (is_array($a_attribs)) {
1502 foreach ($a_attribs as $attribute => $value) {
1503 switch (strtolower($attribute)) {
1504 case "rcardinality":
1505 include_once "./Services/QTI/classes/class.ilQTIItem.php";
1506 switch (strtolower($value)) {
1507 case "single":
1508 $this->founditems[count($this->founditems) - 1]["type"] = QT_CLOZE;
1509 break;
1510 case "ordered":
1511 $this->founditems[count($this->founditems) - 1]["type"] = QT_TEXT;
1512 break;
1513 }
1514 break;
1515 }
1516 }
1517 }
1518 }
1519 break;
1520 case "response_xy":
1521 if (strlen($this->founditems[count($this->founditems) - 1]["type"]) == 0) {
1522 $this->founditems[count($this->founditems) - 1]["type"] = QT_IMAGEMAP;
1523 }
1524 break;
1525 case "response_num":
1526 if (strlen($this->founditems[count($this->founditems) - 1]["type"]) == 0) {
1527 $this->founditems[count($this->founditems) - 1]["type"] = QT_NUMERIC;
1528 }
1529 break;
1530 case "response_grp":
1531 if (strlen($this->founditems[count($this->founditems) - 1]["type"]) == 0) {
1532 $this->founditems[count($this->founditems) - 1]["type"] = QT_MATCHING;
1533 }
1534 break;
1535 case "qticomment":
1536 // check for "old" ILIAS qti format (not well formed)
1537 $this->verifyqticomment = 1;
1538 break;
1539 case "presentation":
1540 if (is_array($a_attribs)) {
1541 foreach ($a_attribs as $attribute => $value) {
1542 switch (strtolower($attribute)) {
1543 case "label":
1544 $this->founditems[count($this->founditems) - 1]["title"] = $value;
1545 break;
1546 }
1547 }
1548 }
1549 break;
1550 }
1551 }
const QT_CLOZE
const QT_IMAGEMAP
const QT_MULTIPLE_CHOICE_MR
const QT_MATCHING
const QT_ORDERING
const QT_NUMERIC
const QT_MULTIPLE_CHOICE_SR
const QT_TEXT

References $title, QT_CLOZE, QT_IMAGEMAP, QT_MATCHING, QT_MULTIPLE_CHOICE_MR, QT_MULTIPLE_CHOICE_SR, QT_NUMERIC, QT_ORDERING, and QT_TEXT.

Referenced by handlerBeginTag().

+ Here is the caller graph for this function:

◆ handlerVerifyCharacterData()

ilQTIParser::handlerVerifyCharacterData (   $a_xml_parser,
  $a_data 
)

handler for character data verification

Definition at line 1601 of file class.ilQTIParser.php.

1602 {
1603 if ($this->verifyqticomment == 1) {
1604 if (preg_match("/Questiontype\=(.*)/", $a_data, $matches)) {
1605 if (count($this->founditems)) {
1606 $this->founditems[count($this->founditems) - 1]["type"] = $matches[1];
1607 }
1608 }
1609 } elseif ($this->verifyfieldlabel == 1) {
1610 $this->verifyfieldlabeltext = $a_data;
1611 } elseif ($this->verifyfieldentry == 1) {
1612 $this->verifyfieldentrytext = $a_data;
1613 }
1614
1615 switch ($this->qti_element) {
1616 case "fieldlabel":
1617 $this->metadata["label"] = $a_data;
1618 break;
1619 case "fieldentry":
1620 $this->metadata["entry"] = $a_data;
1621 break;
1622 }
1623 }

Referenced by handlerCharacterData().

+ Here is the caller graph for this function:

◆ handlerVerifyEndTag()

ilQTIParser::handlerVerifyEndTag (   $a_xml_parser,
  $a_name 
)

handler for end of element verification

Definition at line 1556 of file class.ilQTIParser.php.

1557 {
1558 switch (strtolower($a_name)) {
1559 case "assessment":
1560 foreach ($this->assessment->qtimetadata as $metaField) {
1561 if ($metaField['label'] == 'question_set_type') {
1562 $this->setQuestionSetType($metaField['entry']);
1563 break;
1564 } elseif ($metaField['label'] == 'random_test') {
1565 if ($metaField['entry'] == 1) {
1567 } else {
1569 }
1570 break;
1571 }
1572 }
1573 $this->in_assessment = false;
1574 break;
1575 case "qticomment":
1576 // check for "old" ILIAS qti format (not well formed)
1577 $this->verifyqticomment = 0;
1578 break;
1579 case "qtimetadatafield":
1580 $this->verifymetadatafield = 0;
1581 if (strcmp($this->verifyfieldlabeltext, "QUESTIONTYPE") == 0) {
1582 $this->founditems[count($this->founditems) - 1]["type"] = $this->verifyfieldentrytext;
1583 }
1584 if ($this->in_assessment) {
1585 $this->assessment->addQtiMetadata($this->metadata);
1586 }
1587 $this->metadata = array("label" => "", "entry" => "");
1588 break;
1589 case "fieldlabel":
1590 $this->verifyfieldlabel = 0;
1591 break;
1592 case "fieldentry":
1593 $this->verifyfieldentry = 0;
1594 break;
1595 }
1596 }
const QUESTION_SET_TYPE_RANDOM
type setting value for random question set
const QUESTION_SET_TYPE_FIXED
type setting value for fixed question set
setQuestionSetType($questionSetType)

References $verifyfieldentrytext, ilObjTest\QUESTION_SET_TYPE_FIXED, ilObjTest\QUESTION_SET_TYPE_RANDOM, and setQuestionSetType().

Referenced by handlerEndTag().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isIgnoreItemsEnabled()

ilQTIParser::isIgnoreItemsEnabled ( )
Returns
boolean

Definition at line 123 of file class.ilQTIParser.php.

124 {
126 }

References $ignoreItemsEnabled.

Referenced by handlerParseBeginTag().

+ Here is the caller graph for this function:

◆ isMatImageAvailable()

ilQTIParser::isMatImageAvailable ( )
protected

Definition at line 1737 of file class.ilQTIParser.php.

1738 {
1739 if (!$this->material) {
1740 return false;
1741 }
1742
1743 if (!$this->matimage) {
1744 return false;
1745 }
1746
1747 return true;
1748 }

Referenced by handlerParseEndTag().

+ Here is the caller graph for this function:

◆ openXMLFile()

ilQTIParser::openXMLFile ( )

open xml file

@access private

Exceptions
ilSaxParserExceptionor ILIAS Error

Reimplemented from ilSaxParser.

Definition at line 1667 of file class.ilQTIParser.php.

1668 {
1669 $xmlContent = file_get_contents($this->xml_file);
1670 $xmlContent = $this->cleanInvalidXmlChars($xmlContent);
1671 file_put_contents($this->xml_file, $xmlContent);
1672
1673 return parent::openXMLFile();
1674 }
cleanInvalidXmlChars($xmlContent)

References cleanInvalidXmlChars().

+ Here is the call graph for this function:

◆ setHandlers()

ilQTIParser::setHandlers (   $a_xml_parser)

set event handler should be overwritten by inherited class @access private

Reimplemented from ilSaxParser.

Definition at line 246 of file class.ilQTIParser.php.

247 {
248 xml_set_object($a_xml_parser, $this);
249 xml_set_element_handler($a_xml_parser, 'handlerBeginTag', 'handlerEndTag');
250 xml_set_character_data_handler($a_xml_parser, 'handlerCharacterData');
251 }

◆ setIgnoreItemsEnabled()

ilQTIParser::setIgnoreItemsEnabled (   $ignoreItemsEnabled)
Parameters
boolean$ignoreItemsEnabled

Definition at line 131 of file class.ilQTIParser.php.

132 {
133 $this->ignoreItemsEnabled = $ignoreItemsEnabled;
134 }

References $ignoreItemsEnabled.

◆ setParserMode()

ilQTIParser::setParserMode (   $a_mode = IL_MO_PARSE_QTI)

Definition at line 227 of file class.ilQTIParser.php.

228 {
229 $this->parser_mode = $a_mode;
230 $this->founditems = array();
231 $this->verifyroot = false;
232 $this->verifyqticomment = 0;
233 $this->verifymetadatafield = 0;
234 $this->verifyfieldlabel = 0;
235 $this->verifyfieldentry = 0;
236 $this->verifyfieldlabeltext = "";
237 $this->verifyfieldentrytext = "";
238 $this->question_counter = 1;
239 }

Referenced by __construct().

+ Here is the caller graph for this function:

◆ setQuestionSetType()

ilQTIParser::setQuestionSetType (   $questionSetType)
Parameters
null$questionSetType

Definition at line 214 of file class.ilQTIParser.php.

215 {
216 $this->questionSetType = $questionSetType;
217 }

References $questionSetType.

Referenced by handlerVerifyEndTag().

+ Here is the caller graph for this function:

◆ setTestObject()

ilQTIParser::setTestObject ( $a_tst_object)

Definition at line 219 of file class.ilQTIParser.php.

220 {
221 $this->tst_object = &$a_tst_object;
222 if (is_object($a_tst_object)) {
223 $this->tst_id = $this->tst_object->getId();
224 }
225 }

◆ setXMLContent()

ilQTIParser::setXMLContent (   $a_xml_content)

Reimplemented from ilSaxParser.

Definition at line 1660 of file class.ilQTIParser.php.

1661 {
1662 $a_xml_content = $this->cleanInvalidXmlChars($a_xml_content);
1663
1664 return parent::setXMLContent($a_xml_content);
1665 }

References cleanInvalidXmlChars().

+ Here is the call graph for this function:

◆ startParsing()

ilQTIParser::startParsing ( )

stores xml data in array

@access private

Exceptions
ilSaxParserExceptionor ILIAS Error

Reimplemented from ilSaxParser.

Definition at line 253 of file class.ilQTIParser.php.

254 {
255 $this->question_counter = 1;
256 parent::startParsing();
257 return false;
258 }

◆ virusDetected()

ilQTIParser::virusDetected (   $buffer)
protected

Definition at line 1750 of file class.ilQTIParser.php.

1751 {
1752 require_once 'Services/VirusScanner/classes/class.ilVirusScannerFactory.php';
1754
1755 if ($vs === null) {
1756 return false; // no virus scan, no virus detected
1757 }
1758
1759 return (bool) $vs->scanBuffer($buffer);
1760 }

References ilVirusScannerFactory\_getInstance().

Referenced by handlerParseEndTag().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $assessment

ilQTIParser::$assessment

Definition at line 82 of file class.ilQTIParser.php.

◆ $assessmentcontrol

ilQTIParser::$assessmentcontrol

Definition at line 83 of file class.ilQTIParser.php.

◆ $assessments

ilQTIParser::$assessments

Definition at line 81 of file class.ilQTIParser.php.

◆ $characterbuffer

ilQTIParser::$characterbuffer

Definition at line 72 of file class.ilQTIParser.php.

Referenced by handlerParseCharacterData().

◆ $conditionvar

ilQTIParser::$conditionvar

Definition at line 73 of file class.ilQTIParser.php.

◆ $decvar

ilQTIParser::$decvar

Definition at line 62 of file class.ilQTIParser.php.

◆ $depth

ilQTIParser::$depth

Definition at line 46 of file class.ilQTIParser.php.

◆ $displayfeedback

ilQTIParser::$displayfeedback

Definition at line 65 of file class.ilQTIParser.php.

◆ $do_nothing

ilQTIParser::$do_nothing

Definition at line 79 of file class.ilQTIParser.php.

◆ $flow

ilQTIParser::$flow

Definition at line 68 of file class.ilQTIParser.php.

◆ $flow_mat

ilQTIParser::$flow_mat

Definition at line 67 of file class.ilQTIParser.php.

Referenced by handlerParseEndTag().

◆ $founditems

ilQTIParser::$founditems = array()

Definition at line 92 of file class.ilQTIParser.php.

Referenced by getFoundItems().

◆ $gap_index

ilQTIParser::$gap_index

Definition at line 80 of file class.ilQTIParser.php.

◆ $hasRootElement

ilQTIParser::$hasRootElement

Definition at line 42 of file class.ilQTIParser.php.

◆ $ignoreItemsEnabled

ilQTIParser::$ignoreItemsEnabled = false
protected

Definition at line 118 of file class.ilQTIParser.php.

Referenced by isIgnoreItemsEnabled(), and setIgnoreItemsEnabled().

◆ $import_idents

ilQTIParser::$import_idents

Definition at line 75 of file class.ilQTIParser.php.

◆ $import_mapping

ilQTIParser::$import_mapping

Definition at line 87 of file class.ilQTIParser.php.

Referenced by getImportMapping().

◆ $in_assessment

ilQTIParser::$in_assessment = false

Definition at line 85 of file class.ilQTIParser.php.

◆ $in_itemmetadata

ilQTIParser::$in_itemmetadata

Definition at line 89 of file class.ilQTIParser.php.

◆ $in_objectives

ilQTIParser::$in_objectives = false

Definition at line 90 of file class.ilQTIParser.php.

◆ $in_prensentation_material

ilQTIParser::$in_prensentation_material = false
protected

Definition at line 113 of file class.ilQTIParser.php.

◆ $in_presentation

ilQTIParser::$in_presentation

Definition at line 48 of file class.ilQTIParser.php.

◆ $in_response

ilQTIParser::$in_response

Definition at line 49 of file class.ilQTIParser.php.

◆ $item

ilQTIParser::$item

Definition at line 45 of file class.ilQTIParser.php.

◆ $itemfeedback

ilQTIParser::$itemfeedback

Definition at line 66 of file class.ilQTIParser.php.

◆ $items

ilQTIParser::$items

Definition at line 44 of file class.ilQTIParser.php.

◆ $lng

ilQTIParser::$lng

Definition at line 41 of file class.ilQTIParser.php.

Referenced by __construct().

◆ $material

ilQTIParser::$material

Definition at line 52 of file class.ilQTIParser.php.

◆ $matimage

ilQTIParser::$matimage

Definition at line 57 of file class.ilQTIParser.php.

◆ $mattext

ilQTIParser::$mattext

Definition at line 70 of file class.ilQTIParser.php.

◆ $numImportedItems

ilQTIParser::$numImportedItems = 0
protected

Definition at line 104 of file class.ilQTIParser.php.

Referenced by getNumImportedItems().

◆ $objectives

ilQTIParser::$objectives

Definition at line 84 of file class.ilQTIParser.php.

◆ $outcomes

ilQTIParser::$outcomes

Definition at line 61 of file class.ilQTIParser.php.

◆ $parser_mode

ilQTIParser::$parser_mode

Definition at line 74 of file class.ilQTIParser.php.

◆ $path

ilQTIParser::$path

Definition at line 43 of file class.ilQTIParser.php.

◆ $prensentation_material

ilQTIParser::$prensentation_material
protected

Definition at line 109 of file class.ilQTIParser.php.

◆ $presentation

ilQTIParser::$presentation

Definition at line 69 of file class.ilQTIParser.php.

Referenced by handlerParseEndTag().

◆ $qpl_id

ilQTIParser::$qpl_id

Definition at line 76 of file class.ilQTIParser.php.

◆ $qti_element

ilQTIParser::$qti_element

Definition at line 47 of file class.ilQTIParser.php.

◆ $question_counter

ilQTIParser::$question_counter = 1

Definition at line 88 of file class.ilQTIParser.php.

◆ $questionSetType

ilQTIParser::$questionSetType = null
protected

Definition at line 136 of file class.ilQTIParser.php.

Referenced by getQuestionSetType(), and setQuestionSetType().

◆ $render_type

ilQTIParser::$render_type

Definition at line 50 of file class.ilQTIParser.php.

◆ $respcondition

ilQTIParser::$respcondition

Definition at line 63 of file class.ilQTIParser.php.

◆ $response

ilQTIParser::$response

Definition at line 59 of file class.ilQTIParser.php.

◆ $response_label

ilQTIParser::$response_label

Definition at line 51 of file class.ilQTIParser.php.

◆ $resprocessing

ilQTIParser::$resprocessing

Definition at line 60 of file class.ilQTIParser.php.

◆ $sametag

ilQTIParser::$sametag

Definition at line 71 of file class.ilQTIParser.php.

◆ $section

ilQTIParser::$section

Definition at line 86 of file class.ilQTIParser.php.

◆ $setvar

ilQTIParser::$setvar

Definition at line 64 of file class.ilQTIParser.php.

◆ $tst_id

ilQTIParser::$tst_id

Definition at line 77 of file class.ilQTIParser.php.

◆ $tst_object

ilQTIParser::$tst_object

Definition at line 78 of file class.ilQTIParser.php.

◆ $verifyfieldentry

ilQTIParser::$verifyfieldentry = 0

Definition at line 98 of file class.ilQTIParser.php.

◆ $verifyfieldentrytext

ilQTIParser::$verifyfieldentrytext = ""

Definition at line 99 of file class.ilQTIParser.php.

Referenced by handlerVerifyEndTag().

◆ $verifyfieldlabel

ilQTIParser::$verifyfieldlabel = 0

Definition at line 96 of file class.ilQTIParser.php.

◆ $verifyfieldlabeltext

ilQTIParser::$verifyfieldlabeltext = ""

Definition at line 97 of file class.ilQTIParser.php.

◆ $verifymetadatafield

ilQTIParser::$verifymetadatafield = 0

Definition at line 95 of file class.ilQTIParser.php.

◆ $verifyqticomment

ilQTIParser::$verifyqticomment = 0

Definition at line 94 of file class.ilQTIParser.php.

◆ $verifyroot

ilQTIParser::$verifyroot = false

Definition at line 93 of file class.ilQTIParser.php.


The documentation for this class was generated from the following file: