19declare(strict_types=1);
45 $this->archives =
$DIC->legacyArchives();
47 $rbacsystem =
$DIC->access();
61 $ilAccess =
$DIC->access();
62 $ilTabs =
$DIC->tabs();
64 $navigationHistory =
$DIC[
'ilNavigationHistory'];
66 $baseClass =
$refId =
$DIC->http()->wrapper()->query()->retrieve(
'baseClass',
$DIC->refinery()->kindlyTo()->string());
68 $ilLog->debug(
"bc:" . $baseClass .
"; nc:" . $this->
ctrl->getNextClass($this) .
"; cmd:" . $this->ctrl->getCmd());
69 if (strtolower($baseClass) ===
"iladministrationgui" ||
70 strtolower($baseClass) ===
"ilsahspresentationgui" ||
78 $this->tpl->setTitle($this->
object->getTitle());
79 $navigationHistory->addItem(
81 ilLink::_getLink($this->object->getRefId(), $this->object->getType()),
82 $this->object->getType()
86 $next_class = $this->
ctrl->getNextClass($this);
87 $cmd = $this->
ctrl->getCmd();
89 switch ($next_class) {
90 case 'illtiproviderobjectsettinggui':
92 $ilTabs->setSubTabActive(
'lti_provider');
94 $lti_gui->setCustomRolesForSelection(
$GLOBALS[
'DIC']->
rbac()->review()->getLocalRoles($this->
object->getRefId()));
95 $lti_gui->offerLTIRolesForSelection(
false);
96 $this->
ctrl->forwardCommand($lti_gui);
100 case 'ilobjectmetadatagui':
101 if (!$ilAccess->checkAccess(
'write',
'', $this->object->getRefId())) {
102 $ilErr->raiseError($this->
lng->txt(
'permission_denied'),
$ilErr->WARNING);
105 $this->
ctrl->forwardCommand($md_gui);
114 case 'ilpermissiongui':
116 $this->
ctrl->forwardCommand($perm_gui);
119 case "ilfilesystemgui":
121 $fs_gui->setUseUploadDirectory(
true);
122 $fs_gui->setTableId(
"sahsfs" . $this->
object->getId());
123 $this->
ctrl->forwardCommand($fs_gui);
126 case "ilcertificategui":
128 $ilTabs->setSubTabActive(
'certificate');
131 $output_gui = $guiFactory->create($this->
object);
133 $this->
ctrl->forwardCommand($output_gui);
136 case "illearningprogressgui":
138 $this->
ctrl->forwardCommand($new_gui);
142 case "ilinfoscreengui":
143 $ilTabs->setTabActive(
'info_short');
147 case "ilcommonactiondispatchergui":
150 $this->
ctrl->forwardCommand($gui);
154 case 'ilobjectcopygui':
157 $cp->setType(
'sahs');
158 $this->
ctrl->forwardCommand($cp);
163 $cmd = $this->
ctrl->getCmd(
"properties");
165 if ((strtolower($baseClass) ===
"iladministrationgui" ||
167 $cmd !==
"frameset") {
172 if ($cmd ===
"redrawHeaderAction") {
183 if (strtolower($this->
ctrl->getCmd() ??
'') ===
'infoscreen') {
184 $this->
ctrl->redirectByClass(ilInfoScreenGUI::class,
'showSummary');
193 $this->
error->raiseError($this->
lng->txt(
"msg_no_perm_read"), $this->error->MESSAGE);
197 $info->enablePrivateNotes();
198 $info->enableLearningProgress();
202 $ilToolbar =
$GLOBALS[
'DIC']->toolbar();
203 $ilToolbar->addButtonInstance($this->
object->getViewButton());
206 $info->enableNewsEditing(
false);
209 $enable_internal_rss = $news_set->get(
"enable_rss_for_internal");
210 if ($enable_internal_rss) {
211 $info->setBlockProperty(
"news",
"settings",
"");
212 $info->setBlockProperty(
"news",
"public_notifications_option",
"true");
216 $info->addMetaDataSections($this->
object->getId(), 0, $this->object->getType());
240 $this->
ctrl->setParameterByClass(
245 $this->
ctrl->redirectByClass(ilSAHSEditGUI::class);
256 $ilCtrl =
$DIC->ctrl();
262 $op0->setInfo($this->
lng->txt(
"lm_type_scorm_info"));
263 $radg->addOption($op0);
264 $op0 =
new ilRadioOption($this->
lng->txt(
"lm_type_scorm2004"),
"scorm2004");
265 $op0->setInfo($this->
lng->txt(
"lm_type_scorm2004_info"));
266 $radg->addOption($op0);
267 $radg->setValue(
"scorm");
272 $options[
""] = $this->
lng->txt(
"cont_select_from_upload_dir");
274 foreach ($files as $file) {
275 $file = htmlspecialchars($file, ENT_QUOTES,
"utf-8");
276 $options[$file] = $file;
279 if (count($options) > 1) {
283 $radg->addOption($op0);
284 $op1 =
new ilRadioOption($this->
lng->txt(
"cont_choose_upload_dir"),
"upload_dir");
285 $radg->addOption($op1);
286 $radg->setValue(
"local");
289 $fi->setRequired(
true);
290 $op0->addSubItem($fi);
293 $si->setOptions($options);
294 $op1->addSubItem($si);
299 $fi->setRequired(
true);
323 $rbacsystem =
$DIC->access();
326 $refId =
$DIC->http()->wrapper()->query()->retrieve(
'ref_id',
$DIC->refinery()->kindlyTo()->int());
327 $importFromXml =
false;
330 if (!$rbacsystem->checkAccess(
"create",
'',
$refId,
"sahs")) {
331 $ilErr->raiseError($this->
lng->txt(
"no_create_permission"),
$ilErr->WARNING);
332 } elseif ($_FILES[
"scormfile"][
"name"]) {
334 $source = $_FILES[
"scormfile"][
"tmp_name"];
335 if (($source ===
'none') || (!$source)) {
339 switch ($_FILES[
"scormfile"][
"error"]) {
340 case UPLOAD_ERR_INI_SIZE:
341 case UPLOAD_ERR_FORM_SIZE:
342 $ilErr->raiseError($this->
lng->txt(
"err_max_file_size_exceeds"),
$ilErr->MESSAGE);
345 case UPLOAD_ERR_PARTIAL:
346 $ilErr->raiseError($this->
lng->txt(
"err_partial_file_upload"),
$ilErr->MESSAGE);
349 case UPLOAD_ERR_NO_FILE:
350 $ilErr->raiseError($this->
lng->txt(
"err_no_file_uploaded"),
$ilErr->MESSAGE);
354 $file = pathinfo($_FILES[
"scormfile"][
"name"]);
355 } elseif (
$DIC->http()->wrapper()->post()->has(
'uploaded_file')) {
356 $uploadedFile =
$DIC->http()->wrapper()->post()->retrieve(
'uploaded_file',
$DIC->refinery()->kindlyTo()->string());
359 $ilErr->raiseError($this->
lng->txt(
"upload_error_file_not_found"),
$ilErr->MESSAGE);
362 $file = pathinfo($uploadedFile);
367 $name = substr($file[
"basename"], 0, strlen($file[
"basename"]) - strlen($file[
"extension"]) - 1);
369 $name = $this->
lng->txt(
"no_title");
374 $subType =
"scorm2004";
375 if (
$DIC->http()->wrapper()->post()->has(
'sub_type')) {
376 $subType =
$DIC->http()->wrapper()->post()->retrieve(
'sub_type',
$DIC->refinery()->kindlyTo()->string());
395 $newObj->setTitle($name);
396 $newObj->setSubType($subType);
397 $newObj->setDescription($description);
398 $newObj->create(
true);
399 $newObj->createReference();
400 $newObj->putInTree(
$refId);
401 $newObj->setPermissions(
$refId);
402 $newObj->setOfflineStatus(
true);
405 $newObj->createDataDirectory();
407 if ($_FILES[
"scormfile"][
"name"]) {
409 $file_path = $newObj->getDataDirectory() .
"/" . $_FILES[
"scormfile"][
"name"];
411 $_FILES[
"scormfile"][
"tmp_name"],
412 $_FILES[
"scormfile"][
"name"],
415 $this->archives->unzip(
417 $newObj->getDataDirectory(),
424 $uploadedFile =
$DIC->http()->wrapper()->post()->retrieve(
'uploaded_file',
$DIC->refinery()->kindlyTo()->string());
425 $file_path = $newObj->getDataDirectory() .
"/" . $uploadedFile;
427 $this->archives->unzip(
429 $newObj->getDataDirectory(),
437 $title = $newObj->readObject();
443 $newObj->setLearningProgressSettingsAtUpload();
445 if ($importFromXml) {
446 $importer->writeData(
"sahs",
"5.1.0", $newObj->getId());
449 $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt($newObj->getType() .
"_added"),
true);
450 ilUtil::redirect(
"ilias.php?baseClass=ilSAHSEditGUI&ref_id=" . $newObj->getRefId());
464 protected function importFile(
string $file_to_import,
string $path_to_uploaded_file_in_temp_dir): void
468 $ilLog =
$DIC[
'log'];
472 $zar =
new ZipArchive();
473 $zar->open($file_to_import);
474 $zar->extractTo($lm_temp_dir);
478 $import_dirname = $lm_temp_dir .
'/' . substr(basename($file_to_import), 0, -4);
479 $importer->importXmlRepresentation(
"sahs",
"", $import_dirname,
null);
480 $import_result = $importer->getResult();
482 if ($import_result->isOK()) {
483 $properties = $import_result->value();
484 if (($subType = $properties[
'SubType']) ===
'scorm') {
489 $name = $properties[
'Title'];
490 $description = $properties[
'Description'];
494 $ilLog->error(
'SCORM import of ILIAS exportfile not possible because parsing error');
495 $ilLog->error($import_result->error());
496 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"import_file_not_valid_here"),
true);
500 $new_obj->setTitle($name);
501 $new_obj->setSubType($subType);
502 $new_obj->setDescription($description);
503 $new_obj->create(
true);
505 $new_obj->setOfflineStatus(
false);
508 $new_obj->createDataDirectory();
511 $scorm_file =
"content.zip";
512 $file_path = $import_dirname .
"/" . $scorm_file;
514 $content_unzip_dir = $import_dirname .
'/content';
515 $this->archives->unzip(
523 $source_dir_for_copy = $content_unzip_dir;
524 $content_unzip_dir_iterator =
new DirectoryIterator( $content_unzip_dir );
525 foreach ( $content_unzip_dir_iterator as $fileinfo ) {
526 if ( $fileinfo->isDir() && !$fileinfo->isDot() ) {
527 if ( preg_match(
'/^lm_\d+$/', $fileinfo->getFilename() ) ) {
528 $source_dir_for_copy = $source_dir_for_copy .
'/' . $fileinfo->getFilename();
540 $new_obj->setLearningProgressSettingsAtUpload();
542 $importer->writeData(
"sahs",
"5.1.0", $new_obj->getId());
544 $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt($new_obj->getType() .
"_added"),
true);
545 $this->
ctrl->setParameterByClass(self::class,
'ref_id', $new_obj->getRefId());
546 $this->
ctrl->redirectByClass(self::class);
558 $this->tpl->loadStandardTemplate();
567 $baseClass =
$refId =
$DIC->http()->wrapper()->query()->retrieve(
'baseClass',
$DIC->refinery()->kindlyTo()->string());
569 $this->tpl->setTitle($this->
object->getTitle());
570 $this->tpl->setDescription($this->
object->getDescription());
571 if ($this->
object && $this->
object->getOfflineStatus()) {
572 $this->tpl->setAlertProperties(array(
573 array(
"alert" =>
true,
574 "property" => $this->
lng->txt(
"status"),
575 "value" => $this->lng->txt(
"offline"))
578 if (strtolower($baseClass) ===
"ilsahseditgui" || strtolower($baseClass) ===
"ilrepositorygui") {
589 $output_gui = $guiFactory->create($this->
object);
591 $output_gui->certificateEditor();
601 $rbacsystem =
$DIC->access();
602 $ilCtrl =
$DIC->ctrl();
603 $ilHelp =
$DIC->help();
605 if ($this->
ctrl->getCmd() ===
"delete") {
609 switch ($this->
object->getSubType()) {
611 $ilHelp->setScreenIdComponent(
"sahs13");
615 $ilHelp->setScreenIdComponent(
"sahs12");
621 if ($rbacsystem->checkAccess(
"write",
"", $this->object->getRefId())) {
622 $ilCtrl->setParameterByClass(
"ilfilesystemgui",
"resetoffset", 1);
623 $this->tabs_gui->addTarget(
625 $this->
ctrl->getLinkTargetByClass(
"ilfilesystemgui",
"listFiles"),
629 $ilCtrl->setParameterByClass(
"ilfilesystemgui",
"resetoffset",
"");
632 $force_active = ($this->
ctrl->getNextClass() ===
"ilinfoscreengui")
635 $this->tabs_gui->addTarget(
637 $this->
ctrl->getLinkTargetByClass(
"ilinfoscreengui",
"showSummary"),
645 $this->tabs_gui->addTarget(
647 $this->
ctrl->getLinkTarget($this,
"properties"),
648 array(
"",
"properties"),
662 if ($rbacsystem->checkAccess(
"read_learning_progress",
"", $this->object->getRefId()) || $rbacsystem->checkAccess(
"edit_learning_progress",
"", $this->
object->getRefId())) {
664 if ($rbacsystem->checkAccess(
"read_learning_progress",
"", $this->object->getRefId())) {
665 $ar_rights = [
'illplistofobjectsgui'];
667 if ($rbacsystem->checkAccess(
"edit_learning_progress",
"", $this->object->getRefId())) {
668 $ar_rights[] =
'illplistofsettingsgui';
671 $this->tabs_gui->addTarget(
673 $this->
ctrl->getLinkTargetByClass(array(
'illearningprogressgui'),
''),
679 if ($this->
object->getSubType() ===
"scorm2004" || $this->
object->getSubType() ===
"scorm") {
681 if ($privacy->enabledSahsProtocolData()) {
682 $scormClass =
"ilobjscormlearningmodulegui";
683 if ($this->
object->getSubType() ===
"scorm2004") {
684 $scormClass =
"ilobjscorm2004learningmodulegui";
686 $this->
ctrl->setParameterByClass($scormClass,
"ref_id", $this->
object->getRefId());
687 $this->tabs_gui->addTarget(
688 "cont_tracking_data",
689 $this->
ctrl->getLinkTargetByClass([
'ilsahseditgui',$scormClass],
"showTrackingItems"),
696 if ($rbacsystem->checkAccess(
"write",
"", $this->object->getRefId())) {
698 $mdtab = $mdgui->getTab();
700 $this->tabs_gui->addTarget(
709 if ($rbacsystem->checkAccess(
"edit",
"", $this->object->getRefId())) {
710 $this->tabs_gui->addTarget(
712 $this->
ctrl->getLinkTarget($this,
"export"),
719 if ($rbacsystem->checkAccess(
'edit_permission',
"", $this->object->getRefId())) {
720 $this->tabs_gui->addTarget(
722 $this->
ctrl->getLinkTargetByClass(array(get_class($this),
'ilpermissiongui'),
"perm"),
723 array(
"perm",
"info",
"owner"),
733 public static function _goto(
string $a_target): void
736 $main_tpl =
$DIC->ui()->mainTemplate();
737 $ilAccess =
$DIC->access();
741 $targetParameters = explode(
'_', $a_target);
742 $id = (
int) $targetParameters[0];
748 if ($ilAccess->checkAccess(
"write",
"",
$id)) {
749 $DIC->ctrl()->setParameterByClass(
"ilSAHSEditGUI",
"ref_id", (
string)
$id);
750 $DIC->ctrl()->redirectByClass(
"ilSAHSEditGUI",
"infoScreen");
753 if ($ilAccess->checkAccess(
"visible",
"",
$id) || $ilAccess->checkAccess(
"read",
"",
$id)) {
754 $DIC->ctrl()->setParameterByClass(
"ilSAHSPresentationGUI",
"ref_id", (
string)
$id);
755 $DIC->ctrl()->redirectByClass(
"ilSAHSPresentationGUI",
"infoScreen");
758 $main_tpl->setOnScreenMessage(
'info', sprintf(
759 $lng->
txt(
"msg_no_perm_read_item"),
775 $ilLocator =
$DIC[
'ilLocator'];
777 if (is_object($this->
object)) {
779 $this->
object->getTitle(),
780 $this->ctrl->getLinkTargetByClass(
"ilinfoscreengui",
"showSummary"),
782 $DIC->http()->wrapper()->query()->retrieve(
'ref_id',
$DIC->refinery()->kindlyTo()->int())
812 $ilTabs =
$DIC->tabs();
813 $ilCtrl =
$DIC->ctrl();
815 $ilTabs->addSubTabTarget(
817 $this->
ctrl->getLinkTarget($this,
"properties"),
822 $ilTabs->addSubTabTarget(
823 "cont_sc_new_version",
824 $this->
ctrl->getLinkTarget($this,
"newModuleVersion"),
830 if (
true === $validator->validate()) {
837 $ilTabs->addSubTabTarget(
839 $this->
ctrl->getLinkTargetByClass([static::class,
"ilcertificategui"],
"certificateeditor"),
846 if ($lti_settings->hasSettingsAccess()) {
847 $ilTabs->addSubTabTarget(
849 $this->
ctrl->getLinkTargetByClass(ilLTIProviderObjectSettingGUI::class)
853 $ilTabs->setTabActive(
'settings');
861 $GLOBALS[
'DIC']->tabs()->setTabActive(
'export');
865 $exp_gui->addFormat(
"xml");
866 return $this->
ctrl->forwardCommand($exp_gui);
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call
Export User Interface Class.
File System Explorer GUI class.
static makeDir(string $a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
static ilTempnam(?string $a_temp_path=null)
Returns a unique and non existing Path for e temporary file or directory.
static rename(string $a_source, string $a_target)
static delDir(string $a_dir, bool $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static renameExecutables(string $a_dir)
static moveUploadedFile(string $a_file, string $a_name, string $a_target, bool $a_raise_errors=true, string $a_mode="move_uploaded")
move uploaded file
GUI class for LTI provider object settings.
loadLanguageModule(string $a_module)
Load language module.
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
static checkAccess(int $a_ref_id, bool $a_allow_only_read=true)
check access to learning progress
const LP_CONTEXT_REPOSITORY
Class ilObjUserTrackingGUI.
static getLogger(string $a_component_id)
Get component logger.
importFile(string $file_to_import, string $path_to_uploaded_file_in_temp_dir)
getTabs()
adds tabs to tab gui object
executeCommand()
execute command
static _goto(string $a_target)
goto target course
properties()
module properties
certificate()
Shows the certificate editor.
getTemplate()
output main header (title and locator)
uploadObject()
display status information or report errors messages in case of error
initCreateForm(string $new_type)
__construct($data, int $id, bool $call_by_reference, bool $prepare_output=true)
Constructor.
Class ilObjSCORM2004LearningModule.
Class ilObjSCORMLearningModule.
GUI class for the workflow of copying objects.
Class ilObjectGUI Basic methods of all Output classes.
static _gotoRepositoryRoot(bool $raise_error=false)
Goto repository root.
deleteUploadedImportFile(string $path_to_uploaded_file_in_temp_dir)
checkPermissionBool(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
putObjectInTree(ilObject $obj, ?int $parent_node_id=null)
Add object to tree at given position.
prepareOutput(bool $show_sub_objects=true)
static _lookupObjectId(int $ref_id)
static _writeTitle(int $obj_id, string $title)
write title to db (static)
static _lookupObjId(int $ref_id)
static _lookupTitle(int $obj_id)
This class represents an option in a radio group.
static _copyUploadFile(string $a_file, string $a_target, bool $a_raise_errors=true)
static _checkUploadFile(string $a_file)
static _getUploadDirectory()
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
static redirect(string $a_script)
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc