ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
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{
31 public $is_alias;
32 public $origin_id;
33 public $id;
34 public $dom;
36
41 public function __construct(&$a_content_obj, $a_id = 0, $a_halt = true)
42 {
43 parent::__construct($a_content_obj, $a_id);
44 $this->setType("pg");
45 $this->id = $a_id;
46
47 $this->is_alias = false;
48 $this->contains_int_link = false;
49 $this->mobs_contained = array();
50 $this->files_contained = array();
51 $this->halt_on_error = $a_halt;
52
53 if ($a_id != 0) {
54 $this->read();
55 }
56 }
57
58 public function __desctruct()
59 {
60 if (is_object($this->page_object)) {
61 unset($this->page_object);
62 }
63 }
64
68 public function read()
69 {
70 parent::read();
71
72 $this->page_object = new ilLMPage($this->id, 0);
73 }
74
75 public function create($a_upload = false, $a_omit_page_object_creation = false)
76 {
77 parent::create($a_upload);
78 if ($a_omit_page_object_creation) {
79 return;
80 }
81 if (!is_object($this->page_object)) {
82 $this->page_object = new ilLMPage();
83 }
84 $this->page_object->setId($this->getId());
85 $this->page_object->setParentId($this->getLMId());
86 $this->page_object->create($a_upload);
87 }
88
89 public function delete($a_delete_meta_data = true)
90 {
91 parent::delete($a_delete_meta_data);
92 $this->page_object->delete();
93 }
94
95
99 public function copy($a_target_lm)
100 {
101 // copy page
102 $lm_page = new ilLMPageObject($a_target_lm);
103 $lm_page->setTitle($this->getTitle());
104 $lm_page->setShortTitle($this->getShortTitle());
105 $lm_page->setLayout($this->getLayout());
106 $lm_page->setLMId($a_target_lm->getId());
107 $lm_page->setType($this->getType());
108 $lm_page->setDescription($this->getDescription());
109 $lm_page->setImportId("il__pg_" . $this->getId());
110 $lm_page->create(true); // setting "upload" flag to true prevents creating of meta data
111
112 // check whether export id already exists in the target lm
113 $del_exp_id = false;
114 $exp_id = ilLMPageObject::getExportId($this->getLMId(), $this->getId());
115 if (trim($exp_id) != "") {
116 if (ilLMPageObject::existsExportID($a_target_lm->getId(), $exp_id)) {
117 $del_exp_id = true;
118 }
119 }
120
121 // copy meta data
122 include_once("Services/MetaData/classes/class.ilMD.php");
123 $md = new ilMD($this->getLMId(), $this->getId(), $this->getType());
124 $new_md = $md->cloneMD($a_target_lm->getId(), $lm_page->getId(), $this->getType());
125
126 // check whether export id already exists in the target lm
127 if ($del_exp_id) {
128 ilLMPageObject::saveExportId($a_target_lm->getId(), $lm_page->getId(), "");
129 } else {
131 $a_target_lm->getId(),
132 $lm_page->getId(),
133 trim($exp_id)
134 );
135 }
136
137 // copy page content and activation
138 $page = $lm_page->getPageObject();
139 $this->page_object->copy($page->getId(), $page->getParentType(), $page->getParentId());
140 /*$page->setXMLContent($this->page_object->copyXMLContent());
141 $page->setActive($this->page_object->getActive());
142 $page->setActivationStart($this->page_object->getActivationStart());
143 $page->setActivationEnd($this->page_object->getActivationEnd());
144 $page->buildDom();
145 $page->update();*/
146 $lm_page->read(); // this gets the updated page object into lm page
147
148 // copy translations
149 include_once("./Modules/LearningModule/classes/class.ilLMObjTranslation.php");
150 ilLMObjTranslation::copy($this->getId(), $lm_page->getId());
151
152 return $lm_page;
153 }
154
158 public function &copyToOtherContObject(&$a_cont_obj, &$a_copied_nodes)
159 {
160 // copy page
161 $lm_page = new ilLMPageObject($a_cont_obj);
162 $lm_page->setTitle($this->getTitle());
163 $lm_page->setShortTitle($this->getShortTitle());
164 $lm_page->setLMId($a_cont_obj->getId());
165 $lm_page->setImportId("il__pg_" . $this->getId());
166 $lm_page->setType($this->getType());
167 $lm_page->setDescription($this->getDescription());
168 $lm_page->create(true); // setting "upload" flag to true prevents creating of meta data
169 $a_copied_nodes[$this->getId()] = $lm_page->getId();
170
171 // copy meta data
172 include_once("Services/MetaData/classes/class.ilMD.php");
173 $md = new ilMD($this->getLMId(), $this->getId(), $this->getType());
174 $new_md = $md->cloneMD($a_cont_obj->getId(), $lm_page->getId(), $this->getType());
175
176 // copy page content
177 $page = $lm_page->getPageObject();
178 $page->setXMLContent($this->page_object->getXMLContent());
179 $page->buildDom();
180 $page->update();
181
182 return $lm_page;
183 }
184
192 public static function _splitPage($a_page_id, $a_pg_parent_type, $a_hier_id)
193 {
194 // get content object (learning module / digilib book)
197 include_once("./Modules/LearningModule/classes/class.ilObjLearningModule.php");
198 $cont_obj = new ilObjLearningModule($lm_id, false);
199 $source_lm_page = new ilLMPageObject($cont_obj, $a_page_id);
200
201 // create new page
202 $lm_page = new ilLMPageObject($cont_obj);
203 $lm_page->setTitle($source_lm_page->getTitle());
204 $lm_page->setLMId($source_lm_page->getLMId());
205 $lm_page->setType($source_lm_page->getType());
206 $lm_page->setDescription($source_lm_page->getDescription());
207 $lm_page->create(true);
208
209
210 // copy complete content of source page to new page
211 $source_page = $source_lm_page->getPageObject();
212 $page = $lm_page->getPageObject();
213 $page->setXMLContent($source_page->copyXMLContent());
214 //echo htmlentities($source_page->copyXMLContent());
215 $page->buildDom(true);
216 $page->update();
217 // echo "-".$page->getId()."-".$page->getParentType()."-";
218
219 // copy meta data
220 include_once("Services/MetaData/classes/class.ilMD.php");
221 $md = new ilMD($source_lm_page->getLMId(), $a_page_id, $source_lm_page->getType());
222 $md->cloneMD($source_lm_page->getLMId(), $lm_page->getId(), $source_lm_page->getType());
223
224 // insert new page in tree (after original page)
225 $tree = new ilTree($cont_obj->getId());
226 $tree->setTableNames('lm_tree', 'lm_data');
227 $tree->setTreeTablePK("lm_id");
228 if ($tree->isInTree($source_lm_page->getId())) {
229 $parent_node = $tree->getParentNodeData($source_lm_page->getId());
230 $tree->insertNode($lm_page->getId(), $parent_node["child"], $source_lm_page->getId());
231 }
232
233 // remove all nodes < hierarchical id from new page (incl. update)
234 $page->addHierIds();
235 $page->deleteContentBeforeHierId($a_hier_id);
236 // $page->update();
237
238 // remove all nodes >= hierarchical id from source page
239 $source_page->buildDom();
240 $source_page->addHierIds();
241 $source_page->deleteContentFromHierId($a_hier_id);
242
243 return $lm_page;
244 }
245
253 public static function _splitPageNext($a_page_id, $a_pg_parent_type, $a_hier_id)
254 {
255 // get content object (learning module / digilib book)
258 include_once("./Modules/LearningModule/classes/class.ilObjLearningModule.php");
259 $cont_obj = new ilObjLearningModule($lm_id, false);
260 $tree = new ilTree($cont_obj->getId());
261 $tree->setTableNames('lm_tree', 'lm_data');
262 $tree->setTreeTablePK("lm_id");
263
264 $source_lm_page = new ilLMPageObject($cont_obj, $a_page_id);
265 $source_page = $source_lm_page->getPageObject();
266
267 // get next page
268 $succ = $tree->fetchSuccessorNode($a_page_id, "pg");
269 if ($succ["child"] > 0) {
270 $target_lm_page = new ilLMPageObject($cont_obj, $succ["child"]);
271 $target_page = $target_lm_page->getPageObject();
272 $target_page->buildDom();
273 $target_page->addHierIds();
274
275 // move nodes to target page
276 $source_page->buildDom();
277 $source_page->addHierIds();
278 ilLMPage::_moveContentAfterHierId($source_page, $target_page, $a_hier_id);
279 //$source_page->deleteContentFromHierId($a_hier_id);
280
281 return $succ["child"];
282 }
283 }
284
285
291 public function assignPageObject(&$a_page_obj)
292 {
293 $this->page_object = $a_page_obj;
294 }
295
296
302 public function &getPageObject()
303 {
304 return $this->page_object;
305 }
306
307
311 public function setId($a_id)
312 {
313 $this->id = $a_id;
314 }
315
316 public function getId()
317 {
318 return $this->id;
319 }
320
324 public function setAlias($a_is_alias)
325 {
326 $this->is_alias = $a_is_alias;
327 }
328
329 public function isAlias()
330 {
331 return $this->is_alias;
332 }
333
334 // only for page aliases
335 public function setOriginID($a_id)
336 {
337 return $this->origin_id = $a_id;
338 }
339
340 // only for page aliases
341 public function getOriginID()
342 {
343 return $this->origin_id;
344 }
345
349 public static function getPageList($lm_id)
350 {
351 return ilLMObject::getObjectList($lm_id, "pg");
352 }
353
357 public static function getPagesWithLinksList($a_lm_id, $a_par_type)
358 {
359 $pages = ilLMPageObject::getPageList($a_lm_id);
360 $ids = array();
361 foreach ($pages as $page) {
362 $ids[] = $page["obj_id"];
363 }
364
365 $linked_pages = ilLMPage::getPagesWithLinks($a_par_type, $a_lm_id);
366 $result = array();
367 foreach ($pages as $page) {
368 if (is_array($linked_pages[$page["obj_id"]])) {
369 $result[] = $page;
370 }
371 }
372 return $result;
373 }
374
381 public static function _getPresentationTitle(
382 $a_pg_id,
383 $a_mode = IL_CHAPTER_TITLE,
384 $a_include_numbers = false,
385 $a_time_scheduled_activation = false,
386 $a_force_content = false,
387 $a_lm_id = 0,
388 $a_lang = "-",
389 $a_include_short = false
390 ) {
391 if ($a_mode == IL_NO_HEADER && !$a_force_content) {
392 return "";
393 }
394
395 if ($a_lm_id == 0) {
396 $a_lm_id = ilLMObject::_lookupContObjID($a_pg_id);
397 }
398
399 if ($a_lm_id == 0) {
400 return "";
401 }
402
403 // this is optimized when ilLMObject::preloadDataByLM is invoked (e.g. done in ilLMExplorerGUI)
404 $title = "";
405 if ($a_include_short) {
406 $title = trim(ilLMObject::_lookupShortTitle($a_pg_id));
407 }
408 if ($title == "") {
410 }
411
412 // this is also optimized since ilObjectTranslation re-uses instances for one lm
413 include_once("./Services/Object/classes/class.ilObjectTranslation.php");
414 $ot = ilObjectTranslation::getInstance($a_lm_id);
415 $languages = $ot->getLanguages();
416
417 if ($a_lang != "-" && $ot->getContentActivated() && isset($languages[$a_lang])) {
418 include_once("./Modules/LearningModule/classes/class.ilLMObjTranslation.php");
419 $lmobjtrans = new ilLMObjTranslation($a_pg_id, $a_lang);
420 $trans_title = "";
421 if ($a_include_short) {
422 $trans_title = trim($lmobjtrans->getShortTitle());
423 }
424 if ($trans_title == "") {
425 $trans_title = $lmobjtrans->getTitle();
426 }
427 if ($trans_title != "") {
428 $title = $trans_title;
429 }
430 }
431
432 if ($a_mode == IL_PAGE_TITLE) {
433 return $title;
434 }
435
436 include_once("./Modules/LearningModule/classes/class.ilLMTree.php");
437 $tree = ilLMTree::getInstance($a_lm_id);
438
439 if ($tree->isInTree($a_pg_id)) {
440 $pred_node = $tree->fetchPredecessorNode($a_pg_id, "st");
441 $childs = $tree->getChildsByType($pred_node["obj_id"], "pg");
442 $cnt_str = "";
443 if (count($childs) > 1) {
444 $cnt = 0;
445 foreach ($childs as $child) {
446 include_once("./Modules/LearningModule/classes/class.ilLMPage.php");
448 $child["obj_id"],
449 ilObject::_lookupType($a_lm_id),
450 $a_time_scheduled_activation
451 );
452
453 if (!$active) {
454 $act_data = ilLMPage::_lookupActivationData((int) $child["obj_id"], ilObject::_lookupType($a_lm_id));
455 if ($act_data["show_activation_info"] &&
456 (ilUtil::now() < $act_data["activation_start"])) {
457 $active = true;
458 }
459 }
460
461 if ($child["type"] != "pg" || $active) {
462 $cnt++;
463 }
464 if ($child["obj_id"] == $a_pg_id) {
465 $cur_cnt = $cnt;
466 }
467 }
468 if ($cnt > 1) {
469 $cnt_str = " (" . $cur_cnt . "/" . $cnt . ")";
470 }
471 }
472 require_once("./Modules/LearningModule/classes/class.ilStructureObject.php");
473 //$struct_obj = new ilStructureObject($pred_node["obj_id"]);
474 //return $struct_obj->getTitle();
476 $pred_node["obj_id"],
478 $a_include_numbers,
479 false,
480 false,
481 0,
482 $a_lang,
483 true
484 ) . $cnt_str;
485
486 //return $pred_node["title"].$cnt_str;
487 } else {
488 return $title;
489 }
490 }
491
498 public function exportXML(&$a_xml_writer, $a_mode = "normal", $a_inst = 0)
499 {
500 $attrs = array();
501 $a_xml_writer->xmlStartTag("PageObject", $attrs);
502
503 switch ($a_mode) {
504 case "normal":
505 // MetaData
506 $this->exportXMLMetaData($a_xml_writer);
507
508 // PageContent
509 $this->exportXMLPageContent($a_xml_writer, $a_inst);
510 break;
511
512 case "alias":
513 $attrs = array();
514 $attrs["OriginId"] = "il_" . $a_inst .
515 "_pg_" . $this->getId();
516 $a_xml_writer->xmlElement("PageAlias", $attrs);
517 break;
518 }
519
520 // Layout
521 // not implemented
522
523 $a_xml_writer->xmlEndTag("PageObject");
524 }
525
529 public static function _exportXMLAlias(&$a_xml_writer, $a_id, $a_inst = 0)
530 {
531 $attrs = array();
532 $a_xml_writer->xmlStartTag("PageObject", $attrs);
533
534 $attrs = array();
535 $attrs["OriginId"] = "il_" . $a_inst .
536 "_pg_" . $a_id;
537 $a_xml_writer->xmlElement("PageAlias", $attrs);
538
539 $a_xml_writer->xmlEndTag("PageObject");
540 }
541
542
549 public function exportXMLMetaData(&$a_xml_writer)
550 {
551 include_once("Services/MetaData/classes/class.ilMD2XML.php");
552 $md2xml = new ilMD2XML($this->getLMId(), $this->getId(), $this->getType());
553 $md2xml->setExportMode(true);
554 $md2xml->startExport();
555 $a_xml_writer->appendXML($md2xml->getXML());
556 }
557
558 public function modifyExportIdentifier($a_tag, $a_param, $a_value)
559 {
560 if ($a_tag == "Identifier" && $a_param == "Entry") {
561 $a_value = "il_" . IL_INST_ID . "_pg_" . $this->getId();
562 //$a_value = ilUtil::insertInstIntoID($a_value);
563 }
564
565 return $a_value;
566 }
567
568
575 public function exportXMLPageContent(&$a_xml_writer, $a_inst = 0)
576 {
577 //echo "exportxmlpagecontent:$a_inst:<br>";
578 $cont_obj = $this->getContentObject();
579
580 $this->page_object->buildDom();
581 $this->page_object->insertInstIntoIDs($a_inst);
582 $this->mobs_contained = $this->page_object->collectMediaObjects(false);
583 //$this->files_contained = $this->page_object->collectFileItems();
584 include_once("./Services/COPage/classes/class.ilPCFileList.php");
585 $this->files_contained = ilPCFileList::collectFileItems($this->page_object, $this->page_object->getDomDoc());
586 // $this->questions_contained = $this->page_object->getQuestionIds();
587 $xml = $this->page_object->getXMLFromDom(false, false, false, "", true);
588 $xml = str_replace("&", "&amp;", $xml);
589 $a_xml_writer->appendXML($xml);
590
591 $this->page_object->freeDom();
592 }
593
599 public function getQuestionIds()
600 {
601 include_once("./Services/COPage/classes/class.ilPCQuestion.php");
603 $this->content_object->getType(),
604 $this->getId()
605 );
606 }
607
613 public function getMediaObjectIds()
614 {
615 return $this->mobs_contained;
616 }
617
623 public function getFileItemIds()
624 {
625 return $this->files_contained;
626 }
627
634 public function exportFO(&$a_xml_writer)
635 {
637 if ($title != "") {
638 $attrs = array();
639 $attrs["font-family"] = "Times";
640 $attrs["font-size"] = "14pt";
641 $a_xml_writer->xmlElement("fo:block", $attrs, $title);
642 }
643
644 // PageContent
645 $this->page_object->buildDom();
646 $fo = $this->page_object->getFO();
647 $a_xml_writer->appendXML($fo);
648 }
649
656 public static function queryQuestionsOfLearningModule(
657 $a_lm_id,
658 $a_order_field,
659 $a_order_dir,
660 $a_offset,
661 $a_limit
662 ) {
663 global $DIC;
664
665 $ilDB = $DIC->database();
666 $rbacreview = $DIC->rbac()->review();
667
668
669 // count query
670 $count_query = "SELECT count(pq.question_id) cnt ";
671
672 // basic query
673 $query = "SELECT pq.page_id, pq.question_id ";
674
675 $from = " FROM page_question pq JOIN lm_tree t ON (t.lm_id = " . $ilDB->quote($a_lm_id, "integer") .
676 " AND pq.page_id = t.child and pq.page_parent_type = " . $ilDB->quote("lm", "text") . ") " .
677 " WHERE t.lm_id = " . $ilDB->quote($a_lm_id, "integer");
678 $count_query.= $from;
679 $query.= $from;
680
681
682 // count query
683 $set = $ilDB->query($count_query);
684 $cnt = 0;
685 if ($rec = $ilDB->fetchAssoc($set)) {
686 $cnt = $rec["cnt"];
687 }
688
689 $offset = (int) $a_offset;
690 $limit = (int) $a_limit;
691 if ($a_limit > 0) {
692 $ilDB->setLimit($limit, $offset);
693 }
694
695 // set query
696 $set = $ilDB->query($query);
697 $result = array();
698 while ($rec = $ilDB->fetchAssoc($set)) {
699 $result[] = $rec;
700 }
701 return array("cnt" => $cnt, "set" => $result);
702 }
703}
$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 _lookupShortTitle($a_obj_id)
Lookup short title.
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)
getShortTitle()
get short title of lm object
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
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="-", $a_include_short=false)
presentation title doesn't have to be page title, it may be chapter title + page title or chapter tit...
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.
modifyExportIdentifier($a_tag, $a_param, $a_value)
static queryQuestionsOfLearningModule( $a_lm_id, $a_order_field, $a_order_dir, $a_offset, $a_limit)
Get questions of learning module.
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="-", $a_include_short=false)
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.
$xml
Definition: metadata.php:240
$query
global $DIC
Definition: saml.php:7
global $ilDB
$from