ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
ilQuestionPageParser Class Reference

Legacy Content Object Parser. More...

+ Inheritance diagram for ilQuestionPageParser:
+ Collaboration diagram for ilQuestionPageParser:

Public Member Functions

 __construct (ilObject $a_content_object, string $a_xml_file, string $a_subdir, string $a_import_dir="")
 
 setHandlers ($a_xml_parser)
 
 setImportMapping (ilImportMapping $mapping=null)
 
 startParsing ()
 
 storeTree ()
 insert StructureObjects and PageObjects into tree More...
 
 processPagesToParse ()
 parse pages that contain files, mobs and/or internal links More...
 
 copyMobFiles ()
 copy multimedia object files from import zip file to mob directory More...
 
 copyFileItems ()
 copy files of file items More...
 
 setQuestionMapping (array $a_map)
 set question import ident to pool/test question id mapping More...
 
 beginElement (string $a_name)
 
 endElement (string $a_name)
 
 getCurrentElement ()
 
 getOpenCount (string $a_name)
 
 buildTag (string $type, string $name, array $attr=[])
 
 processMeta ()
 
 handlerEndTag ($a_xml_parser, string $a_name)
 
 handlerCharacterData ($a_xml_parser, string $a_data)
 
 emptyMediaMetaCache ($a_xml_parser)
 
 getGlossaryTermMap ()
 
- Public Member Functions inherited from ilMDSaxParser
 __construct (?string $a_xml_file='')
 
 enableMDParsing (bool $a_status)
 
 getMDParsingStatus ()
 
 setMDObject (ilMD $md)
 
 getMDObject ()
 
 inMetaData ()
 
 setHandlers ($a_xml_parser)
 Set event handlers. More...
 
 handlerBeginTag ($a_xml_parser, string $a_name, array $a_attribs)
 
 handlerEndTag ($a_xml_parser, string $a_name)
 
 handlerCharacterData ($a_xml_parser, string $a_data)
 
 __getCharacterData ()
 
 __pushParent (object $md_obj)
 
 __popParent ()
 
 __getParent ()
 
- Public Member Functions inherited from ilSaxParser
 __construct (?string $path_to_file='', ?bool $throw_exception=false)
 
 setXMLContent (string $a_xml_content)
 
 getXMLContent ()
 
 getInputType ()
 
 startParsing ()
 stores xml data in array More...
 
 createParser ()
 
 setHandlers ($a_xml_parser)
 
 parse ($a_xml_parser, $a_fp=null)
 

Data Fields

ilTree $tree
 
array $cnt = []
 
array $current_element = []
 
ilObjLearningModule $learning_module = null
 
ilPageObject $page_object = null
 
ilLMPageObject $lm_page_object = null
 
array $structure_objects = []
 
ilObjMediaObject $media_object = null
 
object $current_object = null
 
ilLMTree $lm_tree = null
 
array $pg_into_tree = []
 
array $st_into_tree = []
 
array $container = []
 
bool $in_page_object = false
 
bool $in_meta_data = false
 
bool $in_media_object = false
 
bool $in_file_item = false
 
bool $in_glossary = false
 
bool $in_map_area = false
 
ilObject $content_object = null
 
ilObjGlossary $glossary_object = null
 
ilObjFile $file_item = null
 
array $pages_to_parse = []
 
array $mob_mapping = []
 
array $file_item_mapping = []
 
string $subdir = ""
 
ilMediaItem $media_item = null
 
string $loc_type = ""
 
ilMapArea $map_area = null
 
array $link_targets = []
 
array $qst_mapping = []
 
bool $metadata_parsing_disabled = false
 
bool $in_meta_meta_data = false
 
- Data Fields inherited from ilSaxParser
string $xml_file
 
bool $throw_exception = false
 

Protected Attributes

bool $in_properties
 
bool $in_glossary_definition = false
 
array $media_meta_cache = []
 
bool $media_meta_start = false
 
array $pg_mapping = []
 
array $mobs_with_int_links = []
 
bool $inside_code = false
 
string $coType = ""
 
string $import_dir = ""
 
array $glossary_term_map = []
 
ilLogger $log
 
ilGlossaryTerm $glossary_term = null
 
ilImportMapping $mapping = null
 
string $cur_qid = ""
 
string $chr_data = ""
 
bool $in_media_item = false
 
- Protected Attributes inherited from ilMDSaxParser
bool $md_in_md = false
 
string $md_chr_data = ''
 
ilMDIdentifier $md_ide = null
 
ilMDLanguage $md_lan = null
 
ilMDDescription $md_des = null
 
ilMDLifecycle $md_lif = null
 
ilMDContribute $md_con = null
 
ilMDEntity $md_ent = null
 
ilMDMetaMetadata $md_met = null
 
ilMDTechnical $md_tec = null
 
ilMDFormat $md_for = null
 
ilMDLocation $md_loc = null
 
ilMDRequirement $md_req = null
 
ilMDOrComposite $md_orc = null
 
ilMDEducational $md_edu = null
 
ilMDTypicalAgeRange $md_typ = null
 
ilMDRights $md_rig = null
 
ilMDRelation $md_rel = null
 
ilMDIdentifier_ $md_ide_ = null
 
ilMDAnnotation $md_ann = null
 
ilMDClassification $md_cla = null
 
ilMDTaxonPath $md_taxp = null
 
ilMDTaxon $md_tax = null
 
ilMDKeyword $md_key = null
 
array $md_parent = array()
 
ilMD $md = null
 
ilMDGeneral $md_gen = null
 
ilLogger $meta_log
 
- Protected Attributes inherited from ilSaxParser
ilLanguage $lng = null
 

Private Member Functions

 parseLinkTarget (string $identifier)
 Parse a string the get the elements of a link target Return null if the string is not a link target. More...
 

Additional Inherited Members

- Protected Member Functions inherited from ilMDSaxParser
 trimAndStripAttribs (array $attribs)
 
 trimAndStrip (string $input)
 
