ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilObjSAHSLearningModuleGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2016 ILIAS open source, Extended GPL, see docs/LICENSE */
3 require_once "./Services/Object/classes/class.ilObjectGUI.php";
4 require_once("./Services/FileSystem/classes/class.ilFileSystemGUI.php");
5 
18 {
24  public function __construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output = true)
25  {
26  global $DIC;
27  $lng = $DIC['lng'];
28 
29  $lng->loadLanguageModule("content");
30  $this->type = "sahs";
31  parent::__construct($a_data, $a_id, $a_call_by_reference, false);
32  }
33 
37  public function executeCommand()
38  {
39  global $DIC;
40  $ilAccess = $DIC['ilAccess'];
41  $ilTabs = $DIC['ilTabs'];
42  $ilErr = $DIC['ilErr'];
43 
44  $GLOBALS['DIC']["ilLog"]->write("bc:" . $_GET["baseClass"] . "; nc:" . $this->ctrl->getNextClass($this) . "; cmd:" . $this->ctrl->getCmd());
45  if (strtolower($_GET["baseClass"]) == "iladministrationgui" ||
46  strtolower($_GET["baseClass"]) == "ilsahspresentationgui" ||
47  $this->getCreationMode() == true) {
48  $this->prepareOutput();
49  } else {
50  $this->getTemplate();
51  $this->setLocator();
52  $this->setTabs();
53  $this->tpl->setTitleIcon(ilUtil::getImagePath("icon_lm.svg"));
54  $this->tpl->setTitle($this->object->getTitle());
55  }
56 
57  $next_class = $this->ctrl->getNextClass($this);
58  $cmd = $this->ctrl->getCmd();
59 
60  switch ($next_class) {
61  case 'illtiproviderobjectsettinggui':
62  $this->setSettingsSubTabs();
63  $ilTabs->setSubTabActive('lti_provider');
64  $lti_gui = new ilLTIProviderObjectSettingGUI($this->object->getRefId());
65  $lti_gui->setCustomRolesForSelection($GLOBALS['DIC']->rbac()->review()->getLocalRoles($this->object->getRefId()));
66  $lti_gui->offerLTIRolesForSelection(false);
67  $this->ctrl->forwardCommand($lti_gui);
68  break;
69 
70 
71  case 'ilobjectmetadatagui':
72  if (!$ilAccess->checkAccess('write', '', $this->object->getRefId())) {
73  $ilErr->raiseError($this->lng->txt('permission_denied'), $ilErr->WARNING);
74  }
75  include_once 'Services/Object/classes/class.ilObjectMetaDataGUI.php';
76  $md_gui = new ilObjectMetaDataGUI($this->object);
77  $this->ctrl->forwardCommand($md_gui);
78  break;
79 
80  case 'ilexportgui':
81  case 'ilpermissiongui':
82  include_once("Services/AccessControl/classes/class.ilPermissionGUI.php");
83  $perm_gui = new ilPermissionGUI($this);
84  $ret = $this->ctrl->forwardCommand($perm_gui);
85  break;
86 
87  case "ilfilesystemgui":
88  $this->fs_gui = new ilFileSystemGUI($this->object->getDataDirectory());
89  $this->fs_gui->setUseUploadDirectory(true);
90  $this->fs_gui->setTableId("sahsfs" . $this->object->getId());
91  $ret = $this->ctrl->forwardCommand($this->fs_gui);
92  break;
93 
94  case "ilcertificategui":
95  $this->setSettingsSubTabs();
96  $ilTabs->setSubTabActive('certificate');
97 
98  $guiFactory = new ilCertificateGUIFactory();
99  $output_gui = $guiFactory->create($this->object);
100 
101  $ret = $this->ctrl->forwardCommand($output_gui);
102  break;
103 
104  case "illearningprogressgui":
105  include_once './Services/Tracking/classes/class.ilLearningProgressGUI.php';
106 
107  $new_gui = new ilLearningProgressGUI(ilLearningProgressGUI::LP_CONTEXT_REPOSITORY, $this->object->getRefId());
108  $this->ctrl->forwardCommand($new_gui);
109 
110  break;
111 
112  case "ilinfoscreengui":
113  include_once("./Services/InfoScreen/classes/class.ilInfoScreenGUI.php");
114 
115  $info = new ilInfoScreenGUI($this);
116  $info->enablePrivateNotes();
117  $info->enableLearningProgress();
118 
119  // add read / back button
120  if ($ilAccess->checkAccess("read", "", $_GET["ref_id"])) {
121  if (!$this->object->getEditable()) {
122  $ilToolbar = $GLOBALS['DIC']->toolbar();
123  $ilToolbar->addButtonInstance($this->object->getViewButton());
124  }
125  }
126 
127  $info->enableNews();
128  if ($ilAccess->checkAccess("write", "", $_GET["ref_id"])) {
129  $info->enableNewsEditing();
130  $news_set = new ilSetting("news");
131  $enable_internal_rss = $news_set->get("enable_rss_for_internal");
132  if ($enable_internal_rss) {
133  $info->setBlockProperty("news", "settings", true);
134  }
135  }
136  // show standard meta data section
137  $info->addMetaDataSections($this->object->getId(), 0, $this->object->getType());
138 
139  // forward the command
140  $this->ctrl->forwardCommand($info);
141  break;
142 
143  case "ilcommonactiondispatchergui":
144  include_once("Services/Object/classes/class.ilCommonActionDispatcherGUI.php");
146  $this->ctrl->forwardCommand($gui);
147  break;
148 
149  case "ilobjstylesheetgui":
150  //$this->addLocations();
151  $this->ctrl->setReturn($this, "properties");
152  $ilTabs->clearTargets();
153  $style_gui = new ilObjStyleSheetGUI("", $this->object->getStyleSheetId(), false, false);
154  $style_gui->omitLocator();
155  if ($cmd == "create" || $_GET["new_type"] == "sty") {
156  $style_gui->setCreationMode(true);
157  }
158  //$ret =& $style_gui->executeCommand();
159 
160  if ($cmd == "confirmedDelete") {
161  $this->object->setStyleSheetId(0);
162  $this->object->update();
163  }
164  $ret = $this->ctrl->forwardCommand($style_gui);
165  if ($cmd == "save" || $cmd == "copyStyle" || $cmd == "importStyle") {
166  $style_id = $ret;
167  $this->object->setStyleSheetId($style_id);
168  $this->object->update();
169  $this->ctrl->redirectByClass("ilobjstylesheetgui", "edit");
170  }
171  break;
172 
173 
174  case 'ilobjectcopygui':
175  $this->prepareOutput();
176  include_once './Services/Object/classes/class.ilObjectCopyGUI.php';
177  $cp = new ilObjectCopyGUI($this);
178  $cp->setType('sahs');
179  $this->ctrl->forwardCommand($cp);
180  break;
181 
182  default:
183  if ($this->object && !$this->object->getEditable()) {
184  $cmd = $this->ctrl->getCmd("properties");
185  } else {
186  $cmd = $this->ctrl->getCmd("frameset");
187  }
188  if ((strtolower($_GET["baseClass"]) == "iladministrationgui" ||
189  $this->getCreationMode() == true) &&
190  $cmd != "frameset") {
191  $cmd .= "Object";
192  }
193 
194  // #9225
195  if ($cmd == "redrawHeaderAction") {
196  $cmd .= "Object";
197  }
198 
199  $ret = $this->$cmd();
200  break;
201  }
202  }
203 
204 
205  public function viewObject()
206  {
207  if (strtolower($_GET["baseClass"]) == "iladministrationgui") {
208  parent::viewObject();
209  } else {
210  }
211  }
212 
216  public function properties()
217  {
218  }
219 
223  public function saveProperties()
224  {
225  }
226 
230 
234  public function initCreationForms($a_new_type)
235  {
236  $forms = array();
237 
238  $this->initUploadForm();
239  $forms[self::CFORM_IMPORT] = $this->form;
240 
241  $this->initCreationForm();
242  $forms[self::CFORM_NEW] = $this->form;
243 
244  $forms[self::CFORM_CLONE] = $this->fillCloneTemplate(null, $a_new_type);
245 
246  return $forms;
247  }
248 
254  public function initCreationForm()
255  {
256  global $DIC;
257  $lng = $DIC['lng'];
258  $ilCtrl = $DIC['ilCtrl'];
259 
260  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
261  $this->form = new ilPropertyFormGUI();
262 
263  // title
264  $ti = new ilTextInputGUI($this->lng->txt("title"), "title");
265  $ti->setSize(min(40, ilObject::TITLE_LENGTH));
266  $ti->setMaxLength(ilObject::TITLE_LENGTH);
267  $ti->setRequired(true);
268  $this->form->addItem($ti);
269 
270  // text area
271  $ta = new ilTextAreaInputGUI($this->lng->txt("description"), "desc");
272  $ta->setCols(40);
273  $ta->setRows(2);
274  $this->form->addItem($ta);
275 
276 
277  $this->form->addCommandButton("save", $lng->txt("sahs_add"));
278  $this->form->addCommandButton("cancel", $lng->txt("cancel"));
279 
280  $this->form->setTitle($lng->txt("scorm_new"));
281  $this->form->setFormAction($ilCtrl->getFormAction($this));
282  $this->form->setTarget(ilFrameTargetInfo::_getFrame("MainContent"));
283  }
284 
288  public function initUploadForm()
289  {
290  global $DIC;
291  $lng = $DIC['lng'];
292  $ilCtrl = $DIC['ilCtrl'];
293 
294  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
295  $this->form = new ilPropertyFormGUI();
296 
297  // type selection
298  $options = array(
299  "scorm2004" => $lng->txt("lm_type_scorm2004"),
300  "scorm" => $lng->txt("lm_type_scorm"),
301  "exportFile" => $lng->txt("sahs_export_file")
302  );
303  $si = new ilSelectInputGUI($this->lng->txt("type"), "sub_type");
304  $si->setOptions($options);
305  $this->form->addItem($si);
306 
307 
308  // todo wysiwyg editor removement
309 
310  $options = array();
311  include_once 'Services/FileSystem/classes/class.ilUploadFiles.php';
313  $options[""] = $this->lng->txt("cont_select_from_upload_dir");
315  foreach ($files as $file) {
316  $file = htmlspecialchars($file, ENT_QUOTES, "utf-8");
317  $options[$file] = $file;
318  }
319  }
320  if (count($options) > 1) {
321  // choose upload directory
322  $radg = new ilRadioGroupInputGUI($lng->txt("cont_choose_file_source"), "file_source");
323  $op0 = new ilRadioOption($this->lng->txt("cont_choose_local"), "local");
324  $radg->addOption($op0);
325  $op1 = new ilRadioOption($this->lng->txt("cont_choose_upload_dir"), "upload_dir");
326  $radg->addOption($op1);
327  $radg->setValue("local");
328 
329  $fi = new ilFileInputGUI($this->lng->txt("select_file"), "scormfile");
330  $fi->setRequired(true);
331  $op0->addSubItem($fi);
332 
333  $si = new ilSelectInputGUI($this->lng->txt("cont_uploaded_file"), "uploaded_file");
334  $si->setOptions($options);
335  $op1->addSubItem($si);
336 
337  $this->form->addItem($radg);
338  } else {
339  $fi = new ilFileInputGUI($this->lng->txt("select_file"), "scormfile");
340  $fi->setRequired(true);
341  $this->form->addItem($fi);
342  }
343 
344  // validate file
345  $cb = new ilCheckboxInputGUI($this->lng->txt("cont_validate_file"), "validate");
346  $cb->setValue("y");
347  //$cb->setChecked(true);
348  $this->form->addItem($cb);
349 
350  // import for editing
351  $cb = new ilCheckboxInputGUI($this->lng->txt("sahs_authoring_mode"), "editable");
352  $cb->setValue("y");
353  $cb->setInfo($this->lng->txt("sahs_authoring_mode_info"));
354  $this->form->addItem($cb);
355 
356  //
357  $radg = new ilRadioGroupInputGUI($lng->txt("sahs_sequencing"), "import_sequencing");
358  $radg->setValue(0);
359  $op1 = new ilRadioOption($lng->txt("sahs_std_sequencing"), 0, $lng->txt("sahs_std_sequencing_info"));
360  $radg->addOption($op1);
361  $op1 = new ilRadioOption($lng->txt("sahs_import_sequencing"), 1, $lng->txt("sahs_import_sequencing_info"));
362  $radg->addOption($op1);
363  $cb->addSubItem($radg);
364 
365 
366  $this->form->addCommandButton("upload", $lng->txt("import"));
367  $this->form->addCommandButton("cancel", $lng->txt("cancel"));
368 
369  $this->form->setTitle($lng->txt("import_sahs"));
370  $this->form->setFormAction($ilCtrl->getFormAction($this, "upload"));
371  $this->form->setTarget(ilFrameTargetInfo::_getFrame("MainContent"));
372  }
373 
380  public function uploadObject()
381  {
382  global $DIC;
383  $rbacsystem = $DIC['rbacsystem'];
384 
385  include_once 'Services/FileSystem/classes/class.ilUploadFiles.php';
386 
387  // check create permission
388  if (!$rbacsystem->checkAccess("create", $_GET["ref_id"], "sahs")) {
389  $this->ilias->raiseError($this->lng->txt("no_create_permission"), $this->ilias->error_obj->WARNING);
390  } elseif ($_FILES["scormfile"]["name"]) {
391  // check if file was uploaded
392  $source = $_FILES["scormfile"]["tmp_name"];
393  if (($source == 'none') || (!$source)) {
394  $this->ilias->raiseError($this->lng->txt("msg_no_file"), $this->ilias->error_obj->MESSAGE);
395  }
396  // get_cfg_var("upload_max_filesize"); // get the may filesize form t he php.ini
397  switch ($_FILES["scormfile"]["error"]) {
398  case UPLOAD_ERR_INI_SIZE:
399  $this->ilias->raiseError($this->lng->txt("err_max_file_size_exceeds"), $this->ilias->error_obj->MESSAGE);
400  break;
401 
402  case UPLOAD_ERR_FORM_SIZE:
403  $this->ilias->raiseError($this->lng->txt("err_max_file_size_exceeds"), $this->ilias->error_obj->MESSAGE);
404  break;
405 
406  case UPLOAD_ERR_PARTIAL:
407  $this->ilias->raiseError($this->lng->txt("err_partial_file_upload"), $this->ilias->error_obj->MESSAGE);
408  break;
409 
410  case UPLOAD_ERR_NO_FILE:
411  $this->ilias->raiseError($this->lng->txt("err_no_file_uploaded"), $this->ilias->error_obj->MESSAGE);
412  break;
413  }
414 
415  $file = pathinfo($_FILES["scormfile"]["name"]);
416  } elseif ($_POST["uploaded_file"]) {
417  // check if the file is in the upload directory and readable
418  if (!ilUploadFiles::_checkUploadFile($_POST["uploaded_file"])) {
419  $this->ilias->raiseError($this->lng->txt("upload_error_file_not_found"), $this->ilias->error_obj->MESSAGE);
420  }
421 
422  $file = pathinfo($_POST["uploaded_file"]);
423  } else {
424  $this->ilias->raiseError($this->lng->txt("msg_no_file"), $this->ilias->error_obj->MESSAGE);
425  }
426 
427  $name = substr($file["basename"], 0, strlen($file["basename"]) - strlen($file["extension"]) - 1);
428  if ($name == "") {
429  $name = $this->lng->txt("no_title");
430  }
431 
432  $subType = $_POST["sub_type"];
433  // create and insert object in objecttree
434  switch ($subType) {
435  case "scorm2004":
436  include_once("./Modules/Scorm2004/classes/class.ilObjSCORM2004LearningModule.php");
437  $newObj = new ilObjSCORM2004LearningModule();
438  $newObj->setEditable($_POST["editable"] == 'y');
439  $newObj->setImportSequencing($_POST["import_sequencing"]);
440  $newObj->setSequencingExpertMode($_POST["import_sequencing"]);
441  break;
442 
443  case "scorm":
444  include_once("./Modules/ScormAicc/classes/class.ilObjSCORMLearningModule.php");
445  $newObj = new ilObjSCORMLearningModule();
446  break;
447 
448  case "exportFile":
449  $sFile = $_FILES["scormfile"];
450  $fType = $sFile["type"];
451  $cFileTypes = ["application/zip", "application/x-compressed","application/x-zip-compressed"];
452  if (in_array($fType, $cFileTypes)) {
453  $timeStamp = time();
454  $tempFile = $sFile["tmp_name"];
455  $lmDir = ilUtil::getWebspaceDir("filesystem") . "/lm_data/";
456  $lmTempDir = $lmDir . $timeStamp;
457  if (!file_exists($lmTempDir)) {
458  mkdir($lmTempDir, 0755, true);
459  }
460  $zar = new ZipArchive();
461  $zar->open($tempFile);
462  $zar->extractTo($lmTempDir);
463  $zar->close();
464  require_once "./Modules/ScormAicc/classes/class.ilScormAiccImporter.php";
465  $importer = new ilScormAiccImporter();
466  $import_dirname = $lmTempDir . '/' . substr($_FILES["scormfile"]["name"], 0, strlen($a_filename) - 4);
467  if ($importer->importXmlRepresentation("sahs", null, $import_dirname, "") == true) {
468  $importFromXml = true;
469  }
470  $mprops = [];
471  $mprops = $importer->moduleProperties;
472  $subType = $mprops["SubType"][0];
473  if ($subType == "scorm") {
474  include_once("./Modules/ScormAicc/classes/class.ilObjSCORMLearningModule.php");
475  $newObj = new ilObjSCORMLearningModule();
476  } else {
477  include_once("./Modules/Scorm2004/classes/class.ilObjSCORM2004LearningModule.php");
478  $newObj = new ilObjSCORM2004LearningModule();
479  // $newObj->setEditable($_POST["editable"]=='y');
480 // $newObj->setImportSequencing($_POST["import_sequencing"]);
481 // $newObj->setSequencingExpertMode($_POST["import_sequencing"]);
482  }
483  }
484  break;
485  }
486 
487  $newObj->setTitle($name);
488  $newObj->setSubType($subType);
489  $newObj->setDescription("");
490  $newObj->setOfflineStatus(true);
491  $newObj->create(true);
492  $newObj->createReference();
493  $newObj->putInTree($_GET["ref_id"]);
494  $newObj->setPermissions($_GET["ref_id"]);
495 
496  // create data directory, copy file to directory
497  $newObj->createDataDirectory();
498 
499  if ($_FILES["scormfile"]["name"]) {
500  if ($importFromXml) {
501  $scormFile = "content.zip";
502  $scormFilePath = $import_dirname . "/" . $scormFile;
503  $file_path = $newObj->getDataDirectory() . "/" . $scormFile;
504  ilFileUtils::rename($scormFilePath, $file_path);
505  ilUtil::unzip($file_path);
506  unlink($file_path);
507  ilUtil::delDir($lmTempDir, false);
508  } else {
509  // copy uploaded file to data directory
510  $file_path = $newObj->getDataDirectory() . "/" . $_FILES["scormfile"]["name"];
511  ilUtil::moveUploadedFile(
512  $_FILES["scormfile"]["tmp_name"],
513  $_FILES["scormfile"]["name"],
514  $file_path
515  );
516  ilUtil::unzip($file_path);
517  }
518  } else {
519  // copy uploaded file to data directory
520  $file_path = $newObj->getDataDirectory() . "/" . $_POST["uploaded_file"];
521  ilUploadFiles::_copyUploadFile($_POST["uploaded_file"], $file_path);
522  ilUtil::unzip($file_path);
523  }
524  ilUtil::renameExecutables($newObj->getDataDirectory());
525 
526  $title = $newObj->readObject();
527  if ($title != "") {
528  ilObject::_writeTitle($newObj->getId(), $title);
529  }
530 
531  //auto set learning progress settings
532  $newObj->setLearningProgressSettingsAtUpload();
533 
534  if ($importFromXml) {
535  $importer->writeData("sahs", "5.1.0", $newObj->getId());
536  }
537 
538  ilUtil::sendInfo($this->lng->txt($newObj->getType() . "_added"), true);
539  ilUtil::redirect("ilias.php?baseClass=ilSAHSEditGUI&ref_id=" . $newObj->getRefId());
540  }
541 
542  public function upload()
543  {
544  $this->uploadObject();
545  }
546 
547 
548 
552  public function saveObject()
553  {
554  if (trim($_POST["title"]) == "") {
555  $this->ilias->raiseError($this->lng->txt("msg_no_title"), $this->ilias->error_obj->MESSAGE);
556  }
557 
558  include_once("./Modules/Scorm2004/classes/class.ilObjSCORM2004LearningModule.php");
559  $newObj = new ilObjSCORM2004LearningModule();
560  $newObj->setTitle(ilUtil::stripSlashes($_POST["title"]));
561  $newObj->setSubType("scorm2004");
562  $newObj->setEditable(true);
563  $newObj->setDescription(ilUtil::stripSlashes($_POST["desc"]));
564  $newObj->create();
565  $newObj->createReference();
566  $newObj->putInTree($_GET["ref_id"]);
567  $newObj->setPermissions($_GET["ref_id"]);
568  $newObj->createDataDirectory();
569  $newObj->createScorm2004Tree();
570  ilUtil::sendInfo($this->lng->txt($newObj->getType() . "_added"), true);
571 
572  // #7375
573  $this->ctrl->setParameterByClass("ilObjSCORM2004LearningModuleGUI", "ref_id", $newObj->getRefId());
574  $this->ctrl->redirectByClass(array("ilSAHSEditGUI", "ilObjSCORM2004LearningModuleGUI"), "showOrganization");
575  }
576 
577 
581  public function info()
582  {
583  $this->infoObject();
584  }
585 
589  public function owner()
590  {
591  $this->ownerObject();
592  }
593 
597  public function getTemplate()
598  {
599  global $DIC;
600  $lng = $DIC['lng'];
601 
602  $this->tpl->getStandardTemplate();
603  }
604 
608  public function setTabs()
609  {
610  $this->tpl->setTitleIcon(ilUtil::getImagePath("icon_lm.svg"));
611  $this->tpl->setTitle($this->object->getTitle());
612  if (strtolower($_GET["baseClass"]) == "ilsahseditgui") {
613  $this->getTabs($this->tabs_gui);
614  }
615  //if(strtolower($_GET["baseClass"]) == "ilsahseditgui") $this->getTabs();
616  }
617 
621  public function certificate()
622  {
623  $guiFactory = new ilCertificateGUIFactory();
624  $output_gui = $guiFactory->create($this->object);
625 
626  $output_gui->certificateEditor();
627  }
628 
634  public function getTabs()
635  {
636  global $DIC;
637  $ilCtrl = $DIC['ilCtrl'];
638  $ilHelp = $DIC['ilHelp'];
639  $ilAccess = $DIC->access();
640 
641  if ($this->ctrl->getCmd() == "delete") {
642  return;
643  }
644 
645  switch ($this->object->getSubType()) {
646  case "scorm2004":
647  $ilHelp->setScreenIdComponent("sahs13");
648  break;
649 
650  case "scorm":
651  $ilHelp->setScreenIdComponent("sahs12");
652  break;
653  }
654 
655  // file system gui tabs
656  // properties
657  $ilCtrl->setParameterByClass("ilfilesystemgui", "resetoffset", 1);
658  $this->tabs_gui->addTarget(
659  "cont_list_files",
660  $this->ctrl->getLinkTargetByClass("ilfilesystemgui", "listFiles"),
661  "",
662  "ilfilesystemgui"
663  );
664  $ilCtrl->setParameterByClass("ilfilesystemgui", "resetoffset", "");
665 
666  // info screen
667  $force_active = ($this->ctrl->getNextClass() == "ilinfoscreengui")
668  ? true
669  : false;
670  $this->tabs_gui->addTarget(
671  "info_short",
672  $this->ctrl->getLinkTargetByClass("ilinfoscreengui", "showSummary"),
673  "",
674  "ilinfoscreengui",
675  "",
676  $force_active
677  );
678 
679  // properties
680  $this->tabs_gui->addTarget(
681  "settings",
682  $this->ctrl->getLinkTarget($this, "properties"),
683  array("", "properties"),
684  get_class($this)
685  );
686 
687  // learning progress and offline mode
688  include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
689  if (ilLearningProgressAccess::checkAccess($this->object->getRefId()) || $ilAccess->checkAccess("write", "", $this->object->getRefId())) {
690  //if scorm && offline_mode activated
691  if ($this->object->getSubType() == "scorm2004" || $this->object->getSubType() == "scorm") {
692  if ($this->object->getOfflineMode() == true) {
693  $this->tabs_gui->addTarget(
694  "offline_mode_manager",
695  $this->ctrl->getLinkTarget($this, "offlineModeManager"),
696  "offlineModeManager",
697  "ilobjscormlearningmodulegui"
698  );
699  }
700  }
701  }
702  if (ilLearningProgressAccess::checkAccess($this->object->getRefId())) {
703  $this->tabs_gui->addTarget(
704  'learning_progress',
705  $this->ctrl->getLinkTargetByClass(array('illearningprogressgui'), ''),
706  '',
707  array('illplistofobjectsgui','illplistofsettingsgui','illearningprogressgui','illplistofprogressgui')
708  );
709  }
710 
711  // tracking data
712  if ($ilAccess->checkAccess("read_learning_progress", '', $this->object->getRefId()) || $ilAccess->checkAccess("edit_learning_progress", '', $this->object->getRefId())) {
713  if ($this->object->getSubType() == "scorm2004" || $this->object->getSubType() == "scorm") {
714  include_once('./Services/PrivacySecurity/classes/class.ilPrivacySettings.php');
715  $privacy = ilPrivacySettings::_getInstance();
716  if ($privacy->enabledSahsProtocolData()) {
717  $this->tabs_gui->addTarget(
718  "cont_tracking_data",
719  $this->ctrl->getLinkTarget($this, "showTrackingItems"),
720  "showTrackingItems",
721  get_class($this)
722  );
723  }
724  }
725  }
726 
727  // edit meta
728  include_once "Services/Object/classes/class.ilObjectMetaDataGUI.php";
729  $mdgui = new ilObjectMetaDataGUI($this->object);
730  $mdtab = $mdgui->getTab();
731  if ($mdtab) {
732  $this->tabs_gui->addTarget(
733  "meta_data",
734  $mdtab,
735  "",
736  "ilmdeditorgui"
737  );
738  }
739 
740  // export
741  if ($ilAccess->checkAccess("write", "", $this->object->getRefId())) {
742  $this->tabs_gui->addTarget(
743  "export",
744  $this->ctrl->getLinkTarget($this, "export"),
745  array("", "export"),
746  get_class($this)
747  );
748  }
749 
750  // perm
751  if ($ilAccess->checkAccess('edit_permission', '', $this->object->getRefId())) {
752  $this->tabs_gui->addTarget(
753  "perm_settings",
754  $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilpermissiongui'), "perm"),
755  array("perm","info","owner"),
756  'ilpermissiongui'
757  );
758  }
759  }
760 
764  public static function _goto($a_target)
765  {
766  global $DIC;
767  $ilAccess = $DIC['ilAccess'];
768  $ilErr = $DIC['ilErr'];
769  $lng = $DIC['lng'];
770 
771  $parts = explode("_", $a_target);
772 
773  if ($ilAccess->checkAccess("write", "", $parts[0])) {
774  $_GET["cmd"] = "";
775  $_GET["baseClass"] = "ilSAHSEditGUI";
776  $_GET["ref_id"] = $parts[0];
777  $_GET["obj_id"] = $parts[1];
778  include("ilias.php");
779  exit;
780  }
781  if ($ilAccess->checkAccess("visible", "", $parts[0]) || $ilAccess->checkAccess("read", "", $parts[0])) {
782  $_GET["cmd"] = "infoScreen";
783  $_GET["baseClass"] = "ilSAHSPresentationGUI";
784  $_GET["ref_id"] = $parts[0];
785  include("ilias.php");
786  exit;
787  } else {
788  if ($ilAccess->checkAccess("read", "", ROOT_FOLDER_ID)) {
789  ilUtil::sendInfo(sprintf(
790  $lng->txt("msg_no_perm_read_item"),
792  ), true);
794  }
795  }
796 
797  $ilErr->raiseError($lng->txt("msg_no_perm_read"), $ilErr->FATAL);
798  }
799 
800  public function addLocatorItems()
801  {
802  global $DIC;
803  $ilLocator = $DIC['ilLocator'];
804 
805  if (is_object($this->object)) {
806  $ilLocator->addItem(
807  $this->object->getTitle(),
808  $this->ctrl->getLinkTargetByClass("ilinfoscreengui", "showSummary"),
809  "",
810  $_GET["ref_id"]
811  );
812  }
813  }
814 
821  public function editContent()
822  {
823  global $DIC;
824  $ilCtrl = $DIC['ilCtrl'];
825 
826  if (!$this->object->getEditable()) {
827  $ilCtrl->redirectByClass("ilfilesystemgui", "listFiles");
828  } else {
829  $ilCtrl->redirectByClass("ilobjscorm2004learningmodulegui", "editOrganization");
830  }
831  }
832 
836  public function setSettingsSubTabs()
837  {
838  global $DIC;
839  $lng = $DIC['lng'];
840  $ilTabs = $DIC['ilTabs'];
841  $ilCtrl = $DIC['ilCtrl'];
842 
843  $ilTabs->addSubTabTarget(
844  "cont_settings",
845  $this->ctrl->getLinkTarget($this, "properties"),
846  array("edit", ""),
847  get_class($this)
848  );
849 
850  $ilTabs->addSubTabTarget(
851  "cont_sc_new_version",
852  $this->ctrl->getLinkTarget($this, "newModuleVersion"),
853  array("edit", ""),
854  get_class($this)
855  );
856 
857  include_once "Services/Certificate/classes/class.ilCertificate.php";
858  if (ilCertificate::isActive()) {
859  // // create and insert object in objecttree
860  // $ilTabs->addSubTabTarget("certificate",
861  // $this->ctrl->getLinkTarget($this, "certificate"),
862  // array("certificate", "certificateEditor", "certificateRemoveBackground", "certificateSave",
863  // "certificatePreview", "certificateDelete", "certificateUpload", "certificateImport")
864  // );
865  $ilTabs->addSubTabTarget(
866  "certificate",
867  $this->ctrl->getLinkTargetByClass("ilcertificategui", "certificateeditor"),
868  "",
869  "ilcertificategui"
870  );
871  }
872 
873  $lti_settings = new ilLTIProviderObjectSettingGUI($this->object->getRefId());
874  if ($lti_settings->hasSettingsAccess()) {
875  $ilTabs->addSubTabTarget(
876  'lti_provider',
877  $this->ctrl->getLinkTargetByClass(ilLTIProviderObjectSettingGUI::class)
878  );
879  }
880 
881  $ilTabs->setTabActive('settings');
882  }
883 
884  public function export()
885  {
886  global $DIC;
887  $lng = $DIC['lng'];
888  $ilTabs = $DIC['ilTabs'];
889  $ilCtrl = $DIC['ilCtrl'];
890  $tpl = $DIC['tpl'];
891  $ilTabs->activateTab("export");
892  include_once("./Services/Export/classes/class.ilExportGUI.php");
893  $exp_gui = new ilExportGUI($this);
894  $ilCtrl->setCmd("");
895  $exp_gui->addFormat("xml");
896  $ret = $this->ctrl->forwardCommand($exp_gui);
897  return $ret;
898  }
899 
900  public function exportModule()
901  {
902  global $DIC;
903  $ilDB = $DIC['ilDB'];
904 
905  $moduleId = ilObject::_lookupObjectId($_GET["ref_id"]);
906  require_once "./Modules/ScormAicc/classes/class.ilScormAiccExporter.php";
907  $exporter = new ilScormAiccExporter();
908  $xml = $exporter->getXmlRepresentation("sahs", "5.1.0", $moduleId);
909  }
910 
911  public function getType()
912  {
913  return "sahs";
914  }
915 } // END class.ilObjSAHSLearningModule
This class represents an option in a radio group.
Class ilObjectMetaDataGUI.
Class ilInfoScreenGUI.
$files
Definition: metarefresh.php:49
saveObject()
save new learning module to db
This class represents a selection list property in a property form.
This class represents a property form user interface.
GUI class for the workflow of copying objects.
global $DIC
Definition: saml.php:7
const TITLE_LENGTH
max length of object title
$_GET["client_id"]
This class represents a file property in a property form.
certificate()
Shows the certificate editor.
static _gotoRepositoryRoot($a_raise_error=false)
Goto repository root.
static unzip($a_file, $overwrite=false, $a_flat=false)
unzip file
getTemplate()
output main header (title and locator)
This class represents a checkbox property in a property form.
static _writeTitle($a_obj_id, $a_title)
write title to db (static)
static _lookupTitle($a_id)
lookup object title
static _getUploadDirectory()
Get the directory with uploaded files.
static _getUploadFiles()
Get a list of readable files in the upload directory.
setUseUploadDirectory($a_val)
Set use upload directory.
fillCloneTemplate($a_tpl_varname, $a_type)
Fill object clone template This method can be called from any object GUI class that wants to offer ob...
__construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output=true)
Constructor.
static _lookupObjectId($a_ref_id)
lookup object id
global $ilCtrl
Definition: ilias.php:18
static rename($a_source, $a_target)
Rename a file.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
Export User Interface Class.
static checkAccess($a_ref_id, $a_allow_only_read=true)
check access to learning progress
static _goto($a_target)
goto target course
setCustomRolesForSelection($a_roles)
Set custom roles for mapping to LTI roles.
prepareOutput($a_show_subobjects=true)
prepare output
owner()
show owner of learning module
This class represents a property in a property form.
setValue($a_value)
Set Value.
if(isset($_POST['submit'])) $form
GUI class for LTI provider object settings.
addSubItem($a_item)
Add Subitem.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
Class ilObjectGUI Basic methods of all Output classes.
static _lookupObjId($a_id)
setValue($a_value)
Set Value.
omitLocator($a_omit=true)
setSize($a_size)
Set Size.
This class represents a text property in a property form.
redirection script todo: (a better solution should control the processing via a xml file) ...
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
setOptions($a_options)
Set Options.
initCreationForms($a_new_type)
no manual SCORM creation, only import at the time
exit
Definition: backend.php:16
static _getFrame($a_class, $a_type='')
Get content frame name.
Class ilObjStyleSheetGUI.
static renameExecutables($a_dir)
Rename uploaded executables for security reasons.
Class ilObjSCORM2004LearningModule.
This class represents a text area property in a property form.
global $ilDB
$ret
Definition: parser.php:6
getCreationMode()
get creation mode
New PermissionGUI (extends from old ilPermission2GUI) RBAC related output.
static _getInstance()
Get instance of ilPrivacySettings.
static _checkUploadFile($a_file)
Check if a file exists in the upload directory and is readable.
$source
Definition: linkback.php:22
File System Explorer GUI class.
$info
Definition: index.php:5
static redirect($a_script)
static _copyUploadFile($a_file, $a_target, $a_raise_errors=true)
copy an uploaded file to the target directory (including virus check)
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static getWebspaceDir($mode="filesystem")
get webspace directory
Class ilObjUserTrackingGUI.
Class ilObjSCORMLearningModule.
$_POST["username"]
setRequired($a_required)
Set Required.
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
setLocator()
set Locator
uploadObject()
display status information or report errors messages in case of error