00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 require_once("content/classes/class.ilLMObject.php");
00025 require_once("content/classes/Pages/class.ilPageObject.php");
00026
00027 define ("IL_CHAPTER_TITLE", "st_title");
00028 define ("IL_PAGE_TITLE", "pg_title");
00029 define ("IL_NO_HEADER", "none");
00030
00048 class ilLMPageObject extends ilLMObject
00049 {
00050 var $is_alias;
00051 var $origin_id;
00052 var $id;
00053 var $ilias;
00054 var $dom;
00055 var $page_object;
00056
00061 function ilLMPageObject(&$a_content_obj, $a_id = 0, $a_halt = true)
00062 {
00063 global $ilias, $ilBench;
00064
00065 $ilBench->start("ContentPresentation", "ilLMPageObject_Constructor");
00066
00067 parent::ilLMObject($a_content_obj, $a_id);
00068 $this->setType("pg");
00069 $this->id = $a_id;
00070 $this->ilias =& $ilias;
00071
00072 $this->is_alias = false;
00073 $this->contains_int_link = false;
00074 $this->mobs_contained = array();
00075 $this->files_contained = array();
00076 $this->halt_on_error = $a_halt;
00077
00078 if($a_id != 0)
00079 {
00080 $this->read();
00081 }
00082
00083 $ilBench->stop("ContentPresentation", "ilLMPageObject_Constructor");
00084 }
00085
00086 function _ilLMPageObject()
00087 {
00088 if(is_object($this->page_object))
00089 {
00090 unset($this->page_object);
00091 }
00092 }
00093
00097 function read()
00098 {
00099 global $ilBench;
00100
00101 $ilBench->start("ContentPresentation", "ilLMPageObject_read");
00102 parent::read();
00103
00104 $this->page_object =& new ilPageObject($this->content_object->getType(),
00105 $this->id, $this->halt_on_error);
00106
00107 $ilBench->stop("ContentPresentation", "ilLMPageObject_read");
00108 }
00109
00110 function create($a_upload = false)
00111 {
00112 parent::create($a_upload);
00113 if(!is_object($this->page_object))
00114 {
00115 $this->page_object =& new ilPageObject($this->content_object->getType());
00116 }
00117 $this->page_object->setId($this->getId());
00118 $this->page_object->setParentId($this->getLMId());
00119 $this->page_object->create($a_upload);
00120 }
00121
00122 function delete($a_delete_meta_data = true)
00123 {
00124 parent::delete($a_delete_meta_data);
00125 $this->page_object->delete();
00126 }
00127
00128
00132 function ©()
00133 {
00134
00135 $meta =& new ilMetaData();
00136 $lm_page =& new ilLMPageObject($this->getContentObject());
00137 $lm_page->assignMetaData($meta);
00138 $lm_page->setTitle($this->getTitle());
00139 $lm_page->setLMId($this->getLMId());
00140 $lm_page->setType($this->getType());
00141 $lm_page->setDescription($this->getDescription());
00142 $lm_page->create();
00143
00144 $page =& $lm_page->getPageObject();
00145 $page->setXMLContent($this->page_object->getXMLContent());
00146 $page->buildDom();
00147 $page->update();
00148
00149 return $lm_page;
00150 }
00151
00155 function ©ToOtherContObject(&$a_cont_obj)
00156 {
00157
00158 $meta =& new ilMetaData();
00159 $lm_page =& new ilLMPageObject($a_cont_obj);
00160 $lm_page->assignMetaData($meta);
00161 $lm_page->setTitle($this->getTitle());
00162 $lm_page->setLMId($a_cont_obj->getId());
00163 $lm_page->setType($this->getType());
00164 $lm_page->setDescription($this->getDescription());
00165 $lm_page->create();
00166
00167
00168 $page =& $lm_page->getPageObject();
00169 $page->setXMLContent($this->page_object->getXMLContent());
00170 $page->buildDom();
00171 $page->update();
00172
00173 return $lm_page;
00174 }
00175
00183 function _splitPage($a_page_id, $a_pg_parent_type, $a_hier_id)
00184 {
00185
00186 $lm_id = ilLMObject::_lookupContObjID($a_page_id);
00187 $type = ilObject::_lookupType($lm_id, false);
00188 switch ($type)
00189 {
00190 case "lm":
00191 $cont_obj = new ilObjLearningModule($lm_id, false);
00192 break;
00193
00194 case "dbk":
00195 $cont_obj = new ilObjDlBook($lm_id, false);
00196 break;
00197 }
00198
00199 $source_lm_page =& new ilLMPageObject($cont_obj, $a_page_id);
00200
00201
00202 $meta =& new ilMetaData();
00203 $lm_page =& new ilLMPageObject($cont_obj);
00204 $lm_page->assignMetaData($meta);
00205 $lm_page->setTitle($source_lm_page->getTitle());
00206 $lm_page->setLMId($source_lm_page->getLMId());
00207 $lm_page->setType($source_lm_page->getType());
00208 $lm_page->setDescription($source_lm_page->getDescription());
00209 $lm_page->create();
00210
00211
00212 $source_page =& $source_lm_page->getPageObject();
00213 $page =& $lm_page->getPageObject();
00214 $page->setXMLContent($source_page->getXMLContent());
00215 $page->buildDom();
00216
00217
00218 $tree = new ilTree($cont_obj->getId());
00219 $tree->setTableNames('lm_tree','lm_data');
00220 $tree->setTreeTablePK("lm_id");
00221 if ($tree->isInTree($source_lm_page->getId()))
00222 {
00223 $parent_node = $tree->getParentNodeData($source_lm_page->getId());
00224 $tree->insertNode($lm_page->getId(), $parent_node["child"], $source_lm_page->getId());
00225 }
00226
00227
00228 $source_page->buildDom();
00229 $source_page->addHierIds();
00230 $source_page->deleteContentFromHierId($a_hier_id);
00231
00232
00233 $page->addHierIds();
00234 $page->deleteContentBeforeHierId($a_hier_id);
00235
00236 return $lm_page;
00237
00238 }
00239
00247 function _splitPageNext($a_page_id, $a_pg_parent_type, $a_hier_id)
00248 {
00249
00250 $lm_id = ilLMObject::_lookupContObjID($a_page_id);
00251 $type = ilObject::_lookupType($lm_id, false);
00252 switch ($type)
00253 {
00254 case "lm":
00255 $cont_obj = new ilObjLearningModule($lm_id, false);
00256 break;
00257
00258 case "dbk":
00259 $cont_obj = new ilObjDlBook($lm_id, false);
00260 break;
00261 }
00262 $tree = new ilTree($cont_obj->getId());
00263 $tree->setTableNames('lm_tree','lm_data');
00264 $tree->setTreeTablePK("lm_id");
00265
00266 $source_lm_page =& new ilLMPageObject($cont_obj, $a_page_id);
00267 $source_page =& $source_lm_page->getPageObject();
00268
00269
00270 $succ = $tree->fetchSuccessorNode($a_page_id, "pg");
00271 if ($succ["child"] > 0)
00272 {
00273 $target_lm_page =& new ilLMPageObject($cont_obj, $succ["child"]);
00274 $target_page =& $target_lm_page->getPageObject();
00275 $target_page->buildDom();
00276 $target_page->addHierIds();
00277
00278
00279 $source_page->buildDom();
00280 $source_page->addHierIds();
00281 ilPageObject::_moveContentAfterHierId($source_page, $target_page, $a_hier_id);
00282
00283
00284 return $succ["child"];
00285 }
00286
00287 }
00288
00289
00295 function assignPageObject(&$a_page_obj)
00296 {
00297 $this->page_object =& $a_page_obj;
00298 }
00299
00300
00306 function &getPageObject()
00307 {
00308 return $this->page_object;
00309 }
00310
00311
00315 function setId($a_id)
00316 {
00317 $this->id = $a_id;
00318 }
00319
00320 function getId()
00321 {
00322 return $this->id;
00323 }
00324
00328 function setAlias($a_is_alias)
00329 {
00330 $this->is_alias = $a_is_alias;
00331 }
00332
00333 function isAlias()
00334 {
00335 return $this->is_alias;
00336 }
00337
00338
00339 function setOriginID($a_id)
00340 {
00341 return $this->origin_id = $a_id;
00342 }
00343
00344
00345 function getOriginID()
00346 {
00347 return $this->origin_id;
00348 }
00349
00353 function getPageList($lm_id)
00354 {
00355 return ilLMObject::getObjectList($lm_id, "pg");
00356 }
00357
00358
00365 function _getPresentationTitle($a_pg_id, $a_mode = IL_CHAPTER_TITLE,
00366 $a_include_numbers = false)
00367 {
00368 global $ilDB;
00369
00370
00371 $query = "SELECT * FROM lm_data WHERE obj_id = '".$a_pg_id."'";
00372 $pg_set = $ilDB->query($query);
00373 $pg_rec = $pg_set->fetchRow(DB_FETCHMODE_ASSOC);
00374
00375 if($a_mode == IL_NO_HEADER)
00376 {
00377 return "";
00378 }
00379
00380 $tree = new ilTree($pg_rec["lm_id"]);
00381 $tree->setTableNames('lm_tree','lm_data');
00382 $tree->setTreeTablePK("lm_id");
00383
00384 if($a_mode == IL_PAGE_TITLE)
00385 {
00386 $nr = "";
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420 return $nr.$pg_rec["title"];
00421 }
00422
00423 if ($tree->isInTree($pg_rec["obj_id"]))
00424 {
00425 $pred_node = $tree->fetchPredecessorNode($pg_rec["obj_id"], "st");
00426 $childs = $tree->getChildsByType($pred_node["obj_id"], "pg");
00427 $cnt_str = "";
00428 if(count($childs) > 1)
00429 {
00430 $cur_cnt = 0;
00431 foreach($childs as $child)
00432 {
00433 $cur_cnt++;
00434 if($child["obj_id"] == $pg_rec["obj_id"])
00435 {
00436 break;
00437 }
00438 }
00439 $cnt_str = " (".$cur_cnt."/".count($childs).")";
00440 }
00441
00442
00443
00444
00445 return $pred_node["title"].$cnt_str;
00446 }
00447 else
00448 {
00449 return $pg_rec["title"];
00450 }
00451 }
00452
00459 function exportXML(&$a_xml_writer, $a_mode = "normal", $a_inst = 0)
00460 {
00461 global $ilBench;
00462
00463 $attrs = array();
00464 $a_xml_writer->xmlStartTag("PageObject", $attrs);
00465
00466 switch ($a_mode)
00467 {
00468 case "normal":
00469
00470 $ilBench->start("ContentObjectExport", "exportPageObject_XML_Meta");
00471 $this->exportXMLMetaData($a_xml_writer);
00472 $ilBench->stop("ContentObjectExport", "exportPageObject_XML_Meta");
00473
00474
00475 $ilBench->start("ContentObjectExport", "exportPageObject_XML_PageContent");
00476 $this->exportXMLPageContent($a_xml_writer, $a_inst);
00477 $ilBench->stop("ContentObjectExport", "exportPageObject_XML_PageContent");
00478 break;
00479
00480 case "alias":
00481 $attrs = array();
00482 $attrs["OriginId"] = "il_".$a_inst.
00483 "_pg_".$this->getId();
00484 $a_xml_writer->xmlElement("PageAlias", $attrs);
00485 break;
00486 }
00487
00488
00489
00490
00491 $a_xml_writer->xmlEndTag("PageObject");
00492 }
00493
00497 function _exportXMLAlias(&$a_xml_writer, $a_id, $a_inst = 0)
00498 {
00499 $attrs = array();
00500 $a_xml_writer->xmlStartTag("PageObject", $attrs);
00501
00502 $attrs = array();
00503 $attrs["OriginId"] = "il_".$a_inst.
00504 "_pg_".$a_id;
00505 $a_xml_writer->xmlElement("PageAlias", $attrs);
00506
00507 $a_xml_writer->xmlEndTag("PageObject");
00508 }
00509
00510
00517 function exportXMLMetaData(&$a_xml_writer)
00518 {
00519 $nested = new ilNestedSetXML();
00520 $nested->setParameterModifier($this, "modifyExportIdentifier");
00521 $a_xml_writer->appendXML($nested->export($this->getId(),
00522 $this->getType()));
00523 }
00524
00525 function modifyExportIdentifier($a_tag, $a_param, $a_value)
00526 {
00527 if ($a_tag == "Identifier" && $a_param == "Entry")
00528 {
00529 $a_value = "il_".IL_INST_ID."_pg_".$this->getId();
00530
00531 }
00532
00533 return $a_value;
00534 }
00535
00536
00543 function exportXMLPageContent(&$a_xml_writer, $a_inst = 0)
00544 {
00545
00546 $cont_obj =& $this->getContentObject();
00547
00548
00549 $this->page_object->buildDom();
00550 $this->page_object->insertInstIntoIDs($a_inst);
00551 $this->mobs_contained = $this->page_object->collectMediaObjects(false);
00552 $this->files_contained = $this->page_object->collectFileItems();
00553 $xml = $this->page_object->getXMLFromDom(false, false, false, "", true);
00554 $xml = str_replace("&","&", $xml);
00555 $a_xml_writer->appendXML($xml);
00556
00557 $this->page_object->freeDom();
00558 }
00559
00565 function getMediaObjectIds()
00566 {
00567 return $this->mobs_contained;
00568 }
00569
00575 function getFileItemIds()
00576 {
00577 return $this->files_contained;
00578 }
00579
00586 function exportFO(&$a_xml_writer)
00587 {
00588 global $ilBench;
00589
00590
00591
00592 $title = ilLMPageObject::_getPresentationTitle($this->getId());
00593 if ($title != "")
00594 {
00595 $attrs = array();
00596 $attrs["font-family"] = "Times";
00597 $attrs["font-size"] = "14pt";
00598 $a_xml_writer->xmlElement("fo:block", $attrs, $title);
00599 }
00600
00601
00602 $this->page_object->buildDom();
00603 $fo = $this->page_object->getFO();
00604 $a_xml_writer->appendXML($fo);
00605
00606
00607 }
00608
00609
00615 function _goto($a_target)
00616 {
00617 global $rbacsystem, $ilErr, $lng;
00618
00619
00620 $lm_id = ilLMObject::_lookupContObjID($a_target);
00621
00622
00623 $ref_ids = ilObject::_getAllReferences($lm_id);
00624
00625
00626 foreach ($ref_ids as $ref_id)
00627 {
00628 if ($rbacsystem->checkAccess("read", $ref_id))
00629 {
00630 ilUtil::redirect("content/lm_presentation.php?ref_id=$ref_id".
00631 "&obj_id=$a_target");
00632 }
00633 }
00634
00635 $ilErr->raiseError($lng->txt("msg_no_perm_read_lm"), $ilErr->FATAL);
00636 }
00637
00638 }
00639 ?>