ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
ilContObjectManifestBuilder Class Reference

Scorm 2004 Content Object Manifest export class. More...

+ Collaboration diagram for ilContObjectManifestBuilder:

Public Member Functions

 __construct (&$a_cont_obj)
 Constructor public. More...
 
 buildManifest ($ver, $revision=null)
 build manifest structure More...
 
 dump ($a_target_dir)
 dump manifest file into directory More...
 
 writeItemHierarchy ()
 write item hierarchy More...
 
 writeItemHierarchyRec ($tree, $a_parent_node)
 write item hierarchy (Recursive Style) More...
 
 writeResources ()
 Create resource entries for the learning module "PKG" and all SCOS and Assets. More...
 

Data Fields

 $db
 
 $cont_obj
 
 $inst_id
 
 $writer
 
 $version
 

Detailed Description

Scorm 2004 Content Object Manifest export class.

Author
Alex Killing alex..nosp@m.kill.nosp@m.ing@g.nosp@m.mx.d.nosp@m.e
Version
Id
class.ilContObjectManifestBuilder.php 12658 2006-11-29 08:51:48Z akill

Definition at line 17 of file class.ilContObjectManifestBuilder.php.

Constructor & Destructor Documentation

◆ __construct()

ilContObjectManifestBuilder::__construct ( $a_cont_obj)

Constructor public.

Definition at line 28 of file class.ilContObjectManifestBuilder.php.

References $DIC, and $ilDB.

29  {
30  global $DIC;
31 
32  $ilDB = $DIC->database();
33 
34  $this->cont_obj = $a_cont_obj;
35 
36  $this->db = $ilDB;
37 
38  $this->inst_id = IL_INST_ID;
39  }
global $DIC
Definition: saml.php:7
global $ilDB

Member Function Documentation

◆ buildManifest()

ilContObjectManifestBuilder::buildManifest (   $ver,
  $revision = null 
)

build manifest structure

Definition at line 44 of file class.ilContObjectManifestBuilder.php.

References $tree, writeItemHierarchyRec(), writeResources(), and ilXmlWriter\xmlHeader().

