ILIAS  trunk Revision v12.0_alpha-1227-g7ff6d300864
class.ilObjFileBasedLMGUI.php
Go to the documentation of this file.
1<?php
2
26
36{
37 private const PARAM_PATH = "path";
38 public const CMD_LIST_FILES = "listFiles";
39 public const CMD_IMPORT_FROM_UPLOAD_DIR = 'importFromUploadDir';
40 private \ILIAS\ResourceStorage\Services $irss;
41 protected \ILIAS\HTMLLearningModule\InternalGUIService $gui;
44 protected ilTabsGUI $tabs;
45 protected ilHelpGUI $help;
46 public bool $output_prepared;
47
48 public function __construct(
49 $a_data,
50 int $a_id = 0,
51 bool $a_call_by_reference = true,
52 bool $a_prepare_output = true
53 ) {
54 global $DIC;
55
56 $this->irss = $DIC->resourceStorage();
57 $this->lng = $DIC->language();
58 $this->user = $DIC->user();
59 $this->locator = $DIC["ilLocator"];
60 $this->tabs = $DIC->tabs();
61 $this->tree = $DIC->repositoryTree();
62 $this->tpl = $DIC["tpl"];
63 $this->access = $DIC->access();
64 $this->toolbar = $DIC->toolbar();
65 $this->help = $DIC["ilHelp"];
66 $lng = $DIC->language();
67 $ilCtrl = $DIC->ctrl();
68
69 $this->ctrl = $ilCtrl;
70 $this->ctrl->saveParameter($this, array("ref_id"));
71
72 $this->lm_request = $DIC->htmlLearningModule()
73 ->internal()
74 ->gui()
75 ->standardRequest();
76
77 $this->type = "htlm";
78 $lng->loadLanguageModule("content");
80 $lng->loadLanguageModule("htlm");
81
82 parent::__construct($a_data, $a_id, $a_call_by_reference, false);
83 $this->output_prepared = $a_prepare_output;
84 $this->gui = $DIC->htmlLearningModule()->internal()->gui();
85 }
86
87 public function executeCommand(): void
88 {
89 $next_class = $this->ctrl->getNextClass($this);
90 $cmd = $this->ctrl->getCmd();
91
92 if (
93 $this->getCreationMode() === true ||
94 strtolower($this->lm_request->getBaseClass()) === "iladministrationgui"
95 ) {
96 $this->prepareOutput();
97 } elseif (!in_array($cmd, array("", "framset")) || $next_class != "") {
98 $this->tpl->loadStandardTemplate();
99 $this->setLocator();
100 $this->setTabs();
101 }
102
103 switch ($next_class) {
104 case strtolower(ilContainerResourceGUI::class):
105 $this->tabs->activateTab('id_list_files');
106 // Check wite access to determine upload and manage capabilities
107 $check_access = $this->access->checkAccess('write', '', $this->object->getRefId());
108
109 // Build the view configuration
110 $view_configuration = (new HTMLModuleViewConfig(
111 $this->object->getResource(),
112 $this->lng->txt('files'),
113 $check_access,
114 $this->object->getStartFile(),
115 $this->lng->txt('start_file'),
116 ))->getConfiguration();
117
118 // Add a single action for text-files to set as startfile
119 $view_configuration = $view_configuration->withExternalAction(
120 $this->lng->txt('cont_set_start_file'),
121 self::class,
122 'setStartFile',
123 'lm',
125 false,
126 ['text/*']
127 );
128
129 if ($this->getUploadDirectory()) {
130 foreach ($this->getUploadFiles() as $file) {
131 $options[$file] = $file;
132 }
133
134 $modal = $this->ui_factory->modal()->roundtrip(
135 $this->lng->txt('import_from_upload_dir'),
136 [],
137 [
138 $this->ui_factory->input()->field()->select(
139 $this->lng->txt('import_from_upload_dir_file_name'),
140 $options,
141 $this->lng->txt('import_from_upload_dir_info'),
142 )->withRequired(true)
143 ],
144 $this->ctrl->getFormActionByClass(
145 \ilObjFileBasedLMGUI::class,
147 )
148 );
149
150 $top_action = new TopAction(
151 $this->lng->txt('import_from_upload_dir'),
152 $modal->getShowSignal()
153 );
154 $view_configuration = $view_configuration->withExternalTopAction(
155 'import_from_upload_dir',
156 $top_action,
157 $modal
158 );
159 }
160 // build the collection GUI
161 $container_gui = new ilContainerResourceGUI(
162 $view_configuration
163 );
164
165 // forward the command
166 $this->ctrl->forwardCommand($container_gui);
167 break;
168 case 'ilobjectmetadatagui':
169 $this->checkPermission("write");
170 $this->tabs->activateTab('id_meta_data');
171 $md_gui = new ilObjectMetaDataGUI($this->object);
172 $this->ctrl->forwardCommand($md_gui);
173 break;
174
175 case "ilinfoscreengui":
176 $this->showInfoScreen();
177 break;
178
179 case "illearningprogressgui":
180 $this->tabs->activateTab('id_learning_progress');
181 $user_id = ($this->lm_request->getUserId() > 0)
182 ? $this->lm_request->getUserId()
183 : $this->user->getId();
184 $new_gui = new ilLearningProgressGUI(
186 $this->object->getRefId(),
188 );
189 $this->ctrl->forwardCommand($new_gui);
190 break;
191
192 case 'ilpermissiongui':
193 $this->tabs->activateTab('id_permissions');
194 $perm_gui = new ilPermissionGUI($this);
195 $ret = $this->ctrl->forwardCommand($perm_gui);
196 break;
197
198 case "ilexportgui":
199 $this->tabs->activateTab("export");
200 $exp_gui = new ilExportGUI($this);
201 $ret = $this->ctrl->forwardCommand($exp_gui);
202 break;
203
204 case "ilcommonactiondispatchergui":
206 $this->ctrl->forwardCommand($gui);
207 break;
208
209 default:
210 $cmd = $this->ctrl->getCmd(self::CMD_LIST_FILES);
211 if (
212 $this->getCreationMode() === true ||
213 strtolower($this->lm_request->getBaseClass()) === "iladministrationgui"
214 ) {
215 $cmd .= "Object";
216 }
217 $ret = $this->$cmd();
218 break;
219 }
220
221 $this->addHeaderAction();
222 }
223
224 final public function cancelCreationObject(): void
225 {
226 $this->ctrl->redirectByClass("ilrepositorygui", "frameset");
227 }
228
229 public function properties(): void
230 {
231 if (!$this->checkPermissionBool("write")) {
232 $this->error->raiseError($this->lng->txt("permission_denied"), $this->error->MESSAGE);
233 }
234 $this->tabs->activateTab("id_settings");
235
236 $this->initSettingsForm();
237 $this->getSettingsFormValues();
238 $this->tpl->setContent($this->form->getHTML());
239 }
240
241 public function initSettingsForm(): void
242 {
243 $obj_service = $this->getObjectService();
244
245 $this->form = new ilPropertyFormGUI();
246
247 // title
248 $ti = new ilTextInputGUI($this->lng->txt("title"), "title");
249 $ti->setSize(min(40, ilObject::TITLE_LENGTH));
250 $ti->setMaxLength(ilObject::TITLE_LENGTH);
251 $ti->setRequired(true);
252 $this->form->addItem($ti);
253
254 // description
255 $ta = new ilTextAreaInputGUI($this->lng->txt("description"), "desc");
256 $ta->setCols(40);
257 $ta->setRows(2);
258 $this->form->addItem($ta);
259
260 // online
261 $cb = new ilCheckboxInputGUI($this->lng->txt("cont_online"), "cobj_online");
262 $cb->setOptionTitle($this->lng->txt(""));
263 $cb->setValue("y");
264 $this->form->addItem($cb);
265
266 // startfile
267 $startfile = ilObjFileBasedLMAccess::_determineStartUrl($this->object->getId());
268
269 $ne = new ilNonEditableValueGUI($this->lng->txt("cont_startfile"), "");
270 if ($startfile !== "") {
271 $ne->setValue(basename($startfile));
272 } else {
273 $ne->setValue(basename($this->lng->txt("no_start_file")));
274 }
275 $this->form->addItem($ne);
276
277 $pres = new ilFormSectionHeaderGUI();
278 $pres->setTitle($this->lng->txt('obj_presentation'));
279 $this->form->addItem($pres);
280
281 // tile image
282 $obj_service->commonSettings()->legacyForm($this->form, $this->object)->addTileImage();
283
284 $this->form->addCommandButton("saveProperties", $this->lng->txt("save"));
285 $this->form->addCommandButton("toFilesystem", $this->lng->txt("cont_set_start_file"));
286
287 $this->form->setTitle($this->lng->txt("cont_lm_properties"));
288 $this->form->setFormAction($this->ctrl->getFormAction($this, "saveProperties"));
289
290 // additional features
291 $section = new ilFormSectionHeaderGUI();
292 $section->setTitle($this->lng->txt('obj_features'));
293 $this->form->addItem($section);
294
296 $this->object->getId(),
297 $this->form,
298 [
300 ]
301 );
302 }
303
304 public function getSettingsFormValues(): void
305 {
306 $startfile = ilObjFileBasedLMAccess::_determineStartUrl($this->object->getId());
307
308 $values = array();
309 $values['cobj_online'] = !$this->object->getOfflineStatus();
310 if ($startfile !== "") {
311 $startfile = basename($startfile);
312 } else {
313 $startfile = $this->lng->txt("no_start_file");
314 }
315
316 $values["startfile"] = $startfile;
317 $values["title"] = $this->object->getTitle();
318 $values["desc"] = $this->object->getLongDescription();
319 $values["cont_show_info_tab"] = $this->object->isInfoEnabled();
320
321 $this->form->setValuesByArray($values);
322 }
323
324 public function toFilesystem(): void
325 {
326 // If we already have a RID, we can redirect to Container GUI
327 // otherwise we display an message which informs the user that the resource is not yet available
328 if ($this->object->getRID() != "") {
329 $this->ctrl->redirectByClass(ilContainerResourceGUI::class);
330 } else {
331 $this->ctrl->redirectByClass(static::class, "properties");
332 }
333 }
334
335 public function saveProperties(): void
336 {
337 if (!$this->checkPermissionBool("write")) {
338 $this->error->raiseError($this->lng->txt("permission_denied"), $this->error->MESSAGE);
339 }
340
341 $obj_service = $this->getObjectService();
342
343 $this->initSettingsForm();
344 if ($this->form->checkInput()) {
345 $this->object->setTitle($this->form->getInput("title"));
346 $this->object->setDescription($this->form->getInput("desc"));
347 $this->object->setOfflineStatus(!(bool) $this->form->getInput("cobj_online"));
348
349 $this->object->update();
350
351 // tile image
352 $obj_service->commonSettings()->legacyForm($this->form, $this->object)->saveTileImage();
353
354 // services
356 $this->object->getId(),
357 $this->form,
358 array(
360 )
361 );
362
363 $this->tpl->setOnScreenMessage('success', $this->lng->txt("msg_obj_modified"), true);
364 $this->ctrl->redirect($this, "properties");
365 }
366
367 $this->tabs->activateTab("id_settings");
368 $this->form->setValuesByPost();
369 $this->tpl->setContent($this->form->getHTML());
370 }
371
372 public function editObject(): void
373 {
374 if (!$this->rbac_system->checkAccess("visible,write", $this->object->getRefId())) {
375 throw new ilPermissionException($this->lng->txt("permission_denied"));
376 }
377 }
378
379 public function edit(): void
380 {
381 $this->prepareOutput();
382 $this->editObject();
383 }
384
385 public function cancel(): void
386 {
387 $this->cancelObject();
388 }
389
390 protected function afterSave(ilObject $new_object): void
391 {
392 if (!$new_object->getStartFile()) {
393 $new_object->maybeDetermineStartFile();
394 }
395
396 // always send a message
397 $this->tpl->setOnScreenMessage('success', $this->lng->txt("object_added"), true);
398 $this->object = $new_object;
399 $this->redirectAfterCreation();
400 }
401
402 public function update(): void
403 {
404 $this->updateObject();
405 }
406
407 public function setStartFile(): void
408 {
409 if (!$this->checkPermissionBool("write")) {
410 $this->error->raiseError($this->lng->txt("permission_denied"), $this->error->MESSAGE);
411 }
412
413 // try to determine start file from request
414 $start_file = $this->http->wrapper()->query()->has('lm_path')
415 ? $start_file = $this->http->wrapper()->query()->retrieve(
416 'lm_path',
417 $this->refinery->kindlyTo()->listOf($this->refinery->kindlyTo()->string())
418 )[0] ?? ''
419 : '';
420 // the ContainerResourceGUI uses e bin2hex/hex2bin serialization of pathes. Due to the internals of
421 // UI\Table\Data it's not possible to have a different handling for the parameter in case of external actions...
422 try {
423 $start_file = hex2bin($start_file);
424 } catch (Throwable $e) {
425 $start_file = '';
426 }
427
428 if ($start_file === '') {
429 $this->tpl->setOnScreenMessage('failure', $this->lng->txt('cont_no_start_file'), true);
430 } else {
431 $this->object->setStartFile($start_file);
432 $this->object->update();
433 $this->tpl->setOnScreenMessage('success', sprintf($this->lng->txt('cont_start_file_set_to'), $start_file), true);
434 }
435
436 $this->ctrl->redirectByClass(ilContainerResourceGUI::class);
437 }
438
439 public function showLearningModule(): void
440 {
441 // #9483
442 if ($this->user->getId() !== ANONYMOUS_USER_ID) {
444 $this->user->getId(),
445 $this->object->getId(),
446 $this->object->getRefId(),
447 "htlm"
448 );
449
450 ilLPStatusWrapper::_updateStatus($this->object->getId(), $this->user->getId());
451 }
452
454 $resource = $this->object->getResource();
455
456 if ($resource !== null) {
457 $startfile = $this->object->getStartFile() ?? 'index.html';
458 $uri = $this->irss->consume()->containerURI(
459 $resource->getIdentification(),
460 $startfile,
461 8 * 60
462 )->getURI();
463
464 ilUtil::redirect((string) $uri);
465 } else {
466 // This is a legacy learning module which has not yet been migrated to the new resource storage
467 $startfile = ilObjFileBasedLMAccess::_determineStartUrl($this->object->getId());
468
470 if ($startfile !== "") {
471 ilUtil::redirect($startfile);
472 }
473 }
474 }
475
479 public function infoScreen(): void
480 {
481 $this->ctrl->redirectByClass(ilInfoScreenGUI::class, "showSummary");
482 }
483
484 public function showInfoScreen(): void
485 {
486 $this->tabs->activateTab('id_info');
487
488 $this->lng->loadLanguageModule("meta");
489
490 $info = new ilInfoScreenGUI($this);
491 $info->enablePrivateNotes();
492 $info->enableLearningProgress();
493
494 $info->enableNews();
495 if ($this->access->checkAccess("write", "", $this->requested_ref_id)) {
496 $info->enableNewsEditing();
497
498 $news_set = new ilSetting("news");
499 $enable_internal_rss = $news_set->get("enable_rss_for_internal");
500 if ($enable_internal_rss) {
501 $info->setBlockProperty("news", "settings", true);
502 }
503 }
504
505 // add read / back button
506 if ($this->access->checkAccess("read", "", $this->requested_ref_id)) {
507 // #15127
508 $this->gui->link(
509 $this->lng->txt("view"),
510 "ilias.php?baseClass=ilHTLMPresentationGUI&ref_id=" . $this->object->getRefId(),
511 true
512 )->primary()->toToolbar();
513 }
514
515 // show standard meta data section
516 $info->addMetaDataSections($this->object->getId(), 0, $this->object->getType());
517
518 // forward the command
519 $this->ctrl->forwardCommand($info);
520 }
521
522 protected function setTabs(): void
523 {
524 $this->getTabs();
525 $this->setTitleAndDescription();
526 }
527
528 protected function getTabs(): void
529 {
531 $ilHelp = $this->help;
532
533 $ilHelp->setScreenIdComponent("htlm");
534
535 if ($this->access->checkAccess('write', '', $this->ref_id)) {
536 // Depending on whether the module has already been migrated to the IRSS, we add a tab to
537 // ilContainerResourceGUI or internally. internally, it is only indicated that the files cannot be edited.
538 $this->tabs->addTab(
539 "id_list_files",
540 $lng->txt("cont_list_files"),
541 $this->ctrl->getLinkTarget($this, self::CMD_LIST_FILES)
542 );
543 }
544
545 if ($this->access->checkAccess('visible', '', $this->ref_id) && $this->object->isInfoEnabled()) {
546 $this->tabs->addTab(
547 "id_info",
548 $lng->txt("info_short"),
549 $this->ctrl->getLinkTargetByClass([self::class, ilInfoScreenGUI::class], "showSummary")
550 );
551 }
552
553 if ($this->access->checkAccess('write', '', $this->ref_id)) {
554 $this->tabs->addTab(
555 "id_settings",
556 $lng->txt("settings"),
557 $this->ctrl->getLinkTarget($this, "properties")
558 );
559 }
560
561 if (ilLearningProgressAccess::checkAccess($this->object->getRefId())) {
562 $this->tabs->addTab(
563 "id_learning_progress",
564 $lng->txt("learning_progress"),
565 $this->ctrl->getLinkTargetByClass([self::class, ilLearningProgressGUI::class], '')
566 );
567 }
568
569 if ($this->access->checkAccess('write', '', $this->ref_id)) {
570 $mdgui = new ilObjectMetaDataGUI($this->object);
571 $mdtab = $mdgui->getTab();
572 if ($mdtab) {
573 $this->tabs->addTab(
574 "id_meta_data",
575 $lng->txt("meta_data"),
576 $mdtab
577 );
578 }
579 }
580
581 // export
582 if ($this->access->checkAccess("write", "", $this->object->getRefId())) {
583 $this->tabs->addTab(
584 "export",
585 $lng->txt("export"),
586 $this->ctrl->getLinkTargetByClass(ilExportGUI::class, "")
587 );
588 }
589
590 if ($this->access->checkAccess('edit_permission', '', $this->object->getRefId())) {
591 $this->tabs->addTab(
592 "id_permissions",
593 $lng->txt("perm_settings"),
594 $this->ctrl->getLinkTargetByClass([self::class, ilPermissionGUI::class], "perm")
595 );
596 }
597
598 $startfile = ilObjFileBasedLMAccess::_determineStartUrl($this->object->getId());
599 if ($startfile !== "" && $this->access->checkAccess('read', '', $this->ref_id)) {
600 $this->tabs->addNonTabbedLink(
601 "presentation_view",
602 $this->lng->txt("glo_presentation_view"),
603 "ilias.php?baseClass=ilHTLMPresentationGUI&ref_id=" . $this->object->getRefId(),
604 "_blank"
605 );
606 }
607 }
608
609 public static function _goto(string $a_target): void
610 {
611 global $DIC;
612 $main_tpl = $DIC->ui()->mainTemplate();
613
614 $lng = $DIC->language();
615 $access = $DIC->access();
616
617 if ($access->checkAccess("read", "", $a_target) ||
618 $access->checkAccess("visible", "", $a_target)) {
619 ilObjectGUI::_gotoRepositoryNode($a_target, "infoScreen");
620 } elseif ($access->checkAccess("read", "", ROOT_FOLDER_ID)) {
621 $main_tpl->setOnScreenMessage(
622 'failure',
623 sprintf(
624 $lng->txt("msg_no_perm_read_item"),
626 ),
627 true
628 );
630 }
631
632 throw new ilPermissionException($lng->txt("msg_no_perm_read_lm"));
633 }
634
635 protected function addLocatorItems(): void
636 {
637 $ilLocator = $this->locator;
638
639 if (is_object($this->object)) {
640 $ilLocator->addItem(
641 $this->object->getTitle(),
642 $this->ctrl->getLinkTargetByClass("ilinfoscreengui", "showSummary"),
643 "",
644 $this->requested_ref_id
645 );
646 }
647 }
648
649 private function listFiles(): void
650 {
651 if ($this->object->getResource() !== null) {
652 $this->ctrl->redirectByClass(ilContainerResourceGUI::class);
653 return;
654 }
655 $this->tabs->activateTab("id_list_files");
656
657 $message_box = $this->gui->ui()->factory()->messageBox()->info(
658 $this->lng->txt("infobox_files_not_migrated")
659 );
660
661 $this->tpl->setContent(
662 $this->gui->ui()->renderer()->render([$message_box])
663 );
664 }
665
666 protected function importFileObject(?int $parent_id = null): void
667 {
668 try {
669 parent::importFileObject();
671 // since there is no manifest xml we assume that this is an HTML export file
672 $this->createFromDirectory($e->getTmpDir());
673 }
674 }
675
676 protected function afterImport(ilObject $new_object): void
677 {
678 $this->ctrl->setParameter($this, "ref_id", $new_object->getRefId());
679 $this->tpl->setOnScreenMessage('success', $this->lng->txt("object_added"), true);
680 $this->ctrl->redirect($this, "properties");
681 }
682
683 public function createFromDirectory(string $a_dir): void
684 {
685 if ($a_dir === "" || !$this->checkPermissionBool("create", "", "htlm")) {
686 throw new ilPermissionException($this->lng->txt("no_create_permission"));
687 }
688
689 // create instance
690 $newObj = new ilObjFileBasedLM();
691 $filename = ilUtil::stripSlashes($_FILES["importfile"]["name"]);
692 $newObj->setTitle($filename);
693 $newObj->setDescription("");
694 $newObj->create();
695 $newObj->populateByDirectoy($a_dir, $filename);
696 $this->putObjectInTree($newObj);
697
698 $this->afterSave($newObj);
699 }
700
701
705
706 public function exportHTML(): void
707 {
709 $this->object->getId(),
710 "html",
711 $this->object->getType()
712 );
713 $export_dir = ilExport::_getExportDirectory(
714 $this->object->getId(),
715 "html",
716 $this->object->getType()
717 );
718
719 $subdir = $this->object->getType() . "_" . $this->object->getId();
720
721 $target_dir = $export_dir . "/" . $subdir;
722
723 ilFileUtils::delDir($target_dir);
724 ilFileUtils::makeDir($target_dir);
725
726 $source_dir = $this->object->getDataDirectory();
727
728 ilFileUtils::rCopy($source_dir, $target_dir);
729
730 // zip it all
731 $date = time();
732 $zip_file = $export_dir . "/" . $date . "__" . IL_INST_ID . "__" .
733 $this->object->getType() . "_" . $this->object->getId() . ".zip";
734 ilFileUtils::zip($target_dir, $zip_file);
735
736 ilFileUtils::delDir($target_dir);
737 }
738
739 public function redirectAfterCreation(): void
740 {
742 $ctrl->setParameterByClass("ilObjFileBasedLMGUI", "ref_id", $this->object->getRefId());
743 $ctrl->redirectByClass(["ilrepositorygui", "ilObjFileBasedLMGUI"], "properties");
744 }
745
746 public function learningProgress(): void
747 {
748 $this->ctrl->redirectByClass("illearningprogressgui", "");
749 }
750
751 public function redrawHeaderAction(): void
752 {
754 }
755
756 public function importFromUploadDir(): void
757 {
758 global $DIC;
759 if (!$this->checkPermissionBool("write", "", "htlm")) {
760 $main_tpl = $DIC->ui()->mainTemplate();
761
762 $main_tpl->setOnScreenMessage(
763 'failure',
764 sprintf(
765 $this->lng->txt("msg_no_perm_write"),
766 ),
767 true
768 );
770 }
771
772 $file = $this->lm_request->getString('form/input_0');
773 $path = $this->getUploadDirectory() . DIRECTORY_SEPARATOR . $file;
774 if ($file === '') {
775 $DIC->ui()->mainTemplate()->setOnScreenMessage(
776 'failure',
777 $this->lng->txt('import_from_upload_dir_info'),
778 true
779 );
780 } elseif (str_starts_with(realpath($path), $this->getUploadDirectory())) {
781 $this->irss->manageContainer()->addStreamToContainer(
782 $this->object->getResource()->getIdentification(),
783 Streams::ofResource(fopen($path, 'rb')),
784 $file
785 );
786 $DIC->ui()->mainTemplate()->setOnScreenMessage(
787 'success',
788 $this->lng->txt('file_imported_from_upload_dir'),
789 true
790 );
791 } else {
792 $DIC->ui()->mainTemplate()->setOnScreenMessage(
793 'failure',
794 $this->lng->txt('file_import_from_upload_dir_failed'),
795 true
796 );
797 }
798
799 $this->ctrl->setParameterByClass("ilObjFileBasedLMGUI", "ref_id", $this->object->getRefId());
800 $this->ctrl->redirectByClass(["ilrepositorygui", "ilObjFileBasedLMGUI", "ilContainerResourceGUI"]);
801 }
802
803 public function getUploadDirectory(): string
804 {
805 $lm_set = new ilSetting("lm");
806 $upload_dir = $lm_set->get("cont_upload_dir");
807
808 $import_file_factory = new ilImportDirectoryFactory();
809 try {
810 $import_directory = $import_file_factory->getInstanceForComponent(ilImportDirectoryFactory::TYPE_SAHS);
811 } catch (InvalidArgumentException $e) {
812 return '';
813 }
814 return $import_directory->getAbsolutePath();
815 }
816
817 public function getUploadFiles(): array
818 {
819 if (!$upload_dir = $this->getUploadDirectory()) {
820 return array();
821 }
822
823 // get the sorted content of the upload directory
824 $handle = opendir($upload_dir);
825 $files = array();
826 while (false !== ($file = readdir($handle))) {
827 $full_path = $upload_dir . "/" . $file;
828 if (is_file($full_path) and is_readable($full_path)) {
829 $files[] = $file;
830 }
831 }
832 closedir($handle);
833 sort($files);
834
835 return $files;
836 }
837
838}
$filename
Definition: buildRTE.php:78
Stream factory which enables the user to create streams without the knowledge of the concrete class.
Definition: Streams.php:32
error(string $a_errmsg)
This class represents a checkbox property in a property form.
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call
redirectByClass( $a_class, ?string $a_cmd=null, ?string $a_anchor=null, bool $is_async=false)
@inheritDoc
setParameterByClass(string $a_class, string $a_parameter, $a_value)
@inheritDoc
Export User Interface Class.
static _createExportDirectory(int $a_obj_id, string $a_export_type="xml", string $a_obj_type="")
static _getExportDirectory(int $a_obj_id, string $a_type="xml", string $a_obj_type="", string $a_entity="")
@depricated Get export directory for an repository object
static zip(string $a_dir, string $a_file, bool $compress_content=false)
static makeDir(string $a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
static delDir(string $a_dir, bool $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static rCopy(string $a_sdir, string $a_tdir, bool $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
This class represents a section header in a property form.
Help GUI class.
setScreenIdComponent(string $a_comp)
Class ilInfoScreenGUI.
static _updateStatus(int $a_obj_id, int $a_usr_id, ?object $a_obj=null, bool $a_percentage=false, bool $a_force_raise=false)
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
Class ilObjUserTrackingGUI.
static _tracProgress(int $a_user_id, int $a_obj_id, int $a_ref_id, string $a_obj_type='')
manifest.xml file not found-exception for import
This class represents a non editable value in a property form.
User Interface class for file based learning modules (HTML)
afterSave(ilObject $new_object)
Post (successful) object creation hook.
addLocatorItems()
should be overwritten to add object specific items (repository items are preloaded)
ILIAS ResourceStorage Services $irss
infoScreen()
this one is called from the info button in the repository
importFileObject(?int $parent_id=null)
__construct( $a_data, int $a_id=0, bool $a_call_by_reference=true, bool $a_prepare_output=true)
static _goto(string $a_target)
getTabs()
@abstract overwrite in derived GUI class of your object type
ILIAS HTMLLearningModule InternalGUIService $gui
StandardGUIRequest $lm_request
afterImport(ilObject $new_object)
Post (successful) object import hook.
File Based Learning Module (HTML) object.
Class ilObjectGUI Basic methods of all Output classes.
ilAccessHandler $access
static _gotoRepositoryRoot(bool $raise_error=false)
Goto repository root.
checkPermission(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
cancelObject()
cancel action and go back to previous page
checkPermissionBool(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
addHeaderAction()
Add header action menu.
putObjectInTree(ilObject $obj, ?int $parent_node_id=null)
Add object to tree at given position.
static _gotoRepositoryNode(int $ref_id, string $cmd="")
ilLocatorGUI $locator
prepareOutput(bool $show_sub_objects=true)
ilLanguage $lng
updateObject()
updates object entry in object_data
redrawHeaderActionObject()
Ajax call: redraw action header only.
Class ilObjectMetaDataGUI.
static updateServiceSettingsForm(int $obj_id, ilPropertyFormGUI $form, array $services)
static initServiceSettingsForm(int $obj_id, ilPropertyFormGUI $form, array $services)
Class ilObject Basic functions for all objects.
const TITLE_LENGTH
static _lookupObjId(int $ref_id)
static _lookupTitle(int $obj_id)
This class represents a property form user interface.
ILIAS Setting Class.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This class represents a text area property in a property form.
This class represents a text property in a property form.
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
static redirect(string $a_script)
static signFolderOfStartFile(string $start_file_path)
const IL_INST_ID
Definition: constants.php:40
const ANONYMOUS_USER_ID
Definition: constants.php:27
const ROOT_FOLDER_ID
Definition: constants.php:32
$info
Definition: entry_point.php:21
checkAccess(string $a_permission, string $a_cmd, int $a_ref_id, string $a_type="", ?int $a_obj_id=null, ?int $a_tree_id=null)
check access for an object (provide $a_type and $a_obj_id if available for better performance)
$path
Definition: ltiservices.php:30
static http()
Fetches the global http state from ILIAS.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
form(?array $class_path, string $cmd, string $submit_caption="")
global $DIC
Definition: shib_login.php:26
$lm_set