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
5require_once("./Modules/Scorm2004/classes/class.ilSCORM2004NodeGUI.php");
6require_once("./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php");
7require_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
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 {
274die("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
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
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 {
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
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();
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?>
print $file
global $tpl
Definition: ilias.php:8
$_GET["client_id"]
const IL_CAL_UNIX
const IL_PAGE_PREVIEW
_getTitle($a_q_id)
Returns the title of a question.
This class represents a checkbox property in a property form.
static formatDate(ilDateTime $date)
Format a date @access public.
@classDescription Date and time handling
This class represents a section header in a property form.
Class ilObjFile.
Class ilObjMediaObject.
static _lookupStandardItemPath($a_mob_id, $a_url_encode=false, $a_web=true)
Get path for standard item.
getAffectiveLocalization($a_id)
Get affective localization.
getContentStylePath($a_style_id)
get content style path
Class ilObjectMetaDataGUI.
static _exists($a_id, $a_reference=false, $a_type=null)
checks if an object exists in object_data@access public
static initJavascript()
Init javascript.
static collectFileItems($a_page, $a_domdoc)
Get all file items that are used within the page.
static _getQuestionIdsForPage($a_parent_type, $a_page_id, $a_lang="-")
Get all questions of a page.
This class represents a property form user interface.
Scorm 2004 Question Exporter.
static renderMetaPage($a_tpl, $a_sco, $a_asset_type="", $mode="")
Render meta page (description/objectives at beginning)
static renderNavigation($a_tpl, $a_spacer_img="", $a_lang="")
Render navigation.
Class ilSCORM2004NodeGUI.
showOrganization()
Confirm deletion screen (delete page or structure objects)
setLocator()
Set Locator Items.
Class ilSCORM2004Page GUI class.
static initExport()
Init export.
static getGlossaryHTML($a_sco)
Get glossary html (only in export mode)
Class ilSCORM2004Page.
Class ilSCORM2004ScoGUI.
$ctrl
Constructor @access public.
static getGloOverviewOv($a_sco)
des
ilSCORM2004ScoGUI($a_slm_obj, $a_node_id=0)
deleteExportFile()
delete export files
confirmDeleteExportFile()
confirmation screen for export file deletion
cancelDeleteExportFile()
cancel deletion of export files
updateProperties()
update Properties
showProperties()
Show learning objectives.
proceedDragDrop()
Perform drag and drop action.
selectExport()
Select the export type of the SCORM 2004 module.
static getGlossaryOverviewId()
Get sco glossary overlay id.
& executeCommand()
execute command
Export class for SCORM 2004 object.
static clear($a_var)
Unset a value.
Class ilTableGUI.
special template class to simplify handling of ITX/PEAR
This class represents a text area property in a property form.
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
static moveUploadedFile($a_file, $a_name, $a_target, $a_raise_errors=true, $a_mode="move_uploaded")
move uploaded file
static sendQuestion($a_info="", $a_keep=false)
Send Question to Screen.
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
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 unzip($a_file, $overwrite=false, $a_flat=false)
unzip file
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static deliverFile($a_file, $a_filename, $a_mime='', $isInline=false, $removeAfterDelivery=false, $a_exit_after=true)
deliver file for download via browser.
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms @access public
static createDirectory($a_dir, $a_mod=0755)
create directory
static renameExecutables($a_dir)
Rename uploaded executables for security reasons.
static initjQueryUI()
Init jQuery UI (see included_components.txt for included components)
static initjQuery($a_tpl=null)
Init jQuery.
$_POST['username']
Definition: cron.php:12
$html
Definition: example_001.php:87
$data
$text
$tbl
Definition: example_048.php:81
global $ilCtrl
Definition: ilias.php:18
exit
Definition: login.php:54
global $lng
Definition: privfeed.php:40
$cmd
Definition: sahs_server.php:35
echo;exit;}function LogoutNotification($SessionID) { global $ilDB; $q="SELECT session_id, data FROM usr_session WHERE expires > (\w+)\|/" PREG_SPLIT_NO_EMPTY PREG_SPLIT_DELIM_CAPTURE
$path
Definition: index.php:22