19declare(strict_types=1);
183 private array
$metadata = [
"label" =>
"",
"entry" =>
""];
192 private readonly
string $importdir,
194 int $a_mode = self::IL_MO_PARSE_QTI,
197 private array $mappings = []
201 $this->user_id =
$DIC[
'ilUser']->getId();
203 $this->parser_mode = $a_mode;
207 $this->qpl_id = $a_qpl_id;
208 $this->
lng = $DIC->language();
239 $this->tst_id = $this->tst_object->
getId();
262 $this->question_counter = 1;
263 parent::startParsing();
271 if ($this->depth[$a_xml_parser] > 0) {
272 return $this->path[$this->depth[$a_xml_parser] - 1];
282 public function handlerBeginTag($a_xml_parser,
string $a_name, array $a_attribs): void
284 switch ($this->parser_mode) {
300 if ($this->do_nothing) {
303 $this->sametag =
false;
304 $this->characterbuffer =
"";
305 $this->depth[$a_xml_parser] = ($this->depth[$a_xml_parser] ?? 0) + 1;
306 $this->path[$this->depth[$a_xml_parser]] = strtolower($a_name);
307 $this->qti_element = $a_name;
309 switch (strtolower($a_name)) {
313 case "assessmentcontrol":
318 $this->in_objectives =
true;
320 case 'presentation_material':
322 $this->in_prensentation_material =
true;
328 $this->in_itemmetadata =
true;
330 case "qtimetadatafield":
331 $this->metadata = [
"label" =>
"",
"entry" =>
""];
342 case "displayfeedback":
352 if ($this->conditionvar !=
null) {
353 $this->conditionvar->addNot();
357 if ($this->conditionvar !=
null) {
358 $this->conditionvar->addAnd();
362 if ($this->conditionvar !=
null) {
363 $this->conditionvar->addOr();
371 foreach ($a_attribs as $attribute => $value) {
372 switch (strtolower($attribute)) {
374 $this->responsevar->setRespident($value);
377 $this->responsevar->setIndex($value);
384 foreach ($a_attribs as $attribute => $value) {
385 switch (strtolower($attribute)) {
387 $this->responsevar->setRespident($value);
390 $this->responsevar->setIndex($value);
397 foreach ($a_attribs as $attribute => $value) {
398 switch (strtolower($attribute)) {
400 $this->responsevar->setRespident($value);
403 $this->responsevar->setIndex($value);
410 foreach ($a_attribs as $attribute => $value) {
411 switch (strtolower($attribute)) {
413 $this->responsevar->setRespident($value);
416 $this->responsevar->setIndex($value);
423 foreach ($a_attribs as $attribute => $value) {
424 switch (strtolower($attribute)) {
426 $this->responsevar->setRespident($value);
429 $this->responsevar->setSetmatch($value);
432 $this->responsevar->setIndex($value);
439 foreach ($a_attribs as $attribute => $value) {
440 switch (strtolower($attribute)) {
442 $this->responsevar->setRespident($value);
445 $this->responsevar->setAreatype($value);
448 $this->responsevar->setIndex($value);
455 foreach ($a_attribs as $attribute => $value) {
456 switch (strtolower($attribute)) {
458 $this->responsevar->setCase($value);
461 $this->responsevar->setRespident($value);
464 $this->responsevar->setIndex($value);
469 case "respcondition":
471 foreach ($a_attribs as $attribute => $value) {
472 switch (strtolower($attribute)) {
474 $this->respcondition->setContinue($value);
477 $this->respcondition->setTitle($value);
500 case "questestinterop":
501 $this->hasRootElement =
true;
509 $this->in_presentation =
true;
512 case "response_label":
515 case "render_choice":
518 case "render_hotspot":
542 case "resprocessing":
553 switch ($this->parser_mode) {
569 if ($this->do_nothing && strtolower($a_name) !==
"item") {
572 switch (strtolower($a_name)) {
574 if (is_object($this->tst_object)) {
575 $this->tst_object->fromXML($this->
assessment, $this->mappings);
577 $this->in_assessment =
false;
579 case "assessmentcontrol":
580 $this->
assessment->addAssessmentcontrol($this->assessmentcontrol);
581 $this->assessmentcontrol =
null;
584 if (strtolower($this->
getParent($a_xml_parser)) ===
"assessment") {
585 $this->
assessment->addObjectives($this->objectives);
587 $this->in_objectives =
false;
589 case 'presentation_material':
590 $this->
assessment->setPresentationMaterial($this->prensentation_material);
591 $this->in_prensentation_material =
false;
594 $this->in_itemmetadata =
false;
596 case "qtimetadatafield":
598 switch ($this->metadata[
"label"]) {
599 case "ILIAS_VERSION":
600 if ($this->item !==
null) {
601 $this->item->setIliasSourceVersion(
607 if ($this->item !==
null) {
608 $this->item->setQuestiontype($this->metadata[
"entry"]);
612 if ($this->item !==
null) {
613 $this->item->setAuthor($this->metadata[
"entry"]);
617 if ($this->item !==
null) {
618 $this->item->addMetadata($this->metadata);
622 if ($this->in_assessment) {
623 $this->
assessment->addQtiMetadata($this->metadata);
625 $this->metadata = [
"label" =>
"",
"entry" =>
""];
631 if (count($this->flow_mat)) {
633 if (count($this->flow_mat)) {
634 $this->flow_mat[count($this->flow_mat) - 1]->addFlowMat(
$flow_mat);
635 } elseif ($this->in_prensentation_material) {
636 $this->prensentation_material->addFlowMat(
$flow_mat);
637 } elseif ($this->itemfeedback !=
null) {
638 $this->itemfeedback->addFlowMat(
$flow_mat);
639 } elseif ($this->response_label !=
null) {
640 $this->response_label->addFlow_mat(
$flow_mat);
645 if ($this->item !=
null) {
646 if ($this->itemfeedback !=
null) {
647 $this->item->addItemfeedback($this->itemfeedback);
650 $this->itemfeedback =
null;
652 case "displayfeedback":
653 if ($this->respcondition !=
null) {
654 if ($this->displayfeedback !=
null) {
655 $this->respcondition->addDisplayfeedback($this->displayfeedback);
658 $this->displayfeedback =
null;
661 if ($this->respcondition !==
null) {
662 if ($this->setvar !=
null) {
663 $this->respcondition->addSetvar($this->setvar);
666 $this->setvar =
null;
669 if ($this->respcondition !==
null) {
670 $this->respcondition->setConditionvar($this->conditionvar);
672 $this->conditionvar =
null;
682 if ($this->conditionvar !=
null) {
683 if ($this->responsevar !=
null) {
684 $this->conditionvar->addResponseVar($this->responsevar);
687 $this->responsevar =
null;
689 case "respcondition":
690 if ($this->resprocessing !=
null) {
691 $this->resprocessing->addRespcondition($this->respcondition);
693 $this->respcondition =
null;
696 if ($this->resprocessing !=
null) {
697 $this->resprocessing->setOutcomes($this->outcomes);
699 $this->outcomes =
null;
702 if ($this->outcomes !=
null) {
703 $this->outcomes->addDecvar($this->decvar);
705 $this->decvar =
null;
708 $this->in_presentation =
false;
709 if ($this->presentation !=
null && $this->item !=
null) {
710 $this->item->setPresentation($this->presentation);
712 $this->presentation =
null;
714 case "response_label":
715 if ($this->render_type !=
null) {
716 $this->render_type->addResponseLabel($this->response_label);
717 $this->response_label =
null;
720 case "render_choice":
721 case "render_hotspot":
723 if ($this->in_response) {
724 if ($this->response !=
null) {
725 if ($this->render_type !=
null) {
726 $this->response->setRenderType($this->render_type);
727 $this->render_type =
null;
738 if ($this->presentation !=
null) {
739 if ($this->response !=
null) {
740 $this->presentation->addResponse($this->response);
741 if ($this->item !=
null) {
742 $this->item->addPresentationitem($this->response);
746 $this->response =
null;
747 $this->in_response =
false;
750 if ($this->do_nothing) {
751 $this->do_nothing =
false;
760 $qt = $this->item->determineQuestionType();
767 $question =
new $qt();
768 $fbt = str_replace(
'ass',
'ilAss', $qt) .
'Feedback';
769 $question->feedbackOBJ =
new $fbt(
775 $this->import_mapping = $question->fromXML(
782 $this->question_counter,
783 $this->import_mapping,
786 $this->numImportedItems++;
790 if ($this->material) {
791 $mat = $this->material->getMaterial(0);
792 if (!is_array($mat)) {
793 $this->material =
null;
796 if ($mat[
"type"] ===
"mattext" && $mat[
"material"]->
getLabel() ===
"suggested_solution") {
797 $this->item->addSuggestedSolution($mat[
"material"], $this->gap_index);
799 if ($this->in_objectives) {
800 $this->objectives->addMaterial($this->material);
801 } elseif ($this->render_type !=
null && strtolower($this->
getParent($a_xml_parser)) ===
"render_hotspot") {
802 $this->render_type->addMaterial($this->material);
803 } elseif (count($this->flow_mat) && strtolower($this->
getParent($a_xml_parser)) ===
"flow_mat") {
804 $this->flow_mat[count($this->flow_mat) - 1]->addMaterial($this->material);
805 } elseif ($this->itemfeedback !=
null) {
806 $this->itemfeedback->addMaterial($this->material);
807 } elseif ($this->response_label !=
null) {
808 $this->response_label->addMaterial($this->material);
809 } elseif ($this->response !=
null) {
810 if ($this->response->hasRendering()) {
811 $this->response->setMaterial2($this->material);
813 $this->response->setMaterial1($this->material);
815 } elseif (($this->in_presentation) && (!$this->in_response)) {
816 if (!is_object($this->item->getQuestiontext())) {
817 $this->item->setQuestiontext($this->material);
819 $this->presentation->addMaterial($this->material);
820 } elseif ($this->presentation !=
null) {
821 $this->presentation->addMaterial($this->material);
822 if ($this->item !=
null) {
823 $this->item->addPresentationitem($this->material);
827 $this->material =
null;
835 if ($this->
virusDetected($this->matimage->getRawContent())) {
840 $matImageSecurity->sanitizeLabel();
841 }
catch (Exception
$e) {
844 if (!$matImageSecurity->validate()) {
848 $this->material->addMatimage($this->matimage);
849 $this->matimage =
null;
855 $this->mattext->setContent(
'<br />');
856 $this->material->addMattext($this->mattext);
857 $this->mattext =
null;
859 case "resprocessing":
860 if ($this->item !=
null) {
861 $this->item->addResprocessing($this->resprocessing);
863 $this->resprocessing =
null;
866 if ($this->material !=
null) {
867 $this->material->addMattext($this->mattext);
869 $this->mattext =
null;
872 if ($this->material !=
null) {
873 $this->material->addMatapplet($this->matapplet);
875 $this->matapplet =
null;
878 $this->depth[$a_xml_parser] -= 1;
886 switch ($this->parser_mode) {
901 if ($this->do_nothing) {
904 $this->characterbuffer .= $a_data;
906 switch ($this->qti_element) {
908 $this->metadata[
"label"] = $a_data;
911 $this->metadata[
"entry"] = $a_data;
913 case "response_label":
914 if ($this->response_label !=
null) {
915 $this->response_label->setContent($a_data);
919 if ($this->setvar !=
null) {
920 $this->setvar->setContent($a_data);
923 case "displayfeedback":
924 if ($this->displayfeedback !=
null) {
925 $this->displayfeedback->setContent($a_data);
936 if ($this->responsevar !=
null) {
937 $this->responsevar->setContent($a_data);
941 if (strlen($a_data)) {
942 if ($this->decvar !=
null) {
943 $this->decvar->setContent($a_data);
948 if ($this->mattext !=
null) {
949 $this->mattext->setContent($a_data);
953 if ($this->matapplet !=
null) {
954 $this->matapplet->setContent($a_data);
958 if ($this->matimage !=
null) {
959 $this->matimage->setContent($a_data);
963 switch ($this->
getParent($a_xml_parser)) {
971 $this->item->setDuration($a_data);
976 switch ($this->
getParent($a_xml_parser)) {
978 $this->item->setComment($a_data);
988 $this->sametag =
true;
997 $this->qti_element = $a_name;
999 switch (strtolower($a_name)) {
1002 $this->in_assessment =
true;
1003 foreach ($a_attribs as $attribute => $value) {
1004 switch (strtolower($attribute)) {
1014 case "questestinterop":
1015 $this->verifyroot =
true;
1017 case "qtimetadatafield":
1018 $this->metadata = [
"label" =>
"",
"entry" =>
""];
1019 $this->verifymetadatafield = 1;
1022 $this->verifyfieldlabeltext =
"";
1023 if ($this->verifymetadatafield == 1) {
1024 $this->verifyfieldlabel = 1;
1028 $this->verifyfieldentrytext =
"";
1029 if ($this->verifymetadatafield == 1) {
1030 $this->verifyfieldentry = 1;
1035 foreach ($a_attribs as $attribute => $value) {
1036 switch (strtolower($attribute)) {
1042 $this->founditems[] = [
"title" =>
"$title",
"type" =>
"",
"ident" => $a_attribs[
"ident"]];
1044 case "response_lid":
1045 if ($this->founditems[count($this->founditems) - 1][
'type'] ===
'') {
1047 foreach ($a_attribs as $attribute => $value) {
1048 switch (strtolower($attribute)) {
1049 case "rcardinality":
1050 switch (strtolower($value)) {
1067 case "response_str":
1068 if (strlen($this->founditems[count($this->founditems) - 1][
"type"]) == 0) {
1070 foreach ($a_attribs as $attribute => $value) {
1071 switch (strtolower($attribute)) {
1072 case "rcardinality":
1073 switch (strtolower($value)) {
1087 if (strlen($this->founditems[count($this->founditems) - 1][
"type"]) == 0) {
1091 case "response_num":
1092 if (strlen($this->founditems[count($this->founditems) - 1][
"type"]) == 0) {
1096 case "response_grp":
1097 if (strlen($this->founditems[count($this->founditems) - 1][
"type"]) == 0) {
1103 $this->verifyqticomment = 1;
1105 case "presentation":
1106 foreach ($a_attribs as $attribute => $value) {
1107 switch (strtolower($attribute)) {
1109 $this->founditems[count($this->founditems) - 1][
"title"] = $value;
1122 switch (strtolower($a_name)) {
1124 foreach ($this->
assessment->qtimetadata as $metaField) {
1125 if ($metaField[
'label'] ==
'question_set_type') {
1130 if ($metaField[
'label'] ==
'random_test') {
1131 if ($metaField[
'entry'] == 1) {
1139 $this->in_assessment =
false;
1143 $this->verifyqticomment = 0;
1145 case "qtimetadatafield":
1146 $this->verifymetadatafield = 0;
1147 if ($this->verifyfieldlabeltext ===
"QUESTIONTYPE") {
1150 if ($this->in_assessment) {
1151 $this->
assessment->addQtiMetadata($this->metadata);
1153 $this->metadata = [
"label" =>
"",
"entry" =>
""];
1156 $this->verifyfieldlabel = 0;
1159 $this->verifyfieldentry = 0;
1169 if ($this->verifyqticomment == 1) {
1170 if (preg_match(
"/Questiontype\=(.*)/", $a_data, $matches)) {
1171 if (count($this->founditems)) {
1172 $this->founditems[count($this->founditems) - 1][
"type"] = $matches[1];
1175 } elseif ($this->verifyfieldlabel == 1) {
1176 $this->verifyfieldlabeltext = $a_data;
1177 } elseif ($this->verifyfieldentry == 1) {
1178 $this->verifyfieldentrytext = $a_data;
1181 switch ($this->qti_element) {
1183 $this->metadata[
"label"] = $a_data;
1186 $this->metadata[
"entry"] = $a_data;
1213 $questionIdMapping = [];
1216 $oldQuestionId = substr($k, strpos($k,
'qst_') + strlen(
'qst_'));
1217 $newQuestionId = $v[
'test'];
1219 $questionIdMapping[$oldQuestionId] = $newQuestionId;
1222 return $questionIdMapping;
1229 parent::setXMLContent($a_xml_content);
1237 $xmlContent = file_get_contents($this->xml_file);
1239 file_put_contents($this->xml_file, $xmlContent);
1241 return parent::openXMLFile();
1248 if (preg_match(
'/^(\d+\.\d+\.\d+)$/', $versionDateString, $matches)) {
1259 if (preg_match(
'/^il_(\d+?)_qst_\d+$/', $itemIdent, $matches)) {
1276 for ($i = 0x00, $max = 0x08; $i <= $max; $i += 0x01) {
1277 $needles[] =
"&#{$i};";
1279 for ($i = 0x0b, $max = 0x0c; $i <= $max; $i += 0x01) {
1280 $needles[] =
"&#{$i};";
1282 for ($i = 0x0e, $max = 0x1f; $i <= $max; $i += 0x01) {
1283 $needles[] =
"&#{$i};";
1285 for ($i = 0xd800, $max = 0xdfff; $i <= $max; $i += 0x0001) {
1286 $needles[] =
"&#{$i};";
1288 for ($i = 0xfffe, $max = 0xffff; $i <= $max; $i += 0x0001) {
1289 $needles[] =
"&#{$i};";
1291 $reg =
'/(' . implode(
'|', $needles) .
')/';
1292 $xmlContent = preg_replace($reg,
'', $xmlContent);
1304 if (!$this->material) {
1308 if (!$this->matimage) {
1323 return $vs->scanBuffer($buffer);
1329 $this->in_assessment =
true;
1330 foreach ($a_attribs as $attribute => $value) {
1331 switch (strtolower($attribute)) {
1345 foreach ($a_attribs as $attribute => $value) {
1346 switch (strtolower($attribute)) {
1347 case "solutionswitch":
1348 $this->assessmentcontrol->setSolutionswitch($value);
1351 $this->assessmentcontrol->setHintswitch($value);
1353 case "feedbackswitch":
1354 $this->assessmentcontrol->setFeedbackswitch($value);
1363 foreach ($a_attribs as $attribute => $value) {
1364 switch (strtolower($attribute)) {
1366 $this->itemfeedback->setIdent($value);
1369 $this->itemfeedback->setView($value);
1378 foreach ($a_attribs as $attribute => $value) {
1379 switch (strtolower($attribute)) {
1380 case "feedbacktype":
1381 $this->displayfeedback->setFeedbacktype($value);
1384 $this->displayfeedback->setLinkrefid($value);
1393 foreach ($a_attribs as $attribute => $value) {
1394 switch (strtolower($attribute)) {
1396 $this->setvar->setAction($value);
1399 $this->setvar->setVarname($value);
1408 foreach ($a_attribs as $attribute => $value) {
1409 switch (strtolower($attribute)) {
1411 $this->responsevar->setCase($value);
1414 $this->responsevar->setRespident($value);
1417 $this->responsevar->setIndex($value);
1426 switch (strtolower($a_name)) {
1427 case "response_lid":
1433 case "response_str":
1436 case "response_num":
1439 case "response_grp":
1443 $this->in_response =
true;
1445 $this->response->setFlow($this->flow);
1446 foreach ($a_attribs as $attribute => $value) {
1447 switch (strtolower($attribute)) {
1449 $this->response->setIdent($value);
1452 $this->response->setRTiming($value);
1454 case "rcardinality":
1455 $this->response->setRCardinality($value);
1458 $this->response->setNumtype($value);
1466 $this->gap_index = 0;
1467 $this->item = $this->items[] =
new ilQTIItem();
1468 foreach ($a_attribs as $attribute => $value) {
1469 switch (strtolower($attribute)) {
1471 $this->item->setIdent($value);
1472 $this->item->setIliasSourceNic(
1476 $this->do_nothing =
true;
1477 } elseif ($this->import_idents !== []
1478 && !in_array($value, $this->import_idents)) {
1479 $this->do_nothing =
true;
1483 $this->item->setTitle($value);
1486 $this->item->setMaxattempts($value);
1495 foreach ($a_attribs as $attribute => $value) {
1496 switch (strtolower($attribute)) {
1498 $this->resprocessing->setScoremodel($value);
1506 if (!$this->in_response) {
1510 foreach ($a_attribs as $attribute => $value) {
1511 switch (strtolower($attribute)) {
1513 $this->render_type->setEncoding($value);
1516 $this->render_type->setFibtype($value);
1519 $this->render_type->setRows($value);
1522 $this->render_type->setMaxchars($value);
1525 $this->render_type->setPrompt($value);
1528 $this->render_type->setColumns($value);
1531 $this->render_type->setCharset($value);
1534 $this->render_type->setMaxnumber($value);
1537 $this->render_type->setMinnumber($value);
1545 if (!$this->in_response) {
1549 foreach ($a_attribs as $attribute => $value) {
1550 switch (strtolower($attribute)) {
1552 $this->render_type->setShowdraw($value);
1555 $this->render_type->setMinnumber($value);
1558 $this->render_type->setMaxnumber($value);
1566 if (!$this->in_response) {
1570 foreach ($a_attribs as $attribute => $value) {
1571 switch (strtolower($attribute)) {
1573 $this->render_type->setShuffle($value);
1576 $this->render_type->setMinnumber($value);
1579 $this->render_type->setMaxnumber($value);
1587 if ($this->render_type ==
null) {
1591 foreach ($a_attribs as $attribute => $value) {
1592 switch (strtolower($attribute)) {
1594 $this->response_label->setRshuffle($value);
1597 $this->response_label->setRarea($value);
1600 $this->response_label->setRrange($value);
1603 $this->response_label->setLabelrefid($value);
1606 $this->response_label->setIdent($value);
1609 $this->response_label->setMatchGroup($value);
1612 $this->response_label->setMatchMax($value);
1621 foreach ($a_attribs as $attribute => $value) {
1622 switch (strtolower($attribute)) {
1624 $this->matapplet->setLabel($value);
1627 $this->matapplet->setUri($value);
1630 $this->matapplet->setY0($value);
1633 $this->matapplet->setHeight($value);
1636 $this->matapplet->setWidth($value);
1639 $this->matapplet->setX0($value);
1642 $this->matapplet->setEmbedded($value);
1645 $this->matapplet->setEntityref($value);
1654 foreach ($a_attribs as $attribute => $value) {
1655 switch (strtolower($attribute)) {
1657 $this->mattext->setTexttype($value);
1660 $this->mattext->setLabel($value);
1663 $this->mattext->setCharset($value);
1666 $this->mattext->setUri($value);
1669 $this->mattext->setXmlspace($value);
1672 $this->mattext->setXmllang($value);
1675 $this->mattext->setEntityref($value);
1678 $this->mattext->setHeight($value);
1681 $this->mattext->setWidth($value);
1684 $this->mattext->setX0($value);
1687 $this->mattext->setY0($value);
1696 $this->material->setFlow($this->flow);
1697 foreach ($a_attribs as $attribute => $value) {
1698 switch (strtolower($attribute)) {
1700 $this->material->setLabel($value);
1709 foreach ($a_attribs as $attribute => $value) {
1710 switch (strtolower($attribute)) {
1712 $this->matimage->setImagetype($value);
1715 $this->matimage->setLabel($value);
1718 $this->matimage->setHeight($value);
1721 $this->matimage->setWidth($value);
1724 $this->matimage->setUri($value);
1727 $this->matimage->setEmbedded($value);
1730 $this->matimage->setX0($value);
1733 $this->matimage->setY0($value);
1736 $this->matimage->setEntityref($value);
1740 if (!$this->matimage->getEmbedded() && strlen($this->matimage->getUri())) {
1741 $img_string = @file_get_contents(dirname($this->xml_file) .
'/' . $this->matimage->getUri());
1743 if (is_string($img_string)) {
1744 $this->matimage->setContent($img_string);
1752 foreach ($a_attribs as $attribute => $value) {
1753 switch (strtolower($attribute)) {
1755 $this->decvar->setVarname($value);
1758 $this->decvar->setVartype($value);
1761 $this->decvar->setDefaultval($value);
1764 $this->decvar->setMinvalue($value);
1767 $this->decvar->setMaxvalue($value);
1770 $this->decvar->setMembers($value);
1773 $this->decvar->setCutvalue($value);
1784 $parser = xml_parser_create();
1785 $is_resource = is_resource($parser);
1786 xml_parser_free($parser);
1788 return $is_resource ? [] :
new SplObjectStorage();
static isImportable($questionTypeTag)
const QUESTION_SET_TYPE_RANDOM
const QUESTION_SET_TYPE_FIXED
const QT_MULTIPLE_CHOICE_MR
const QT_MULTIPLE_CHOICE_SR
resprocessingBeginTag(array $a_attribs)
setIgnoreItemsEnabled(bool $ignoreItemsEnabled)
renderChoiceBeginTag(array $a_attribs)
setHandlers($a_xml_parser)
set event handler should be overwritten by inherited class @access private
displayFeedbackBeginTag(array $a_attribs)
ilQTIConditionvar $conditionvar
fetchNumericVersionFromVersionDateString(string $versionDateString)
assessmentControlBeginTag(array $a_attribs)
itemBeginTag(array $a_attribs)
matTextBeginTag(array $a_attribs)
ilQTIRespcondition $respcondition
ilQTIPresentation $presentation
decVarBeginTag(array $a_attribs)
ilQTIObjectives $objectives
handlerParseCharacterData($a_xml_parser, string $a_data)
ilQTIDisplayfeedback $displayfeedback
handlerParseBeginTag($a_xml_parser, string $a_name, array $a_attribs)
materialBeginTag(array $a_attribs)
virusDetected(string $buffer)
ilQTIResponseLabel $response_label
cleanInvalidXmlChars(string $xmlContent)
setQuestionSetType(string $questionSetType)
ilQTIResponseVar $responsevar
ilQTIItemfeedback $itemfeedback
matAppletBeginTag(array $a_attribs)
handlerCharacterData($a_xml_parser, string $a_data)
handlerVerifyCharacterData($a_xml_parser, string $a_data)
string $verifyfieldentrytext
handlerVerifyBeginTag($a_xml_parser, string $a_name, array $a_attribs)
responseLabelBeginTag(array $a_attribs)
startParsing()
stores xml data in array
ilQTIPresentationMaterial $prensentation_material
matImageBeginTag(array $a_attribs)
itemFeedbackBeginTag(array $a_attribs)
setVarBeginTag(array $a_attribs)
string $verifyfieldlabeltext
bool $in_prensentation_material
getImportMapping()
Get array of new created questions for import id.
termsAndDefinitionsBeginTag(string $a_name, array $a_attribs)
setXMLContent(string $a_xml_content)
handlerVerifyEndTag($a_xml_parser, string $a_name)
ilQTIResprocessing $resprocessing
renderFibBeginTag(array $a_attribs)
handlerParseEndTag($a_xml_parser, string $a_name)
@noinspection NotOptimalIfConditionsInspection
ilQTIAssessment $assessment
ilQTIAssessmentcontrol $assessmentcontrol
ilQTIMatapplet $matapplet
handlerBeginTag($a_xml_parser, string $a_name, array $a_attribs)
QuestionFiles $questionfiles
varEqualBeginTag(array $a_attribs)
fetchSourceNicFromItemIdent(string $itemIdent)
assessmentBeginTag(array $a_attribs)
setTestObject(ilObjTest $tst_object)
renderHotspotBeginTag(array $a_attribs)
handlerEndTag($a_xml_parser, string $a_name)
Class ilQTIPresentationMaterial.
const RESPONSEVAR_SUBSTRING
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(?string $path_to_file='', ?bool $throw_exception=false)
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc