ILIAS  release_4-4 Revision
All Data Structures Namespaces Files Functions Variables Modules Pages
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 'ilmdeditorgui':
74  $this->setTabs();
75  $this->setLocator();
76  include_once 'Services/MetaData/classes/class.ilMDEditorGUI.php';
77 
78  $md_gui =& new ilMDEditorGUI($this->slm_object->getID(),
79  $this->node_object->getId(), $this->node_object->getType());
80  $md_gui->addObserver($this->node_object,'MDUpdateListener','General');
81  $ilCtrl->forwardCommand($md_gui);
82  break;
83 
84  case 'ilscorm2004pagegui':
85  include_once("./Modules/Scorm2004/classes/class.ilSCORM2004PageGUI.php");
86  $page_obj = new ilSCORM2004PageGUI("sahs",$_GET["pg_id"]);
87  //$page_obj->setPresentationTitle($page["title"]);
88  $page_obj->setOutputMode(IL_PAGE_PREVIEW);
89  $ilCtrl->forwardCommand($page_obj);
90  break;
91 
92  default:
93  $cmd = $ilCtrl->getCmd("showOrganization");
94  $ret =& $this->$cmd();
95  break;
96  }
97  }
98 
102  function showProperties()
103  {
104  global $tpl, $lng, $ilTabs, $ilCtrl;
105 
106  $this->setTabs();
107  $this->setLocator();
108  $ilTabs->setTabActive("sahs_desc_objectives");
109 
110  include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
111  $form = new ilPropertyFormGUI();
112 
113  // hide objectives page
114  $cb = new ilCheckboxInputGUI($lng->txt("sahs_hide_objectives_page"), "hide_objectives_page");
115  $cb->setInfo($lng->txt("sahs_hide_objectives_page_info"));
116  $form->addItem($cb);
117  $cb->setChecked($this->node_object->getHideObjectivePage());
118 
119  // description
120  $ta = new ilTextAreaInputGUI($lng->txt("description"), "desc");
121  $ta->setRows(4);
122  $ta->setCols(55);
123  $ta->setInfo($lng->txt("sahs_list_info"));
124  $form->setTitle($lng->txt("properties"));
125  $form->addItem($ta);
126  include_once "./Services/MetaData/classes/class.ilMD.php";
127  $meta = new ilMD($this->node_object->getSLMId(), $this->node_object->getId(), $this->node_object->getType());
128  $desc_ids = $meta->getGeneral()->getDescriptionIds();
129  $ta->setValue($meta->getGeneral()->getDescription($desc_ids[0])->getDescription());
130 
131  // objectives
132  $sh = new ilFormSectionHeaderGUI();
133  $sh->setTitle($lng->txt("sahs_learning_objectives"));
134  $form->addItem($sh);
135 
136  $objectives = $this->node_object->getObjectives();
137 
138  foreach ($objectives as $ob)
139  {
140  // map info
141  $mappings = $ob->getMappings();
142  $mapinfo = null;
143  foreach($mappings as $map)
144  {
145  $mapinfo .= $map->getTargetObjectiveID();
146  }
147 
148  if ($mapinfo == null)
149  {
150  $mapinfo = "local";
151  }
152  else
153  {
154  $mapinfo = "global to ".$mapinfo;
155  }
156 
157  // objective
158  $ta = new ilTextAreaInputGUI($mapinfo,
159  "obj_".$ob->getId());
160  $ta->setCols(55);
161  $ta->setRows(4);
162  $ta->setInfo($lng->txt("sahs_list_info"));
163  $form->addItem($ta);
164  $ta->setValue($ob->getObjectiveID());
165  }
166  $form->setFormAction($ilCtrl->getFormAction($this));
167  $form->addCommandButton("updateProperties",
168  $lng->txt("save"));
169  $tpl->setContent($form->getHTML());
170  }
171 
175  function updateProperties()
176  {
177  global $tpl,$lng;
178  $empty = false;
179 
180  foreach ($_POST as $key=>$value) {
181  if(preg_match('/(obj_)(.+)/', $key,$match)){
182  $objective = new ilScorm2004Objective($this->node_object->getId(),$match[2]);
183 // if (!$value)
184 // {
185 // $empty=true;
186 // } else {
187  $objective->setObjectiveID(ilUtil::stripSlashes($value));
188  $objective->updateObjective();
189 // }
190  }
191  }
192 
193  $this->node_object->setHideObjectivePage(ilUtil::stripSlashes($_POST["hide_objectives_page"]));
194  $this->node_object->update();
195 
196  include_once "./Services/MetaData/classes/class.ilMD.php";
197  $meta = new ilMD($this->node_object->getSLMId(), $this->node_object->getId(), $this->node_object->getType());
198  $gen = $meta->getGeneral();
199  $desc_ids = $gen->getDescriptionIds();
200  $des = $gen->getDescription($desc_ids[0]);
201  $des->setDescription(ilUtil::stripSlashes($_POST["desc"]));
202  $des->update();
203  $gen->update();
204 
205  if (!$empty)
206  {
207  ilUtil::sendInfo($lng->txt("saved_successfully"),true);
208  }
209  else
210  {
211  ilUtil::sendFailure($lng->txt("sahs_empty_objectives_are_not_allowed"), true);
212  }
213  $this->showProperties();
214  }
215 
216  function sahs_questions()
217  {
218  global $tpl,$lng, $ilCtrl;
219 
220  $this->setTabs();
221  $this->setLocator();
222 
223  include_once "./Services/Table/classes/class.ilTableGUI.php";
224  include_once "./Modules/Scorm2004/classes/class.ilSCORM2004Page.php";
225  include_once("./Modules/TestQuestionPool/classes/class.assQuestion.php");
226  include_once("./Services/COPage/classes/class.ilPCQuestionGUI.php");
227 
228  // load template for table
229  $tpl->addBlockfile("ADM_CONTENT", "adm_content", "tpl.table.html");
230  $tpl->addBlockfile("TBL_CONTENT", "tbl_content", "tpl.scormeditor_sco_question.html", "Modules/Scorm2004");
231 
232  $tbl = new ilTableGUI();
233  $tbl->setTitle("Questions for ".$this->node_object->getTitle());
234  $tbl->setHeaderNames(array("Question","Page"));
235  $cols = array("question","page");
236  $tbl->setHeaderVars($cols, $header_params);
237  $tbl->setColumnWidth(array("50%", "50%"));
238  $tbl->disable("sort");
239  $tbl->disable("footer");
240 
241  $tree = new ilTree($this->slm_object->getId());
242  $tree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node');
243  $tree->setTreeTablePK("slm_id");
244 
245  foreach($tree->getSubTree($tree->getNodeData($this->node_object->getId()),true,'page') as $page)
246  {
247  // get question ids
248  include_once("./Services/COPage/classes/class.ilPCQuestion.php");
249  $qids = ilPCQuestion::_getQuestionIdsForPage("sahs", $page["obj_id"]);
250  if (count($qids) > 0)
251  {
252  // output questions
253  foreach ($qids as $qid)
254  {
255  $tpl->setCurrentBlock("tbl_content");
256  $tpl->setVariable("TXT_PAGE_TITLE", $page["title"]);
257  $ilCtrl->setParameterByClass("ilscorm2004pagenodegui", "obj_id", $page["obj_id"]);
258  $tpl->setVariable("HREF_EDIT_PAGE", $ilCtrl->getLinkTargetByClass("ilscorm2004pagenodegui", "edit"));
259 
260  $qtitle = assQuestion::_getTitle($qid);
261  $tpl->setVariable("TXT_QUESTION", $qtitle);
262  $ilCtrl->setParameterByClass("ilscorm2004pagenodegui", "obj_id", $page["obj_id"]);
263  //$tpl->setVariable("HREF_EDIT_QUESTION", $ilCtrl->getLinkTargetByClass("ilscorm2004pagenodegui", "edit"));
264 
265  $tpl->setVariable("CSS_ROW", ilUtil::switchColor($i++, "tblrow1", "tblrow2"));
266  $tpl->parseCurrentBlock();
267  }
268  }
269  }
270  $tbl->render();
271  }
272 
273  function getEditTree()
274  {
275 die("deprecated");
276  $slm_tree = new ilTree($this->node_object->getId(),$this->slm_object->getId());
277  $slm_tree->setTreeTablePK("slm_id");
278  $slm_tree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node');
279  return $slm_tree;
280  }
281 
285  function setTabs()
286  {
287  global $ilTabs, $ilCtrl, $tpl, $lng;
288 
289  // subelements
290  $ilTabs->addTarget("sahs_organization",
291  $ilCtrl->getLinkTarget($this,'showOrganization'),
292  "showOrganization", get_class($this));
293 
294  // properties (named learning objectives, since here is currently
295  // no other property)
296  $ilTabs->addTarget("sahs_desc_objectives",
297  $ilCtrl->getLinkTarget($this,'showProperties'),
298  "showProperties", get_class($this));
299 
300  // questions
301  $ilTabs->addTarget("sahs_questions",
302  $ilCtrl->getLinkTarget($this,'sahs_questions'),
303  "sahs_questions", get_class($this));
304 
305  // resources
306  $ilTabs->addTarget("cont_files",
307  $ilCtrl->getLinkTarget($this,'sco_resources'),
308  "sco_resources", get_class($this));
309 
310  // metadata
311  $ilTabs->addTarget("meta_data",
312  $ilCtrl->getLinkTargetByClass("ilmdeditorgui",''),
313  "", "ilmdeditorgui");
314 
315  // export
316  $ilTabs->addTarget("export",
317  $ilCtrl->getLinkTarget($this, "showExportList"), "showExportList",
318  get_class($this));
319 
320  // import
321  $ilTabs->addTarget("import",
322  $ilCtrl->getLinkTarget($this, "import"), "import",
323  get_class($this));
324 
325  // preview
326  $ilTabs->addNonTabbedLink("preview",
327  $lng->txt("cont_preview"),
328  $ilCtrl->getLinkTarget($this,'sco_preview'), "_blank");
329 
330  $tpl->setTitleIcon(ilUtil::getImagePath("icon_sco_b.png"));
331  $tpl->setTitle(
332  $lng->txt("sahs_unit").": ".$this->node_object->getTitle());
333  }
334 
338  function proceedDragDrop()
339  {
340  global $ilCtrl;
341 
342  //echo "-".$_POST["il_hform_source_id"]."-".$_POST["il_hform_target_id"]."-".$_POST["il_hform_fc"]."-";
343  $this->slm_object->executeDragDrop($_POST["il_hform_source_id"], $_POST["il_hform_target_id"],
344  $_POST["il_hform_fc"], $_POST["il_hform_as_subitem"]);
345  $ilCtrl->redirect($this, "showOrganization");
346  }
347 
351  function sco_preview()
352  {
353  global $tpl, $ilCtrl, $lng;
354 
355  // init main template
356  $tpl = new ilTemplate("tpl.main.html", true, true);
357  include_once("./Services/Style/classes/class.ilObjStyleSheet.php");
358  $tpl->setVariable("LOCATION_STYLESHEET", ilUtil::getStyleSheetLocation());
359  $tpl->setBodyClass("");
360  $tpl->setCurrentBlock("ContentStyle");
361  $tpl->setVariable("LOCATION_CONTENT_STYLESHEET",
362  ilObjStyleSheet::getContentStylePath($this->slm_object->getStyleSheetId()));
363  $tpl->parseCurrentBlock();
364 
365  // get javascript
366  include_once("./Services/jQuery/classes/class.iljQueryUtil.php");
369  $tpl->addJavaScript("./Modules/Scorm2004/scripts/questions/pure.js");
370  $tpl->addJavaScript("./Modules/Scorm2004/scripts/pager.js");
371 
372  $tpl->addOnLoadCode("pager.Init();");
373 
374  $tree = new ilTree($this->slm_object->getId());
375  $tree->setTableNames('sahs_sc13_tree', 'sahs_sc13_tree_node');
376  $tree->setTreeTablePK("slm_id");
377  include_once "./Modules/Scorm2004/classes/class.ilSCORM2004PageGUI.php";
378  include_once "./Services/MetaData/classes/class.ilMD.php";
379 
380  $meta = new ilMD($this->node_object->getSLMId(), $this->node_object->getId(), $this->node_object->getType());
381  $desc_ids = $meta->getGeneral()->getDescriptionIds();
382  $sco_description = $meta->getGeneral()->getDescription($desc_ids[0])->getDescription();
383 
384  // get sco template
385  $sco_tpl = new ilTemplate("tpl.sco.html", true, true, "Modules/Scorm2004");
386 
387  // navigation
388  $lk = ilObjSAHSLearningModule::getAffectiveLocalization($this->node_object->getSLMId());
389  ilSCORM2004Asset::renderNavigation($sco_tpl, "", $lk);
390 
391  // meta page (description and objectives)
392  ilSCORM2004Asset::renderMetaPage($sco_tpl, $this->node_object,
393  $this->node_object->getType());
394 
395  // init export (this initialises glossary template)
397  $terms = $this->node_object->getGlossaryTermIds();
398 
399  // render page
400  foreach($tree->getSubTree($tree->getNodeData($this->node_object->getId()),true,'page') as $page)
401  {
402  $page_obj = new ilSCORM2004PageGUI($this->node_object->getType(),$page["obj_id"],
403  0, $this->slm_object->getId());
404  $page_obj->setPresentationTitle($page["title"]);
405  $page_obj->setOutputMode(IL_PAGE_PREVIEW);
406  $page_obj->setStyleId($this->slm_object->getStyleSheetId());
407  if (count($terms) > 1)
408  {
409  $page_obj->setGlossaryOverviewInfo(
410  ilSCORM2004ScoGUI::getGlossaryOverviewId(), $this->node_object);
411  }
412  $sco_tpl->setCurrentBlock("page_preview");
413  $html = $ilCtrl->getHTML($page_obj);
414  //$sco_tpl->setVariable("PAGE_PRV", $page_obj->showPage("export"));
415  $sco_tpl->setVariable("PAGE_PRV", $html);
416  $sco_tpl->parseCurrentBlock();
417  }
418 
419  $output = $sco_tpl->get();
420 
421  // append glossary entries on the sco level
422  $output.= ilSCORM2004PageGUI::getGlossaryHTML($this->node_object);
423 
424  //insert questions
425  require_once './Modules/Scorm2004/classes/class.ilQuestionExporter.php';
426  $output = preg_replace_callback("/{{{{{(Question;)(il__qst_[0-9]+)}}}}}/",array(get_class($this), 'insertQuestion'),$output);
427 // $output = preg_replace("/&#123;/","",$output);
428 // $output = preg_replace("/&#125;/","",$output);
429  $output = "<script>var ScormApi=null;".ilQuestionExporter::questionsJS()."</script>".$output;
430 
431  $lk = ilObjSAHSLearningModule::getAffectiveLocalization($this->node_object->getSLMId());
432  include_once("./Modules/Scorm2004/classes/class.ilSCORM2004PageGUI.php");
434 
435  $tpl->addJavaScript("./Modules/Scorm2004/scripts/questions/question_handling.js");
436  $tpl->addCss("./Modules/Scorm2004/templates/default/question_handling.css");
437 
438  include_once("./Services/UIComponent/Overlay/classes/class.ilOverlayGUI.php");
440 
441  //inline JS
442  $output .='<script type="text/javascript" src="./Modules/Scorm2004/scripts/questions/question_handling.js"></script>';
443  $tpl->setVariable("CONTENT", $output);
444  }
445 
446  //callback function for question export
447  private function insertQuestion($matches)
448  {
449  $q_exporter = new ilQuestionExporter(false);
450  return $q_exporter->exportQuestion($matches[2]);
451  }
452 
456  public function selectExport()
457  {
458  switch ($_POST['select_export'])
459  {
460  case "exportScorm12":
461  case "exportScorm2004_3rd":
462  case "exportScorm2004_4th":
463  case "exportPDF":
464  case "exportHTML":
465  $this->ctrl->redirect($this, $_POST['select_export']);
466  break;
467  default:
468  $this->ctrl->redirect($this, 'showExportList');
469  break;
470  }
471  }
472 
473  function showExportList()
474  {
475  global $tpl, $ilCtrl, $lng;
476 
477  $this->setTabs();
478  $this->setLocator();
479 
480 
481  $template = new ilTemplate("tpl.scorm2004_export_buttons.html", true, true, 'Modules/Scorm2004');
482 
483  $buttons = array(
484  "exportScorm2004_3rd" => $lng->txt("scorm_create_export_file_scrom2004"),
485  "exportScorm2004_4th" => $lng->txt("scorm_create_export_file_scrom2004_4th"),
486  "exportScorm12" => $lng->txt("scorm_create_export_file_scrom12"),
487  "exportPDF" => $lng->txt("scorm_create_export_file_pdf"),
488  "exportHTML" => $lng->txt("scorm_create_export_file_html")
489  );
490  foreach ($buttons as $value => $text)
491  {
492  $template->setCurrentBlock('option');
493  $template->setVariable('OPTION_VALUE', $value);
494  $template->setVariable('OPTION_TITLE', ilUtil::prepareFormOutput($text));
495  $template->parseCurrentBlock();
496  }
497  $template->setVariable('EXPORT_TITLE', $lng->txt('export'));
498  $template->setVariable('EXPORT_LABEL', $lng->txt('type'));
499  $template->setVariable('FORMACTION', $ilCtrl->getFormAction($this, 'selectExport'));
500 
501  $export_files = $this->node_object->getExportFiles();
502 
503  include_once "./Modules/Scorm2004/classes/class.ilSCORM2004ExportTableGUI.php";
504  $table_gui = new ilSCORM2004ExportTableGUI($this, 'showExportList');
505  $data = array();
506  foreach ($export_files as $exp_file)
507  {
508  $filetype = $exp_file['type'];
509  // $public_str = ($exp_file["file"] == $this->object->getPublicExportFile($filetype))
510  // ? " <b>(".$this->lng->txt("public").")<b>"
511  // : "";
512  $file_arr = explode("__", $exp_file["file"]);
513  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));
514  }
515  $table_gui->setData($data);
516  $tpl->setVariable('ADM_CONTENT', $template->get() . "\n" . $table_gui->getHTML());
517 
518 
519  }
520 
522  {
523  $export = new ilScorm2004Export($this->node_object,'SCORM 2004 4th');
524  $export->buildExportFile();
525  $this->ctrl->redirect($this, "showExportList");
526  }
527 
528 
530  {
531  $export = new ilScorm2004Export($this->node_object,'SCORM 2004 3rd');
532  $export->buildExportFile();
533  $this->ctrl->redirect($this, "showExportList");
534  }
535 
536  function exportScorm12()
537  {
538  $export = new ilScorm2004Export($this->node_object,'SCORM 1.2');
539  $export->buildExportFile();
540  $this->ctrl->redirect($this, "showExportList");
541  }
542 
543  function exportHTML()
544  {
545  $export = new ilScorm2004Export($this->node_object,'HTML');
546  $export->buildExportFile();
547  $this->ctrl->redirect($this, "showExportList");
548  }
549 
550  function exportISO()
551  {
552  $export = new ilScorm2004Export($this->node_object,'ISO');
553  $export->buildExportFile();
554  $this->ctrl->redirect($this, "showExportList");
555  }
556 
557  function exportPDF()
558  {
559  $export = new ilScorm2004Export($this->node_object,'PDF');
560  $export->buildExportFile();
561  $this->ctrl->redirect($this, "showExportList");
562  }
563 
565  {
566  if(!isset($_POST["file"]))
567  {
568  $this->ilias->raiseError($this->lng->txt("no_checkbox"),$this->ilias->error_obj->MESSAGE);
569  }
570 
571  if (count($_POST["file"]) > 1)
572  {
573  $this->ilias->raiseError($this->lng->txt("cont_select_max_one_item"),$this->ilias->error_obj->MESSAGE);
574  }
575  $export = new ilSCORM2004Export($this->node_object);
576  $export_dir = $export->getExportDirectoryForType($_POST['type'][$_POST['file'][0]]);
577  ilUtil::deliverFile($export_dir."/".$_POST['file'][0], $_POST['file'][0]);
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_slm.png'));
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("create", $_GET["ref_id"], "sahs"))
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)
print $file
& executeCommand()
execute command
Scorm 2004 Question Exporter.
static addPreparationJavascript($a_tpl, $a_lang)
Add standard texts.
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"]
This class represents a section header in a property form.
$ctrl
Constructor public.
static getGloOverviewOv($a_sco)
des
$cmd
Definition: sahs_server.php:35
addObserver(&$a_class, $a_method, $a_element)
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 $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.
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="")
redirection script todo: (a better solution should control the processing via a xml file) ...
if(isset($_FILES['img_file']['size']) && $_FILES['img_file']['size'] > 0) $tpl
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.
while($lm_rec=$ilDB->fetchAssoc($lm_set)) $data
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.
static initjQuery($a_tpl=null)
Init jQuery.
Class ilSCORM2004ScoGUI.
static getGlossaryHTML($a_sco)
Get glossary html (only in export mode)
deleteExportFile()
delete export files
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.