- Protected Member Functions inherited from ilSaxParser
 openXMLFile ()
 
 handleError (string $message)
 
 setThrowException (bool $throw_exception)
 

Detailed Description

Legacy Content Object Parser.

Author
Alexander Killing killi.nosp@m.ng@l.nosp@m.eifos.nosp@m..de
Deprecated:
use COPage dependency to export/import COPages instead

Definition at line 27 of file class.ilQuestionPageParser.php.

Constructor & Destructor Documentation

◆ __construct()

ilQuestionPageParser::__construct ( ilObject  $a_content_object,
string  $a_xml_file,
string  $a_subdir,
string  $a_import_dir = "" 
)

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

References $DIC, ilSaxParser\$lng, $tree, ILIAS\MetaData\Repository\Validation\Data\__construct(), ilLoggerFactory\getLogger(), and ILIAS\Repository\lng().

90  {
91  global $DIC;
92 
93  $this->log = $DIC["ilLog"];
94  $lng = $DIC->language();
95  $tree = $DIC->repositoryTree();
96 
97  $this->log = ilLoggerFactory::getLogger('lm');
98 
99  $this->import_dir = ($a_import_dir != "")
100  ? $a_import_dir
101  : $a_content_object->getImportDirectory();
102 
103  parent::__construct($a_xml_file);
104  $this->cnt = [];
105  $this->current_element = [];
106  $this->structure_objects = [];
107  $this->content_object = $a_content_object;
108  $this->st_into_tree = [];
109  $this->pg_into_tree = [];
110  $this->pages_to_parse = [];
111  $this->mobs_with_int_links = [];
112  $this->mob_mapping = [];
113  $this->file_item_mapping = [];
114  $this->pg_mapping = [];
115  $this->link_targets = [];
116  $this->subdir = $a_subdir;
117  $this->lng = $lng;
118  $this->tree = $tree;
119  $this->inside_code = false;
120  $this->qst_mapping = [];
121  $this->coType = $this->content_object->getType();
122  $this->metadata_parsing_disabled = false;
123 
124  if (($this->coType != "tst") && ($this->coType != "qpl")) {
125  $this->lm_tree = new ilLMTree($this->content_object->getId());
126  }
127  }
static getLogger(string $a_component_id)
Get component logger.
ilLanguage $lng
global $DIC
Definition: feed.php:28
__construct(VocabulariesInterface $vocabularies)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
+ Here is the call graph for this function:

Member Function Documentation

◆ beginElement()

ilQuestionPageParser::beginElement ( string  $a_name)

Definition at line 358 of file class.ilQuestionPageParser.php.

Referenced by buildTag().

358  : void
359  {
360  if (!isset($this->status["$a_name"])) {
361  $this->cnt[$a_name] = 1;
362  } else {
363  $this->cnt[$a_name]++;
364  }
365  $this->current_element[count($this->current_element)] = $a_name;
366  }
+ Here is the caller graph for this function:

◆ buildTag()

ilQuestionPageParser::buildTag ( string  $type,
string  $name,
array  $attr = [] 
)

Definition at line 387 of file class.ilQuestionPageParser.php.

References $content_object, $glossary_object, $glossary_term, $lm_page_object, beginElement(), emptyMediaMetaCache(), ilMDSaxParser\enableMDParsing(), ilMDSaxParser\handlerBeginTag(), IL_EXT_LINK, IL_INT_LINK, ilUtil\parseImportId(), parseLinkTarget(), processMeta(), and ilUtil\yn2tf().

Referenced by handlerEndTag().

