Update

Due to a short software update, docu.ilias.de will be unavailable from 14:45 CEST for approximately 10 minutes.

25. Internationale ILIAS-Konferenz

Feature Wiki

Information about planned and released features

Tabs

IRSS: General Overview of Components to Migrate (ongoing)

1 Initial Problem

The central file handling is to be reorganized with the introduction of the File Storage Service.  For more information, please check the related project page : [[[Project] ILIAS Resource Storage Service]]

2 Conceptual Summary

IRSS Storage Audit — Components Still Storing Files Outside the IRSS

Goal: map which ILIAS components still persist/read files by legacy means (ilFileSystemGUI, ilFileUtils/ilUtil, raw PHP fopen/file_put_contents/mkdir, or ILIAS\Filesystem used directly) instead of routing all binary content through the IRSS (ILIAS Resource Storage Service), which is meant to become the single storage entry point.

Scope: all 182 dirs under components/ILIAS/. Generated by a per-component grep signal matrix followed by a domain-grouped read of every component with a file-storage signal. Branch: trunk (ILIAS 12.0_alpha). Date: 2026-07-02.

⚠ Note: This report was AI-generated and may deviate from reality. Component classifications, verdicts, effort estimates and file:line references reflect an automated audit of the code at the time of writing and can contain errors, omissions or stale citations. Verify against the current source before acting on any finding.


How to read this

  • IRSS = target. Markers: resourceStorage(), ResourceStorage\, IRSSServices, ResourceBuilder, StorableResource, AbstractResourceStakeholder, a persisted rid column.
  • Legacy = anything else that touches disk for persistent domain content:
    1. ilFileSystemGUI (legacy file browser)
    2. ilFileUtils:: / ilUtil:: file helpers (makeDir, moveUploadedFile, getWebspaceDir, delDir, zip, …)
    3. raw PHP fs (fopen, fwrite, file_put_contents, move_uploaded_file, mkdir, copy, unlink, …)
    4. ILIAS\Filesystem service used directly ($DIC->filesystem()->web()/storage()/temp()) — note IRSS uses this service internally, so calling it directly is a bypass.

Architectural ground truth

IRSS never touches disk itself. ResourceStorage orchestrates; it injects a Filesystem $fs into its storage handlers (ResourceStorage/src/StorageHandler/FileSystemBased/AbstractFileSystemStorageHandler.php:54), which wraps league/flysystem's LocalFilesystemAdapter (Filesystem/src/Provider/FlySystem/FlySystemLocalFilesystemFactory.php:68). So Filesystem is the backend, ResourceStorage is IRSS, FileUpload is ingest, VirusScanner is a scan preprocessor, FileDelivery is egress, WebAccessChecker is legacy egress being retired. Everything else is a consumer.

Verdict legend

Verdict Meaning
MIGRATED Persistent domain files stored via IRSS. Remaining disk I/O is only transient (temp/zip/export).
PARTIAL Some persistent content on IRSS, some still on legacy disk.
LEGACY Persistent domain content stored on disk, no IRSS.
N/A No persistent file storage of its own (DB-backed, delegates to another component, or pure infra/temp).
INFRA Part of the storage stack itself (backend / ingest / egress / scan / setup).

Master table

Still to migrate — LEGACY (persistent content on disk, no IRSS)