45  {
46  require_once("./Services/Xml/classes/class.ilXmlWriter.php");
47  require_once("./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Item.php");
48 
49  $this->version = $ver;
50  $this->writer = new ilXmlWriter;
51 
52  // set xml header
53  $this->writer->xmlHeader();
54 
55  // manifest start tag
56  $attrs = array();
57  $attrs["identifier"] = "il_" . IL_INST_ID . "_" . $this->cont_obj->getType() . "_m_" . $this->cont_obj->getId();
58  switch ($this->version) {
59  case "2004":
60  $attrs["xmlns:imsss"] = "http://www.imsglobal.org/xsd/imsss";
61  $attrs["xmlns:adlseq"] = "http://www.adlnet.org/xsd/adlseq_v1p3";
62  $attrs["xmlns:adlnav"] = "http://www.adlnet.org/xsd/adlnav_v1p3";
63  $attrs["xmlns:xsi"] = "http://www.w3.org/2001/XMLSchema-instance";
64  $attrs["xmlns:adlcp"] = "http://www.adlnet.org/xsd/adlcp_v1p3";
65  $attrs["xmlns"] = "http://www.imsglobal.org/xsd/imscp_v1p1";
66  $attrs["xsi:schemaLocation"] = "http://www.imsglobal.org/xsd/imscp_v1p1 imscp_v1p1.xsd http://www.adlnet.org/xsd/adlcp_v1p3 adlcp_v1p3.xsd http://www.imsglobal.org/xsd/imsss imsss_v1p0.xsd http://www.adlnet.org/xsd/adlseq_v1p3 adlseq_v1p3.xsd http://www.adlnet.org/xsd/adlnav_v1p3 adlnav_v1p3.xsd";
67  $attrs["version"] = "2004 " . $revision . " Edition";
68  break;
69  case "12":
70  $attrs["xmlns"] = "http://www.imsproject.org/xsd/imscp_rootv1p1p2";
71  $attrs["xmlns:adlcp"] = "http://www.adlnet.org/xsd/adlcp_rootv1p2";
72  $attrs["xmlns:xsi"] = "http://www.w3.org/2001/XMLSchema-instance";
73  $attrs["xsi:schemaLocation"] = "http://www.imsproject.org/xsd/imscp_rootv1p1p2 imscp_rootv1p1p2.xsd http://www.imsglobal.org/xsd/imsmd_rootv1p2p1 imsmd_rootv1p2p1.xsd http://www.adlnet.org/xsd/adlcp_rootv1p2 adlcp_rootv1p2.xsd";
74  $attrs["version"] = "1.1";
75  break;
76  }
77  $this->writer->xmlStartTag("manifest", $attrs);
78 
79  if ($this->version == "2004") {
80  $this->writer->xmlStartTag("metadata");
81  $this->writer->xmlElement("schema", null, "ADL SCORM");
82  $this->writer->xmlElement("schemaversion", null, "2004 " . $revision . " Edition");
83  $this->writer->xmlElement("adlcp:location", null, "indexMD.xml");
84  $this->writer->xmlEndTag("metadata");
85  }
86  // organizations start tag
87  $attrs = array();
88  if ($this->version == "2004") {
89  $attrs["xmlns:imscp"] = "http://www.imsglobal.org/xsd/imscp_v1p1";
90  }
91  $attrs["default"] = "il_" . IL_INST_ID . "_" . $this->cont_obj->getType() . "_" . $this->cont_obj->getId();
92  $this->writer->xmlStartTag("organizations", $attrs);
93 
94  // organization start tag
95  $attrs = array();
96  $attrs["identifier"] = "il_" . IL_INST_ID . "_" . $this->cont_obj->getType() . "_" . $this->cont_obj->getId();
97  $attrs["structure"] = "hierarchical";
98  $this->writer->xmlStartTag("organization", $attrs);
99 
100  // title element
101  $attrs = array();
102  $this->writer->xmlElement("title", $attrs, $this->cont_obj->getTitle());
103 
104  // write item hierarchy
105  //$this->writeItemHierarchy();
106  include_once("./Modules/Scorm2004/classes/class.ilSCORM2004Tree.php");
107  $tree = new ilSCORM2004Tree($this->cont_obj->getId());
108 
109  //$tree = new ilTree($this->cont_obj->getId());
110  //$tree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node');
111  //$tree->setTreeTablePK("slm_id");
112  $this->writeItemHierarchyRec($tree, $tree->getRootId());
113 
114 
115  // sequencing information
116  if ($this->version == "2004") {
117  $seq_item = new ilSCORM2004Item($this->cont_obj->getId(), true);
118  $this->writer->xmlData($this->writer->xmlFormatData($seq_item->exportAsXML()), false, false);
119  }
120 
121  // organization end tag
122  $this->writer->xmlEndTag("organization");
123 
124  // organizations end tag
125  $this->writer->xmlEndTag("organizations");
126 
127  // resources start tag
128  $attrs = array();
129  $this->writer->xmlStartTag("resources", $attrs);
130 
131  // write resources
132  $this->writeResources();
133 
134  // resources end tag
135  $this->writer->xmlEndTag("resources");
136 
137  // manifest end tag
138  $this->writer->xmlEndTag("manifest");
139 
140  // write manifest file
141  //$this->xml->xmlDumpFile($this->export_dir."/".$this->subdir."/".$this->filename
142  // , false);
143 
144  // destroy writer object
145  $this->writer->_XmlWriter;
146  }
Class ilSCORM2004Condition.
writeItemHierarchyRec($tree, $a_parent_node)
write item hierarchy (Recursive Style)
XML writer class.
SCORM 2004 Editing tree.
writeResources()
Create resource entries for the learning module "PKG" and all SCOS and Assets.
xmlHeader()
Writes xml header public.
+ Here is the call graph for this function:

◆ dump()

ilContObjectManifestBuilder::dump (   $a_target_dir)

dump manifest file into directory

Definition at line 151 of file class.ilContObjectManifestBuilder.php.

152  {
153  $this->writer->xmlDumpFile($a_target_dir . "/imsmanifest.xml", false);
154  }

◆ writeItemHierarchy()

ilContObjectManifestBuilder::writeItemHierarchy ( )

write item hierarchy

this first version only writes one item for the whole learning module

Definition at line 161 of file class.ilContObjectManifestBuilder.php.

References $tree.

