ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilLMPageObject.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5require_once("./Modules/LearningModule/classes/class.ilLMObject.php");
6require_once("./Modules/LearningModule/classes/class.ilLMPage.php");
7
8define ("IL_CHAPTER_TITLE", "st_title");
9define ("IL_PAGE_TITLE", "pg_title");
10define ("IL_NO_HEADER", "none");
11
30{
33 var $id;
34 var $ilias;
35 var $dom;
37
42 function __construct(&$a_content_obj, $a_id = 0, $a_halt = true)
43 {
44 global $ilias, $ilBench;
45
46 $ilBench->start("ContentPresentation", "ilLMPageObject_Constructor");
47
48 parent::__construct($a_content_obj, $a_id);
49 $this->setType("pg");
50 $this->id = $a_id;
51
52 $this->is_alias = false;
53 $this->contains_int_link = false;
54 $this->mobs_contained = array();
55 $this->files_contained = array();
56 $this->halt_on_error = $a_halt;
57
58 if($a_id != 0)
59 {
60 $this->read();
61 }
62
63 $ilBench->stop("ContentPresentation", "ilLMPageObject_Constructor");
64 }
65
66 function __desctruct()
67 {
68 if(is_object($this->page_object))
69 {
70 unset($this->page_object);
71 }
72 }
73
77 function read()
78 {
79 parent::read();
80
81 $this->page_object = new ilLMPage($this->id, 0);
82 }
83
84 function create($a_upload = false, $a_omit_page_object_creation = false)
85 {
86 parent::create($a_upload);
87 if ($a_omit_page_object_creation)
88 {
89 return;
90 }
91 if(!is_object($this->page_object))
92 {
93 $this->page_object = new ilLMPage();
94 }
95 $this->page_object->setId($this->getId());
96 $this->page_object->setParentId($this->getLMId());
97 $this->page_object->create($a_upload);
98 }
99
100 function delete($a_delete_meta_data = true)
101 {
102 parent::delete($a_delete_meta_data);
103 $this->page_object->delete();
104 }
105
106
110 function copy($a_target_lm)
111 {
112 // copy page
113 $lm_page = new ilLMPageObject($a_target_lm);
114 $lm_page->setTitle($this->getTitle());
115 $lm_page->setLayout($this->getLayout());
116 $lm_page->setLMId($a_target_lm->getId());
117 $lm_page->setType($this->getType());
118 $lm_page->setDescription($this->getDescription());
119 $lm_page->setImportId("il__pg_".$this->getId());
120 $lm_page->create(true); // setting "upload" flag to true prevents creating of meta data
121
122 // check whether export id already exists in the target lm
123 $del_exp_id = false;
124 $exp_id = ilLMPageObject::getExportId($this->getLMId(), $this->getId());
125 if (trim($exp_id) != "")
126 {
127 if (ilLMPageObject::existsExportID($a_target_lm->getId(), $exp_id))
128 {
129 $del_exp_id = true;
130 }
131 }
132
133 // copy meta data
134 include_once("Services/MetaData/classes/class.ilMD.php");
135 $md = new ilMD($this->getLMId(), $this->getId(), $this->getType());
136 $new_md = $md->cloneMD($a_target_lm->getId(), $lm_page->getId(), $this->getType());
137
138 // check whether export id already exists in the target lm
139 if ($del_exp_id)
140 {
141 ilLMPageObject::saveExportId($a_target_lm->getId(), $lm_page->getId(), "");
142 }
143 else
144 {
145 ilLMPageObject::saveExportId($a_target_lm->getId(), $lm_page->getId(),
146 trim($exp_id));
147 }
148
149 // copy page content and activation
150 $page = $lm_page->getPageObject();
151 $this->page_object->copy($page->getId(), $page->getParentType(), $page->getParentId());
152 /*$page->setXMLContent($this->page_object->copyXMLContent());
153 $page->setActive($this->page_object->getActive());
154 $page->setActivationStart($this->page_object->getActivationStart());
155 $page->setActivationEnd($this->page_object->getActivationEnd());
156 $page->buildDom();
157 $page->update();*/
158 $lm_page->read(); // this gets the updated page object into lm page
159
160 // copy translations
161 include_once("./Modules/LearningModule/classes/class.ilLMObjTranslation.php");
162 ilLMObjTranslation::copy($this->getId(), $lm_page->getId());
163
164 return $lm_page;
165 }
166
170 function &copyToOtherContObject(&$a_cont_obj, &$a_copied_nodes)
171 {
172 // copy page
173 $lm_page = new ilLMPageObject($a_cont_obj);
174 $lm_page->setTitle($this->getTitle());
175 $lm_page->setLMId($a_cont_obj->getId());
176 $lm_page->setImportId("il__pg_".$this->getId());
177 $lm_page->setType($this->getType());
178 $lm_page->setDescription($this->getDescription());
179 $lm_page->create(true); // setting "upload" flag to true prevents creating of meta data
180 $a_copied_nodes[$this->getId()] = $lm_page->getId();
181
182 // copy meta data
183 include_once("Services/MetaData/classes/class.ilMD.php");
184 $md = new ilMD($this->getLMId(), $this->getId(), $this->getType());
185 $new_md = $md->cloneMD($a_cont_obj->getId(), $lm_page->getId(), $this->getType());
186
187 // copy page content
188 $page = $lm_page->getPageObject();
189 $page->setXMLContent($this->page_object->getXMLContent());
190 $page->buildDom();
191 $page->update();
192
193 return $lm_page;
194 }
195
203 static function _splitPage($a_page_id, $a_pg_parent_type, $a_hier_id)
204 {
205 // get content object (learning module / digilib book)
208 include_once ("./Modules/LearningModule/classes/class.ilObjLearningModule.php");
209 $cont_obj = new ilObjLearningModule($lm_id, false);
210 $source_lm_page = new ilLMPageObject($cont_obj, $a_page_id);
211
212 // create new page
213 $lm_page = new ilLMPageObject($cont_obj);
214 $lm_page->setTitle($source_lm_page->getTitle());
215 $lm_page->setLMId($source_lm_page->getLMId());
216 $lm_page->setType($source_lm_page->getType());
217 $lm_page->setDescription($source_lm_page->getDescription());
218 $lm_page->create(true);
219
220
221 // copy complete content of source page to new page
222 $source_page = $source_lm_page->getPageObject();
223 $page = $lm_page->getPageObject();
224 $page->setXMLContent($source_page->copyXMLContent());
225//echo htmlentities($source_page->copyXMLContent());
226 $page->buildDom(true);
227 $page->update();
228// echo "-".$page->getId()."-".$page->getParentType()."-";
229
230 // copy meta data
231 include_once("Services/MetaData/classes/class.ilMD.php");
232 $md = new ilMD($source_lm_page->getLMId(), $a_page_id, $source_lm_page->getType());
233 $md->cloneMD($source_lm_page->getLMId(), $lm_page->getId(), $source_lm_page->getType());
234
235 // insert new page in tree (after original page)
236 $tree = new ilTree($cont_obj->getId());
237 $tree->setTableNames('lm_tree','lm_data');
238 $tree->setTreeTablePK("lm_id");
239 if ($tree->isInTree($source_lm_page->getId()))
240 {
241 $parent_node = $tree->getParentNodeData($source_lm_page->getId());
242 $tree->insertNode($lm_page->getId(), $parent_node["child"], $source_lm_page->getId());
243 }
244
245 // remove all nodes < hierarchical id from new page (incl. update)
246 $page->addHierIds();
247 $page->deleteContentBeforeHierId($a_hier_id);
248// $page->update();
249
250 // remove all nodes >= hierarchical id from source page
251 $source_page->buildDom();
252 $source_page->addHierIds();
253 $source_page->deleteContentFromHierId($a_hier_id);
254
255 return $lm_page;
256
257 }
258
266 static function _splitPageNext($a_page_id, $a_pg_parent_type, $a_hier_id)
267 {
268 // get content object (learning module / digilib book)
271 include_once ("./Modules/LearningModule/classes/class.ilObjLearningModule.php");
272 $cont_obj = new ilObjLearningModule($lm_id, false);
273 $tree = new ilTree($cont_obj->getId());
274 $tree->setTableNames('lm_tree','lm_data');
275 $tree->setTreeTablePK("lm_id");
276
277 $source_lm_page = new ilLMPageObject($cont_obj, $a_page_id);
278 $source_page = $source_lm_page->getPageObject();
279
280 // get next page
281 $succ = $tree->fetchSuccessorNode($a_page_id, "pg");
282 if ($succ["child"] > 0)
283 {
284 $target_lm_page = new ilLMPageObject($cont_obj, $succ["child"]);
285 $target_page = $target_lm_page->getPageObject();
286 $target_page->buildDom();
287 $target_page->addHierIds();
288
289 // move nodes to target page
290 $source_page->buildDom();
291 $source_page->addHierIds();
292 ilLMPage::_moveContentAfterHierId($source_page, $target_page, $a_hier_id);
293 //$source_page->deleteContentFromHierId($a_hier_id);
294
295 return $succ["child"];
296 }
297
298 }
299
300
306 function assignPageObject(&$a_page_obj)
307 {
308 $this->page_object = $a_page_obj;
309 }
310
311
317 function &getPageObject()
318 {
319 return $this->page_object;
320 }
321
322
326 function setId($a_id)
327 {
328 $this->id = $a_id;
329 }
330
331 function getId()
332 {
333 return $this->id;
334 }
335
339 function setAlias($a_is_alias)
340 {
341 $this->is_alias = $a_is_alias;
342 }
343
344 function isAlias()
345 {
346 return $this->is_alias;
347 }
348
349 // only for page aliases
350 function setOriginID($a_id)
351 {
352 return $this->origin_id = $a_id;
353 }
354
355 // only for page aliases
356 function getOriginID()
357 {
358 return $this->origin_id;
359 }
360
364 public static function getPageList($lm_id)
365 {
366 return ilLMObject::getObjectList($lm_id, "pg");
367 }
368
372 static function getPagesWithLinksList($a_lm_id, $a_par_type)
373 {
374 $pages = ilLMPageObject::getPageList($a_lm_id);
375 $ids = array();
376 foreach($pages as $page)
377 {
378 $ids[] = $page["obj_id"];
379 }
380
381 $linked_pages = ilLMPage::getPagesWithLinks($a_par_type, $a_lm_id);
382 $result = array();
383 foreach($pages as $page)
384 {
385 if (is_array($linked_pages[$page["obj_id"]]))
386 {
387 $result[] = $page;
388 }
389 }
390 return $result;
391 }
392
399 static function _getPresentationTitle($a_pg_id, $a_mode = IL_CHAPTER_TITLE,
400 $a_include_numbers = false, $a_time_scheduled_activation = false,
401 $a_force_content = false, $a_lm_id = 0, $a_lang = "-")
402 {
403 if($a_mode == IL_NO_HEADER && !$a_force_content)
404 {
405 return "";
406 }
407
408 if ($a_lm_id == 0)
409 {
410 $a_lm_id = ilLMObject::_lookupContObjID($a_pg_id);
411 }
412
413 if ($a_lm_id == 0)
414 {
415 return "";
416 }
417
418 // this is optimized when ilLMObject::preloadDataByLM is invoked (e.g. done in ilLMExplorerGUI)
420
421 // this is also optimized since ilObjectTranslation re-uses instances for one lm
422 include_once("./Services/Object/classes/class.ilObjectTranslation.php");
423 $ot = ilObjectTranslation::getInstance($a_lm_id);
424 $languages = $ot->getLanguages();
425
426 if ($a_lang != "-" && $ot->getContentActivated() && isset($languages[$a_lang]))
427 {
428 include_once("./Modules/LearningModule/classes/class.ilLMObjTranslation.php");
429 $lmobjtrans = new ilLMObjTranslation($a_pg_id, $a_lang);
430 if ($lmobjtrans->getTitle() != "")
431 {
432 $title = $lmobjtrans->getTitle();
433 }
434 }
435
436 if($a_mode == IL_PAGE_TITLE)
437 {
438 return $title;
439 }
440
441 include_once("./Modules/LearningModule/classes/class.ilLMTree.php");
442 $tree = ilLMTree::getInstance($a_lm_id);
443
444 if ($tree->isInTree($a_pg_id))
445 {
446 $pred_node = $tree->fetchPredecessorNode($a_pg_id, "st");
447 $childs = $tree->getChildsByType($pred_node["obj_id"], "pg");
448 $cnt_str = "";
449 if(count($childs) > 1)
450 {
451 $cnt = 0;
452 foreach($childs as $child)
453 {
454 include_once("./Modules/LearningModule/classes/class.ilLMPage.php");
455 $active = ilLMPage::_lookupActive($child["obj_id"],
456 ilObject::_lookupType($a_lm_id), $a_time_scheduled_activation);
457
458 if (!$active)
459 {
460 $act_data = ilLMPage::_lookupActivationData((int) $child["obj_id"], ilObject::_lookupType($a_lm_id));
461 if ($act_data["show_activation_info"] &&
462 (ilUtil::now() < $act_data["activation_start"]))
463 {
464 $active = true;
465 }
466 }
467
468 if ($child["type"] != "pg" || $active)
469 {
470 $cnt++;
471 }
472 if($child["obj_id"] == $a_pg_id)
473 {
474 $cur_cnt = $cnt;
475 }
476 }
477 if ($cnt > 1)
478 {
479 $cnt_str = " (".$cur_cnt."/".$cnt.")";
480 }
481 }
482 require_once("./Modules/LearningModule/classes/class.ilStructureObject.php");
483 //$struct_obj = new ilStructureObject($pred_node["obj_id"]);
484 //return $struct_obj->getTitle();
486 $a_include_numbers, false, false, 0, $a_lang).$cnt_str;
487
488 //return $pred_node["title"].$cnt_str;
489 }
490 else
491 {
492 return $title;
493 }
494 }
495
502 function exportXML(&$a_xml_writer, $a_mode = "normal", $a_inst = 0)
503 {
504 global $ilBench;
505
506 $attrs = array();
507 $a_xml_writer->xmlStartTag("PageObject", $attrs);
508
509 switch ($a_mode)
510 {
511 case "normal":
512 // MetaData
513 $ilBench->start("ContentObjectExport", "exportPageObject_XML_Meta");
514 $this->exportXMLMetaData($a_xml_writer);
515 $ilBench->stop("ContentObjectExport", "exportPageObject_XML_Meta");
516
517 // PageContent
518 $ilBench->start("ContentObjectExport", "exportPageObject_XML_PageContent");
519 $this->exportXMLPageContent($a_xml_writer, $a_inst);
520 $ilBench->stop("ContentObjectExport", "exportPageObject_XML_PageContent");
521 break;
522
523 case "alias":
524 $attrs = array();
525 $attrs["OriginId"] = "il_".$a_inst.
526 "_pg_".$this->getId();
527 $a_xml_writer->xmlElement("PageAlias", $attrs);
528 break;
529 }
530
531 // Layout
532 // not implemented
533
534 $a_xml_writer->xmlEndTag("PageObject");
535 }
536
540 static function _exportXMLAlias(&$a_xml_writer, $a_id, $a_inst = 0)
541 {
542 $attrs = array();
543 $a_xml_writer->xmlStartTag("PageObject", $attrs);
544
545 $attrs = array();
546 $attrs["OriginId"] = "il_".$a_inst.
547 "_pg_".$a_id;
548 $a_xml_writer->xmlElement("PageAlias", $attrs);
549
550 $a_xml_writer->xmlEndTag("PageObject");
551 }
552
553
560 function exportXMLMetaData(&$a_xml_writer)
561 {
562 include_once("Services/MetaData/classes/class.ilMD2XML.php");
563 $md2xml = new ilMD2XML($this->getLMId(), $this->getId(), $this->getType());
564 $md2xml->setExportMode(true);
565 $md2xml->startExport();
566 $a_xml_writer->appendXML($md2xml->getXML());
567 }
568
569 function modifyExportIdentifier($a_tag, $a_param, $a_value)
570 {
571 if ($a_tag == "Identifier" && $a_param == "Entry")
572 {
573 $a_value = "il_".IL_INST_ID."_pg_".$this->getId();
574 //$a_value = ilUtil::insertInstIntoID($a_value);
575 }
576
577 return $a_value;
578 }
579
580
587 function exportXMLPageContent(&$a_xml_writer, $a_inst = 0)
588 {
589//echo "exportxmlpagecontent:$a_inst:<br>";
590 $cont_obj = $this->getContentObject();
591
592 $this->page_object->buildDom();
593 $this->page_object->insertInstIntoIDs($a_inst);
594 $this->mobs_contained = $this->page_object->collectMediaObjects(false);
595 //$this->files_contained = $this->page_object->collectFileItems();
596 include_once("./Services/COPage/classes/class.ilPCFileList.php");
597 $this->files_contained = ilPCFileList::collectFileItems($this->page_object, $this->page_object->getDomDoc());
598// $this->questions_contained = $this->page_object->getQuestionIds();
599 $xml = $this->page_object->getXMLFromDom(false, false, false, "", true);
600 $xml = str_replace("&","&amp;", $xml);
601 $a_xml_writer->appendXML($xml);
602
603 $this->page_object->freeDom();
604 }
605
611 function getQuestionIds()
612 {
613 include_once("./Services/COPage/classes/class.ilPCQuestion.php");
614 return ilPCQuestion::_getQuestionIdsForPage($this->content_object->getType(),
615 $this->getId());
616 }
617
624 {
625 return $this->mobs_contained;
626 }
627
633 function getFileItemIds()
634 {
635 return $this->files_contained;
636 }
637
644 function exportFO(&$a_xml_writer)
645 {
646 global $ilBench;
647
648 //$attrs = array();
649 //$a_xml_writer->xmlStartTag("PageObject", $attrs);
651 if ($title != "")
652 {
653 $attrs = array();
654 $attrs["font-family"] = "Times";
655 $attrs["font-size"] = "14pt";
656 $a_xml_writer->xmlElement("fo:block", $attrs, $title);
657 }
658
659 // PageContent
660 $this->page_object->buildDom();
661 $fo = $this->page_object->getFO();
662 $a_xml_writer->appendXML($fo);
663
664 //$a_xml_writer->xmlEndTag("PageObject");
665 }
666
673 static function queryQuestionsOfLearningModule($a_lm_id, $a_order_field,
674 $a_order_dir, $a_offset, $a_limit)
675 {
676 global $ilDB, $rbacreview;
677
678
679 // count query
680 $count_query = "SELECT count(pq.question_id) cnt ";
681
682 // basic query
683 $query = "SELECT pq.page_id, pq.question_id ";
684
685 $from = " FROM page_question pq JOIN lm_tree t ON (t.lm_id = ".$ilDB->quote($a_lm_id, "integer").
686 " AND pq.page_id = t.child and pq.page_parent_type = ".$ilDB->quote("lm", "text").") ".
687 " WHERE t.lm_id = ".$ilDB->quote($a_lm_id, "integer");
688 $count_query.= $from;
689 $query.= $from;
690
691
692 // count query
693 $set = $ilDB->query($count_query);
694 $cnt = 0;
695 if ($rec = $ilDB->fetchAssoc($set))
696 {
697 $cnt = $rec["cnt"];
698 }
699
700 $offset = (int) $a_offset;
701 $limit = (int) $a_limit;
702 if ($a_limit > 0)
703 {
704 $ilDB->setLimit($limit, $offset);
705 }
706
707 // set query
708 $set = $ilDB->query($query);
709 $result = array();
710 while($rec = $ilDB->fetchAssoc($set))
711 {
712 $result[] = $rec;
713 }
714 return array("cnt" => $cnt, "set" => $result);
715 }
716}
717?>
$result
An exception for terminatinating execution or to throw for unit testing.
const IL_PAGE_TITLE
const IL_CHAPTER_TITLE
const IL_NO_HEADER
Translation information on lm object.
static copy($a_source_id, $a_target_id)
Copy all translations of an object.
Class ilLMObject.
static getExportId($a_lm_id, $a_lmobj_id, $a_type="pg")
Get export ID.
static getObjectList($lm_id, $type="")
static
static _lookupContObjID($a_id)
get learning module / digibook id for lm object
existsExportID($a_lm_id, $a_exp_id, $a_type="pg")
Does export ID exist in lm?
getLayout()
Get layout.
static saveExportId($a_lm_id, $a_lmobj_id, $a_exp_id, $a_type="pg")
Save export id.
getTitle()
get title of lm object
static _lookupTitle($a_obj_id)
Lookup title.
setType($a_type)
Class ilLMPageObject.
getMediaObjectIds()
get ids of all media objects within the page
exportXMLMetaData(&$a_xml_writer)
export page objects meta data to xml (see ilias_co.dtd)
static _splitPageNext($a_page_id, $a_pg_parent_type, $a_hier_id)
split page to next page at hierarchical id
getFileItemIds()
get ids of all file items within the page
static _splitPage($a_page_id, $a_pg_parent_type, $a_hier_id)
split page at hierarchical id
copy($a_target_lm)
copy page
assignPageObject(&$a_page_obj)
assign page object
& copyToOtherContObject(&$a_cont_obj, &$a_copied_nodes)
copy a page to another content object (learning module / dlib book)
create($a_upload=false, $a_omit_page_object_creation=false)
exportFO(&$a_xml_writer)
export page object to fo
& getPageObject()
get assigned page object
setAlias($a_is_alias)
set wether page object is an alias
static getPageList($lm_id)
static
exportXMLPageContent(&$a_xml_writer, $a_inst=0)
export page objects meta data to xml (see ilias_co.dtd)
exportXML(&$a_xml_writer, $a_mode="normal", $a_inst=0)
export page object to xml (see ilias_co.dtd)
getQuestionIds()
Get question ids.
static queryQuestionsOfLearningModule($a_lm_id, $a_order_field, $a_order_dir, $a_offset, $a_limit)
Get questions of learning module.
modifyExportIdentifier($a_tag, $a_param, $a_value)
static _getPresentationTitle($a_pg_id, $a_mode=IL_CHAPTER_TITLE, $a_include_numbers=false, $a_time_scheduled_activation=false, $a_force_content=false, $a_lm_id=0, $a_lang="-")
presentation title doesn't have to be page title, it may be chapter title + page title or chapter tit...
static getPagesWithLinksList($a_lm_id, $a_par_type)
Get all pages of lm that contain any internal links.
static _exportXMLAlias(&$a_xml_writer, $a_id, $a_inst=0)
export page alias to xml
__construct(&$a_content_obj, $a_id=0, $a_halt=true)
Constructor @access public.
Extension of ilPageObject for learning modules.
static getInstance($a_tree_id)
Get Instance.
Class ilObjLearningModule.
static getInstance($a_obj_id)
Get instance.
static _lookupType($a_id, $a_reference=false)
lookup object type
static collectFileItems($a_page, $a_domdoc)
Get all file items that are used within the page.
static _getQuestionIdsForPage($a_parent_type, $a_page_id, $a_lang="-")
Get all questions of a page.
static _lookupActive($a_id, $a_parent_type, $a_check_scheduled_activation=false, $a_lang="-")
lookup activation status
static _lookupActivationData($a_id, $a_parent_type, $a_lang="-")
Lookup activation data.
static getPagesWithLinks($a_parent_type, $a_parent_id, $a_lang="-")
Get all pages for parent object that contain internal links.
static _moveContentAfterHierId(&$a_source_page, &$a_target_page, $a_hid)
move content of hierarchical id >= $a_hid to other page
static _getPresentationTitle($a_st_id, $a_mode=IL_CHAPTER_TITLE, $a_include_numbers=false, $a_time_scheduled_activation=false, $a_force_content=false, $a_lm_id=0, $a_lang="-")
get presentation title
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
static now()
Return current timestamp in Y-m-d H:i:s format.
$languages
Definition: cssgen2.php:34
global $ilBench
Definition: ilias.php:18
global $ilDB