• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

content/classes/class.ilLMPageObject.php

Go to the documentation of this file.
00001 <?php
00002 /*
00003         +-----------------------------------------------------------------------------+
00004         | ILIAS open source                                                           |
00005         +-----------------------------------------------------------------------------+
00006         | Copyright (c) 1998-2001 ILIAS open source, University of Cologne            |
00007         |                                                                             |
00008         | This program is free software; you can redistribute it and/or               |
00009         | modify it under the terms of the GNU General Public License                 |
00010         | as published by the Free Software Foundation; either version 2              |
00011         | of the License, or (at your option) any later version.                      |
00012         |                                                                             |
00013         | This program is distributed in the hope that it will be useful,             |
00014         | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
00015         | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
00016         | GNU General Public License for more details.                                |
00017         |                                                                             |
00018         | You should have received a copy of the GNU General Public License           |
00019         | along with this program; if not, write to the Free Software                 |
00020         | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. |
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 &copy()
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 &copyToOtherContObject(&$a_cont_obj)
00156         {
00157 //echo "<br>from page lm:".$this->getLMId().", pg: ".$this->getId();
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 //echo "<br>to page lm:".$lm_page->getLMId().", pg: ".$lm_page->getId();
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                 // get content object (learning module / digilib book)
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                 // create new page
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                 // copy complete content of source page to new page
00212                 $source_page =& $source_lm_page->getPageObject();
00213                 $page =& $lm_page->getPageObject();
00214                 $page->setXMLContent($source_page->getXMLContent());
00215                 $page->buildDom();
00216                 
00217                 // insert new page in tree (after original page)
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                 // remove all nodes >= hierarchical id from source page
00228                 $source_page->buildDom();
00229                 $source_page->addHierIds();
00230                 $source_page->deleteContentFromHierId($a_hier_id);
00231                 
00232                 // remove all nodes < hierarchical id from new page (incl. update)
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                 // get content object (learning module / digilib book)
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                 // get next page
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                         // move nodes to target page
00279                         $source_page->buildDom();
00280                         $source_page->addHierIds();
00281                         ilPageObject::_moveContentAfterHierId($source_page, $target_page, $a_hier_id);
00282                         //$source_page->deleteContentFromHierId($a_hier_id);
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         // only for page aliases
00339         function setOriginID($a_id)
00340         {
00341                 return $this->origin_id = $a_id;
00342         }
00343 
00344         // only for page aliases
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                 // select
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                         if ($a_include_numbers)
00390                         {
00391                                 if ($tree->isInTree($pg_rec["obj_id"]))
00392                                 {
00393                                         // get page tree node
00394                                         $query = "SELECT * FROM lm_tree WHERE child = ".
00395                                                 $ilDB->quote($a_pg_id)." AND lm_id = ".
00396                                                 $ilDB->quote($pg_rec["lm_id"]);
00397                                         $tree_set = $ilDB->query($query);
00398                                         $tree_node = $tree_set->fetchRow(DB_FETCHMODE_ASSOC);
00399                                         $depth = $tree_node["depth"];
00400 
00401                                         //$nr = $tree->getChildSequenceNumber($tree_node)." ";
00402                                         $nr = " ";
00403                                         $dot = "";
00404                                         for ($i = $depth - 1; $i > 1; $i --)
00405                                         {
00406                                                 // get next parent tree node
00407                                                 $query = "SELECT * FROM lm_tree WHERE child = ".
00408                                                 $ilDB->quote($tree_node["parent"])." AND lm_id = ".
00409                                                 $ilDB->quote($pg_rec["lm_id"]);
00410                                                 $tree_set = $ilDB->query($query);
00411                                                 $tree_node = $tree_set->fetchRow(DB_FETCHMODE_ASSOC);
00412                                                 $seq = $tree->getChildSequenceNumber($tree_node);
00413 
00414                                                 $nr = $seq.$dot.$nr;
00415                                                 $dot = ".";
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                         require_once("content/classes/class.ilStructureObject.php");
00443                         $struct_obj =& new ilStructureObject($pred_node["obj_id"]);
00444                         return $struct_obj->getTitle();*/
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                                 // MetaData
00470                                 $ilBench->start("ContentObjectExport", "exportPageObject_XML_Meta");
00471                                 $this->exportXMLMetaData($a_xml_writer);
00472                                 $ilBench->stop("ContentObjectExport", "exportPageObject_XML_Meta");
00473 
00474                                 // PageContent
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                 // Layout
00489                 // not implemented
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                         //$a_value = ilUtil::insertInstIntoID($a_value);
00531                 }
00532 
00533                 return $a_value;
00534         }
00535 
00536 
00543         function exportXMLPageContent(&$a_xml_writer, $a_inst = 0)
00544         {
00545 //echo "exportxmlpagecontent:$a_inst:<br>";
00546                 $cont_obj =& $this->getContentObject();
00547                 //$page_obj = new ilPageObject($cont_obj->getType(), $this->getId());
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("&","&amp;", $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                 //$attrs = array();
00591                 //$a_xml_writer->xmlStartTag("PageObject", $attrs);
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                 // PageContent
00602                 $this->page_object->buildDom();
00603                 $fo = $this->page_object->getFO();
00604                 $a_xml_writer->appendXML($fo);
00605 
00606                 //$a_xml_writer->xmlEndTag("PageObject");
00607         }
00608 
00609 
00615         function _goto($a_target)
00616         {
00617                 global $rbacsystem, $ilErr, $lng;
00618 
00619                 // determine learning object
00620                 $lm_id = ilLMObject::_lookupContObjID($a_target);
00621 
00622                 // get all references
00623                 $ref_ids = ilObject::_getAllReferences($lm_id);
00624 
00625                 // check read permissions
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 ?>

Generated on Fri Dec 13 2013 08:00:16 for ILIAS Release_3_3_x_branch .rev 46803 by  doxygen 1.7.1