Component What persists on disk (legacy) Mechanism ~sites Effort
Course course file attachments (info tab), member exports, info HTML ilFSStorageCourse / ilFileDataCourse (ilFileSystemAbstractionStorage) + raw fs ~20 high
ScormAicc SCORM/AICC package tree public/data/…/lm_data/lm_<id>, manifest base ilObjSAHSLearningModule::getDataDirectory + ilFileSystemGUI + raw fs ~30 high
Scorm2004 SCORM 2004 package (webspace), imsmanifest, per-user tracking logs on disk inherits SAHS dir + fopen/fwrite/file_put_contents; ilFileSystemGUI wired ~30 high
LearningModule lm_data/lm_<id> import/export/offline tree, subtitles ilFileUtils::makeDir/delDir/zip + fopen/fwrite ~25 medium
SurveyQuestionPool question images + material uploads (CLIENT_WEB_DIR/survey/…) ilFileUtils::moveUploadedFile + getImagePathWeb ~29 medium
Survey survey export/import dirs (svy_data), uploaded import files ilFileUtils dir tree + fopen ~24 medium
CmiXapi cmi5/xAPI content extracted into webspace object dir $DIC->filesystem()->web() direct + ilFileUtils ~10 medium
Verification certificate verification PDFs ilVerificationStorageFile extends ilFileSystemAbstractionStorage + file_put_contents/mkdir ~4 medium
Language .lang files in CLIENT_DATA_DIR/lang_data fopen/fwrite + ilFileUtils::makeDir ~9 medium
Container container header/custom icons webspace/container_data/obj_<id> ilFileUtils::getWebspaceDir/makeDir + Object custom-icon layer ~6 medium
DidacticTemplate template icons (user-uploaded SVG) in web dir ILIAS\Filesystem direct (webDirectory->write/copy) ~4 medium
LearningSequence LSO intro/extro images move_uploaded_fileSTORAGE_WEB ~2 medium
Saml SimpleSAMLphp config.php/authsources.php, IdP metadata XML, discovery file_put_contents + ILIAS\Filesystem direct (lib expects real paths) ~7 high
OpenIdConnect one login-page element image $DIC->filesystem()->web() direct ~4 low
LTIConsumer LTI provider icons (lti_data/provider_icon/) $DIC->filesystem()->web()->put direct ~9 low–med
Authentication apache-auth allowed-domains .txt file_put_contents/file_get_contents ~6 low
Chatroom chat-server config file only (not user content) fopen/fwrite + ilFileUtils::getDataDir ~4 low
Category category-import staging dir only ilFileUtils::getDataDir()."/cat_import" ~1 low
WebServices transient REST/ECS payloads (ilRestFileStorage small durable store) ilTempnam/fopen/fwrite ~13 low

PARTIAL (IRSS for the primary payload, legacy remnants)

Component On IRSS Still legacy ~sites Effort
Mail compose-time upload handler (bridge only) canonical attachment store on disk (ilFileDataMail/ilFSStorageMail), ZIP delivery, cron cleanup ~20 high
Export finished export artifact + registry (export_files table) + download + public-access → IRSS (export_handler stakeholder); one central pipeline, no runtime fallback (see appendix) zip assembly on a disk run-dir (then ingested), import extraction on data dir; per-component il<Comp>Exporter reused unchanged; ilImportDirectory uses Filesystem direct ~25 high
Test export / results / PDF-archive final zips assessment question images, tst_data dirs, participant answer dirs, ilTestArchiver builds tree on disk ~64 high
TestQuestionPool only assFileUpload answer files question image uploads across ~7 question classes, suggested solutions, qpl export dirs; even assFileUpload keeps legacy preview uploads ~122 high
Style content styles + content-style images (IRSS container) ilObjStyleSheet legacy /sty image+export dirs; whole system-style/skin subsystem on disk ~35 high
Certificate template files, template zips, bg/tile images portfolio certificate PDFs on $DIC->filesystem()->storage() direct; bulk-zip + upload helpers ~10 medium
User profile pictures (usr_data.rid), new-account-mail attachment user-list exports (CSV/XML/Excel), personal-data export ZIP, HTML export, legacy-avatar cleanup remnant ~18 medium
Badge badge + template images (image_rid) pub_badges/ public OpenBadges publishing tree, residual getImagePath() disk paths ~13 medium
StudyProgramme programme type icons object custom icon (Object service), member-export (ilFSStoragePRG) ~5 medium
DataCollection record file fields (rid) MOB field media (delegated), XLSX/content export temp ~7 low–med
OrgUnit type icons import XML reads, export zip ~5 low
Calendar appointment attachments (read from IRSS) temp/zip staging for download bundles, ICS import staging ~13 low
ILIASObject TileImage via IRSS stakeholder import upload + custom-icon staging on disk first ~6 medium
COPage (content is DB-native XML) HTML/offline export builder, TeX-render image cache in webspace/output, layout import scratch ~45 medium

MIGRATED (persistent content on IRSS; only transient disk left)

