ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilSCORM2004SeqTemplate.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2011 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5require_once("./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Item.php");
6require_once("./Modules/Scorm2004/classes/class.ilSCORM2004Chapter.php");
7require_once("./Modules/Scorm2004/classes/class.ilSCORM2004SeqChapter.php");
8require_once("./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php");
9
21{
22
23 const SEQ_TEMPLATE_DIR = './Modules/Scorm2004/templates/editor/seq_templates';
24 const SEQ_TEMPLATE_XSL = './Modules/Scorm2004/templates/editor/seq_templates/xsl/normalize_seqtemplate.xsl';
25 const SEQ_TEMPLATE_XSD = './Modules/Scorm2004/templates/editor/seq_templates/xsd/seq_template.xsd';
26
27
28 private $template;
31 private $tree_node;
32 private $diagnostic = array ();
33 private $parentchapter = true;
34 private $importId;
35
36 //db fields
37 private $id = null;
38 private $seqNodeId = null;
39 private $sahs_sc13_treeId = null;
40 private $importid;
41
42 public function ilSCORM2004SeqTemplate($a_identifier)
43 {
44
45 parent::ilSCORM2004SeqNode();
46 $this->setNodeName("seqtemplate");
47
48 if ($a_identifier==null) {return;}
49 $t_file = self::getFileNameForIdentifier($a_identifier);
50
51 $this->template = new DOMDocument;
52 $this->template->async = false;
53
54
55 //look for template in lang_dir, fallback to en
56 $test = self::SEQ_TEMPLATE_DIR."/".$_SESSION["lang"]."/".$t_file;
57 if (file_exists($test))
58 {
59 $this->template_file = $test;
60 } else {
61 $this->template_file = self::SEQ_TEMPLATE_DIR."/en/".$t_file;
62 }
63 if (!@$this->template->load($this->template_file))
64 {
65 $this->diagnostic[] = 'Template not wellformed';
66 $test = $this->template->saveXML();
67 return false;
68 } else {
69 return true;
70 }
71 }
72
73
80 public function getMetadataProperties()
81 {
82 $array_metad = array();
83 $metadata = $this->template->getElementsByTagName("metadata");
84 $nodes = $metadata->item(0)->childNodes;
85 for ($i = 0; $i < $nodes->length; $i++ ) {
86 $curNode = $nodes->item($i);
87 $array_metad[$curNode->localName] = $curNode->nodeValue;
88 }
89 return $array_metad;
90 }
91
92
93 public static function availableTemplates()
94 {
95 global $ilDB;
96 $arr_templates = array();
97 $query = "SELECT * FROM sahs_sc13_seq_templts ORDER BY identifier";
98 $result = $ilDB->query($query);
99 while($row = $ilDB->fetchAssoc($result))
100 {
101 if($row['identifier']!="pretestpost") { //temporarily deactivated
102 array_push($arr_templates,new ilScorm2004SeqTemplate($row['identifier']));
103 }
104 }
105 return $arr_templates;
106 }
107
108
115 public function getIdentifier()
116 {
117 $seqtemplate = $this->template->getElementsByTagName("seqTemplate");
118 return $seqtemplate->item(0)->getAttribute("identifier");;
119 }
120
121
122 function insertTemplateForObjectAtParent($a_object,$a_parent,$a_target)
123 {
124 $this->importId = uniqid();
125 return $this->importTemplate($a_target,$a_object,$a_parent, $this->template->getElementsByTagName("item")->item(0));
126 }
127
128
129
136 public function importTemplate($a_target,$a_object,$a_parent,$node) {
137 global $ilDB;
138
139 switch($node->getAttribute('type'))
140 {
141 case "lesson":
142 if ($this->parentchapter==true)
143 {
144 $chap = new ilSCORM2004SeqChapter($a_object);
145 } else {
146 $chap = new ilSCORM2004Chapter($a_object);
147 }
148 $chap->setTitle($node->getElementsByTagName("title")->item(0)->nodeValue);
149 $chap->setSLMId($a_object->getId());
150 $chap->create();
151 $this->sahs_sc13_treeId = $chap->getId();
152 ilSCORM2004Node::putInTree($chap, $a_parent,$a_target);
153 $a_parent = $this->sahs_sc13_treeId;
154 if ($this->parentchapter==true)
155 {
156 $ilDB->manipulate("INSERT INTO sahs_sc13_seq_assign (identifier, sahs_sc13_tree_node_id) VALUES ".
157 "(".$ilDB->quote($this->getIdentifier(), "text").",".
158 $ilDB->quote($this->sahs_sc13_treeId, "integer").")");
159 $this->parentchapter = false;
160 }
161 $new_id = $chap->getId();
162 break;
163 case "sco" :
164 $sco = new ilSCORM2004Sco($a_object);
165 $sco->setTitle($node->getElementsByTagName("title")->item(0)->nodeValue);
166 $sco->setSLMId($a_object->getId());
167 $sco->create(false,true);
168 $this->sahs_sc13_treeId = $sco->getId();
169 ilSCORM2004Node::putInTree($sco, $a_parent, $target);
170 $new_id = $sco->getId();
171 break;
172 }
173
174 $seq_node = $node->getElementsByTagName("sequencing")->item(0);
175
176 $obj_node = $seq_node->getElementsByTagName("objectives")->item(0);
177 //addtitle
178 if ($obj_node) {
179 foreach ($obj_node->childNodes as $objchild ) {
180 if ($objchild->nodeName === "objective" || $objchild->nodeName === "primaryObjective") {
181 $title = $objchild->getAttribute('objectiveID');
182 $objchild->setAttribute("title",$title);
183 $i++;
184 }
185 }
186 }
187
188 $seq_item = new ilSCORM2004Item();
189 $seq_item->setTreeNodeId($this->sahs_sc13_treeId);
190 $seq_item->setImportid($this->importId);
191 $seq_item->setNocopy($seq_node->getAttribute('nocopy'));
192 $seq_item->setNodelete($seq_node->getAttribute('nodelete'));
193 $seq_item->setNomove($seq_node->getAttribute('nomove'));
194
195 $seq_doc = new DOMDocument();
196 $toadd = $seq_doc->importNode($seq_node, true);
197 $seq_doc->appendChild($toadd);
198
199 //generate Unique ObjectiveIDs for context
200
201 //@targetObjectiveID
202 $xpath_obj = new DOMXPath($seq_doc);
203
204 $found_nodes = $xpath_obj->query('//@objectiveID | //@referencedObjective | //@targetObjectiveID');
205 for ($i=0; $i<$found_nodes->length; $i++) {
206 $element = null;
207 $val = $found_nodes->item($i)->value;
209 if ($found_nodes->item($i)->name == "targetObjectiveID") {
210 $uid = $this->importId;
211 }
212 $val = strtolower(preg_replace('/ +/','_',$val)."_".$uid);
213 $element = $found_nodes->item($i)->ownerElement;
214 $element->setAttribute($found_nodes->item($i)->name,$val);
215 }
216
217 $seq_item->setDom($seq_doc);
218
219 $seq_item->insert();
220
221 foreach($node->childNodes as $child)
222 { if ($child->nodeName === "item") {
223 $this->importTemplate($a_target,$a_object,$a_parent,$child);
224 }
225 }
226
227 return $new_id;
228 }
229
230
231
232 private function generateObjIds($a_dom) {
233
234 }
235
236 // **********************
237 // Standard DB Operations for Object
238 // **********************
239
240 function insert($a_insert_node = false)
241 {
242 if ($a_insert_node==true) {$this->setSeqNodeId(parent::insert());}
243 $sql = "INSERT INTO sahs_sc13_seq_templ (seqnodeid,id)".
244 " values(".
245 $this->db->quote($this->seqNodeId, "integer").",".
246 $this->db->quote($this->id, "text").");";
247 $result = $this->db->manipulate($sql);
248 return true;
249 }
250
251
252
253 // **********************
254 // GETTER METHODS
255 // **********************
256
257 public function getSeqNodeId()
258 {
259 return $this->seqNodeId;
260 }
261
262 public function getId()
263 {
264 return $this->id;
265 }
266
267 // **********************
268 // Setter METHODS
269 // **********************
270
271 public function setSeqNodeId($a_seqnodeid)
272 {
273 $this->seqNodeId = $a_seqnodeid;
274 }
275
276 public function setId($a_id)
277 {
278 $this->id = $a_id;
279 }
280
281 //static functions
282
283 public static function getFileNameForIdentifier($a_identifier)
284 {
285 global $ilDB;
286 $query = "SELECT * FROM sahs_sc13_seq_templts WHERE identifier = ".
287 $ilDB->quote($a_identifier, "text");
288 $obj_set = $ilDB->query($query);
289 $obj_rec = $ilDB->fetchAssoc($obj_set);
290 return $obj_rec["fileName"]; // fixed, switch to all lowercase fields and tables in the future for mdb2 compliance
291 return $obj_rec["filename"];
292 }
293
294 public static function templateForChapter($a_chapter_id)
295 {
296 global $ilDB;
297 $template = null;
298 $query = "SELECT * FROM sahs_sc13_seq_assign WHERE sahs_sc13_tree_node_id = ".
299 $ilDB->quote($a_chapter_id, "integer");
300 $obj_set = $ilDB->query($query);
301 $obj_rec = $ilDB->fetchAssoc($obj_set);
302 if ($obj_rec['identifier']) {
303 $template = new ilScorm2004SeqTemplate($obj_rec['identifier']);
304 }
305 return $template;
306 }
307
308}
309
310?>
$result
$test
Definition: Utf8Test.php:85
$_SESSION["AccountId"]
ilSCORM2004Chapter($a_slm_object, $a_id=0)
Constructor @access public.
Class ilSCORM2004Condition.
static putInTree($a_obj, $a_parent_id="", $a_target_node_id="")
put this object into content object tree
Class ilSCORM2004Sco.
Class ilSCORM2004Chapter.
Class ilSCORM2004Condition.
Class ilSCORM2004Chapter.
insertTemplateForObjectAtParent($a_object, $a_parent, $a_target)
static getFileNameForIdentifier($a_identifier)
getMetadataProperties()
function getMetadataProperties
importTemplate($a_target, $a_object, $a_parent, $node)
function import Template
static templateForChapter($a_chapter_id)
getIdentifier()
function getIdentifier
global $ilDB