ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilSCORM2004ScoGUI.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
5 require_once("./Modules/Scorm2004/classes/class.ilSCORM2004NodeGUI.php");
6 require_once("./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php");
7 require_once("./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Objective.php");
8 
22 {
23 
29  var $ctrl = null;
30 
31  function ilSCORM2004ScoGUI($a_slm_obj, $a_node_id = 0)
32  {
33  global $ilCtrl;
34 
35  $ilCtrl->saveParameter($this, "obj_id");
36  $this->ctrl = &$ilCtrl;
37 
38  parent::ilSCORM2004NodeGUI($a_slm_obj, $a_node_id);
39  }
40 
44  function getType()
45  {
46  return "sco";
47  }
48 
52  function &executeCommand()
53  {
54  global $tpl, $ilCtrl, $ilTabs;
55 
56  $tpl->getStandardTemplate();
57 
58  $next_class = $ilCtrl->getNextClass($this);
59  $cmd = $ilCtrl->getCmd();
60 
61  switch($next_class)
62  {
63  // notes
64  case "ilnotegui":
65  switch($_GET["notes_mode"])
66  {
67  default:
68  $ilTabs->setTabActive("sahs_organization");
69  return $this->showOrganization();
70  }
71  break;
72 
73  case 'ilobjectmetadatagui':
74  $this->setTabs();
75  $this->setLocator();
76  include_once 'Services/Object/classes/class.ilObjectMetaDataGUI.php';
77  $md_gui = new ilObjectMetaDataGUI($this->slm_object,
78  $this->node_object->getType(), $this->node_object->getId());
79  $md_gui->addMDObserver($this->node_object,'MDUpdateListener','General');
80  $ilCtrl->forwardCommand($md_gui);
81  break;
82 
83  case 'ilscorm2004pagegui':
84  include_once("./Modules/Scorm2004/classes/class.ilSCORM2004PageGUI.php");
85  $page_obj = new ilSCORM2004PageGUI("sahs",$_GET["pg_id"]);
86  //$page_obj->setPresentationTitle($page["title"]);
87  $page_obj->setOutputMode(IL_PAGE_PREVIEW);
88  $ilCtrl->forwardCommand($page_obj);
89  break;
90 
91  default:
92  $cmd = $ilCtrl->getCmd("showOrganization");
93  $ret =& $this->$cmd();
94  break;
95  }
96  }
97 
101  function showProperties()
102  {
103  global $tpl, $lng, $ilTabs, $ilCtrl;
104 
105  $this->setTabs();
106  $this->setLocator();
107  $ilTabs->setTabActive("sahs_desc_objectives");
108 
109  include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
110  $form = new ilPropertyFormGUI();
111 
112  // hide objectives page
113  $cb = new ilCheckboxInputGUI($lng->txt("sahs_hide_objectives_page"), "hide_objectives_page");
114  $cb->setInfo($lng->txt("sahs_hide_objectives_page_info"));
115  $form->addItem($cb);
116  $cb->setChecked($this->node_object->getHideObjectivePage());
117 
118  // description
119  $ta = new ilTextAreaInputGUI($lng->txt("description"), "desc");
120  $ta->setRows(4);
121  $ta->setCols(55);
122  $ta->setInfo($lng->txt("sahs_list_info"));
123  $form->setTitle($lng->txt("properties"));
124  $form->addItem($ta);
125  include_once "./Services/MetaData/classes/class.ilMD.php";
126  $meta = new ilMD($this->node_object->getSLMId(), $this->node_object->getId(), $this->node_object->getType());
127  $desc_ids = $meta->getGeneral()->getDescriptionIds();
128  $ta->setValue($meta->getGeneral()->getDescription($desc_ids[0])->getDescription());
129 
130  // objectives
131  $sh = new ilFormSectionHeaderGUI();
132  $sh->setTitle($lng->txt("sahs_learning_objectives"));
133  $form->addItem($sh);
134 
135  $objectives = $this->node_object->getObjectives();
136 
137  foreach ($objectives as $ob)
138  {
139  // map info
140  $mappings = $ob->getMappings();
141  $mapinfo = null;
142  foreach($mappings as $map)
143  {
144  $mapinfo .= $map->getTargetObjectiveID();
145  }
146 
147  if ($mapinfo == null)
148  {
149  $mapinfo = "local";
150  }
151  else
152  {
153  $mapinfo = "global to ".$mapinfo;
154  }
155 
156  // objective
157  $ta = new ilTextAreaInputGUI($mapinfo,
158  "obj_".$ob->getId());
159  $ta->setCols(55);
160  $ta->setRows(4);
161  $ta->setInfo($lng->txt("sahs_list_info"));
162  $form->addItem($ta);
163  $ta->setValue($ob->getObjectiveID());
164  }
165  $form->setFormAction($ilCtrl->getFormAction($this));
166  $form->addCommandButton("updateProperties",
167  $lng->txt("save"));
168  $tpl->setContent($form->getHTML());
169  }
170 
174  function updateProperties()
175  {
176  global $tpl,$lng;
177  $empty = false;
178 
179  foreach ($_POST as $key=>$value) {
180  if(preg_match('/(obj_)(.+)/', $key,$match)){
181  $objective = new ilScorm2004Objective($this->node_object->getId(),$match[2]);
182 // if (!$value)
183 // {
184 // $empty=true;
185 // } else {
186  $objective->setObjectiveID(ilUtil::stripSlashes($value));
187  $objective->updateObjective();
188 // }
189  }
190  }
191 
192  $this->node_object->setHideObjectivePage(ilUtil::stripSlashes($_POST["hide_objectives_page"]));
193  $this->node_object->update();
194 
195  include_once "./Services/MetaData/classes/class.ilMD.php";
196  $meta = new ilMD($this->node_object->getSLMId(), $this->node_object->getId(), $this->node_object->getType());
197  $gen = $meta->getGeneral();
198  $desc_ids = $gen->getDescriptionIds();
199  $des = $gen->getDescription($desc_ids[0]);
200  $des->setDescription(ilUtil::stripSlashes($_POST["desc"]));
201  $des->update();
202  $gen->update();
203 
204  if (!$empty)
205  {
206  ilUtil::sendInfo($lng->txt("saved_successfully"),true);
207  }
208  else
209  {
210  ilUtil::sendFailure($lng->txt("sahs_empty_objectives_are_not_allowed"), true);
211  }
212  $this->showProperties();
213  }
214 
215  function sahs_questions()
216  {
217  global $tpl,$lng, $ilCtrl;
218 
219  $this->setTabs();
220  $this->setLocator();
221 
222  include_once "./Services/Table/classes/class.ilTableGUI.php";
223  include_once "./Modules/Scorm2004/classes/class.ilSCORM2004Page.php";
224  include_once("./Modules/TestQuestionPool/classes/class.assQuestion.php");
225  include_once("./Services/COPage/classes/class.ilPCQuestionGUI.php");
226 
227  // load template for table
228  $tpl->addBlockfile("ADM_CONTENT", "adm_content", "tpl.table.html");
229  $tpl->addBlockfile("TBL_CONTENT", "tbl_content", "tpl.scormeditor_sco_question.html", "Modules/Scorm2004");
230 
231  $tbl = new ilTableGUI();
232  $tbl->setTitle("Questions for ".$this->node_object->getTitle());
233  $tbl->setHeaderNames(array("Question","Page"));
234  $cols = array("question","page");
235  $tbl->setHeaderVars($cols, $header_params);
236  $tbl->setColumnWidth(array("50%", "50%"));
237  $tbl->disable("sort");
238  $tbl->disable("footer");
239 
240  $tree = new ilTree($this->slm_object->getId());
241  $tree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node');
242  $tree->setTreeTablePK("slm_id");
243 
244  foreach($tree->getSubTree($tree->getNodeData($this->node_object->getId()),true,'page') as $page)
245  {
246  // get question ids
247  include_once("./Services/COPage/classes/class.ilPCQuestion.php");
248  $qids = ilPCQuestion::_getQuestionIdsForPage("sahs", $page["obj_id"]);
249  if (count($qids) > 0)
250  {
251  // output questions
252  foreach ($qids as $qid)
253  {
254  $tpl->setCurrentBlock("tbl_content");
255  $tpl->setVariable("TXT_PAGE_TITLE", $page["title"]);
256  $ilCtrl->setParameterByClass("ilscorm2004pagenodegui", "obj_id", $page["obj_id"]);
257  $tpl->setVariable("HREF_EDIT_PAGE", $ilCtrl->getLinkTargetByClass("ilscorm2004pagenodegui", "edit"));
258 
259  $qtitle = assQuestion::_getTitle($qid);
260  $tpl->setVariable("TXT_QUESTION", $qtitle);
261  $ilCtrl->setParameterByClass("ilscorm2004pagenodegui", "obj_id", $page["obj_id"]);
262  //$tpl->setVariable("HREF_EDIT_QUESTION", $ilCtrl->getLinkTargetByClass("ilscorm2004pagenodegui", "edit"));
263 
264  $tpl->setVariable("CSS_ROW", ilUtil::switchColor($i++, "tblrow1", "tblrow2"));
265  $tpl->parseCurrentBlock();
266  }
267  }
268  }
269  $tbl->render();
270  }
271 
272  function getEditTree()
273  {
274 die("deprecated");
275  $slm_tree = new ilTree($this->node_object->getId(),$this->slm_object->getId());
276  $slm_tree->setTreeTablePK("slm_id");
277  $slm_tree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node');
278  return $slm_tree;
279  }
280 
284  function setTabs()
285  {
286  global $ilTabs, $ilCtrl, $tpl, $lng, $ilHelp;
287 
288  $ilHelp->setScreenIdComponent("sahsed");
289 
290  // subelements
291  $ilTabs->addTarget("sahs_organization",
292  $ilCtrl->getLinkTarget($this,'showOrganization'),
293  "showOrganization", get_class($this));
294 
295  // properties (named learning objectives, since here is currently
296  // no other property)
297  $ilTabs->addTarget("sahs_desc_objectives",
298  $ilCtrl->getLinkTarget($this,'showProperties'),
299  "showProperties", get_class($this));
300 
301  // questions
302  $ilTabs->addTarget("sahs_questions",
303  $ilCtrl->getLinkTarget($this,'sahs_questions'),
304  "sahs_questions", get_class($this));
305 
306  // resources
307  $ilTabs->addTarget("cont_files",
308  $ilCtrl->getLinkTarget($this,'sco_resources'),
309  "sco_resources", get_class($this));
310 
311  // metadata
312  include_once "Services/Object/classes/class.ilObjectMetaDataGUI.php";
313  $mdgui = new ilObjectMetaDataGUI($this->slm_object,
314  $this->node_object->getType(), $this->node_object->getId());
315  $mdtab = $mdgui->getTab();
316  if($mdtab)
317  {
318  $ilTabs->addTarget("meta_data",
319  $mdtab,
320  "", "ilmdeditorgui");
321  }
322 
323  // export
324  $ilTabs->addTarget("export",
325  $ilCtrl->getLinkTarget($this, "showExportList"), "showExportList",
326  get_class($this));
327 
328  // import
329  $ilTabs->addTarget("import",
330  $ilCtrl->getLinkTarget($this, "import"), "import",
331  get_class($this));
332 
333  // preview
334  $ilTabs->addNonTabbedLink("preview",
335  $lng->txt("cont_preview"),
336  $ilCtrl->getLinkTarget($this,'sco_preview'), "_blank");
337 
338  $tpl->setTitleIcon(ilUtil::getImagePath("icon_sco.svg"));
339  $tpl->setTitle(
340  $lng->txt("sahs_unit").": ".$this->node_object->getTitle());
341  }
342 
346  function proceedDragDrop()
347  {
348  global $ilCtrl;
349 
350  //echo "-".$_POST["il_hform_source_id"]."-".$_POST["il_hform_target_id"]."-".$_POST["il_hform_fc"]."-";
351  $this->slm_object->executeDragDrop($_POST["il_hform_source_id"], $_POST["il_hform_target_id"],
352  $_POST["il_hform_fc"], $_POST["il_hform_as_subitem"]);
353  $ilCtrl->redirect($this, "showOrganization");
354  }
355 
359  function sco_preview()
360  {
361  global $tpl, $ilCtrl, $lng;
362 
363  // init main template
364  $tpl = new ilTemplate("tpl.main.html", true, true);
365  include_once("./Services/Style/classes/class.ilObjStyleSheet.php");
366  $tpl->setVariable("LOCATION_STYLESHEET", ilUtil::getStyleSheetLocation());
367  $tpl->setBodyClass("");
368  $tpl->setCurrentBlock("ContentStyle");
369  $tpl->setVariable("LOCATION_CONTENT_STYLESHEET",
370  ilObjStyleSheet::getContentStylePath($this->slm_object->getStyleSheetId()));
371  $tpl->parseCurrentBlock();
372 
373  // get javascript
374  include_once("./Services/jQuery/classes/class.iljQueryUtil.php");
377  $tpl->addJavaScript("./Modules/Scorm2004/scripts/questions/pure.js");
378  $tpl->addJavaScript("./Modules/Scorm2004/scripts/pager.js");
379 
380  $tpl->addOnLoadCode("pager.Init();");
381 
382  $tree = new ilTree($this->slm_object->getId());
383  $tree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node');
384  $tree->setTreeTablePK("slm_id");
385  include_once "./Modules/Scorm2004/classes/class.ilSCORM2004PageGUI.php";
386  include_once "./Services/MetaData/classes/class.ilMD.php";
387 
388  $meta = new ilMD($this->node_object->getSLMId(), $this->node_object->getId(), $this->node_object->getType());
389  $desc_ids = $meta->getGeneral()->getDescriptionIds();
390  $sco_description = $meta->getGeneral()->getDescription($desc_ids[0])->getDescription();
391 
392  // get sco template
393  $sco_tpl = new ilTemplate("tpl.sco.html", true, true, "Modules/Scorm2004");
394 
395  // navigation
396  $lk = ilObjSAHSLearningModule::getAffectiveLocalization($this->node_object->getSLMId());
397  ilSCORM2004Asset::renderNavigation($sco_tpl, "", $lk);
398 
399  // meta page (description and objectives)
400  ilSCORM2004Asset::renderMetaPage($sco_tpl, $this->node_object,
401  $this->node_object->getType());
402 
403  // init export (this initialises glossary template)
405  $terms = $this->node_object->getGlossaryTermIds();
406 
407  // render page
408  foreach($tree->getSubTree($tree->getNodeData($this->node_object->getId()),true,'page') as $page)
409  {
410  $page_obj = new ilSCORM2004PageGUI($this->node_object->getType(),$page["obj_id"],
411  0, $this->slm_object->getId());
412  $page_obj->setPresentationTitle($page["title"]);
413  $page_obj->setOutputMode(IL_PAGE_PREVIEW);
414  $page_obj->setStyleId($this->slm_object->getStyleSheetId());
415  if (count($terms) > 1)
416  {
417  $page_obj->setGlossaryOverviewInfo(
418  ilSCORM2004ScoGUI::getGlossaryOverviewId(), $this->node_object);
419  }
420  $sco_tpl->setCurrentBlock("page_preview");
421  $html = $ilCtrl->getHTML($page_obj);
422  //$sco_tpl->setVariable("PAGE_PRV", $page_obj->showPage("export"));
423  $sco_tpl->setVariable("PAGE_PRV", $html);
424  $sco_tpl->parseCurrentBlock();
425  }
426 
427  $output = $sco_tpl->get();
428 
429  // append glossary entries on the sco level
430  $output.= ilSCORM2004PageGUI::getGlossaryHTML($this->node_object);
431 
432  //insert questions
433  require_once './Modules/Scorm2004/classes/class.ilQuestionExporter.php';
434  $output = preg_replace_callback("/{{{{{(Question;)(il__qst_[0-9]+)}}}}}/",array(get_class($this), 'insertQuestion'),$output);
435 // $output = preg_replace("/&#123;/","",$output);
436 // $output = preg_replace("/&#125;/","",$output);
437  $output = "<script>var ScormApi=null;".ilQuestionExporter::questionsJS()."</script>".$output;
438 
439  $lk = ilObjSAHSLearningModule::getAffectiveLocalization($this->node_object->getSLMId());
440 // include_once("./Modules/Scorm2004/classes/class.ilSCORM2004PageGUI.php");
441 // ilSCORM2004PageGUI::addPreparationJavascript($tpl, $lk);
442 
443  $tpl->addJavaScript("./Modules/Scorm2004/scripts/questions/question_handling.js");
444  $tpl->addCss("./Modules/Scorm2004/templates/default/question_handling.css");
445 
446  include_once("./Services/UIComponent/Overlay/classes/class.ilOverlayGUI.php");
448 
449  //inline JS
450  $output .='<script type="text/javascript" src="./Modules/Scorm2004/scripts/questions/question_handling.js"></script>';
451  $tpl->setVariable("CONTENT", $output);
452  }
453 
454  //callback function for question export
455  private function insertQuestion($matches)
456  {
457  $q_exporter = new ilQuestionExporter(false);
458  return $q_exporter->exportQuestion($matches[2]);
459  }
460 
464  public function selectExport()
465  {
466  switch ($_POST['select_export'])
467  {
468  case "exportScorm12":
469  case "exportScorm2004_3rd":
470  case "exportScorm2004_4th":
471  case "exportPDF":
472  case "exportHTML":
473  $this->ctrl->redirect($this, $_POST['select_export']);
474  break;
475  default:
476  $this->ctrl->redirect($this, 'showExportList');
477  break;
478  }
479  }
480 
481  function showExportList()
482  {
483  global $tpl, $ilCtrl, $lng;
484 
485  $this->setTabs();
486  $this->setLocator();
487 
488 
489  $template = new ilTemplate("tpl.scorm2004_export_buttons.html", true, true, 'Modules/Scorm2004');
490 
491  $buttons = array(
492  "exportScorm2004_3rd" => $lng->txt("scorm_create_export_file_scrom2004"),
493  "exportScorm2004_4th" => $lng->txt("scorm_create_export_file_scrom2004_4th"),
494  "exportScorm12" => $lng->txt("scorm_create_export_file_scrom12"),
495  "exportPDF" => $lng->txt("scorm_create_export_file_pdf"),
496  "exportHTML" => $lng->txt("scorm_create_export_file_html")
497  );
498  foreach ($buttons as $value => $text)
499  {
500  $template->setCurrentBlock('option');
501  $template->setVariable('OPTION_VALUE', $value);
502  $template->setVariable('OPTION_TITLE', ilUtil::prepareFormOutput($text));
503  $template->parseCurrentBlock();
504  }
505  $template->setVariable('EXPORT_TITLE', $lng->txt('export'));
506  $template->setVariable('EXPORT_LABEL', $lng->txt('type'));
507  $template->setVariable('FORMACTION', $ilCtrl->getFormAction($this, 'selectExport'));
508 
509  $export_files = $this->node_object->getExportFiles();
510 
511  include_once "./Modules/Scorm2004/classes/class.ilSCORM2004ExportTableGUI.php";
512  $table_gui = new ilSCORM2004ExportTableGUI($this, 'showExportList');
513  $data = array();
514  foreach ($export_files as $exp_file)
515  {
516  $filetype = $exp_file['type'];
517  // $public_str = ($exp_file["file"] == $this->object->getPublicExportFile($filetype))
518  // ? " <b>(".$this->lng->txt("public").")<b>"
519  // : "";
520  $file_arr = explode("__", $exp_file["file"]);
521  array_push($data, array('file' => $exp_file['file'], 'filetype' => $filetype, 'date' => ilDatePresentation::formatDate(new ilDateTime($file_arr[0], IL_CAL_UNIX)), 'size' => $exp_file['size'], 'type' => $exp_file['type'].$public_str));
522  }
523  $table_gui->setData($data);
524  $tpl->setVariable('ADM_CONTENT', $template->get() . "\n" . $table_gui->getHTML());
525 
526 
527  }
528 
530  {
531  $export = new ilScorm2004Export($this->node_object,'SCORM 2004 4th');
532  $export->buildExportFile();
533  $this->ctrl->redirect($this, "showExportList");
534  }
535 
536 
538  {
539  $export = new ilScorm2004Export($this->node_object,'SCORM 2004 3rd');
540  $export->buildExportFile();
541  $this->ctrl->redirect($this, "showExportList");
542  }
543 
544  function exportScorm12()
545  {
546  $export = new ilScorm2004Export($this->node_object,'SCORM 1.2');
547  $export->buildExportFile();
548  $this->ctrl->redirect($this, "showExportList");
549  }
550 
551  function exportHTML()
552  {
553  $export = new ilScorm2004Export($this->node_object,'HTML');
554  $export->buildExportFile();
555  $this->ctrl->redirect($this, "showExportList");
556  }
557 
558  function exportISO()
559  {
560  $export = new ilScorm2004Export($this->node_object,'ISO');
561  $export->buildExportFile();
562  $this->ctrl->redirect($this, "showExportList");
563  }
564 
565  function exportPDF()
566  {
567  $export = new ilScorm2004Export($this->node_object,'PDF');
568  $export->buildExportFile();
569  $this->ctrl->redirect($this, "showExportList");
570  }
571 
573  {
574  $file = str_replace("..", "", $_GET['file']);
575  $export = new ilSCORM2004Export($this->node_object);
576  $export_dir = $export->getExportDirectoryForType($_GET['type']);
577  ilUtil::deliverFile($export_dir."/".$file, $file);
578  }
579 
584  {
585  global $lng, $tpl;
586 
587  if(!isset($_POST["file"]))
588  {
589  ilUtil::sendInfo($lng->txt("no_checkbox"),true);
590  $this->ctrl->redirect($this, "showExportList");
591  }
592 
593  ilUtil::sendQuestion($lng->txt("info_delete_sure"));
594  $export_files = $this->node_object->getExportFiles();
595 
596  include_once "./Modules/Scorm2004/classes/class.ilSCORM2004ExportTableGUI.php";
597  $table_gui = new ilSCORM2004ExportTableGUI($this, 'showExportList', true);
598  $data = array();
599  foreach ($export_files as $exp_file)
600  {
601  foreach ($_POST['file'] as $delete_file)
602  {
603  if (strcmp($delete_file, $exp_file['file']) == 0)
604  {
605  // $public_str = ($exp_file["file"] == $this->object->getPublicExportFile($exp_file["type"]))
606  // ? " <b>(".$this->lng->txt("public").")<b>"
607  // : "";
608  $file_arr = explode("__", $exp_file["file"]);
609  array_push($data, array('file' => $exp_file['file'], 'date' => ilDatePresentation::formatDate(new ilDateTime($file_arr[0], IL_CAL_UNIX)), 'size' => $exp_file['size'], 'type' => $exp_file['type'].$public_str));
610  }
611  }
612  }
613  $table_gui->setData($data);
614  $tpl->setVariable('ADM_CONTENT', $table_gui->getHTML());
615  }
616 
621  {
622  ilSession::clear("ilExportFiles");
623  $this->ctrl->redirect($this, "showExportList");
624  }
625 
626 
630  function deleteExportFile()
631  {
632  global $lng;
633  include_once "./Services/Utilities/classes/class.ilUtil.php";
634  $export = new ilSCORM2004Export($this->node_object);
635  foreach($_POST['file'] as $idx => $file)
636  {
637  $export_dir = $export->getExportDirectoryForType($_POST['type'][$idx]);
638  $exp_file = $export_dir."/".$file;
639  if (@is_file($exp_file))
640  {
641  unlink($exp_file);
642  }
643  }
644  ilUtil::sendSuccess($lng->txt('msg_deleted_export_files'), true);
645  $this->ctrl->redirect($this, "showExportList");
646  }
647 
649  {
650  $export_files = array();
651 
652  require_once "./Modules/Scorm2004/classes/class.ilSCORM2004Page.php";
653  include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php";
654  include_once "./Modules/File/classes/class.ilObjFile.php";
655  $tree = new ilTree($this->slm_object->getId());
656  $tree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node');
657  $tree->setTreeTablePK("slm_id");
658  foreach($tree->getSubTree($tree->getNodeData($this->node_object->getId()),true,'page') as $page)
659  {
660  $page_obj = new ilSCORM2004Page($page["obj_id"]);
661  $page_obj->buildDom();
662  $mob_ids = $page_obj->collectMediaObjects(false);
663  foreach($mob_ids as $mob_id)
664  {
665  if ($mob_id > 0 && ilObject::_exists($mob_id))
666  {
667  $path = ilObjMediaObject::_lookupStandardItemPath($mob_id,false,false);
668 
669  $media_obj = new ilObjMediaObject($mob_id);
670  $export_files[$i]["date"] = $media_obj->getCreateDate();
671  $export_files[$i]["size"] = @filesize($path); // could be remote, e.g. youtube video
672  $export_files[$i]["file"] = $media_obj->getTitle();
673  $export_files[$i]["type"] = $media_obj->getDescription();
674  $export_files[$i]["path"] = $path;
675  $this->ctrl->setParameter($this, "resource",
676  rawurlencode(ilObjMediaObject::_lookupStandardItemPath($mob_id,false,false)));
677  $export_files[$i]["link"] = $this->ctrl->getLinkTarget($this,"downloadResource");
678  $i++;
679  }
680  }
681  include_once("./Services/COPage/classes/class.ilPCFileList.php");
682  $file_ids =ilPCFileList::collectFileItems($page_obj, $page_obj->getDomDoc());
683  foreach($file_ids as $file_id)
684  {
685  $file_obj = new ilObjFile($file_id, false);
686  $export_files[$i]["date"] = $file_obj->getCreateDate();
687  $export_files[$i]["size"] = $file_obj->getFileSize();
688  $export_files[$i]["file"] = $file_obj->getFileName();
689  $export_files[$i]["type"] = $file_obj->getFileType();
690  $export_files[$i]["file_id"] = $file_id;
691  $this->ctrl->setParameter($this, "file_id",$file_id);
692  $export_files[$i]["link"] = $this->ctrl->getLinkTarget($this,"downloadFile","");
693  $i++;
694  }
695  unset($page_obj);
696  }
697 
698  return $export_files;
699  }
700 
701  function sco_resources()
702  {
703  global $tpl, $lng, $ilCtrl;;
704 
705  $this->setTabs();
706  $this->setLocator();
707  $i = 0;
708 
709  $export_files = $this->getExportResources();
710 
711  // create table
712  require_once("./Services/Table/classes/class.ilTableGUI.php");
713  $tbl = new ilTableGUI();
714 
715  // load files templates
716  $tpl->addBlockfile("ADM_CONTENT", "adm_content", "tpl.table.html");
717 
718  // load template for table content data
719  $tpl->addBlockfile("TBL_CONTENT", "tbl_content", "tpl.download_file_row.html", "Modules/LearningModule");
720 
721  $num = 0;
722 
723  $tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
724 
725  $tbl->setTitle($lng->txt("cont_files"));
726 
727  $tbl->setHeaderNames(array($lng->txt("cont_format"),
728  $lng->txt("cont_file"),
729  $lng->txt("size"), $lng->txt("date"),
730  ""));
731 
732  $cols = array("format", "file", "size", "date", "download");
733  $header_params = array("ref_id" => $_GET["ref_id"], "obj_id" => $_GET["obj_id"],
734  "cmd" => "sco_resources", "cmdClass" => strtolower(get_class($this)),
735  "cmdNode" => $_GET["cmdNode"], "baseClass" => $_GET["baseClass"]);
736  $tbl->setHeaderVars($cols, $header_params);
737  $tbl->setColumnWidth(array("10%", "30%", "20%", "20%","20%"));
738  $tbl->disable("sort");
739 
740  $tbl->setOrderColumn($_GET["sort_by"]);
741  $tbl->setOrderDirection($_GET["sort_order"]);
742  $tbl->setLimit($_GET["limit"]);
743  $tbl->setOffset($_GET["offset"]);
744  $tbl->setMaxCount($this->maxcount); // ???
745 
746 
747  $tbl->setMaxCount(count($export_files));
748 
749  // footer
750  $tbl->setFooter("tblfooter",$lng->txt("previous"),$lng->txt("next"));
751  //$tbl->disable("footer");
752 
753  $tbl->setMaxCount(count($export_files));
754  $export_files = array_slice($export_files, $_GET["offset"], $_GET["limit"]);
755 
756  $tbl->render();
757  if(count($export_files) > 0)
758  {
759  $i=0;
760  foreach($export_files as $exp_file)
761  {
762  /* remote files (youtube videos) have no size, so we allow them now
763  if (!$exp_file["size"] > 0)
764  {
765  continue;
766  }
767  */
768 
769  $tpl->setCurrentBlock("tbl_content");
770  $tpl->setVariable("TXT_FILENAME", $exp_file["file"]);
771 
772  $css_row = ilUtil::switchColor($i++, "tblrow1", "tblrow2");
773  $tpl->setVariable("CSS_ROW", $css_row);
774 
775  $tpl->setVariable("TXT_SIZE", $exp_file["size"]);
776  $tpl->setVariable("TXT_FORMAT", $exp_file["type"]);
777 
778  $tpl->setVariable("TXT_DATE", $exp_file["date"]);
779 
780  if($exp_file["size"] > 0)
781  {
782  $tpl->setVariable("TXT_DOWNLOAD", $lng->txt("download"));
783  $ilCtrl->setParameter($this, "resource", rawurlencode($exp_file["path"]));
784  $ilCtrl->setParameter($this, "file_id", rawurlencode($exp_file["file_id"]));
785  $tpl->setVariable("LINK_DOWNLOAD",
786  $ilCtrl->getLinkTarget($this, "downloadResource"));
787  }
788  else
789  {
790  $tpl->setVariable("TXT_DOWNLOAD", $lng->txt("show"));
791  $tpl->setVariable("LINK_TARGET", " target=\"_blank\"");
792  $tpl->setVariable("LINK_DOWNLOAD", $exp_file["path"]);
793  }
794 
795  $tpl->parseCurrentBlock();
796  }
797  } //if is_array
798  /* not found in template?
799  else
800  {
801  $tpl->setCurrentBlock("notfound");
802  $tpl->setVariable("TXT_OBJECT_NOT_FOUND", $lng->txt("obj_not_found"));
803  $tpl->setVariable("NUM_COLS", 4);
804  $tpl->parseCurrentBlock();
805  }
806  */
807  // $tpl->parseCurrentBlock();
808  }
809 
810  function downloadResource()
811  {
812  $export_files = $this->getExportResources();
813 
814  if ($_GET["file_id"] > 0)
815  {
816  $file = new ilObjFile($_GET["file_id"], false);
817  }
818 
819  // check that file really belongs to SCORM module (security)
820  foreach ($export_files as $f)
821  {
822  if (is_object($file))
823  {
824  if ($f["file"] == $file->getFileName())
825  {
826  $file->sendFile();
827  }
828  }
829  else
830  {
831  if ($f["path"] == $_GET["resource"])
832  {
833  if (is_file($f["path"]))
834  {
835  ilUtil::deliverFile($f["path"], $f["file"]);
836  }
837  }
838  }
839  }
840  exit;
841  }
842 
843  function downloadFile()
844  {
845  $file = explode("_", $_GET["file_id"]);
846  require_once("./Modules/File/classes/class.ilObjFile.php");
847  $fileObj =& new ilObjFile($file[count($file) - 1], false);
848  $fileObj->sendFile();
849  exit;
850  }
851 
852  function import()
853  {
854  global $tpl, $lng;
855 
856  $this->setTabs();
857  $this->setLocator();
858 
859  $tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.scormeditor_sco_import.html", "Modules/Scorm2004");
860 
861  $tpl->setVariable("TYPE_IMG",ilUtil::getImagePath('icon_lm.svg'));
862  $tpl->setVariable("ALT_IMG", $lng->txt("obj_sahs"));
863 
864  $tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
865 
866  $tpl->setVariable("BTN_NAME", "importSave");
867 
868  // this leads to _top target which removes the left organization frame
869  //$tpl->setVariable("TARGET", ' target="'.ilFrameTargetInfo::_getFrame("MainContent").'" ');
870 
871  $tpl->setVariable("TXT_UPLOAD", $lng->txt("upload"));
872  $tpl->setVariable("TXT_CANCEL", $lng->txt("cancel"));
873  $tpl->setVariable("TXT_IMPORT_SCO", $lng->txt("import_sco_object"));
874  $tpl->setVariable("TXT_SELECT_FILE", $lng->txt("select_file"));
875  $tpl->setVariable("TXT_VALIDATE_FILE", $lng->txt("cont_validate_file"));
876 
877  // get the value for the maximal uploadable filesize from the php.ini (if available)
878  $umf=get_cfg_var("upload_max_filesize");
879  // get the value for the maximal post data from the php.ini (if available)
880  $pms=get_cfg_var("post_max_size");
881 
882  //convert from short-string representation to "real" bytes
883  $multiplier_a=array("K"=>1024, "M"=>1024*1024, "G"=>1024*1024*1024);
884 
885  $umf_parts=preg_split("/(\d+)([K|G|M])/", $umf, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
886  $pms_parts=preg_split("/(\d+)([K|G|M])/", $pms, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
887 
888  if (count($umf_parts) == 2) { $umf = $umf_parts[0]*$multiplier_a[$umf_parts[1]]; }
889  if (count($pms_parts) == 2) { $pms = $pms_parts[0]*$multiplier_a[$pms_parts[1]]; }
890 
891  // use the smaller one as limit
892  $max_filesize=min($umf, $pms);
893 
894  if (!$max_filesize) $max_filesize=max($umf, $pms);
895 
896  //format for display in mega-bytes
897  $max_filesize=sprintf("%.1f MB",$max_filesize/1024/1024);
898 
899  // gives out the limit as a little notice
900  $tpl->setVariable("TXT_FILE_INFO", $lng->txt("file_notice")." $max_filesize");
901  }
902 
903  function importSave()
904  {
905  global $_FILES, $rbacsystem;
906  global $ilias, $lng;
907 
908  // check if file was uploaded
909  $source = $_FILES["scormfile"]["tmp_name"];
910  if (($source == 'none') || (!$source))
911  {
912  $ilias->raiseError("No file selected!",$ilias->error_obj->MESSAGE);
913  }
914  // check create permission
915  if (!$rbacsystem->checkAccess("write", $_GET["ref_id"]))
916  {
917  $ilias->raiseError($lng->txt("no_create_permission"), $ilias->error_obj->WARNING);
918  }
919  // get_cfg_var("upload_max_filesize"); // get the may filesize form t he php.ini
920  switch ($__FILES["scormfile"]["error"])
921  {
922  case UPLOAD_ERR_INI_SIZE:
923  $ilias->raiseError($lng->txt("err_max_file_size_exceeds"),$ilias->error_obj->MESSAGE);
924  break;
925 
926  case UPLOAD_ERR_FORM_SIZE:
927  $ilias->raiseError($lng->txt("err_max_file_size_exceeds"),$ilias->error_obj->MESSAGE);
928  break;
929 
930  case UPLOAD_ERR_PARTIAL:
931  $ilias->raiseError($lng->txt("err_partial_file_upload"),$ilias->error_obj->MESSAGE);
932  break;
933 
934  case UPLOAD_ERR_NO_FILE:
935  $ilias->raiseError($lng->txt("err_no_file_uploaded"),$ilias->error_obj->MESSAGE);
936  break;
937  }
938 
939  $file = pathinfo($_FILES["scormfile"]["name"]);
940  $name = substr($file["basename"], 0, strlen($file["basename"]) - strlen($file["extension"]) - 1);
941  $file_path = $this->slm_object->getDataDirectory()."/".$this->node_object->getId()."/".$_FILES["scormfile"]["name"];
942  ilUtil::createDirectory($this->slm_object->getDataDirectory()."/".$this->node_object->getId());
943  ilUtil::moveUploadedFile($_FILES["scormfile"]["tmp_name"], $_FILES["scormfile"]["name"], $file_path);
944  ilUtil::unzip($file_path);
945  ilUtil::renameExecutables($this->slm_object->getDataDirectory()."/".$this->node_object->getId());
946 
947  include_once ("./Modules/Scorm2004/classes/ilSCORM13Package.php");
948  $newPack = new ilSCORM13Package();
949  $newPack->il_importSco($this->slm_object->getId(),$this->node_object->getId(),$this->slm_object->getDataDirectory()."/".$this->node_object->getId());
950 
951  $this->ctrl->redirect($this, "showOrganization");
952  }
953 
957  function cancel()
958  {
959  $this->ctrl->redirect($this, "showOrganization");
960  }
961 
968  static function getGlossaryOverviewId()
969  {
970  return "sco_glo_ov";
971  }
972 
979  static function getGloOverviewOv($a_sco)
980  {
981  global $lng;
982 
983  $tpl = new ilTemplate("tpl.sco_glossary_overview.html", true, true, "Modules/Scorm2004");
984 
985  $terms = $a_sco->getGlossaryTermIds();
986  $lk = ilObjSAHSLearningModule::getAffectiveLocalization($a_sco->getSLMId());
987  foreach ($terms as $k => $t)
988  {
989  $tpl->setCurrentBlock("link");
990  $tpl->setVariable("TXT_LINK", $t);
991  $tpl->setVariable("ID_LINK", "glo_ov_t".$k);
992  $tpl->parseCurrentBlock();
993  }
994 
995  $tpl->setVariable("DIV_ID", ilSCORM2004ScoGUI::getGlossaryOverviewId());
996  $tpl->setVariable("TXT_SCO_GLOSSARY", $lng->txtlng("content", "cont_sco_glossary", $lk));
997  $tpl->setVariable("TXT_CLOSE", $lng->txtlng("common", "close", $lk));
998 
999  if (count($terms) > 1)
1000  {
1001  return $tpl->get();
1002  }
1003  else
1004  {
1005  return "";
1006  }
1007  }
1008 
1009 }
1010 ?>
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms public
static initjQueryUI()
Init jQuery UI (see included_components.txt for included components)
Class ilObjectMetaDataGUI.
print $file
& executeCommand()
execute command
Scorm 2004 Question Exporter.
const IL_PAGE_PREVIEW
exit
Definition: login.php:54
$_POST['username']
Definition: cron.php:12
static _getQuestionIdsForPage($a_parent_type, $a_page_id, $a_lang="-")
Get all questions of a page.
proceedDragDrop()
Perform drag and drop action.
This class represents a property form user interface.
Class ilSCORM2004NodeGUI.
static _exists($a_id, $a_reference=false, $a_type=null)
checks if an object exists in object_data
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
$_GET["client_id"]
$tbl
Definition: example_048.php:81
This class represents a section header in a property form.
$ctrl
Constructor public.
static getGloOverviewOv($a_sco)
des
$cmd
Definition: sahs_server.php:35
addMDObserver($a_class, $a_method, $a_section)
static unzip($a_file, $overwrite=false, $a_flat=false)
unzip file
static renderMetaPage($a_tpl, $a_sco, $a_asset_type="", $mode="")
Render meta page (description/objectives at beginning)
selectExport()
Select the export type of the SCORM 2004 module.
This class represents a checkbox property in a property form.
setLocator()
Set Locator Items.
Class ilTableGUI.
_getTitle($a_q_id)
Returns the title of a question.
const IL_CAL_UNIX
static getGlossaryOverviewId()
Get sco glossary overlay id.
global $tpl
Definition: ilias.php:8
global $ilCtrl
Definition: ilias.php:18
cancelDeleteExportFile()
cancel deletion of export files
setInfo($a_info)
Set Information Text.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
$data
Class ilSCORM2004Page.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors=true, $a_mode="move_uploaded")
move uploaded file
special template class to simplify handling of ITX/PEAR
static collectFileItems($a_page, $a_domdoc)
Get all file items that are used within the page.
Class ilObjFile.
static formatDate(ilDateTime $date)
Format a date public.
& getGeneral()
Definition: class.ilMD.php:55
Date and time handling
setPresentationTitle($a_title="")
static createDirectory($a_dir, $a_mod=0755)
create directory
Export class for SCORM 2004 object.
Class ilObjMediaObject.
static clear($a_var)
Unset a value.
showOrganization()
Confirm deletion screen (delete page or structure objects)
setTableNames($a_table_tree, $a_table_obj_data, $a_table_obj_reference="")
set table names The primary key of the table containing your object_data must be &#39;obj_id&#39; You may use...
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendQuestion($a_info="", $a_keep=false)
Send Question to Screen.
static deliverFile($a_file, $a_filename, $a_mime='', $isInline=false, $removeAfterDelivery=false, $a_exit_after=true)
deliver file for download via browser.
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
setTreeTablePK($a_column_name)
set column containing primary key in tree table public
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
updateProperties()
update Properties
static renderNavigation($a_tpl, $a_spacer_img="", $a_lang="")
Render navigation.
getContentStylePath($a_style_id)
get content style path
getAffectiveLocalization($a_id)
Get affective localization.
Class ilSCORM2004Page GUI class.
static renameExecutables($a_dir)
Rename uploaded executables for security reasons.
global $lng
Definition: privfeed.php:40
$path
Definition: index.php:22
This class represents a text area property in a property form.
static switchColor($a_num, $a_css1, $a_css2)
switches style sheets for each even $a_num (used for changing colors of different result rows) ...
static _lookupStandardItemPath($a_mob_id, $a_url_encode=false, $a_web=true)
Get path for standard item.
$text
static initjQuery($a_tpl=null)
Init jQuery.
Class ilSCORM2004ScoGUI.
static getGlossaryHTML($a_sco)
Get glossary html (only in export mode)
deleteExportFile()
delete export files
$html
Definition: example_001.php:87
ilSCORM2004ScoGUI($a_slm_obj, $a_node_id=0)
showProperties()
Show learning objectives.
confirmDeleteExportFile()
confirmation screen for export file deletion
static initExport()
Init export.
static initJavascript()
Init javascript.