Component Notes
File (ilObjFile) versions/revisions + icons + previews all IRSS. Legacy only in XML import/export interchange, setup default-icon scan, transient chunked upload.
MediaObjects mob payload is an IRSS container (mob_data.rid) since ILIAS 10 (ilMobMigration); writes + reads route through the IRSS-backed manager/repo. Legacy tail: exportFiles() rCopy, multi-SRT staging, empty-dir createDirectory(), WAC disk fallback. See appendix.
Exercise submissions, tutor(team) feedback, instruction files, sample solutions, peer-review criteria all IRSS (+ setup migrations). Legacy = zip/download/temp only.
Forum post + draft attachments IRSS (ResourceCollection); old ilFileDataForum is now a delegating wrapper. Legacy = export dir plumbing.
HTMLLearningModule whole HTML package is an IRSS container zip (file_based_lm.rid) + ilHTLMMigration. Reference pattern for the SCORM family.
AdvancedMetaData record file-fields + record-XML exports IRSS (Record/File/). Legacy = import staging + one parse temp.
Bibliographic source .bib/.ris in IRSS. Minor direct-Filesystem copy + dataset export leftovers.
IndividualAssessment grading files IRSS; legacy ilIndividualAssessmentFileStorage marked @deprecated … only used for migration.
Poll poll images + thumbnails in IRSS with crop flavour + ilPollImagesMigration.
WOPI pure IRSS consumer (Collabora/OnlyOffice); stores nothing itself. Good reference.
WebDAV protocol layer; content flows through IRSS (IRSSStreamHandler). Legacy StreamHandler fallback remains.

N/A (no own persistent file storage)

Component Why
ContentPage, Glossary, Wiki, Blog, Portfolio content = COPage (DB); media = MediaObjects (IRSS); only transient exports touch disk
MediaCast, MediaPool delegate all media to MediaObjects (IRSS); only transient download/import zips
News media delegated to MediaObjects (IRSS); no direct fs
Contact, Notes, OnScreenChat DB-backed; no file content
PersonalWorkspace, WorkspaceFolder wrap ilObjFile; only temp export assembly
WebResource web links in DB; only on-the-fly bookmarks.html
soap protocol/adapter layer (+ third-party nuSOAP)
Repository provides the Repository-level IRSS facade (IRSSWrapper)
Group, Excel, Form, RTE export/temp staging, framework upload plumbing, editor config
BackgroundTasks_, Database, Logging, Html, Xml, Init, GlobalScreen, Search, Refinery, UI, UICore, UIComponent infra/temp/cache/asset/read-only
Migration DB-update helper, never touches fs

INFRA (the storage stack itself)

Component Role
ResourceStorage IS IRSS
Filesystem IRSS backend (flysystem local adapter); still also ships legacy ilFileSystemGUI, ilFileData, ilUploadFiles
FileUpload upload ingest → UploadResult consumed by IRSS
VirusScanner upload PreProcessor (scan scratch only)
FileDelivery egress; new src is stream/IRSS-aligned, legacy FileDeliveryTypes remain (PARTIAL)
WebAccessChecker legacy secure /data egress, being retired as IRSS makes it obsolete
FileServices hosts the legacy ilFileUtils toolbox (classes/class.ilFileUtils.php) used repo-wide + IRSS upload/policy/sanitizer services
Setup provisions & validates the on-disk directory layout

Shared legacy substrates (fix once, many benefit)

These non-IRSS storage layers are leaned on by multiple components — migrating them unblocks several:

  1. ilFileSystemAbstractionStorage — object-id-keyed on-disk tree. Used by: Course (ilFSStorageCourse), StudyProgramme (ilFSStoragePRG), Verification (ilVerificationStorageFile), Mail (ilFSStorageMail), Group (ilFSStorageGroup).
  2. Object custom-icon layer (webspace/container_data/obj_<id>, object.customicons.factory). Used by: Container, Category, StudyProgramme (object icon).
  3. ilFileUtils toolbox (FileServices/classes/class.ilFileUtils.php) — every ilFileUtils:: call in every component resolves here. It is infrastructure, not a per-component store, but retiring it is the endgame.
  4. Export/Import zip build/extract on data dir (ilExport/ilExportContainer/ilImport/ilImportDirectory) — core infra; the disk-based assembly step sits under many components' export features.

Already covered: MediaObjects payload (mobs/mm_<id>) lives in IRSS since ILIAS 10, so the media of Glossary / Wiki / Blog / Portfolio / News / MediaCast / MediaPool already sits in IRSS. Those components only need residual _getDirectory / _getURL call-site cleanup, not a data migration.


Suggested migration priority

Tier 1 — real user content, high value, self-contained-ish - Mail attachments (deeply disk-coupled, but pure user content) - Course attachments - SCORM family (ScormAicc/Scorm2004/CmiXapi) — follow the HTMLLearningModule IRSS-container pattern (migration already scaffolded on branch feature/12/scorm-irss)

