ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilStructureObject.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2012 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5require_once("./Modules/LearningModule/classes/class.ilLMObject.php");
6
18{
21 var $tree;
22
27 function ilStructureObject(&$a_content_obj, $a_id = 0)
28 {
29 $this->setType("st");
30 parent::ilLMObject($a_content_obj, $a_id);
31 }
32
33 function create($a_upload = false)
34 {
35 parent::create($a_upload);
36 }
37
41 function delete($a_delete_meta_data = true)
42 {
43 // only relevant for online help authoring
44 include_once("./Services/Help/classes/class.ilHelpMapping.php");
46
47 $this->tree = new ilTree($this->getLmId());
48 $this->tree->setTableNames('lm_tree', 'lm_data');
49 $this->tree->setTreeTablePK("lm_id");
50 $node_data = $this->tree->getNodeData($this->getId());
51 $this->delete_rec($this->tree, $a_delete_meta_data);
52 $this->tree->deleteTree($node_data);
53 }
54
58 private function delete_rec(&$a_tree, $a_delete_meta_data = true)
59 {
60 $childs = $a_tree->getChilds($this->getId());
61 foreach ($childs as $child)
62 {
63 $obj =& ilLMObjectFactory::getInstance($this->content_object, $child["obj_id"], false);
64 if (is_object($obj))
65 {
66 if($obj->getType() == "st")
67 {
68 $obj->delete_rec($a_tree, $a_delete_meta_data);
69 }
70 if($obj->getType() == "pg")
71 {
72 $obj->delete($a_delete_meta_data);
73 }
74 }
75 unset($obj);
76 }
77 parent::delete($a_delete_meta_data);
78 }
79
83 function copy($a_target_lm)
84 {
85 $chap = new ilStructureObject($a_target_lm);
86 $chap->setTitle($this->getTitle());
87 if ($this->getLMId() != $a_target_lm->getId())
88 {
89 $chap->setImportId("il__st_".$this->getId());
90 }
91 $chap->setLMId($a_target_lm->getId());
92 $chap->setType($this->getType());
93 $chap->setDescription($this->getDescription());
94 $chap->create(true);
95 $a_copied_nodes[$this->getId()] = $chap->getId();
96
97 // copy meta data
98 include_once("Services/MetaData/classes/class.ilMD.php");
99 $md = new ilMD($this->getLMId(), $this->getId(), $this->getType());
100 $new_md =& $md->cloneMD($a_target_lm->getId(), $chap->getId(), $this->getType());
101
102 // copy translations
103 include_once("./Modules/LearningModule/classes/class.ilLMObjTranslation.php");
104 ilLMObjTranslation::copy($this->getId(), $chap->getId());
105
106
107 return $chap;
108 }
109
116 function exportXML(&$a_xml_writer, $a_inst, &$expLog)
117 {
118 global $ilBench;
119
120 $expLog->write(date("[y-m-d H:i:s] ")."Structure Object ".$this->getId());
121 $attrs = array();
122 $a_xml_writer->xmlStartTag("StructureObject", $attrs);
123
124 // MetaData
125 $ilBench->start("ContentObjectExport", "exportStructureObject_exportMeta");
126 $this->exportXMLMetaData($a_xml_writer);
127 $ilBench->stop("ContentObjectExport", "exportStructureObject_exportMeta");
128
129 // StructureObjects
130 $ilBench->start("ContentObjectExport", "exportStructureObject_exportPageObjects");
131 $this->exportXMLPageObjects($a_xml_writer, $a_inst);
132 $ilBench->stop("ContentObjectExport", "exportStructureObject_exportPageObjects");
133
134 // PageObjects
135 $this->exportXMLStructureObjects($a_xml_writer, $a_inst, $expLog);
136
137 // Layout
138 // not implemented
139
140 $a_xml_writer->xmlEndTag("StructureObject");
141 }
142
143
150 function exportXMLMetaData(&$a_xml_writer)
151 {
152 include_once("Services/MetaData/classes/class.ilMD2XML.php");
153 $md2xml = new ilMD2XML($this->getLMId(), $this->getId(), $this->getType());
154 $md2xml->setExportMode(true);
155 $md2xml->startExport();
156 $a_xml_writer->appendXML($md2xml->getXML());
157 }
158
159 function modifyExportIdentifier($a_tag, $a_param, $a_value)
160 {
161 if ($a_tag == "Identifier" && $a_param == "Entry")
162 {
163 $a_value = "il_".IL_INST_ID."_st_".$this->getId();
164 }
165
166 return $a_value;
167 }
168
173 static function _getPresentationTitle($a_st_id, $a_include_numbers = false,
174 $a_time_scheduled_activation = false, $a_lm_id = 0, $a_lang = "-")
175 {
176 global $ilDB;
177
178 if ($a_lm_id == 0)
179 {
180 $a_lm_id = ilLMObject::_lookupContObjID($a_st_id);
181 }
182
183 if ($a_lm_id == 0)
184 {
185 return "";
186 }
187
188 // this is optimized when ilLMObject::preloadDataByLM is invoked (e.g. done in ilLMExplorerGUI)
190
191 // this is also optimized since ilObjectTranslation re-uses instances for one lm
192 include_once("./Services/Object/classes/class.ilObjectTranslation.php");
193 $ot = ilObjectTranslation::getInstance($a_lm_id);
194 $languages = $ot->getLanguages();
195
196 if ($a_lang != "-" && $ot->getContentActivated() && isset($languages[$a_lang]))
197 {
198 include_once("./Modules/LearningModule/classes/class.ilLMObjTranslation.php");
199 $lmobjtrans = new ilLMObjTranslation($a_st_id, $a_lang);
200 if ($lmobjtrans->getTitle() != "")
201 {
202 $title = $lmobjtrans->getTitle();
203 }
204 }
205
206 include_once("./Modules/LearningModule/classes/class.ilLMTree.php");
207 $tree = ilLMTree::getInstance($a_lm_id);
208
209 if ($a_include_numbers)
210 {
211 // this is optimized, since isInTree is cached
212 if ($tree->isInTree($a_st_id))
213 {
214 // optimization needed from here
215
216 // get chapter tree node
217 $query = "SELECT * FROM lm_tree WHERE child = ".
218 $ilDB->quote($a_st_id, "integer")." AND lm_id = ".
219 $ilDB->quote($a_lm_id, "integer");
220 $tree_set = $ilDB->query($query);
221 $tree_node = $tree_set->fetchRow(DB_FETCHMODE_ASSOC);
222 $depth = $tree_node["depth"];
223
224 $nr = $tree->getChildSequenceNumber($tree_node, "st")." ";
225 for ($i = $depth - 1; $i > 1; $i --)
226 {
227 // get next parent tree node
228 $query = "SELECT * FROM lm_tree WHERE child = ".
229 $ilDB->quote($tree_node["parent"], "integer")." AND lm_id = ".
230 $ilDB->quote($a_lm_id, "integer");
231 $tree_set = $ilDB->query($query);
232 $tree_node = $tree_set->fetchRow(DB_FETCHMODE_ASSOC);
233 $seq = $tree->getChildSequenceNumber($tree_node, "st");
234
235 $nr = $seq.".".$nr;
236 }
237 }
238 }
239
240 return $nr.$title;
241 }
242
243
244
251 function exportXMLPageObjects(&$a_xml_writer, $a_inst = 0)
252 {
253 include_once './Modules/LearningModule/classes/class.ilLMPageObject.php';
254
255 global $ilBench;
256
257 $this->tree = new ilTree($this->getLmId());
258 $this->tree->setTableNames('lm_tree', 'lm_data');
259 $this->tree->setTreeTablePK("lm_id");
260
261 $childs = $this->tree->getChilds($this->getId());
262 foreach ($childs as $child)
263 {
264 if($child["type"] != "pg")
265 {
266 continue;
267 }
268
269 // export xml to writer object
270 $ilBench->start("ContentObjectExport", "exportStructureObject_exportPageObjectAlias");
271 //$ilBench->start("ContentObjectExport", "exportStructureObject_getLMPageObject");
272 //$page_obj = new ilLMPageObject($this->getContentObject(), $child["obj_id"]);
273 //$ilBench->stop("ContentObjectExport", "exportStructureObject_getLMPageObject");
274 ilLMPageObject::_exportXMLAlias($a_xml_writer, $child["obj_id"], $a_inst);
275 //$page_obj->exportXML($a_xml_writer, "alias", $a_inst);
276 //unset($page_obj);
277 $ilBench->stop("ContentObjectExport", "exportStructureObject_exportPageObjectAlias");
278 }
279 }
280
281
288 function exportXMLStructureObjects(&$a_xml_writer, $a_inst, &$expLog)
289 {
290 $this->tree = new ilTree($this->getLmId());
291 $this->tree->setTableNames('lm_tree', 'lm_data');
292 $this->tree->setTreeTablePK("lm_id");
293
294 $childs = $this->tree->getChilds($this->getId());
295 foreach ($childs as $child)
296 {
297 if($child["type"] != "st")
298 {
299 continue;
300 }
301
302 // export xml to writer object
303 $structure_obj = new ilStructureObject($this->getContentObject(),
304 $child["obj_id"]);
305 $structure_obj->exportXML($a_xml_writer, $a_inst, $expLog);
306 unset($structure_obj);
307 }
308 }
309
316 function exportFO(&$a_xml_writer)
317 {
318 global $ilBench;
319
320 //$expLog->write(date("[y-m-d H:i:s] ")."Structure Object ".$this->getId());
321
322 // fo:block (complete)
323 $attrs = array();
324 $attrs["font-family"] = "Times";
325 $attrs["font-size"] = "14pt";
326 $a_xml_writer->xmlElement("fo:block", $attrs, $this->getTitle());
327
328 // page objects
329 //$ilBench->start("ContentObjectExport", "exportStructureObject_exportPageObjects");
330 $this->exportFOPageObjects($a_xml_writer);
331 //$ilBench->stop("ContentObjectExport", "exportStructureObject_exportPageObjects");
332
333 // structure objects
334 //$this->exportFOStructureObjects($a_xml_writer);
335
336 }
337
344 function exportFOPageObjects(&$a_xml_writer)
345 {
346 global $ilBench;
347
348 $this->tree = new ilTree($this->getLmId());
349 $this->tree->setTableNames('lm_tree', 'lm_data');
350 $this->tree->setTreeTablePK("lm_id");
351
352 $childs = $this->tree->getChilds($this->getId());
353 foreach ($childs as $child)
354 {
355 if($child["type"] != "pg")
356 {
357 continue;
358 }
359
360 // export xml to writer object
361 //$ilBench->start("ContentObjectExport", "exportStructureObject_exportPageObjectAlias");
362
363 $page_obj = new ilLMPageObject($this->getContentObject(), $child["obj_id"]);
364 $page_obj->exportFO($a_xml_writer);
365
366 //$ilBench->stop("ContentObjectExport", "exportStructureObject_exportPageObjectAlias");
367 }
368 }
369
376 static function getChapterList($a_lm_id)
377 {
378 $tree = new ilTree($a_lm_id);
379 $tree->setTableNames('lm_tree', 'lm_data');
380 $tree->setTreeTablePK("lm_id");
381
382 $chapters = array();
383 $ndata = $tree->getNodeData($tree->readRootId());
384 $childs = $tree->getSubtree($ndata);
385 foreach ($childs as $child)
386 {
387 if($child["type"] == "st")
388 {
389 $chapters[] = $child;
390 }
391
392 }
393 return $chapters;
394 }
395
396}
397?>
const DB_FETCHMODE_ASSOC
Definition: class.ilDB.php:10
removeScreenIdsOfChapter($a_chap, $a_module_id=0)
Remove screen ids of chapter.
Translation information on lm object.
static copy($a_source_id, $a_target_id)
Copy all translations of an object.
getInstance(&$a_content_obj, $a_id=0, $a_halt=true)
Class ilLMObject.
getTitle()
get title of lm object
static _lookupTitle($a_obj_id)
Lookup title.
setType($a_type)
_lookupContObjID($a_id)
get learning module / digibook id for lm object
Class ilLMPageObject.
_exportXMLAlias(&$a_xml_writer, $a_id, $a_inst=0)
export page alias to xml
static getInstance($a_tree_id)
Get Instance.
static getInstance($a_obj_id)
Get instance.
Class ilStructreObject.
exportXML(&$a_xml_writer, $a_inst, &$expLog)
export object to xml (see ilias_co.dtd)
exportXMLMetaData(&$a_xml_writer)
export structure objects meta data to xml (see ilias_co.dtd)
static getChapterList($a_lm_id)
export (sub)structure objects of structure object (see ilias_co.dtd)
exportFO(&$a_xml_writer)
export object to fo
delete_rec(&$a_tree, $a_delete_meta_data=true)
Delete sub tree.
ilStructureObject(&$a_content_obj, $a_id=0)
Constructor @access public.
exportXMLPageObjects(&$a_xml_writer, $a_inst=0)
export page objects of structure object (see ilias_co.dtd)
exportXMLStructureObjects(&$a_xml_writer, $a_inst, &$expLog)
export (sub)structure objects of structure object (see ilias_co.dtd)
modifyExportIdentifier($a_tag, $a_param, $a_value)
static _getPresentationTitle($a_st_id, $a_include_numbers=false, $a_time_scheduled_activation=false, $a_lm_id=0, $a_lang="-")
get presentation title
copy($a_target_lm)
copy chapter
exportFOPageObjects(&$a_xml_writer)
export page objects of structure object (see ilias_co.dtd)
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
global $ilBench
Definition: ilias.php:18
global $ilDB