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