Tier 2 — clean, bounded, low effort (good "Poll-style" stakeholder migrations) - OpenIdConnect login image - LTIConsumer provider icons - Verification cert PDFs - LearningSequence intro/extro images - DidacticTemplate icons - Badge pub_badges/

Tier 3 — finish the PARTIALs - TestQuestionPool / Test question images + archiver (largest surface, ~186 sites combined) - Style ilObjStyleSheet legacy path - Certificate portfolio PDF · User exports - StudyProgramme / OrgUnit object icons + member export

Tier 4 — shared substrates & infra - Retire ilFileSystemAbstractionStorage, the Object custom-icon layer, and eventually the ilFileUtils toolbox; stream-ify Export/Import zip handling; drop WebAccessChecker and legacy FileDeliveryTypes.

Not IRSS targets (leave as-is): Saml (bundled lib needs real paths), Language files, Chatroom server config, Authentication domains file, setup probes, DB dumps, logs, caches, and all transient export/zip/temp scaffolding.


Appendix: MediaObjects — detailed IRSS state

MediaObjects payload is stored in IRSS, migrated in the ILIAS 10 cycle (components/ILIAS/MediaObjects/classes/Setup/class.ilMobMigration.php, commit 2d78e5a9628, 2024-10-23, registered in class.ilMediaObjectSetupAgent.php). The mobs/mm_ dir API remains in the code but is no longer the store of record.

What the migration does

  • ilMobMigration::step() moves CLIENT_WEB_DIR/mobs/mm_<id> into an IRSS container resource via ilResourceStorageMigrationHelper::moveDirectoryToContainerResource(), persists the rid in mob_data.rid, then deletes the source dir (recursiveRmDir). Empty/absent dirs get rid = '-'.

Runtime is IRSS-first

  • Writes — every ingest path routes to the IRSS-backed manager/repo: addMediaItemFromUpload/FromLocalFile/FromLegacyUpload, replaceMediaItemFromUpload, uploadAdditionalFileMediaObjectManager::addFile*MediaObjectRepository (IRSS container).
  • ReadsMediaObjectManager::getLocalSrc()repo->getLocalSrc()irss->getContainerUri($rid, $location) (MediaObjectRepository.php:186). Falls back to a WAC-signed legacy _getURL() path only when the container returns nothing (un-migrated / offline).
  • ilObjMediaObject::getXML() IL_MODE_OUTPUT is dual-mode: the // pre irss file branch (class.ilObjMediaObject.php:522-536) uses ilWACSignedPath::signFile() on the legacy disk file only if it still exists, otherwise manager->getLocalSrc() (IRSS). Correct back-compat, not a leak.

Residual legacy call-sites (cleanup, ~6)

Site path:line Note
exportFiles() class.ilObjMediaObject.php:736-737 rCopy from mobs/mm_<id>. The central XML export no longer uses it (mob DataSet emits an rscontainer field, streamed IRSS→IRSS), but it is still called by other components' standalone exporters (Test ExportImport/Export.php:253,262, Forum ilForumXMLWriter.php:204, Survey ilSurveyExport.php:123,131, LearningModule ilObjContentObject.php:1457,1472, TestQuestionPool ilQuestionpoolExport.php:180). After ilMobMigration deletes mobs/mm_<id>, those rCopy from a missing source → embedded media silently dropped. Latent cross-component gap.
multi-SRT upload getMultiSrtUploadDir():1735, uploadMultipleSubtitleFile():1751-1755, getMultiSrtFiles():1775 stages + unzips the multi-VTT zip inside mobs/mm_<id>/srt/tmp on disk, then reads it back — bypasses IRSS
createDirectory() :433-440, called at :1323 + ilMediaCreationGUI.php:414/604 + ilObjMediaPoolGUI.php:1493 creates an empty legacy dir; content is written via the IRSS manager, so the dir/$mob_dir/$file locals (:1324-1326) are vestigial
getVideoPreviewPic(true) :1695-1711 filename-only lookup still is_file()-probes the legacy dir; primary getVideoPreviewPic() uses thumbs->getPreviewSrc() (IRSS)
static path helpers _getDirectory():378, _getRelativeDirectory():387, _getURL():395, _lookupItemPath():404, getDataDirectory():1301 still return mobs/mm_<id> strings; kept for the fallback + the sites above

Downstream delegators

