ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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 __construct($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::__construct($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/Content/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  $tpl->show();
453  exit;
454  }
455 
456  //callback function for question export
457  static private function insertQuestion($matches)
458  {
459  $q_exporter = new ilQuestionExporter(false);
460  return $q_exporter->exportQuestion($matches[2]);
461  }
462 
466  public function selectExport()
467  {
468  switch ($_POST['select_export'])
469  {
470  case "exportScorm12":
471  case "exportScorm2004_3rd":
472  case "exportScorm2004_4th":
473  case "exportPDF":
474  case "exportHTML":
475  $this->ctrl->redirect($this, $_POST['select_export']);
476  break;
477  default:
478  $this->ctrl->redirect($this, 'showExportList');
479  break;
480  }
481  }
482 
483  function showExportList()
484  {
485  global $tpl, $ilCtrl, $lng;
486 
487  $this->setTabs();
488  $this->setLocator();
489 
490 
491  $template = new ilTemplate("tpl.scorm2004_export_buttons.html", true, true, 'Modules/Scorm2004');
492 
493  $buttons = array(
494  "exportScorm2004_3rd" => $lng->txt("scorm_create_export_file_scrom2004"),
495  "exportScorm2004_4th" => $lng->txt("scorm_create_export_file_scrom2004_4th"),
496  "exportScorm12" => $lng->txt("scorm_create_export_file_scrom12"),
497  "exportPDF" => $lng->txt("scorm_create_export_file_pdf"),
498  "exportHTML" => $lng->txt("scorm_create_export_file_html")
499  );
500  foreach ($buttons as $value => $text)
501  {
502  $template->setCurrentBlock('option');
503  $template->setVariable('OPTION_VALUE', $value);
504  $template->setVariable('OPTION_TITLE', ilUtil::prepareFormOutput($text));
505  $template->parseCurrentBlock();
506  }
507  $template->setVariable('EXPORT_TITLE', $lng->txt('export'));
508  $template->setVariable('EXPORT_LABEL', $lng->txt('type'));
509  $template->setVariable('FORMACTION', $ilCtrl->getFormAction($this, 'selectExport'));
510 
511  $export_files = $this->node_object->getExportFiles();
512 
513  include_once "./Modules/Scorm2004/classes/class.ilSCORM2004ExportTableGUI.php";
514  $table_gui = new ilSCORM2004ExportTableGUI($this, 'showExportList');
515  $data = array();
516  foreach ($export_files as $exp_file)
517  {
518  $filetype = $exp_file['type'];
519  // $public_str = ($exp_file["file"] == $this->object->getPublicExportFile($filetype))
520  // ? " <b>(".$this->lng->txt("public").")<b>"
521  // : "";
522  $file_arr = explode("__", $exp_file["file"]);
523  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));
524  }
525  $table_gui->setData($data);
526  $tpl->setVariable('ADM_CONTENT', $template->get() . "\n" . $table_gui->getHTML());
527 
528 
529  }
530 
532  {
533  $export = new ilScorm2004Export($this->node_object,'SCORM 2004 4th');
534  $export->buildExportFile();
535  $this->ctrl->redirect($this, "showExportList");
536  }
537 
538 
540  {
541  $export = new ilScorm2004Export($this->node_object,'SCORM 2004 3rd');
542  $export->buildExportFile();
543  $this->ctrl->redirect($this, "showExportList");
544  }
545 
546  function exportScorm12()
547  {
548  $export = new ilScorm2004Export($this->node_object,'SCORM 1.2');
549  $export->buildExportFile();
550  $this->ctrl->redirect($this, "showExportList");
551  }
552 
553  function exportHTML()
554  {
555  $export = new ilScorm2004Export($this->node_object,'HTML');
556  $export->buildExportFile();
557  $this->ctrl->redirect($this, "showExportList");
558  }
559 
560  function exportISO()
561  {
562  $export = new ilScorm2004Export($this->node_object,'ISO');
563  $export->buildExportFile();
564  $this->ctrl->redirect($this, "showExportList");
565  }
566 
567  function exportPDF()
568  {
569  $export = new ilScorm2004Export($this->node_object,'PDF');
570  $export->buildExportFile();
571  $this->ctrl->redirect($this, "showExportList");
572  }
573 
575  {
576  $file = str_replace("..", "", $_GET['file']);
577  $export = new ilSCORM2004Export($this->node_object);
578  $export_dir = $export->getExportDirectoryForType($_GET['type']);
579  ilUtil::deliverFile($export_dir."/".$file, $file);
580  }
581 
586  {
587  global $lng, $tpl;
588 
589  if(!isset($_POST["file"]))
590  {
591  ilUtil::sendInfo($lng->txt("no_checkbox"),true);
592  $this->ctrl->redirect($this, "showExportList");
593  }
594 
595  ilUtil::sendQuestion($lng->txt("info_delete_sure"));
596  $export_files = $this->node_object->getExportFiles();
597 
598  include_once "./Modules/Scorm2004/classes/class.ilSCORM2004ExportTableGUI.php";
599  $table_gui = new ilSCORM2004ExportTableGUI($this, 'showExportList', true);
600  $data = array();
601  foreach ($export_files as $exp_file)
602  {
603  foreach ($_POST['file'] as $delete_file)
604  {
605  if (strcmp($delete_file, $exp_file['file']) == 0)
606  {
607  // $public_str = ($exp_file["file"] == $this->object->getPublicExportFile($exp_file["type"]))
608  // ? " <b>(".$this->lng->txt("public").")<b>"
609  // : "";
610  $file_arr = explode("__", $exp_file["file"]);
611  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));
612  }
613  }
614  }
615  $table_gui->setData($data);
616  $tpl->setVariable('ADM_CONTENT', $table_gui->getHTML());
617  }
618 
623  {
624  ilSession::clear("ilExportFiles");
625  $this->ctrl->redirect($this, "showExportList");
626  }
627 
628 
632  function deleteExportFile()
633  {
634  global $lng;
635  include_once "./Services/Utilities/classes/class.ilUtil.php";
636  $export = new ilSCORM2004Export($this->node_object);
637  foreach($_POST['file'] as $idx => $file)
638  {
639  $export_dir = $export->getExportDirectoryForType($_POST['type'][$idx]);
640  $exp_file = $export_dir."/".$file;
641  if (@is_file($exp_file))
642  {
643  unlink($exp_file);
644  }
645  }
646  ilUtil::sendSuccess($lng->txt('msg_deleted_export_files'), true);
647  $this->ctrl->redirect($this, "showExportList");
648  }
649 
651  {
652  $export_files = array();
653 
654  require_once "./Modules/Scorm2004/classes/class.ilSCORM2004Page.php";
655  include_once "./Services/MediaObjects/classes/class.ilObjMediaObject.php";
656  include_once "./Modules/File/classes/class.ilObjFile.php";
657  $tree = new ilTree($this->slm_object->getId());
658  $tree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node');
659  $tree->setTreeTablePK("slm_id");
660  foreach($tree->getSubTree($tree->getNodeData($this->node_object->getId()),true,'page') as $page)
661  {
662  $page_obj = new ilSCORM2004Page($page["obj_id"]);
663  $page_obj->buildDom();
664  $mob_ids = $page_obj->collectMediaObjects(false);
665  foreach($mob_ids as $mob_id)
666  {
667  if ($mob_id > 0 && ilObject::_exists($mob_id))
668  {
669  $path = ilObjMediaObject::_lookupStandardItemPath($mob_id,false,false);
670 
671  $media_obj = new ilObjMediaObject($mob_id);
672  $export_files[$i]["date"] = $media_obj->getCreateDate();
673  $export_files[$i]["size"] = @filesize($path); // could be remote, e.g. youtube video
674  $export_files[$i]["file"] = $media_obj->getTitle();
675  $export_files[$i]["type"] = $media_obj->getDescription();
676  $export_files[$i]["path"] = $path;
677  $this->ctrl->setParameter($this, "resource",
678  rawurlencode(ilObjMediaObject::_lookupStandardItemPath($mob_id,false,false)));
679  $export_files[$i]["link"] = $this->ctrl->getLinkTarget($this,"downloadResource");
680  $i++;
681  }
682  }
683  include_once("./Services/COPage/classes/class.ilPCFileList.php");
684  $file_ids =ilPCFileList::collectFileItems($page_obj, $page_obj->getDomDoc());
685  foreach($file_ids as $file_id)
686  {
687  $file_obj = new ilObjFile($file_id, false);
688  $export_files[$i]["date"] = $file_obj->getCreateDate();
689  $export_files[$i]["size"] = $file_obj->getFileSize();
690  $export_files[$i]["file"] = $file_obj->getFileName();
691  $export_files[$i]["type"] = $file_obj->getFileType();
692  $export_files[$i]["file_id"] = $file_id;
693  $this->ctrl->setParameter($this, "file_id",$file_id);
694  $export_files[$i]["link"] = $this->ctrl->getLinkTarget($this,"downloadFile","");
695  $i++;
696  }
697  unset($page_obj);
698  }
699 
700  return $export_files;
701  }
702 
703  function sco_resources()
704  {
705  global $tpl, $lng, $ilCtrl;;
706 
707  $this->setTabs();
708  $this->setLocator();
709  $i = 0;
710 
711  $export_files = $this->getExportResources();
712 
713  // create table
714  require_once("./Services/Table/classes/class.ilTableGUI.php");
715  $tbl = new ilTableGUI();
716 
717  // load files templates
718  $tpl->addBlockfile("ADM_CONTENT", "adm_content", "tpl.table.html");
719 
720  // load template for table content data
721  $tpl->addBlockfile("TBL_CONTENT", "tbl_content", "tpl.download_file_row.html", "Modules/LearningModule");
722 
723  $num = 0;
724 
725  $tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
726 
727  $tbl->setTitle($lng->txt("cont_files"));
728 
729  $tbl->setHeaderNames(array($lng->txt("cont_format"),
730  $lng->txt("cont_file"),
731  $lng->txt("size"), $lng->txt("date"),
732  ""));
733 
734  $cols = array("format", "file", "size", "date", "download");
735  $header_params = array("ref_id" => $_GET["ref_id"], "obj_id" => $_GET["obj_id"],
736  "cmd" => "sco_resources", "cmdClass" => strtolower(get_class($this)),
737  "cmdNode" => $_GET["cmdNode"], "baseClass" => $_GET["baseClass"]);
738  $tbl->setHeaderVars($cols, $header_params);
739  $tbl->setColumnWidth(array("10%", "30%", "20%", "20%","20%"));
740  $tbl->disable("sort");
741 
742  $tbl->setOrderColumn($_GET["sort_by"]);
743  $tbl->setOrderDirection($_GET["sort_order"]);
744  $tbl->setLimit($_GET["limit"]);
745  $tbl->setOffset($_GET["offset"]);
746  $tbl->setMaxCount($this->maxcount); // ???
747 
748 
749  $tbl->setMaxCount(count($export_files));
750 
751  // footer
752  $tbl->setFooter("tblfooter",$lng->txt("previous"),$lng->txt("next"));
753  //$tbl->disable("footer");
754 
755  $tbl->setMaxCount(count($export_files));
756  $export_files = array_slice($export_files, $_GET["offset"], $_GET["limit"]);
757 
758  $tbl->render();
759  if(count($export_files) > 0)
760  {
761  $i=0;
762  foreach($export_files as $exp_file)
763  {
764  /* remote files (youtube videos) have no size, so we allow them now
765  if (!$exp_file["size"] > 0)
766  {
767  continue;
768  }
769  */
770 
771  $tpl->setCurrentBlock("tbl_content");
772  $tpl->setVariable("TXT_FILENAME", $exp_file["file"]);
773 
774  $css_row = ilUtil::switchColor($i++, "tblrow1", "tblrow2");
775  $tpl->setVariable("CSS_ROW", $css_row);
776 
777  $tpl->setVariable("TXT_SIZE", $exp_file["size"]);
778  $tpl->setVariable("TXT_FORMAT", $exp_file["type"]);
779 
780  $tpl->setVariable("TXT_DATE", $exp_file["date"]);
781 
782  if($exp_file["size"] > 0)
783  {
784  $tpl->setVariable("TXT_DOWNLOAD", $lng->txt("download"));
785  $ilCtrl->setParameter($this, "resource", rawurlencode($exp_file["path"]));
786  $ilCtrl->setParameter($this, "file_id", rawurlencode($exp_file["file_id"]));
787  $tpl->setVariable("LINK_DOWNLOAD",
788  $ilCtrl->getLinkTarget($this, "downloadResource"));
789  }
790  else
791  {
792  $tpl->setVariable("TXT_DOWNLOAD", $lng->txt("show"));
793  $tpl->setVariable("LINK_TARGET", " target=\"_blank\"");
794  $tpl->setVariable("LINK_DOWNLOAD", $exp_file["path"]);
795  }
796 
797  $tpl->parseCurrentBlock();
798  }
799  } //if is_array
800  /* not found in template?
801  else
802  {
803  $tpl->setCurrentBlock("notfound");
804  $tpl->setVariable("TXT_OBJECT_NOT_FOUND", $lng->txt("obj_not_found"));
805  $tpl->setVariable("NUM_COLS", 4);
806  $tpl->parseCurrentBlock();
807  }
808  */
809  // $tpl->parseCurrentBlock();
810  }
811 
812  function downloadResource()
813  {
814  $export_files = $this->getExportResources();
815 
816  if ($_GET["file_id"] > 0)
817  {
818  $file = new ilObjFile($_GET["file_id"], false);
819  }
820 
821  // check that file really belongs to SCORM module (security)
822  foreach ($export_files as $f)
823  {
824  if (is_object($file))
825  {
826  if ($f["file"] == $file->getFileName())
827  {
828  $file->sendFile();
829  }
830  }
831  else
832  {
833  if ($f["path"] == $_GET["resource"])
834  {
835  if (is_file($f["path"]))
836  {
837  ilUtil::deliverFile($f["path"], $f["file"]);
838  }
839  }
840  }
841  }
842  exit;
843  }
844 
845  function downloadFile()
846  {
847  $file = explode("_", $_GET["file_id"]);
848  require_once("./Modules/File/classes/class.ilObjFile.php");
849  $fileObj = new ilObjFile($file[count($file) - 1], false);
850  $fileObj->sendFile();
851  exit;
852  }
853 
854  function import()
855  {
856  global $tpl, $lng;
857 
858  $this->setTabs();
859  $this->setLocator();
860 
861  $tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.scormeditor_sco_import.html", "Modules/Scorm2004");
862 
863  $tpl->setVariable("TYPE_IMG",ilUtil::getImagePath('icon_lm.svg'));
864  $tpl->setVariable("ALT_IMG", $lng->txt("obj_sahs"));
865 
866  $tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
867 
868  $tpl->setVariable("BTN_NAME", "importSave");
869 
870  // this leads to _top target which removes the left organization frame
871  //$tpl->setVariable("TARGET", ' target="'.ilFrameTargetInfo::_getFrame("MainContent").'" ');
872 
873  $tpl->setVariable("TXT_UPLOAD", $lng->txt("upload"));
874  $tpl->setVariable("TXT_CANCEL", $lng->txt("cancel"));
875  $tpl->setVariable("TXT_IMPORT_SCO", $lng->txt("import_sco_object"));
876  $tpl->setVariable("TXT_SELECT_FILE", $lng->txt("select_file"));
877  $tpl->setVariable("TXT_VALIDATE_FILE", $lng->txt("cont_validate_file"));
878 
879  // get the value for the maximal uploadable filesize from the php.ini (if available)
880  $umf=get_cfg_var("upload_max_filesize");
881  // get the value for the maximal post data from the php.ini (if available)
882  $pms=get_cfg_var("post_max_size");
883 
884  //convert from short-string representation to "real" bytes
885  $multiplier_a=array("K"=>1024, "M"=>1024*1024, "G"=>1024*1024*1024);
886 
887  $umf_parts=preg_split("/(\d+)([K|G|M])/", $umf, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
888  $pms_parts=preg_split("/(\d+)([K|G|M])/", $pms, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
889 
890  if (count($umf_parts) == 2) { $umf = $umf_parts[0]*$multiplier_a[$umf_parts[1]]; }
891  if (count($pms_parts) == 2) { $pms = $pms_parts[0]*$multiplier_a[$pms_parts[1]]; }
892 
893  // use the smaller one as limit
894  $max_filesize=min($umf, $pms);
895 
896  if (!$max_filesize) $max_filesize=max($umf, $pms);
897 
898  //format for display in mega-bytes
899  $max_filesize=sprintf("%.1f MB",$max_filesize/1024/1024);
900 
901  // gives out the limit as a little notice
902  $tpl->setVariable("TXT_FILE_INFO", $lng->txt("file_notice")." $max_filesize");
903  }
904 
905  function importSave()
906  {
907  global $_FILES, $rbacsystem;
908  global $ilias, $lng;
909 
910  // check if file was uploaded
911  $source = $_FILES["scormfile"]["tmp_name"];
912  if (($source == 'none') || (!$source))
913  {
914  $ilias->raiseError("No file selected!",$ilias->error_obj->MESSAGE);
915  }
916  // get_cfg_var("upload_max_filesize"); // get the may filesize form t he php.ini
917  switch ($_FILES["scormfile"]["error"])
918  {
919  case UPLOAD_ERR_INI_SIZE:
920  $ilias->raiseError($lng->txt("err_max_file_size_exceeds"),$ilias->error_obj->MESSAGE);
921  break;
922 
923  case UPLOAD_ERR_FORM_SIZE:
924  $ilias->raiseError($lng->txt("err_max_file_size_exceeds"),$ilias->error_obj->MESSAGE);
925  break;
926 
927  case UPLOAD_ERR_PARTIAL:
928  $ilias->raiseError($lng->txt("err_partial_file_upload"),$ilias->error_obj->MESSAGE);
929  break;
930 
931  case UPLOAD_ERR_NO_FILE:
932  $ilias->raiseError($lng->txt("err_no_file_uploaded"),$ilias->error_obj->MESSAGE);
933  break;
934  }
935 
936  $file = pathinfo($_FILES["scormfile"]["name"]);
937  $name = substr($file["basename"], 0, strlen($file["basename"]) - strlen($file["extension"]) - 1);
938  $file_path = $this->slm_object->getDataDirectory()."/".$this->node_object->getId()."/".$_FILES["scormfile"]["name"];
939  ilUtil::createDirectory($this->slm_object->getDataDirectory()."/".$this->node_object->getId());
940  ilUtil::moveUploadedFile($_FILES["scormfile"]["tmp_name"], $_FILES["scormfile"]["name"], $file_path);
941  ilUtil::unzip($file_path);
942  ilUtil::renameExecutables($this->slm_object->getDataDirectory()."/".$this->node_object->getId());
943 
944  include_once ("./Modules/Scorm2004/classes/ilSCORM13Package.php");
945  $newPack = new ilSCORM13Package();
946  $newPack->il_importSco($this->slm_object->getId(),$this->node_object->getId(),$this->slm_object->getDataDirectory()."/".$this->node_object->getId());
947 
948  $this->ctrl->redirect($this, "showOrganization");
949  }
950 
954  function cancel()
955  {
956  $this->ctrl->redirect($this, "showOrganization");
957  }
958 
965  static function getGlossaryOverviewId()
966  {
967  return "sco_glo_ov";
968  }
969 
976  static function getGloOverviewOv($a_sco)
977  {
978  global $lng;
979 
980  $tpl = new ilTemplate("tpl.sco_glossary_overview.html", true, true, "Modules/Scorm2004");
981 
982  $terms = $a_sco->getGlossaryTermIds();
983  $lk = ilObjSAHSLearningModule::getAffectiveLocalization($a_sco->getSLMId());
984  foreach ($terms as $k => $t)
985  {
986  $tpl->setCurrentBlock("link");
987  $tpl->setVariable("TXT_LINK", $t);
988  $tpl->setVariable("ID_LINK", "glo_ov_t".$k);
989  $tpl->parseCurrentBlock();
990  }
991 
992  $tpl->setVariable("DIV_ID", ilSCORM2004ScoGUI::getGlossaryOverviewId());
993  $tpl->setVariable("TXT_SCO_GLOSSARY", $lng->txtlng("content", "cont_sco_glossary", $lk));
994  $tpl->setVariable("TXT_CLOSE", $lng->txtlng("common", "close", $lk));
995 
996  if (count($terms) > 1)
997  {
998  return $tpl->get();
999  }
1000  else
1001  {
1002  return "";
1003  }
1004  }
1005 
1006 }
1007 ?>
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
__construct($a_slm_obj, $a_node_id=0)
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.
$path
Definition: aliased.php:25
Scorm 2004 Question Exporter.
const IL_PAGE_PREVIEW
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.
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.
if(!is_dir( $entity_dir)) exit("Fatal Error ([A-Za-z0-9]+)\+" &#(? foreach( $entity_files as $file) $output
static insertQuestion($matches)
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:40
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...
Create styles array
The data for the language used.
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 getContentStylePath($a_style_id)
get content style path
static renderNavigation($a_tpl, $a_spacer_img="", $a_lang="")
Render navigation.
Class ilSCORM2004Page GUI class.
static renameExecutables($a_dir)
Rename uploaded executables for security reasons.
global $lng
Definition: privfeed.php:17
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.
$ret
Definition: parser.php:6
$text
static initjQuery($a_tpl=null)
Init jQuery.
Class ilSCORM2004ScoGUI.
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
static getGlossaryHTML($a_sco)
Get glossary html (only in export mode)
static getAffectiveLocalization($a_id)
Get affective localization.
deleteExportFile()
delete export files
$_POST["username"]
$html
Definition: example_001.php:87
static _getTitle($a_q_id)
Returns the title of a question.
showProperties()
Show learning objectives.
executeCommand()
execute command
confirmDeleteExportFile()
confirmation screen for export file deletion
static initExport()
Init export.
static initJavascript()
Init javascript.