162  {
163  include_once("Services/MetaData/classes/class.ilMD2XML.php");
164  require_once("./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Item.php");
165 
166  include_once("./Modules/Scorm2004/classes/class.ilSCORM2004Tree.php");
167  $tree = new ilSCORM2004Tree($this->cont_obj->getId());
168 
169  //$tree = new ilTree($this->cont_obj->getId());
170  //$tree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node');
171  //$tree->setTreeTablePK("slm_id");
172  $last_type = "";
173  foreach ($tree->getFilteredSubTree($tree->getRootId(), array('page')) as $obj) {
174  if ($obj['type'] == '') {
175  continue;
176  }
177  $attrs = array();
178  if ($obj['type'] != 'sco' && $last_type == "sco") {
179  $this->writer->xmlEndTag("item");
180  }
181  $attrs["identifier"] = "il_" . IL_INST_ID . "_" . $obj['type'] . "_" . $obj['obj_id'];
182  if ($obj['type'] == 'sco') {
183  $attrs["identifierref"] = $attrs["identifier"] . "_ref";
184  }
185  $this->writer->xmlStartTag("item", $attrs);
186  $attrs = array();
187 
188  $this->writer->xmlElement("title", $attrs, $obj['title']);
189 
190  if ($this->version == "2004") {
191  // sequencing information
192  $seq_item = new ilSCORM2004Item($obj['obj_id']);
193  $this->writer->xmlData($this->writer->xmlFormatData($seq_item->exportAsXML()), false, false);
194  }
195 
196  if ($obj['type'] == 'sco') {
197  $this->writer->xmlEndTag("item");
198  }
199  $last_type = $obj['type'];
200  }
201  $this->writer->xmlEndTag("item");
202  }
Class ilSCORM2004Condition.
SCORM 2004 Editing tree.

◆ writeItemHierarchyRec()

ilContObjectManifestBuilder::writeItemHierarchyRec (   $tree,
  $a_parent_node 
)

write item hierarchy (Recursive Style)

Definition at line 208 of file class.ilContObjectManifestBuilder.php.

References $tree.

Referenced by buildManifest().

209  {
210  foreach ($tree->getFilteredChilds(array('page'), $a_parent_node) as $obj) {
211  if ($obj['type'] == '') {
212  continue;
213  }
214  $attrs = array();
215  $attrs["identifier"] = "il_" . IL_INST_ID . "_" . $obj['type'] . "_" . $obj['obj_id'];
216  if ($obj['type'] == 'sco' || $obj['type'] == 'ass') {
217  $attrs["identifierref"] = $attrs["identifier"] . "_ref";
218  }
219  $this->writer->xmlStartTag("item", $attrs);
220  $attrs = array();
221  $this->writer->xmlElement("title", $attrs, $obj['title']);
222 
223  if ($tree->getFilteredChilds(array('page'), $obj['obj_id'])) {
224  $this->writeItemHierarchyRec($tree, $obj['obj_id']);
225  }
226 
227  if ($this->version == "2004") {
228  if ($obj['type'] == 'sco' || $obj['type'] == 'ass') {
229  $this->writer->xmlStartTag("metadata");
230  $this->writer->xmlElement("adlcp:location", null, $obj['obj_id'] . "/indexMD.xml");
231  $this->writer->xmlEndTag("metadata");
232  }
233  require_once("./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Item.php");
234  $seq_item = new ilSCORM2004Item($obj['obj_id']);
235  $this->writer->xmlData($this->writer->xmlFormatData($seq_item->exportAsXML()), false, false);
236  }
237  $this->writer->xmlEndTag("item");
238  }
239  }
Class ilSCORM2004Condition.
writeItemHierarchyRec($tree, $a_parent_node)
write item hierarchy (Recursive Style)
+ Here is the caller graph for this function:

◆ writeResources()

ilContObjectManifestBuilder::writeResources ( )

Create resource entries for the learning module "PKG" and all SCOS and Assets.

Definition at line 244 of file class.ilContObjectManifestBuilder.php.

References $tree, ilObject\_exists(), ilObject\_lookupType(), ilPCFileList\collectFileItems(), and ilObjStyleSheet\getContentStylePath().

Referenced by buildManifest().