Glossary / Wiki / Blog / Portfolio / News / MediaCast / MediaPool store their media as media objects, so that content lives in IRSS. Their remaining _getDirectory / _getURL references (e.g. Blog/Posting/class.ilBlogPostingGUI.php:788,806, News/classes/class.ilNewsItem.php:1820, MediaCast/classes/class.ilObjMediaCastAccess.php:154 dirsize, MediaPool/classes/class.ilObjMediaPoolGUI.php:1493 createDirectory) hit the fallback/vestigial path — call-site cleanup, not a data migration.

Net state: MediaObjects payload is on IRSS since ILIAS 10; the only functional gap is exportFiles() + multi-SRT staging still touching the now-removed webspace dir.


Appendix: Export component — detailed IRSS state

On IRSS: the finished export artifact (the completed zip) plus its registry, download and public-access live in IRSS as a container resource owned by the export_handler stakeholder (ExportHandler/Repository/Stakeholder/Handler.php:37), created via manageContainer()->containerFromStream() (ExportHandler/Repository/Wrapper/IRSS/Handler.php:62) and served with consume()->download() (ExportHandler/Repository/Element/Wrapper/IRSS/Handler.php:202-209). The old disk-scanned export_file_info registry was replaced by table export_files(object_id, rid, owner_id, timestamp); a one-off migration ingests each existing on-disk zip into IRSS (Setup/…/ilExportFilesToIRSSMigration.php:97-125, registered Setup/ilExportSetupAgent.php:51).

Still on disk: the zip is assembled on a data-dir "export run dir" first, then streamed into the IRSS container and deleted (ExportHandler/Manager/Handler.php:180-204: makeDirParents → exporters write in → writeDirectoryRecursivedelDir). Even createEmptyContainer builds a temp zip on disk before ingest (Repository/Wrapper/IRSS/Handler.php:52-64). Import extraction is still fully on the data dir (ilImport/ilImportDirectory, the latter injecting ILIAS\Filesystem directly).

One central pipeline, no fallback. ilExportGUI always delegates to the IRSS ExportHandlerclass.ilExportGUI.php:285-286 (createXMLExport) and :333-356 (createXMLContainerExport). There is no runtime if(legacy) … else … branch and no feature flag. The legacy ilExport::exportObject()/exportEntity() survive only for a few direct non-GUI callers: Style (class.ilObjStyleSheetGUI.php:414), COPage layout admin (class.ilPageLayoutAdministrationGUI.php:371), LearningModule entity export (class.ilContObjectExport.php:175).

Per-component exporters are reused, not rewritten. Both the new and legacy paths resolve the same il<Component>Exporter (ilXmlExporter subclass) via ilImportExportFactory::getExporterClass (class.ilImportExportFactory.php:29-65; new path at ExportHandler/Manager/Handler.php:73) and call getXmlRepresentation() + head/tail dependency recursion. Binary payloads are emitted by ilDataSet as typed fields (Export/DataSet/class.ilDataSet.php:307-348): - rscollection / rscontainer → copied IRSS-container-to-IRSS-container, no disk (Consumer/ExportWriter/Handler.php:161-165). This is how migrated components (e.g. MediaObjects, File, Forum) export their binaries. - legacy directory / exportFiles() output → still written into the disk run-dir, then ingested.

Standalone exports (plugged into ilExportGUI as export options but managing their own files, mostly disk via ExportHandler/Consumer/ExportOption/BasicLegacyHandler.php:56,87 + deliverFileLegacy, or fully independent): HTML exports (ilCOPageHTMLExport, ilWikiUserHTMLExport, ilSystemStyleHTMLExport, ilHTLMExportOptionHTML), Test (ilTestExportOptionARC, ilTestExportOptionXMLRES), DataCollection (ilDataCollectionExportOptionsXLSX), member exports (StudyProgramme, Membership).

Cross-component gap: ilObjMediaObject::exportFiles() still rCopys from the deleted mobs/mm_<id> dir and is called by the standalone/on-disk exporters of Test, Forum, Survey, LearningModule and TestQuestionPool — so embedded media in those exports can be silently dropped after the mob migration. The central pipeline is unaffected (it uses the rscontainer field).


Migration history by release

