ILIAS  Release_4_4_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
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 
5 require_once("./Modules/LearningModule/classes/class.ilLMObject.php");
6 
18 {
19  var $is_alias;
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)
189  $title = ilLMObject::_lookupTitle($a_st_id);
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 ?>