391  : string {
392  $tag = "<";
393 
394  if ($type == "end") {
395  $tag .= "/";
396  }
397 
398  $tag .= $name;
399 
400  if (is_array($attr)) {
401  foreach ($attr as $k => $v) {
402  $tag .= " " . $k . "=\"$v\"";
403  }
404  }
405 
406  $tag .= ">";
407 
408  return $tag;
409  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ copyFileItems()

ilQuestionPageParser::copyFileItems ( )

copy files of file items

Definition at line 326 of file class.ilQuestionPageParser.php.

References $import_dir.

Referenced by startParsing().

326  : void
327  {
328  $imp_dir = $this->import_dir;
329  foreach ($this->file_item_mapping as $origin_id => $file_id) {
330  if (empty($origin_id)) {
331  continue;
332  }
333  $obj_dir = $origin_id;
334  $source_dir = $imp_dir . "/" . $this->subdir . "/objects/" . $obj_dir;
335 
336  $file_obj = new ilObjFile($file_id, false);
337  if (is_dir($source_dir)) {
338  $files = scandir($source_dir, SCANDIR_SORT_DESCENDING);
339  if ($files !== false && $files !== [] && is_file($source_dir . '/' . $files[0])) {
340  $file = fopen($source_dir . '/' . $files[0], 'rb');
341  $file_stream = Streams::ofResource($file);
342  $file_obj->appendStream($file_stream, $files[0]);
343  }
344  }
345  $file_obj->update();
346  }
347  }
Class ilObjFile.
+ Here is the caller graph for this function:

◆ copyMobFiles()

ilQuestionPageParser::copyMobFiles ( )

copy multimedia object files from import zip file to mob directory

Definition at line 300 of file class.ilQuestionPageParser.php.

References $import_dir, ilLoggerFactory\getLogger(), ilFileUtils\getWebspaceDir(), ilFileUtils\makeDir(), and ilFileUtils\rCopy().

Referenced by startParsing().

300  : void
301  {
302  $imp_dir = $this->import_dir;
303  foreach ($this->mob_mapping as $origin_id => $mob_id) {
304  if (empty($origin_id)) {
305  continue;
306  }
307 
308  $obj_dir = $origin_id;
309  $source_dir = $imp_dir . "/" . $this->subdir . "/objects/" . $obj_dir;
310  $target_dir = ilFileUtils::getWebspaceDir() . "/mobs/mm_" . $mob_id;
311 
312  if (is_dir($source_dir)) {
313  ilFileUtils::makeDir($target_dir);
314 
315  if (is_dir($target_dir)) {
316  ilLoggerFactory::getLogger("mob")->debug("s:-$source_dir-,t:-$target_dir-");
317  ilFileUtils::rCopy(realpath($source_dir), realpath($target_dir));
318  }
319  }
320  }
321  }
static getWebspaceDir(string $mode="filesystem")
get webspace directory
static getLogger(string $a_component_id)
Get component logger.
static rCopy(string $a_sdir, string $a_tdir, bool $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
static makeDir(string $a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ emptyMediaMetaCache()

ilQuestionPageParser::emptyMediaMetaCache (   $a_xml_parser)
Parameters
resource$a_xml_parser

Definition at line 1357 of file class.ilQuestionPageParser.php.

Referenced by buildTag().

1357  : void
1358  {
1359  foreach ($this->media_meta_cache as $cache_entry) {
1360  switch ($cache_entry["type"]) {
1361  case "handlerBeginTag":
1362  parent::handlerBeginTag(
1363  $a_xml_parser,
1364  $cache_entry["par1"],
1365  $cache_entry["par2"]
1366  );
1367  break;
1368 
1369  case "handlerEndTag":
1370  parent::handlerEndTag(
1371  $a_xml_parser,
1372  $cache_entry["par1"]
1373  );
1374  break;
1375 
1376  case "handlerCharacterData":
1377  parent::handlerCharacterData(
1378  $a_xml_parser,
1379  $cache_entry["par1"]
1380  );
1381  break;
1382  }
1383  }
1384 
1385  $this->media_meta_start = false;
1386  $this->media_meta_cache[] = [];
1387  }
+ Here is the caller graph for this function:

◆ endElement()

ilQuestionPageParser::endElement ( string  $a_name)

Definition at line 368 of file class.ilQuestionPageParser.php.

Referenced by handlerEndTag().

368  : void
369  {
370  $this->cnt[$a_name]--;
371  unset($this->current_element[count($this->current_element) - 1]);
372  }
+ Here is the caller graph for this function:

◆ getCurrentElement()

ilQuestionPageParser::getCurrentElement ( )

Definition at line 374 of file class.ilQuestionPageParser.php.

Referenced by handlerCharacterData().

374  : string
375  {
376  return ($this->current_element[count($this->current_element) - 1] ?? "");
377  }
+ Here is the caller graph for this function:

◆ getGlossaryTermMap()

ilQuestionPageParser::getGlossaryTermMap ( )
Returns
mixed[]

Definition at line 1392 of file class.ilQuestionPageParser.php.

References $glossary_term_map.

1392  : array
1393  {
1394  return $this->glossary_term_map;
1395  }

◆ getOpenCount()

ilQuestionPageParser::getOpenCount ( string  $a_name)

Definition at line 379 of file class.ilQuestionPageParser.php.

379  : int
380  {
381  if (isset($this->cnt[$a_name])) {
382  return $this->cnt[$a_name];
383  }
384  return 0;
385  }

◆ handlerCharacterData()

ilQuestionPageParser::handlerCharacterData (   $a_xml_parser,
string  $a_data 
)

Definition at line 1304 of file class.ilQuestionPageParser.php.

References getCurrentElement(), and processMeta().

1304  : void
1305  {
1306  // call meta data handler
1307  if ($this->in_meta_data && $this->processMeta()) {
1308  // cache beginning of meta data within media object tags
1309  // (we need to know the id, after that we send the cached data
1310  // to the meta xml handler)
1311  if ($this->in_media_object && $this->media_meta_start) {
1312  $this->media_meta_cache[] =
1313  ["type" => "handlerCharacterData", "par1" => $a_data];
1314  } else {
1315  parent::handlerCharacterData($a_xml_parser, $a_data);
1316  }
1317  }
1318 
1319  // the parser converts "&gt;" to ">" and "&lt;" to "<"
1320  // in character data, but we don't want that, because it's the
1321  // way we mask user html in our content, so we convert back...
1322 
1323  $a_data = str_replace("<", "&lt;", $a_data);
1324  $a_data = str_replace(">", "&gt;", $a_data);
1325 
1326 
1327  // DELETE WHITESPACES AND NEWLINES OF CHARACTER DATA
1328  $a_data = preg_replace("/\n/", "", $a_data);
1329  if (!$this->inside_code) {
1330  $a_data = preg_replace("/\t+/", "", $a_data);
1331  }
1332 
1333  $this->chr_data .= $a_data;
1334 
1335  if (!empty($a_data) || $a_data === "0") {
1336  // append all data to page, if we are within PageObject,
1337  // but not within MetaData or MediaObject
1338  if (($this->in_page_object || $this->in_glossary_definition)
1339  && !$this->in_meta_data && !$this->in_media_object) {
1340  $this->page_object->appendXMLContent($a_data);
1341  }
1342 
1343  switch ($this->getCurrentElement()) {
1344  case "IntLink":
1345  case "ExtLink":
1346  if ($this->in_map_area) {
1347  $this->map_area->appendTitle($a_data);
1348  }
1349  break;
1350  }
1351  }
1352  }
+ Here is the call graph for this function:

◆ handlerEndTag()

ilQuestionPageParser::handlerEndTag (   $a_xml_parser,
string  $a_name 
)

Definition at line 896 of file class.ilQuestionPageParser.php.

References $cur_qid, $import_dir, ilLMObject\_writeImportId(), buildTag(), ilMDSaxParser\enableMDParsing(), endElement(), IL_MODE_ALIAS, ILIAS\Repository\int(), ILIAS\Repository\lng(), ilUtil\parseImportId(), and processMeta().

896  : void
897  {
898  // call meta data handler
899  if ($this->in_meta_data && $this->processMeta()) {
900  // cache beginning of meta data within media object tags
901  // (we need to know the id, after that we send the cached data
902  // to the meta xml handler)
903  if ($this->in_media_object && $this->media_meta_start) {
904  $this->media_meta_cache[] =
905  ["type" => "handlerEndTag", "par1" => $a_name];
906  } else {
907  parent::handlerEndTag($a_xml_parser, $a_name);
908  }
909  }
910 
911  // append content to page xml content
912  if (($this->in_page_object || $this->in_glossary_definition)
913  && !$this->in_meta_data && !$this->in_media_object) {
914  $app_name = ($a_name == "Definition")
915  ? "PageObject"
916  : $a_name;
917  $this->page_object->appendXMLContent($this->buildTag("end", $app_name));
918  }
919 
920  switch ($a_name) {
921  case "StructureObject":
922  unset($this->structure_objects[count($this->structure_objects) - 1]);
923  break;
924 
925  case "PageObject":
926 
927  $this->in_page_object = false;
928  if (($this->coType != "tst") && ($this->coType != "qpl")) {
929  //if (!$this->lm_page_object->isAlias()) {
930  $this->page_object->updateFromXML();
931  $this->pg_mapping[$this->lm_page_object->getImportId()]
932  = $this->lm_page_object->getId();
933 
934  if ($this->mapping instanceof ilImportMapping) {
935  $import_id_parsed = ilUtil::parseImportId($this->lm_page_object->getImportId());
936  if ($import_id_parsed['type'] == 'pg') {
937  $this->mapping->addMapping(
938  'Modules/LearningModule',
939  'pg',
940  $import_id_parsed['id'],
941  $this->lm_page_object->getId()
942  );
943  }
944  }
945 
946  // collect pages with internal links
947  if ($this->page_object->containsIntLink()) {
948  $this->pages_to_parse["lm:" . $this->page_object->getId()] = "lm:" . $this->page_object->getId();
949  }
950 
951  // collect pages with mobs or files
952  if ($this->page_object->needsImportParsing()) {
953  $this->pages_to_parse["lm:" . $this->page_object->getId()] = "lm:" . $this->page_object->getId();
954  }
955 
956  // collect pages with questions
957  if ($this->page_object->getContainsQuestion()) {
958  $this->pages_to_parse["lm:" . $this->page_object->getId()] = "lm:" . $this->page_object->getId();
959  }
960  //}
961  } else {
962  $xml = $this->page_object->getXMLContent();
963  if ($this->cur_qid != "") {
964  $ids = $this->qst_mapping[$this->cur_qid] ?? ['pool' => 0, 'test' => 0];
965  if ($ids["pool"] > 0) {
966  // question pool question
967  $page = new ilAssQuestionPage($ids["pool"]);
968  $xmlcontent = str_replace(
969  $this->cur_qid,
970  "il__qst_" . $ids["pool"],
971  $xml
972  );
973  $page->setXMLContent($xmlcontent);
974  $page->updateFromXML();
975  if ($this->page_object->needsImportParsing()) {
976  $this->pages_to_parse["qpl:" . $page->getId()] = "qpl:" . $page->getId();
977  }
978  unset($page);
979  }
980  if ($ids["test"] > 0) {
981  // test question
982  $page = new ilAssQuestionPage($ids["test"]);
983  $xmlcontent = str_replace(
984  $this->cur_qid,
985  "il__qst_" . $ids["test"],
986  $xml
987  );
988  $page->setXMLContent($xmlcontent);
989  $page->updateFromXML();
990  if ($this->page_object->needsImportParsing()) {
991  $this->pages_to_parse["qpl:" . $page->getId()] = "qpl:" . $page->getId();
992  }
993  unset($page);
994  }
995  }
996  }
997 
998  // if we are within a structure object: put page in tree
999  $cnt = count($this->structure_objects);
1000  if ($cnt > 0) {
1001  $parent_id = $this->structure_objects[$cnt - 1]->getId();
1002  //if ($this->lm_page_object->isAlias()) {
1003  // $this->pg_into_tree[$parent_id][] = array("type" => "pg_alias", "id" => $this->lm_page_object->getOriginId());
1004  //} else {
1005  $this->pg_into_tree[$parent_id][] = ["type" => "pg", "id" => $this->lm_page_object->getId()];
1006  //}
1007  }
1008 
1009  unset($this->page_object);
1010  unset($this->lm_page_object);
1011  unset($this->container[count($this->container) - 1]);
1012  break;
1013 
1014  case "MediaObject":
1015  case "InteractiveImage":
1016  if ($a_name == "MediaObject") {
1017  $this->in_media_object = false;
1018  }
1019 
1020  if (empty($this->mob_mapping[$this->media_object->getImportId()])) {
1021  // create media object
1022  // media items are saves for mobs outside of
1023  // pages only
1024  $this->media_object->create(true, false);
1025 
1026  // collect mobs with internal links
1027  if ($this->media_object->containsIntLink()) {
1028  //echo "got int link :".$this->media_object->getId().":<br>";
1029  $this->mobs_with_int_links[] = $this->media_object->getId();
1030  }
1031 
1032  $this->mob_mapping[$this->media_object->getImportId()]
1033  = $this->media_object->getId();
1034  } else {
1035  // get the id from mapping
1036  $this->media_object->setId($this->mob_mapping[$this->media_object->getImportId()]);
1037 
1038  // update "real" (no alias) media object
1039  // (note: we overwrite any data from the media object
1040  // created by an MediaAlias, only the data of the real
1041  // object is stored in db separately; data of the
1042  // MediaAliases are within the page XML
1043  if (!$this->media_object->isAlias()) {
1044  // now the media items are saved within the db
1045  $this->media_object->update();
1046 
1047  //echo "<br>update media object :".$this->media_object->getId().":";
1048 
1049  // collect mobs with internal links
1050  if ($this->media_object->containsIntLink()) {
1051  //echo "got int link :".$this->media_object->getId().":<br>";
1052  $this->mobs_with_int_links[] = $this->media_object->getId();
1053  }
1054  }
1055  }
1056 
1057  // append media alias to page, if we are in a page
1058  if ($this->in_page_object || $this->in_glossary_definition) {
1059  if ($a_name != "InteractiveImage") {
1060  $this->page_object->appendXMLContent($this->media_object->getXML(IL_MODE_ALIAS));
1061  //echo "Appending:".htmlentities($this->media_object->getXML(IL_MODE_ALIAS))."<br>";
1062  }
1063  }
1064 
1065  break;
1066 
1067  case "MediaItem":
1068  case "MediaAliasItem":
1069  $this->in_media_item = false;
1070  $this->media_object->addMediaItem($this->media_item);
1071  break;
1072 
1073  case "MapArea":
1074  $this->in_map_area = false;
1075  $this->media_item->addMapArea($this->map_area);
1076  break;
1077 
1078  case "Properties":
1079  $this->in_properties = false;
1080  if ($this->content_object->getType() == "lm") {
1081  $this->content_object->update();
1082  }
1083  break;
1084 
1085  case "MetaData":
1086  $this->in_meta_data = false;
1087  if (strtolower(get_class($this->current_object)) == "illmpageobject" && !$this->in_media_object) {
1088  // Metadaten eines PageObjects sichern in NestedSet
1089  if (is_object($this->lm_page_object)) {
1090  // update title/description of page object
1091  $this->current_object->MDUpdateListener('General');
1093  $this->current_object->getId(),
1094  $this->current_object->getImportId()
1095  );
1096  }
1097  } elseif ((strtolower(get_class($this->current_object)) == "ilobjquestionpool" ||
1098  strtolower(get_class($this->current_object)) == "ilobjtest") &&
1099  !$this->in_media_object) {
1100  // !$this->in_media_object && !$this->in_page_object)
1101  // changed for imports of ILIAS 2 Tests where PageObjects could have
1102  // Metadata sections (Helmut Schottmüller, 2005-12-02)
1103  if ($this->metadata_parsing_disabled) {
1104  $this->enableMDParsing(true);
1105  } else {
1106  if ($this->in_page_object && !is_null($this->page_object)) {
1107  /*
1108  $this->page_object->MDUpdateListener('General');
1109  ilLMObject::_writeImportId(
1110  $this->page_object->getId(),
1111  $this->page_object->getImportId()
1112  );*/
1113  } else {
1114  $this->current_object->MDUpdateListener('General');
1116  $this->current_object->getId(),
1117  $this->current_object->getImportId()
1118  );
1119  }
1120  }
1121  } elseif (strtolower(get_class($this->current_object)) == "ilstructureobject") { // save structure object at the end of its meta block
1122  // determine parent
1123  $cnt = count($this->structure_objects);
1124  if ($cnt > 1) {
1125  $parent_id = $this->structure_objects[$cnt - 2]->getId();
1126  } else {
1127  $parent_id = $this->lm_tree->getRootId();
1128  }
1129 
1130  $this->st_into_tree[] = ["id" => $this->current_object->getId(),
1131  "parent" => $parent_id];
1132 
1133  // update title/description of structure object
1134  $this->current_object->MDUpdateListener('General');
1136  $this->current_object->getId(),
1137  $this->current_object->getImportId()
1138  );
1139  } elseif (strtolower(get_class($this->current_object)) == "ilobjlearningmodule" ||
1140  strtolower(get_class($this->current_object)) == "ilobjcontentobject" ||
1141  (strtolower(get_class($this->current_object)) == "ilobjglossary" && $this->in_glossary)) {
1142  // todo: saving of md? getting title/descr and
1143  // set it for current object
1144  } elseif (strtolower(get_class($this->current_object)) == "ilglossaryterm" && !$this->in_media_object) {
1145  // now on top
1146 
1147  $this->page_object->setId($this->glossary_term->getId());
1148  $this->page_object->updateFromXML();
1149 
1150  // todo: saving of md? getting title/descr and
1151  // set it for current object
1152  }
1153 
1154 
1155  if (strtolower(get_class($this->current_object)) == "ilobjlearningmodule" ||
1156  strtolower(get_class($this->current_object)) == "ilobjglossary") {
1157  if (strtolower(get_class($this->current_object)) == "ilobjglossary" &&
1158  $this->content_object->getType() != "glo") {
1159  //echo "<br><b>getting2: ".$this->content_object->getTitle()."</b>";
1160  $this->current_object->setTitle($this->content_object->getTitle() . " - " .
1161  $this->lng->txt("glossary"));
1162  }
1163 
1164  $this->current_object->MDUpdateListener('General');
1165  /*
1166  if (!$this->in_media_object && $this->processMeta())
1167  {
1168  $this->current_object->update();
1169  }
1170  */
1171  }
1172 
1173  if ($this->in_media_object) {
1174  //echo "<br>call media object update listener";
1175  $this->media_object->MDUpdateListener('General');
1176  }
1177 
1178  break;
1179 
1180  case "Meta-Metadata":
1181  $this->in_meta_meta_data = false;
1182  break;
1183 
1184  case "FileItem":
1185  $this->in_file_item = false;
1186  // only update new file items
1187  if ($this->file_item->getImportId()) {
1188  $this->file_item->update();
1189  }
1190  break;
1191 
1192 
1193  case "Table":
1194  unset($this->container[count($this->container) - 1]);
1195  break;
1196 
1197  case "Glossary":
1198  $this->in_glossary = false;
1199  break;
1200 
1201  case "GlossaryTerm":
1202  $term = trim($this->chr_data);
1203  $term = str_replace("&lt;", "<", $term);
1204  $term = str_replace("&gt;", ">", $term);
1205  $this->glossary_term->setTerm($term);
1206  $this->glossary_term->create();
1207  $iia = explode("_", $this->glossary_term->getImportId());
1208  $this->glossary_term_map[(int) $iia[count($iia) - 1]] = $this->glossary_term->getId();
1209  break;
1210 
1211  case "Paragraph":
1212  $this->inside_code = false;
1213  break;
1214 
1215  case "Definition":
1216  $this->in_glossary_definition = false;
1217  $this->page_object->updateFromXML();
1218  $this->page_object->buildDom();
1219  $this->glossary_term->setShortText($this->page_object->getFirstParagraphText());
1220  $this->glossary_term->update();
1221  if ($this->page_object->containsIntLink()) {
1222  $this->pages_to_parse["term:" . $this->page_object->getId()] = "term:" . $this->page_object->getId();
1223  }
1224  if ($this->page_object->needsImportParsing()) {
1225  $this->pages_to_parse["term:" . $this->page_object->getId()] = "term:" . $this->page_object->getId();
1226  }
1227  break;
1228 
1229  case "Format":
1230  if ($this->in_media_item) {
1231  $this->media_item->setFormat(trim($this->chr_data));
1232  }
1233  break;
1234 
1235  case "Title":
1236  if ($this->in_meta_data && !$this->in_media_object) {
1237  $this->current_object->setTitle(trim($this->chr_data));
1238  }
1239  if ($this->in_media_object) {
1240  $this->media_object->setTitle(trim($this->chr_data));
1241  }
1242  break;
1243 
1244  case "Description":
1245  case "Language":
1246  break;
1247 
1248  case "Caption":
1249  if ($this->in_media_object) {
1250  $this->media_item->setCaption(trim($this->chr_data));
1251  }
1252  break;
1253 
1254  case "TextRepresentation":
1255  if ($this->in_media_object) {
1256  $this->media_item->setTextRepresentation(trim($this->chr_data));
1257  }
1258  break;
1259 
1260  // Location
1261  case "Location":
1262  // TODO: adapt for files in "real" subdirectories
1263  if ($this->in_media_item) {
1264  $this->media_item->setLocationType($this->loc_type);
1265  if ($this->loc_type == "Reference") {
1266  $this->media_item->setLocation(str_replace("&", "&amp;", trim($this->chr_data)));
1267  } else {
1268  $this->media_item->setLocation(trim($this->chr_data));
1269  }
1270  }
1271  if ($this->in_file_item) {
1272  // set file name from xml file
1273  $this->file_item->setFileName(trim($this->chr_data));
1274 
1275  // special handling for file names with special characters
1276  // (e.g. "&gt;")
1277  if ($this->file_item->getType() == "file" &&
1278  is_int(strpos($this->chr_data, "&")) &&
1279  is_int(strpos($this->chr_data, ";"))) {
1280  $imp_dir = $this->import_dir;
1281  $source_dir = $imp_dir . "/" . $this->subdir . "/objects/" .
1282  $this->file_item->getImportId();
1283 
1284  // read "physical" file name from directory
1285  if ($dir = opendir($source_dir)) {
1286  while (false !== ($file = readdir($dir))) {
1287  if ($file != "." && $file != "..") {
1288  $this->file_item->setFileName($file);
1289  }
1290  }
1291  closedir($dir);
1292  }
1293  }
1294 
1295  // set file item title
1296  $this->file_item->setTitle(trim($this->chr_data));
1297  }
1298  break;
1299  }
1300  $this->endElement($a_name);
1301  $this->chr_data = "";
1302  }
enableMDParsing(bool $a_status)
buildTag(string $type, string $name, array $attr=[])
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static parseImportId(string $a_import_id)
Parse an ilias import id Typically of type il_[IL_INST_ID]_[OBJ_TYPE]_[OBJ_ID] returns array( &#39;orig&#39; ...
const IL_MODE_ALIAS
static _writeImportId(int $a_id, string $a_import_id)
+ Here is the call graph for this function:

◆ parseLinkTarget()

ilQuestionPageParser::parseLinkTarget ( string  $identifier)
private

Parse a string the get the elements of a link target Return null if the string is not a link target.

Returns
array{target_inst: int, target_type: string, target_id: int}|null

Definition at line 1402 of file class.ilQuestionPageParser.php.

References ILIAS\Repository\int().

Referenced by buildTag(), and processPagesToParse().

1402  : ?array
1403  {
1404  $link_arr = explode('_', $identifier);
1405 
1406  if (count($link_arr) !== 4
1407  || $link_arr[0] !== 'il'
1408  || !is_numeric($link_arr[1])
1409  || !is_numeric($link_arr[3])
1410  ) {
1411  return null;
1412  }
1413 
1414  return [
1415  'target_inst' => (int) $link_arr[1],
1416  'target_type' => (string) $link_arr[2],
1417  'target_id' => (int) $link_arr[3]
1418  ];
1419  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ processMeta()

ilQuestionPageParser::processMeta ( )

Definition at line 882 of file class.ilQuestionPageParser.php.

References $in_glossary_definition.

Referenced by buildTag(), handlerCharacterData(), and handlerEndTag().

882  : bool
883  {
884  // do not process second meta block in (ilias3) glossaries
885  // which comes right after the "Glossary" tag
886  if ($this->content_object->getType() == "glo" &&
887  $this->in_glossary && !$this->in_media_object
889  return false;
890  }
891 
892  return true;
893  }
+ Here is the caller graph for this function:

◆ processPagesToParse()

ilQuestionPageParser::processPagesToParse ( )

parse pages that contain files, mobs and/or internal links

Definition at line 200 of file class.ilQuestionPageParser.php.

References ILIAS\LTI\ToolProvider\$key, ilPageObject\_exists(), ilInternalLink\_getSourcesOfTarget(), SurveyQuestion\_resolveIntLinks(), ilMediaItem\_resolveMapAreaLinks(), ilPageObject\buildDom(), ilPageObjectFactory\getInstance(), assQuestion\instantiateQuestion(), parseLinkTarget(), ilPageObject\resolveIntLinks(), and ilPageObject\update().

Referenced by startParsing().

200  : void
201  {
202  // outgoin internal links
203  foreach ($this->pages_to_parse as $page_id) {
204  $page_arr = explode(":", $page_id);
205  $page_obj = null;
206  //echo "<br>resolve:".$this->content_object->getType().":".$page_id; flush();
207  switch ($page_arr[0]) {
208  case "lm":
209  switch ($this->content_object->getType()) {
210  case "lm":
211  $page_obj = new ilLMPage($page_arr[1]);
212  break;
213 
214  default:
215  die("Unknown content type " . $this->content_object->getType());
216  }
217 
218  break;
219 
220  case "term":
221  $page_obj = new ilGlossaryDefPage($page_arr[1]);
222  break;
223 
224  case "qpl":
225  $page_obj = new ilAssQuestionPage($page_arr[1]);
226  break;
227  }
228  $page_obj->buildDom();
229  $page_obj->resolveIntLinks();
230  $page_obj->resolveIIMMediaAliases($this->mob_mapping);
231  if ($this->coType == "lm") {
232  $page_obj->resolveQuestionReferences($this->qst_mapping);
233  }
234  $page_obj->update(false);
235 
236  if ($page_arr[0] == "term") {
237  $term = new ilGlossaryTerm($page_arr[1]);
238  $term->updateShortText();
239  }
240 
241  unset($page_obj);
242  }
243 
244  //echo "<br><b>map area internal links</b>"; flush();
245  // outgoins map area (mob) internal links
246  foreach ($this->mobs_with_int_links as $mob_id) {
248  }
249 
250  //echo "<br><b>incoming interna links</b>"; flush();
251  // incoming internal links
252  $done = [];
253  foreach ($this->link_targets as $link_target) {
254  $parsed = $this->parseLinkTarget((string) $link_target);
255  if (!isset($parsed)) {
256  continue;
257  }
258  //echo "doin link target:".$link_target.":<br>";
260  $parsed['target_type'],
261  $parsed['target_id'],
262  $parsed['target_inst']
263  );
264 
265  foreach ($sources as $key => $source) {
266  //echo "got source:".$key.":<br>";
267  if (in_array($key, $done)) {
268  continue;
269  }
270  $type_arr = explode(":", $source["type"]);
271 
272  // content object pages
273  if ($type_arr[1] == "pg") {
274  if (ilPageObject::_exists($type_arr[0], $source["id"])) {
275  $page_object = ilPageObjectFactory::getInstance($type_arr[0], $source["id"]);
278  $page_object->update();
279  unset($page_object);
280  }
281  }
282 
283  // eventually correct links in questions to learning modules
284  if ($type_arr[0] == "qst") {
285  assQuestion::instantiateQuestion($source['id'])->resolveSuggestedSolutionLinks();
286  }
287  // eventually correct links in survey questions to learning modules
288  if ($type_arr[0] == "sqst") {
289  SurveyQuestion::_resolveIntLinks($source["id"]);
290  }
291  $done[$key] = $key;
292  }
293  }
294  }
buildDom(bool $a_force=false)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
resolveIntLinks(array $a_link_map=null)
Resolves all internal link targets of the page, if targets are available (after import) ...
update(bool $a_validate=true, bool $a_no_history=false)
update complete page content in db (dom xml content is used)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
parseLinkTarget(string $identifier)
Parse a string the get the elements of a link target Return null if the string is not a link target...
static instantiateQuestion(int $question_id)
static _exists(string $a_parent_type, int $a_id, string $a_lang="", bool $a_no_cache=false)
Checks whether page exists.
string $key
Consumer key/client ID value.
Definition: System.php:193
static _resolveIntLinks(int $question_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _resolveMapAreaLinks(int $a_mob_id)
resolve internal links of all media items of a media object
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getInstance(string $a_parent_type, int $a_id=0, int $a_old_nr=0, string $a_lang="-")
Get page object instance.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setHandlers()

ilQuestionPageParser::setHandlers (   $a_xml_parser)
Parameters
resource$a_xml_parser

Definition at line 132 of file class.ilQuestionPageParser.php.

132  : void
133  {
134  xml_set_object($a_xml_parser, $this);
135  xml_set_element_handler($a_xml_parser, 'handlerBeginTag', 'handlerEndTag');
136  xml_set_character_data_handler($a_xml_parser, 'handlerCharacterData');
137  }

◆ setImportMapping()

ilQuestionPageParser::setImportMapping ( ilImportMapping  $mapping = null)

Definition at line 139 of file class.ilQuestionPageParser.php.

References $mapping.

139  : void
140  {
141  $this->mapping = $mapping;
142  }

◆ setQuestionMapping()

ilQuestionPageParser::setQuestionMapping ( array  $a_map)

set question import ident to pool/test question id mapping

Parameters
mixed[]$a_map

Definition at line 353 of file class.ilQuestionPageParser.php.

353  : void
354  {
355  $this->qst_mapping = $a_map;
356  }

◆ startParsing()

ilQuestionPageParser::startParsing ( )

Definition at line 144 of file class.ilQuestionPageParser.php.

References copyFileItems(), copyMobFiles(), processPagesToParse(), and storeTree().

144  : void
145  {
146  $this->log->debug("start");
147 
148  //echo "<b>start parsing</b><br>";
149  parent::startParsing();
150  //echo "<b>storeTree</b><br>";
151  $this->storeTree();
152  //echo "<b>processPagesToParse</b><br>";
153  $this->processPagesToParse();
154  //echo "<b>copyMobFiles</b><br>";
155  $this->copyMobFiles();
156  //echo "<b>copyFileItems</b><br>";
157  $this->copyFileItems();
158  //echo "<br>END Parsing"; exit;
159  }
processPagesToParse()
parse pages that contain files, mobs and/or internal links
copyMobFiles()
copy multimedia object files from import zip file to mob directory
copyFileItems()
copy files of file items
storeTree()
insert StructureObjects and PageObjects into tree
+ Here is the call graph for this function:

◆ storeTree()

ilQuestionPageParser::storeTree ( )

insert StructureObjects and PageObjects into tree

Definition at line 164 of file class.ilQuestionPageParser.php.

References $log, and ilLogger\write().

Referenced by startParsing().

164  : void
165  {
166  $ilLog = $this->log;
167 
168  foreach ($this->st_into_tree as $st) {
169  $this->lm_tree->insertNode($st["id"], $st["parent"]);
170  if (is_array($this->pg_into_tree[$st["id"]])) {
171  foreach ($this->pg_into_tree[$st["id"]] as $pg) {
172  $pg_id = 0;
173  switch ($pg["type"]) {
174  case "pg_alias":
175  if ($this->pg_mapping[$pg["id"]] == "") {
176  $ilLog->write("LM Import: No PageObject for PageAlias " .
177  $pg["id"] . " found! (Please update export installation to ILIAS 3.3.0)");
178 
179  // Jump two levels up. First level is switch
180  continue 2;
181  }
182  $pg_id = $this->pg_mapping[$pg["id"]];
183  break;
184 
185  case "pg":
186  $pg_id = $pg["id"];
187  break;
188  }
189  if (!$this->lm_tree->isInTree($pg_id)) {
190  $this->lm_tree->insertNode($pg_id, $st["id"]);
191  }
192  }
193  }
194  }
195  }
write(string $message, $level=ilLogLevel::INFO, array $context=[])
write log message
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $chr_data

string ilQuestionPageParser::$chr_data = ""
protected

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

◆ $cnt

array ilQuestionPageParser::$cnt = []

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

◆ $container

array ilQuestionPageParser::$container = []

Definition at line 56 of file class.ilQuestionPageParser.php.

◆ $content_object

ilObject ilQuestionPageParser::$content_object = null

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

Referenced by buildTag().

◆ $coType

string ilQuestionPageParser::$coType = ""
protected

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

◆ $cur_qid

string ilQuestionPageParser::$cur_qid = ""
protected

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

Referenced by handlerEndTag().

◆ $current_element

array ilQuestionPageParser::$current_element = []

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

◆ $current_object

object ilQuestionPageParser::$current_object = null

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

◆ $file_item

ilObjFile ilQuestionPageParser::$file_item = null

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

◆ $file_item_mapping

array ilQuestionPageParser::$file_item_mapping = []

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

◆ $glossary_object

ilObjGlossary ilQuestionPageParser::$glossary_object = null

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

Referenced by buildTag().

◆ $glossary_term

ilGlossaryTerm ilQuestionPageParser::$glossary_term = null
protected

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

Referenced by buildTag().

◆ $glossary_term_map

array ilQuestionPageParser::$glossary_term_map = []
protected

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

Referenced by getGlossaryTermMap().

◆ $import_dir

string ilQuestionPageParser::$import_dir = ""
protected

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

Referenced by copyFileItems(), copyMobFiles(), and handlerEndTag().

◆ $in_file_item

bool ilQuestionPageParser::$in_file_item = false

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

◆ $in_glossary

bool ilQuestionPageParser::$in_glossary = false

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

◆ $in_glossary_definition

bool ilQuestionPageParser::$in_glossary_definition = false
protected

Definition at line 36 of file class.ilQuestionPageParser.php.

Referenced by processMeta().

◆ $in_map_area

bool ilQuestionPageParser::$in_map_area = false

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

◆ $in_media_item

bool ilQuestionPageParser::$in_media_item = false
protected

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

◆ $in_media_object

bool ilQuestionPageParser::$in_media_object = false

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

◆ $in_meta_data

bool ilQuestionPageParser::$in_meta_data = false

Definition at line 58 of file class.ilQuestionPageParser.php.

◆ $in_meta_meta_data

bool ilQuestionPageParser::$in_meta_meta_data = false

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

◆ $in_page_object

bool ilQuestionPageParser::$in_page_object = false

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

◆ $in_properties

bool ilQuestionPageParser::$in_properties
protected

Definition at line 32 of file class.ilQuestionPageParser.php.

◆ $inside_code

bool ilQuestionPageParser::$inside_code = false
protected

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

◆ $learning_module

ilObjLearningModule ilQuestionPageParser::$learning_module = null

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

◆ $link_targets

array ilQuestionPageParser::$link_targets = []

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

◆ $lm_page_object

ilLMPageObject ilQuestionPageParser::$lm_page_object = null

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

Referenced by buildTag().

◆ $lm_tree

ilLMTree ilQuestionPageParser::$lm_tree = null

Definition at line 53 of file class.ilQuestionPageParser.php.

◆ $loc_type

string ilQuestionPageParser::$loc_type = ""

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

◆ $log

ilLogger ilQuestionPageParser::$log
protected

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

Referenced by storeTree().

◆ $map_area

ilMapArea ilQuestionPageParser::$map_area = null

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

◆ $mapping

ilImportMapping ilQuestionPageParser::$mapping = null
protected

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

Referenced by setImportMapping().

◆ $media_item

ilMediaItem ilQuestionPageParser::$media_item = null

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

◆ $media_meta_cache

array ilQuestionPageParser::$media_meta_cache = []
protected

Definition at line 37 of file class.ilQuestionPageParser.php.

◆ $media_meta_start

bool ilQuestionPageParser::$media_meta_start = false
protected

Definition at line 38 of file class.ilQuestionPageParser.php.

◆ $media_object

ilObjMediaObject ilQuestionPageParser::$media_object = null

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

◆ $metadata_parsing_disabled

bool ilQuestionPageParser::$metadata_parsing_disabled = false

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

◆ $mob_mapping

array ilQuestionPageParser::$mob_mapping = []

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

◆ $mobs_with_int_links

array ilQuestionPageParser::$mobs_with_int_links = []
protected

Definition at line 40 of file class.ilQuestionPageParser.php.

◆ $page_object

ilPageObject ilQuestionPageParser::$page_object = null

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

◆ $pages_to_parse

array ilQuestionPageParser::$pages_to_parse = []

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

◆ $pg_into_tree

array ilQuestionPageParser::$pg_into_tree = []

Definition at line 54 of file class.ilQuestionPageParser.php.

◆ $pg_mapping

array ilQuestionPageParser::$pg_mapping = []
protected

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

◆ $qst_mapping

array ilQuestionPageParser::$qst_mapping = []

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

◆ $st_into_tree

array ilQuestionPageParser::$st_into_tree = []

Definition at line 55 of file class.ilQuestionPageParser.php.

◆ $structure_objects

array ilQuestionPageParser::$structure_objects = []

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

◆ $subdir

string ilQuestionPageParser::$subdir = ""

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

◆ $tree

ilTree ilQuestionPageParser::$tree

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

Referenced by __construct().


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