When each component's IRSS storage first shipped. Resolved by finding the commit that introduced the component's earliest IRSS anchor (a *Stakeholder class or a Setup IRSS migration) — following file renames across the pre-ILIAS-10 Modules/+Services/components/ILIAS/ restructure via git log --follow -S "class <Name>" — then mapping that commit to the earliest release tag that contains it (git tag --contains … | grep '^v(7|8|9|1[0-9])\.[0-9]+$' | sort -V | head -1; the N>=7 filter drops a spurious v3.8 SVN-import tag). The release is authoritative (via tag --contains); the date is the commit's author date, which routinely precedes the release by 1–2 years because features land on trunk long before the release is cut. For components with several stakeholders across releases, this is the earliest one; PARTIAL components added further pieces later and still carry legacy remnants (see the tables above).

IRSS launched in ILIAS 7 with ilObjFile as the pilot, then spread release by release.

ILIAS 7 (v7.0, ~2021)

Component Migrated content Anchor Commit
File file object versions/revisions class.ilObjFileStakeholder.php ("Implemented File Object Migration") 2020-11-12

ILIAS 8 (v8.1, ~2023)

Component Migrated content Anchor Commit
Bibliographic source .bib/.ris file class.ilObjBibliographicStakeholder.php 2021-07-28
IndividualAssessment grading files class.ilIndiviualAssessmentGradingStakeholder.php 2022-01-04

ILIAS 9 (v9.0, ~2024)

Component Migrated content Anchor Commit
Forum post + draft attachments class.ilForumPostingFileStakeholder.php 2022-09-14
User profile pictures / avatars class.ilUserProfilePictureStakeholder.php 2023-02-28
DataCollection record file fields class.ilDataCollectionStorageMigration.php 2023-03-18
Exercise submissions, feedback, instructions, solutions, criteria class.ilExcInstructionFilesStakeholder.php 2023-08-29
TestQuestionPool assFileUpload answer files class.ilTestQuestionPoolFileUploadQuestionMigration.php 2023-10-06

ILIAS 10 (v10.0, ~2025)

Component Migrated content Anchor Commit
StudyProgramme programme type icons ilStudyProgrammeTypeStakeholder.php 2023-11-24
OrgUnit type icons ilOrgUnitTypeStakeholder.php 2023-11-28
Calendar appointment attachments (consumer — reads IRSS) class.ilCalendarCopyFilesToTempDirectoryJob.php 2023-12-14
WOPI edited office documents WOPIStakeholder 2024-05-02
HTMLLearningModule HTML package container class.ilHTLMMigration.php 2024-09-13
Style content styles + images class.ilContentStyleStakeholder.php 2024-10-22
Poll poll images class.ilPollImagesMigration.php 2024-10-22
MediaObjects mob payload → IRSS container class.ilMobMigration.php 2024-10-23
AdvancedMetaData record file-fields + record-XML Record/File/.../Stakeholder, RecordFilesMigration.php 2024-10-24
Certificate template files + background/tile images ilCertificateTemplateStakeholder.php 2024-10-24
Badge badge + template images ilBadgeTemplatesFilesMigration.php 2024-10-25

ILIAS 11 (v11.0, ~2026)

Component Migrated content Anchor Commit
Export export HTML + finished artifact/registry class.ilExportHTMLStakeholder.php, ilExportFilesToIRSSMigration.php 2025-01-07
Test results / export / PDF-archive artifacts ResultsExportStakeholder.php 2025-03-22
ILIASObject TileImage Properties/CoreProperties/TileImage/Stakeholder.php 2025-03-25
Mail compose-time attachment upload (bridge) class.ilMailAttachmentStakeholder.php 2025-06-16

trunk (unreleased — ILIAS 12)

Component Migrated content Anchor Commit
WebDAV routes object content through IRSS (consumer) src/Objects/IRSSStreamHandler.php 2026-05-01

Not yet migrated (no release): every component in the LEGACY table above (Course, ScormAicc, Scorm2004, LearningModule, Survey, SurveyQuestionPool, CmiXapi, Verification, Language, Container, DidacticTemplate, LearningSequence, Saml, OpenIdConnect, LTIConsumer, Authentication, Chatroom, Category, WebServices) has no IRSS migration.

 

This list shows all the directories that are currently available on a test installation, for example, and gives a realistic picture of what may still need to be migrated. However, many directories are only used for exports, and these can all be migrated. Other types still have to wait, e.g. structured files, as the basis for this will only be implemented with ILIAS 9 (presumably). 

Main-Directory

Directory

Main-Type of Files

Status ILIAS 9

iliasdata

HTMLPurifier

Unknown