245  {
246  include_once("./Modules/Scorm2004/classes/class.ilSCORM2004Tree.php");
247  $tree = new ilSCORM2004Tree($this->cont_obj->getId());
248 
249  //$tree = new ilTree($this->cont_obj->getId());
250  //$tree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node');
251  //$tree->setTreeTablePK("slm_id");
252  foreach ($tree->getSubTree($tree->getNodeData($tree->root_id), true, array('sco', 'ass')) as $obj) {
253  $attrs = array();
254  $attrs["identifier"] = "il_" . IL_INST_ID . "_" . $obj['type'] . "_" . $obj['obj_id'] . "_ref";
255  $attrs["type"] = "webcontent";
256  if ($obj['type'] == "sco") {
257  $attrs[($this->version == "2004"?"adlcp:scormType":"adlcp:scormtype")] = "sco";
258  } else {
259  $attrs[($this->version == "2004"?"adlcp:scormType":"adlcp:scormtype")] = "asset";
260  }
261  $attrs["href"] = "./" . $obj['obj_id'] . "/index.html";
262  $this->writer->xmlStartTag("resource", $attrs, "");
263  $this->writer->xmlElement("dependency", array("identifierref" => "il_" . IL_INST_ID . "_" . $obj['type'] . "_" . $obj['obj_id'] . 'ITSELF'), "");
264  $this->writer->xmlElement("dependency", array("identifierref" => "il_" . IL_INST_ID . "_" . $obj['type'] . "_" . $obj['obj_id'] . 'OBJECTS'), "");
265  $this->writer->xmlElement("dependency", array("identifierref" => "il_" . IL_INST_ID . "_" . $obj['type'] . "_" . $obj['obj_id'] . 'RESOURCES'), "");
266  $this->writer->xmlElement("dependency", array("identifierref" => "il_" . IL_INST_ID . "_" . $obj['type'] . "_" . $obj['obj_id'] . 'FLAVOUR'), "");
267  $this->writer->xmlEndTag("resource");
268 
269  $attrs = array();
270  $attrs["identifier"] = "il_" . IL_INST_ID . "_" . $obj['type'] . "_" . $obj['obj_id'] . 'ITSELF';
271  $attrs["type"] = "webcontent";
272  $attrs[($this->version == "2004"?"adlcp:scormType":"adlcp:scormtype")] = "asset";
273  $this->writer->xmlStartTag("resource", $attrs, "");
274  $this->writer->xmlElement("file", array("href" => "./" . $obj['obj_id'] . "/index.xml"), "");
275  $this->writer->xmlElement("file", array("href" => "./" . $obj['obj_id'] . "/ilias_co_3_7.dtd"), "");
276  $this->writer->xmlElement("file", array("href" => "./" . $obj['obj_id'] . "/index.html"), "");
277  $this->writer->xmlEndTag("resource");
278 
279  $attrs = array();
280  $attrs["identifier"] = "il_" . IL_INST_ID . "_" . $obj['type'] . "_" . $obj['obj_id'] . 'RESOURCES';
281  $attrs["type"] = "webcontent";
282  $attrs[($this->version == "2004"?"adlcp:scormType":"adlcp:scormtype")] = "asset";
283  $this->writer->xmlStartTag("resource", $attrs, "");
284  $this->writer->xmlEndTag("resource");
285 
286  $attrs = array();
287  $attrs["identifier"] = "il_" . IL_INST_ID . "_" . $obj['type'] . "_" . $obj['obj_id'] . 'FLAVOUR';
288  $attrs["type"] = "webcontent";
289  $attrs[($this->version == "2004"?"adlcp:scormType":"adlcp:scormtype")] = "asset";
290  $this->writer->xmlStartTag("resource", $attrs, "");
291  $this->writer->xmlElement("file", array("href" => "./" . $obj['obj_id'] . "/index.xml"), "");
292  $this->writer->xmlElement("file", array("href" => "./" . $obj['obj_id'] . "/sco.xsl"), "");
293  $this->writer->xmlElement("file", array("href" => "./" . $obj['obj_id'] . "/css/system.css"), "");
294  $this->writer->xmlElement("file", array("href" => "./" . $obj['obj_id'] . "/css/style.css"), "");
295  $this->writer->xmlElement("file", array("href" => "./" . $obj['obj_id'] . "/js/scorm.js"), "");
296  $this->writer->xmlEndTag("resource");
297 
298  $attrs = array();
299  $attrs["identifier"] = "il_" . IL_INST_ID . "_" . $obj['type'] . "_" . $obj['obj_id'] . 'OBJECTS';
300  $attrs["type"] = "webcontent";
301  $attrs[($this->version == "2004"?"adlcp:scormType":"adlcp:scormtype")] = "asset";
302  $this->writer->xmlStartTag("resource", $attrs, "");
303 
304  include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
305 
306  $active_css = ilObjStyleSheet::getContentStylePath($this->cont_obj->getStyleSheetId());
307  $active_css = explode('?', $active_css);
308  $css = fread(fopen($active_css[0], 'r'), filesize($active_css[0]));
309  preg_match_all("/url\(([^\)]*)\)/", $css, $css_files);
310  $css_files = array_unique($css_files[1]);
311  $currdir = getcwd();
312  chdir(dirname($active_css[0]));
313  foreach ($css_files as $fileref) {
314  if (file_exists($fileref)) {
315  $this->writer->xmlElement("file", array("href" => "./" . $obj['obj_id'] . "/images/" . basename($fileref)), "");
316  }
317  }
318  chdir($currdir);
319 
320  include_once("./Modules/Scorm2004/classes/class.ilSCORM2004Tree.php");
321  $pagetree = new ilSCORM2004Tree($this->cont_obj->getId());
322 
323  //$pagetree = new ilTree($this->cont_obj->getId());
324  //$pagetree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node');
325  //$pagetree->setTreeTablePK("slm_id");
326  foreach ($pagetree->getSubTree($pagetree->getNodeData($obj['obj_id']), false, 'page') as $page) {
327  $page_obj = new ilSCORM2004Page($page);
328  $page_obj->buildDom();
329  $mob_ids = $page_obj->collectMediaObjects(false);
330  foreach ($mob_ids as $mob_id) {
331  if ($mob_id > 0 && ilObject::_exists($mob_id)) {
332  $media_obj = new ilObjMediaObject($mob_id);
333  $media_obj = $media_obj->getMediaItem("Standard");
334  if ($media_obj != null && $media_obj->getLocationType() == "LocalFile") {
335  $this->writer->xmlElement("file", array("href" => "./" . $obj['obj_id'] . "/objects/il_" . IL_INST_ID . "_mob_" . $mob_id . "/" . rawurlencode($media_obj->getLocation())), "");
336  }
337  }
338  }
339 
340  include_once("./Services/COPage/classes/class.ilPCFileList.php");
341  $file_ids = ilPCFileList::collectFileItems($page_obj, $page_obj->getDomDoc());
342  foreach ($file_ids as $file_id) {
343  if (ilObject::_lookupType($file_id) == "file") {
344  include_once("./Modules/File/classes/class.ilObjFile.php");
345  $file_obj = new ilObjFile($file_id, false);
346  $this->writer->xmlElement("file", array("href" => "./" . $obj['obj_id'] . "/objects/il_" . IL_INST_ID . "_file_" . $file_id . "/" . rawurlencode($file_obj->getFileName())), "");
347  }
348  }
349  unset($page_obj);
350  }
351 
352  $this->writer->xmlEndTag("resource");
353  }
354  if ($this->version == "2004") {
355  $attrs = array();
356  $attrs["identifier"] = "PKG";
357  $attrs["type"] = "webcontent";
358  $attrs[($this->version == "2004"?"adlcp:scormType":"adlcp:scormtype")] = "asset";
359  $this->writer->xmlStartTag("resource", $attrs, "");
360 
361  $xsd_files = array('adlcp_v1p3.xsd','adlseq_v1p3.xsd','imsss_v1p0.xsd','adlnav_v1p3.xsd','adlnav_v1p3.xsd',
362  'imscp_v1p1.xsd','imsmanifest.xml','imsss_v1p0auxresource.xsd','imsss_v1p0control.xsd','imsss_v1p0delivery.xsd',
363  'imsss_v1p0limit.xsd','imsss_v1p0objective.xsd','imsss_v1p0random.xsd','imsss_v1p0rollup.xsd','imsss_v1p0seqrule.xsd',
364  'imsss_v1p0util.xsd','xml.xsd','index.html');
365  foreach ($xsd_files as $xsd_file) {
366  $attrs = array();
367  $attrs["href"] = $xsd_file;
368  $this->writer->xmlElement("file", $attrs, "");
369  }
370  $this->writer->xmlEndTag("resource");
371  }
372  }
static _exists($a_id, $a_reference=false, $a_type=null)
checks if an object exists in object_data
SCORM 2004 Editing tree.
Class ilSCORM2004Page.
static collectFileItems($a_page, $a_domdoc)
Get all file items that are used within the page.
Class ilObjMediaObject.
static getContentStylePath($a_style_id, $add_random=true)
get content style path
static _lookupType($a_id, $a_reference=false)
lookup object type
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $cont_obj

ilContObjectManifestBuilder::$cont_obj

Definition at line 20 of file class.ilContObjectManifestBuilder.php.

◆ $db

ilContObjectManifestBuilder::$db

Definition at line 19 of file class.ilContObjectManifestBuilder.php.

◆ $inst_id

ilContObjectManifestBuilder::$inst_id

Definition at line 21 of file class.ilContObjectManifestBuilder.php.

◆ $version

ilContObjectManifestBuilder::$version

Definition at line 23 of file class.ilContObjectManifestBuilder.php.

◆ $writer

ilContObjectManifestBuilder::$writer

Definition at line 22 of file class.ilContObjectManifestBuilder.php.


The documentation for this class was generated from the following file: