ILIAS  release_4-3 Revision
 All Data Structures Namespaces Files Functions Variables Groups Pages
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 
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;
29  private $template_file;
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 
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 ?>