iliasdata

PersistentCertificates

Single Files

iliasdata

assessment

Unknown

iliasdata

auth

Unknown

iliasdata

bibl

Single Files

Migrated

iliasdata

bibl_data

Single Files

Migrated

iliasdata

blog_data

Export

iliasdata

chat

Unknown

was dropped

iliasdata

chatroom

Unknown

was dropped

iliasdata

chtr_data

Export

iliasdata

cmix_data

Export

iliasdata

copa_data

Export

iliasdata

course

Export

iliasdata

dcl_data

Export

iliasdata

embedchat

Unknown

iliasdata

exercise

Unknown

iliasdata

feed_data

iliasdata

files

Unknown

iliasdata

fold_data

Export

iliasdata

forum

Unknown

iliasdata

glo_data

Export

iliasdata

group

Unknown

iliasdata

grp_data

Export

iliasdata

htlm_data

Export

iliasdata

iass_data

Export

iliasdata

ilAdvancedMetaData

Unknown

iliasdata

ilCategory

Export

iliasdata

ilCategoryReference

Export

iliasdata

ilCourse

Export

iliasdata

ilCourseReference

Export

iliasdata

ilExercise

Single Files

Partly migrated

iliasdata

ilFile

Single Files

Migrated

iliasdata

ilForum

Single Files

Partly migrated

iliasdata

ilGroup

Unknown

iliasdata

ilRestFileStorage

Unknown

iliasdata

ilSession

Unknown

iliasdata

ilUser

Export

iliasdata

ilUser_personal_data

Unknown

iliasdata

ilVerification

Unknown

iliasdata

import

Unknown

iliasdata

itgr_data

Unknown

iliasdata

lang_data

Unknown

iliasdata

lm_data

Export

iliasdata

lso_data

Export

iliasdata

magpie_cache

Unknown

iliasdata

mail

Single Files

iliasdata

map_workfiles

Unknown

iliasdata

mcst_data

Export

iliasdata

mep_data

Export

iliasdata

orgu_data

Export

iliasdata

poll_data

Export

iliasdata

prtf_data

Export

iliasdata

prtt_data

Export

iliasdata

qpl_data

Export

iliasdata

role_data

Export

iliasdata

sahs_data

Export

iliasdata

scorm-import

Unknown

iliasdata

skmg_data

Unknown

iliasdata

spl_data

Export

iliasdata

sty

Unknown

iliasdata

sty_data

Unknown

iliasdata

svy_data

Export

iliasdata

tst_data

Export

iliasdata

upload

Unknown

iliasdata

user_import

Unknown

iliasdata

usrf_data

Export

iliasdata

webr_data

Export

iliasdata

wfe

Unknown

iliasdata

wiki_data

Export

iliasdata

xtst_data

Plugin Files

data

IASS

Single Files

data

LSO

Single Files

data

assessment

Unknown

data

certificates

Structured-Files

data

chat

Unknown

data

chatroom

Unknown

data

container_data

Single Files

data

course

Unknown

data

courses

Unknown

data

css

Unknown

data

custom_icons

Single Files

data

draw

Unknown

data

exercise

Unknown

data

ilBookingManager

Unknown

data

ilDidacticTemplateIcons

Single Files

data

ilExercise

Single Files

data

lm_data

Structured-Files

data

lti_data

Unknown

data

mobs

Structured-Files

data

obj_data

Unknown

data

openidconnect

Unknown

data

orgu_data

Unknown

data

previews

Single Files

Migrated

data

prg

Unknown

data

prg_data

Unknown

data

pub_badges

Single Files

data

scorm

Structured-Files

data

sec

data

sec/ilBadge

Single Files

data

sec/ilBlog

Unknown

data

sec/ilIndividualAssessment

Unknown

data

sec/ilPoll

Single Files

data

sec/ilPortfolio

Unknown

data

shop

Unknown

data

srv

Unknown

data

sty

Unknown

data

sty_*

Unknown

data

thumbs

Unknown

data

usr_images

Single Files

Migrated

data

xnob

Plugin Files

data

xqcas

Plugin Files

This feature request is used to get the agreement to modify all affected components in release 7. Further feature requests are required. Please note the following overview of the affected components.

Currently (at least) the following modules use ilObjFile and must be modified to use the new file storage service:

