ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
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 
5 require_once("./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Item.php");
6 require_once("./Modules/Scorm2004/classes/class.ilSCORM2004Chapter.php");
7 require_once("./Modules/Scorm2004/classes/class.ilSCORM2004SeqChapter.php");
8 require_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;
28  private $template_file;
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 
47  parent::__construct();
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  {
142  $ilDB = $this->db;
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 }
Class ilSCORM2004Condition.
importTemplate($a_target, $a_object, $a_parent, $node)
function import Template
static putInTree($a_obj, $a_parent_id="", $a_target_node_id="")
put this object into content object tree
Class ilSCORM2004Sco.
insertTemplateForObjectAtParent($a_object, $a_parent, $a_target)
$_SESSION["AccountId"]
$result
static getFileNameForIdentifier($a_identifier)
global $DIC
Definition: saml.php:7
Class ilSCORM2004Chapter.
Class ilSCORM2004Chapter.
$metadata['__DYNAMIC:1__']
$query
$row
Class ilSCORM2004Chapter.
global $ilDB
$i
Definition: disco.tpl.php:19
Class ilSCORM2004Condition.
getIdentifier()
function getIdentifier
getMetadataProperties()
function getMetadataProperties
static templateForChapter($a_chapter_id)
$test
Definition: Utf8Test.php:84