Modules that use the page editor must also be modified:

  • Wiki
  • Blog
  • Content Page
  • Learning module
  • DataCollection
  • Containers (Course, Folder, category, group, item group)
  • Glossary
  • Media pool
  • Portolio
  • SCORM
  • Test
  • Authentification

There are also many components that manage the files themselves and store them in the file system. They have to be modified as well. Basically all components that internally use \ilUtil::moveUploadedFile() are also affected.

3 User Interface Modifications

3.1 List of Affected Views

none

3.2 User Interface Details

none

3.3 New User Interface Concepts

none

4 Technical Information

in a first step the file object itself is modified, see: IRSS: Migrate File-Object-Files to IRSS
in this step a wrapper is also built to keep the above components working.
these components should rebuild internally and use the File Storage Service directly

5 Privacy Information

see IRSS: Migrate File-Object-Files to IRSS

6 Security Implications

see IRSS: Migrate File-Object-Files to IRSS

7 Contact

8 Funding

If you are interest in funding this feature, please add your name and institution to this list.

9 Discussion

JourFixe, ILIAS [jourfixe], 11 MAY 2020 : We highly appreciate this suggestion and schedule the feature for ILIAS 7. We will try to implement this new service for as many components as possible for ILIAS 7 and complete the project with ILIAS 8. This feature request covers the implementation also for components that are not listed above. We ask all maintainer to list their components that have already implemented the file storage service (in chap. Implementation).

Schmid, Fabian [fschmid] Implementd for File-Object in ILIAS 7, see IRSS: Migrate File-Object-Files to IRSS

10 Implementation

Please see the linked per-component requests above.

Please read the following text concerning Umlauts in different components (which came up in Mantis Ticket 29510):

With ILIAS 7 the ResourceStorageService was implemented, which now - from the components that use it - handles the storage of files and their metadata and takes care e.g. of special characters such as german umlauts. That means, on the hard disk no more files with original names are created, but only a resource and the metadata, like also the file name, are exclusively in the database, which can handle special characters very well. This means that the base now provides all the tools to be able to fix the special character problem. In principle, this works in such a way that ILIAS objects can e.g. submit uploads in the storage service and do not have to remember e.g. metadata such as the file name themselves. In the case of the File object in the magazine, this is now the case. For historical reasons, the File object is not only used for the magazine object "File", but other modules also use the File object in the background to store files, including the following modules:
  • Datacollection
  • Mediaobject
  • Forum
  • Glossary
  • LM
  • Mediacast
  • Mediapool
With ILIAS 7 we have adapted the FileObject in such a way that it behaves towards the outside - i.e. towards the other modules - as possible as before, but internally it does the storage via Resource-Storage-Service. More or less the only thing that the FileObject still stores itself is the title of the object (which does not have to be the same as the file name). You can see this e.g. in the versions tab, there are the filenames of the uploaded files, the object itself can have a completely different name.
Now it depends in the modules, which use the file object internally, whether they store the file name themselves, or whether they set the file name to the file object as a title or just use the information of the respective uploaded file, when it comes to displaying or downloading the file again. Let's assume that the DataCollection receives an upload, stores it as a File-Object and sets the title of the file from Bär.jpg to Baer.jpg and every time the file is downloaded, the DataCollection again takes the title (i.e. Baer.jpg) as the name for downloading, then the DataCollection has to adapt this.
In the medium term, the modules should no longer use the File object to store files, but instead use the Resource Storage service directly. But this needs adaptations to each of these modules, which we are now tackling for ILIAS 8 piece by piece. Then each module can implement this in such a way that, for example, the file name is not set as a title and special characters are replaced, but the module can confidently simply give the upload to the resource storage service and no longer worry about such things. I took the DataCollection as an example earlier, because that's exactly what we're tackling as the first object to come into the JF over the next few weeks. And after that all other objects that currently still use the File object in the background. For the developers of the respective modules it becomes much simpler after the reorganization and a coupling to the file object is thereby also gone, which gives the file object again more clearance, in order to develop itself - with features - further.
But there is still one point to consider. Even if all modules are adapted and use the service and thus actually have the correct file name available when the file is to be downloaded or displayed, there are still cases in which the file name of a downloaded file does not correspond to the original: When delivering file names, ASCII should be used in each case according to RFC https://tools.ietf.org/html/rfc2183#section-2.3, i.e. ILIAS should convert characters in the file name to ASCII and replace unknown (special) characters with "_".

Last edited: 2. Jul 2026, 13:17, Schmid, Fabian [fschmid]