Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
339 commits
Select commit Hold shift + click to select a range
c0e0106
[LSO] Streamlining of Permission Handling (remove JOIN/LEAVE, migrat…
kevenClausenKPG Jul 16, 2026
31b6c30
[Survey] Preselected language handling (#11764)
abrahammordev Jul 17, 2026
ac9c456
[FIX] Consolidate Setup and setup_
chfsx Jul 17, 2026
a66db21
[FEATURE] UI: add `Column\Listing` component
kergomard Jul 7, 2026
6679ec5
[FIX] Style: compile `templates/default/delos.css`
thibsy Jul 17, 2026
5442a9b
Test: Create PRIVACY.md
slowe47 Jul 20, 2026
5a0c7d2
TestQuestionPool: Update PRIVACY.md
slowe47 Jul 20, 2026
4144e95
BookingPool: Redirect to Post-Booking Information
matheuszych Jul 3, 2026
1390977
MetaData: accept imports without title, set placeholder title on md t…
schmitz-ilias Jul 20, 2026
6423671
[FIX] Survey: Correct mean calculation (#11773)
abrahammordev Jul 20, 2026
c77554d
User: Fix Feed Hash Null Error
aaronbidzan Dec 15, 2025
72626bc
[REFACTOR] Move master.ini templates and their reader to Init component
chfsx Jul 17, 2026
6ff1b17
[Language] update: T&A spanish language variables (#11778)
abrahammordev Jul 20, 2026
9968eaa
WebLink: truncate too long list title before writing to db (47980)
schmitz-ilias Jul 20, 2026
0f04fd9
Membership: remove unused code (47970)
schmitz-ilias Jul 20, 2026
48696e6
[REFACTOR] Move ilias3.sql database template to Database component
chfsx Jul 17, 2026
2d04678
ECS: Restore HTTP protocol option in GUI
iljalukin Feb 12, 2026
4f12cff
Create PRIVACY.md for COPage
selyesa Jul 20, 2026
dc19ab1
Calendar: fix mismatched type (48096)
schmitz-ilias Jul 20, 2026
24da053
[Survey] fix: Questions parameters nullable (#11791)
abrahammordev Jul 21, 2026
f7bdba7
[Survey] fix: Get maximum directly (#11796)
abrahammordev Jul 21, 2026
6c76d50
[Survey] fix: Access to appraisee ID (#11803)
abrahammordev Jul 22, 2026
bb73acc
[Survey] fix: Handle non auth access to Survey (#11806)
abrahammordev Jul 22, 2026
4f39560
fix: preserve blocked status of course members in updateCourse SOAP c…
sKarki999 Jul 22, 2026
769d42f
47954: Notes: Edit form for private notes accessible by all users
alex40724 Jun 26, 2026
327fc7f
Course: Transform participant selection string
mjansenDatabay May 26, 2026
cb10580
Object: Do Not Show Debug Info on Import Failure
kergomard Jun 17, 2026
41840d6
Fix 0047887: SOAP IDOR by enforcing session-user read access in ilSoa…
sKarki999 Jun 10, 2026
820be2a
Enable LOM metadata support for Learning Sequences (#11675)
kevenClausenKPG Jul 27, 2026
1b54123
News: Sort Timeline Items Newest First
matheuszych Jul 9, 2026
c59e2e0
User: Fix Redirect in Security
kergomard Jul 27, 2026
c76fdba
Course: fix member view
schmitz-ilias Jul 27, 2026
2a0d208
[FIX] User: Preserve SAML UDF attribute mappings when migrating field…
mjansenDatabay Jul 27, 2026
6b3debd
User: Drop Temp Table for UDF Updates
kergomard Jul 28, 2026
5c75bf3
ILIASObject: consistently use long description on object creation so …
schmitz-ilias Jul 22, 2026
5d0ce63
Object: Add Default Value for Info-Tab visibility
kergomard Jul 28, 2026
a2ac8fd
User: skip broken users in gallery
schmitz-ilias Jul 28, 2026
d6138c3
Form: Hidden Tag Needs String
kergomard Jul 28, 2026
a6d70b8
[Docs] Rewrite and expand supported versions policy (#11740)
mjansenDatabay Jul 28, 2026
674a07b
[FIX] 48047: Änderungen im Content Style wirken sich nicht aus
chfsx Jul 28, 2026
2fcbcd0
Document SOAP interface access restrictions
andreschweigert Jul 22, 2026
7557347
copage: added maintenance json example
alex40724 Jul 28, 2026
4446240
Merge branch 'trunk' of https://github.com/ILIAS-eLearning/ILIAS into…
alex40724 Jul 28, 2026
48d0742
copage: fixed example
alex40724 Jul 28, 2026
3eba616
picked 11 installation changes to trunk for further revision
rfalkenstein Jul 28, 2026
1b25bbe
added all changes from trunk/r12 to the pick from release_11
rfalkenstein Jul 28, 2026
afde68d
changed github handle for maintenance.md
rfalkenstein Jul 13, 2026
d7ee163
Fixed Mantis #0048133: -glo_remove_glossary- // Missing translation
matthiaskunkel Jul 29, 2026
e3305c5
Object: Redirect on (De)Activation of Translations
kergomard Jul 29, 2026
ea453a6
Object: Remove Unneeded Includes in Translations
kergomard Jul 29, 2026
0bab03d
Object: Fix Ordering of Translations
kergomard Jul 29, 2026
9724606
Test: Remove Usage of DIC
kergomard Jul 29, 2026
0f8cf62
Test: Fix Feedback in Cloze
kergomard Jul 29, 2026
6c98630
Test: Fix Display of SpecialChars in Essay
kergomard Jul 29, 2026
0dd9998
Object: There Might be no Default Translation
kergomard Jul 29, 2026
216d86f
Update link to the coding guidelines.
fwolf-ilias Jul 29, 2026
e0afe45
Chat/ContentPage/Imprint: Fix links in PRIVACY.md references
mjansenDatabay Jul 20, 2026
4a5b278
Merge remote-tracking branch 'origin/trunk' into trunk
mjansenDatabay Jul 30, 2026
aa38cf1
Test: Fix Import on Missing User
kergomard Jul 30, 2026
fb701b0
[Survey] update: Change survey assignee for issues (#11837)
abrahammordev Jul 30, 2026
a7d20b8
Logging: refactor component, abandon browser log, cache, memory usage…
schmitz-ilias Jun 5, 2026
9519acd
fix tests
schmitz-ilias Jul 30, 2026
6e5c266
Test: Step-Size for Manual Scoring Should Be <1
kergomard Jul 30, 2026
ab70d88
Logging: appease tests which depend on the dependencies of ilLoggerFa…
schmitz-ilias Jul 30, 2026
edd4994
Test: Fix Name For Imported Users in Results
kergomard Jul 30, 2026
a188562
Test: Fix Recalculation of Points
kergomard Jul 30, 2026
b9fe77c
Logging: fix type error
schmitz-ilias Jul 30, 2026
effd7c2
Various small editorial changes to English and German language files
Chris-Squirrel Aug 3, 2026
0de5edd
[Survey] fix: Check participation after period (#11844)
abrahammordev Aug 3, 2026
940762b
Logging: fix type error during setup (48150)
schmitz-ilias Aug 3, 2026
b9be556
[Survey] fix: Delete option verification within routings (#11847)
abrahammordev Aug 3, 2026
2582ae5
Logging: properly clean up stack trace
schmitz-ilias Aug 3, 2026
75efbbc
copage: array key fix
alex40724 Aug 3, 2026
a15bdb2
copage: prevent ctrl issues in copy process
alex40724 Aug 3, 2026
d64802c
Container: remove objectives-settings info blocks in course content
schmitz-ilias Aug 3, 2026
34fdc23
47866: Page Editor: Text: List format options expand to the left and …
alex40724 Aug 3, 2026
eb4365f
47929: Error Allowed memory size exhausted when downloading large fil…
alex40724 Aug 3, 2026
de56a25
47835: Using an & in a tilte of a Content-Style Class prevents page r…
alex40724 Aug 3, 2026
c364175
Additional code authority for kiosk mode, language, learning sequence…
c-knof Jul 29, 2026
8af32b1
Changed entry in maintenance.md to the format: [github-handle](url-to…
dkippKPG Jul 31, 2026
bf4a2d8
IRSS: Change il_resource_flavour.variant to length 638
lscharmer Jul 15, 2026
2c6425c
Update how-to-write-a-privacy.md
selyesa Jul 17, 2026
1302aa5
Update how-to-write-a-privacy.md
selyesa Jul 30, 2026
b65df6f
[FEATURE] Component: add bootstrap migration guideline (#11420)
thibsy Aug 4, 2026
0bf78ba
47920: Error Opening and ending tag mismatch when editing text blocks…
alex40724 Aug 4, 2026
f19fb02
[FIX] #47810 UI: update `Table\Ordering` async modal (#11577)
matheuszych Aug 4, 2026
3d7068b
48126: Page editor whoopses on trying to save paragraph with just an …
alex40724 Aug 4, 2026
a611d6c
learning module: 48061: Ausgeschnittene Kapitel und Seiten lassen sic…
alex40724 Aug 4, 2026
bdf1356
[FIX] #45665 UI: `Table\Ordering` submission on enter (#10832)
lukas-heinrich Aug 5, 2026
d94726f
[FEATURE] UI: add new `Symbol\Glyph` variations.
thibsy Feb 16, 2026
f6f369b
[FIX] #47745 UI: stop `Dropdown` close on 'Enter' (#11517)
mjansenDatabay Aug 5, 2026
502d13c
Create PRIVACY.md
selyesa Jul 7, 2026
f3b1d79
[Improvement] Badge: Privacy.md
fhelfer Jul 17, 2026
792f89b
Update PRIVACY.md for Badge
selyesa Aug 5, 2026
4c51ed6
[FIX] Database: replace deprecated `PDO::ATTR_USE_BUFFERED_QUERY`
thibsy Aug 5, 2026
aed700b
[FIX] #46107 UI: update `MainControls\Footer` section sizes (#10372)
thibsy Aug 5, 2026
18309f4
[FIX] Style: recompile delos stylesheet
thibsy Aug 5, 2026
000d4e8
Create PRIVACY.md Locator
selyesa Aug 5, 2026
06ef37e
Test: Fix Tab Activation in ErrorText
kergomard Aug 6, 2026
935838b
Test: Fix Display of ErrorText with Errors
kergomard Aug 6, 2026
5d22e06
LearningSequence: Fixes for UserFields
kergomard Aug 5, 2026
9e07134
Test: Remove Unnecessary Setting of Active Tab
kergomard Aug 6, 2026
29af104
Gendermainstreaming of German language variables in Individual Assess…
matthiaskunkel Aug 7, 2026
866e880
Ongoing gendermainstreaming of German language file for Exercise
matthiaskunkel Aug 7, 2026
35a379a
Added missing module ID
matthiaskunkel Aug 7, 2026
c056518
Fixed Mantis #35585: Change Language files for Taxonomies in categories
matthiaskunkel Aug 7, 2026
0aa14e3
Fixed Mantis #35588: Change Language files for Taxonomies in question…
matthiaskunkel Aug 7, 2026
807e8a0
Fixed Mantis #34604: incorrect byline in learning objectives driven c…
matthiaskunkel Aug 7, 2026
5a41ce2
fix update step execution version (#11875)
iszmais Aug 7, 2026
ca32e42
Fixed Mantis #34613: Adjusting the task description of objectives in …
matthiaskunkel Aug 7, 2026
46328ac
AdvMD: change lang var for field creation success message (32430)
schmitz-ilias Aug 7, 2026
6cd56af
Fixed Mantis #42408: Sitzung Einstellungen: Anpassung von Optionen fü…
matthiaskunkel Aug 7, 2026
7930fa8
Modified error message
matthiaskunkel Aug 7, 2026
f2e2308
[FEATURE] Init/ErrorHandling: Add `ErrorIncident` domain model
mjansenDatabay Jun 9, 2026
70072ec
[FEATURE] Init/ErrorHandling: Add notification formatter
mjansenDatabay Jun 9, 2026
4da0870
[FEATURE] Init/ErrorHandling: Add `ReportErrorIncident` use case and …
mjansenDatabay Jun 9, 2026
80b9335
[FEATURE] Init/ErrorHandling: Add new interface to mask `ilErrorHandl…
mjansenDatabay Jun 9, 2026
2d7c3c8
[FEATURE] Init/ErrorHandling: Add DEVMODE state implementation
mjansenDatabay Jun 9, 2026
9e354dc
[FEATURE] Init/ErrorHandling: Add "Whoops" handler for unified error …
mjansenDatabay Jun 9, 2026
50c4c7d
[FEATURE] Init/ErrorHandling: Add outbound logging adapters for error…
mjansenDatabay Jun 9, 2026
0d8d8ac
[FEATURE] Init/ErrorHandling: Move error handlers to `src`
mjansenDatabay Jun 9, 2026
9aaacaa
[FEATURE] Init/ErrorHandling: Provide incident id in SOAP-based handler
mjansenDatabay Jun 9, 2026
f4c70f7
[FEATURE] Init/ErrorHandling: Unify error logging
mjansenDatabay Jun 9, 2026
fddf735
[FEATURE] Init/ErrorHandling: Add error handling tests
mjansenDatabay Jun 9, 2026
2f4c40e
[FEATURE] Init/ErrorHandling: Update ROADMAP.md and README.md
mjansenDatabay Jun 9, 2026
fe9c9c2
[IMPROVEMENT] Cron: Remove `client_id` argument from CLI command
mjansenDatabay Jul 8, 2026
dd58a39
[FIX] Cron: Align cron job execution docs with current CLI
mjansenDatabay Aug 7, 2026
3140c2a
Access: Minimal Rewording of PRIVACY.md, no Changes in Content, and n…
selyesa Aug 10, 2026
bea0dcb
Test: Initizalize Variable in Text Question
kergomard Aug 10, 2026
76f84ae
Test: Fix Unescaped HTML In Kiosk View
matheuszych Jul 14, 2026
8528d38
Changes to multiple language files - mostly T&A and Dashboard languag…
Chris-Squirrel Aug 10, 2026
1a776d3
[FEATURE] UI: deprecate `Component\ViewControl` components (#11858)
thibsy Aug 10, 2026
56b0469
[FIX] OrgUnit: Fix "Multi Input" element when managing positions (#11…
mjansenDatabay Aug 11, 2026
ef49b1d
WebServices: Replace `socket_set_timeout` with `stream_set_timeout` (…
mjansenDatabay Aug 11, 2026
59692ab
[FIX] #48172: Fix video playback issue occuring on apple safari (#11867)
mBeym Aug 11, 2026
98fa08b
ResourceStorage: rewrite the container archive once when unzipping
chfsx Aug 11, 2026
f850285
ResourceStorage: report the actual result of the unzip action
chfsx Aug 11, 2026
63fec18
[FIX] 45525: Number of users in "Communication - Announcements" is in…
chfsx Aug 11, 2026
00678c5
Japanese translations (checked with Japanese maintainer) missed in up…
Chris-Squirrel Aug 11, 2026
5e5360c
[FIX] 45344: HTTPS Detection uses Header value as protocol for questi…
chfsx Aug 11, 2026
21359d4
[FIX] 0047346: Verwirrung bei Sprachvariablen
chfsx Jul 24, 2026
1e60c80
[FIX] 0047398: Failed test: Löschen von Datei in temp-Verzeichnis
chfsx Jul 24, 2026
8c4dff9
[IMPROVEMENT] Finder: micro optimizations, type documentation and new…
mjansenDatabay Aug 11, 2026
2c4acfc
[FIX] 47021: Bottleneck AbstractFileSystemStorageHandler::cleanUpCont…
chfsx Aug 11, 2026
41de83f
[FIX] 0047773: Problems with download multiple objects when file name…
chfsx Jul 24, 2026
c3df7f9
removed unused code
alex40724 Aug 11, 2026
38321f8
Merge branch 'trunk' of https://github.com/ILIAS-eLearning/ILIAS into…
alex40724 Aug 11, 2026
7f228b6
[FIX] 46652: $this->getPlugin()->getDirectory() returns incorrect path
chfsx Aug 11, 2026
7939bea
[FIX] 44340: adding javascript or css file through global page templa…
chfsx Aug 11, 2026
d23c600
[FIX] 30709: Special char in assignment title breaks download of subm…
chfsx Aug 11, 2026
4044b0c
[FIX] 45051: Missing "Read by Users" Information on File Info Page
chfsx Aug 11, 2026
8b38c11
0048153: enforce extraction limits in Unzip
chfsx Aug 11, 2026
16e9fb7
Container: check if trash functions are called from administration
fneumann Aug 11, 2026
7eddb8e
fix plugin CSS/JS paths
iszmais Jul 24, 2026
6918b73
Tree: quote sort field in ilTreeTrashQueries (48128)
fneumann Aug 11, 2026
ba303ee
LTI: Enforce release settings access
Saaweel Aug 5, 2026
2243e65
fixed 48067: Authenticated RCE via MediaPool
alex40724 Jul 14, 2026
d1c1ba3
fixed 48152
chfsx Aug 11, 2026
357df0c
Course: add missing permission checks in ilObjCourseGUI (48026)
schmitz-ilias Aug 7, 2026
2fd7f41
fix(file): confine ilFileXMLParser COPY-mode path to the import dir
andreschweigert Jul 1, 2026
c429967
fix(soap): reject COPY/REST modes in ilSoapFileAdministration::addFile()
andreschweigert Jul 1, 2026
5e486f7
Course: add permission check for objectives settings (47893)
schmitz-ilias Aug 3, 2026
3160242
Logging: fix handling of SuperGlobalDropInReplacement (48183)
schmitz-ilias Aug 12, 2026
2a61969
Questions: Build General Structure
kergomard Jun 4, 2026
287e0f5
Questions: Start Implementing Cloze Question
kergomard Dec 15, 2025
d8046d4
Questions: Implementing Persistence
kergomard Dec 23, 2025
eaaf118
Questions: Implement Answer Form Editing
kergomard Jan 8, 2026
a75f0e6
Questions: Implement Basic Migration
kergomard Jan 20, 2026
2611bf9
Questions: Implement Combinations
kergomard Jan 28, 2026
7b0133a
Questions: Add LangVar For AnswerForm
kergomard Jan 28, 2026
6511852
Questions: Implement Migration For TextSubset
kergomard Jan 28, 2026
379d3f0
Questions: Speedup Loading Lists
kergomard Jan 28, 2026
4ef207d
Questions: Improvements in Migration and Display
kergomard Jan 29, 2026
d0f0755
Questions: Small Improvements
kergomard Jan 30, 2026
98848f7
Questions: TextLegacy Cannot Be Null
kergomard Jan 30, 2026
1627902
Questions: Fix Deleting Questions
kergomard Jan 30, 2026
c2fc6c4
Questions: No Duplicating Questions on Page Update
kergomard Jan 30, 2026
9665bb1
Questions: Fix Cloze Migrations
kergomard Feb 2, 2026
d863e3c
Questions: Add Page Component for Legacy Text
kergomard Feb 2, 2026
0bf0488
COPage/Export: Add LegacyTextElement
kergomard Feb 2, 2026
532ba2f
Questions: Little Improvement in SubText Migration
kergomard Feb 2, 2026
5de28d3
Questions: Rename Function for More Clarity
kergomard Feb 2, 2026
cce7895
UI: Add Icon For Questions
kergomard Feb 3, 2026
713e414
UI: Add Icon For Questions
kergomard Feb 3, 2026
eb8f0f8
Questions: Add Simple Create Mode
kergomard Feb 5, 2026
b9e5977
Questions: Add Add Legacy Button
kergomard Feb 5, 2026
b52b352
Questions: Proberly Escape Legacy Texts
kergomard Feb 5, 2026
b6f4d49
Questions: Add forgotten Parameter
kergomard Feb 6, 2026
a9989ec
Questions: Fix Migration of LongMenu-Forms
kergomard Feb 6, 2026
4e3110e
Questions: Show Legacy Text in Panel
kergomard Feb 6, 2026
5f21333
Questions: Move Adding Text to Page
kergomard Feb 6, 2026
97414d9
Questions: Function Needs to be Public
kergomard Feb 6, 2026
c5d3d13
Questions: Update Method Call
kergomard Feb 6, 2026
9894172
Questions: Introduce Persistence Factory
kergomard Feb 6, 2026
f56e7d9
Questions: Move to New Mechanism For Carry
kergomard Feb 10, 2026
c55a94a
Questions: Fix Typo
kergomard Feb 11, 2026
3c1a114
Questions: Implement New Carry Mechanism
kergomard Feb 11, 2026
0c8d20d
Questions: Fix Input on LegacyClozeText
kergomard Feb 11, 2026
4662e6d
Questions: Fixes in Combinations
kergomard Feb 11, 2026
c0e615e
Questions: Fix Typo in Variable Name
kergomard Feb 12, 2026
f41e448
Questions: Move To InputsBuilderSession
kergomard Feb 18, 2026
699c697
Questions: Make Create Button Primary
kergomard Feb 18, 2026
0f324b0
Questions: Change LangVar for Gap-Placeholder
kergomard Feb 18, 2026
0b1a345
Questions: Fix Requirement of ClozeText
kergomard Feb 18, 2026
b560c99
Questions: Change Title LangVars
kergomard Feb 18, 2026
a7b96d9
Questions: Remove Tabs from Question Editing
kergomard Feb 18, 2026
567c302
Questions: Add Create and New and Fix Redirects
kergomard Feb 19, 2026
b9f35c9
Questions: Fix Crash on Missing Question Title
kergomard Feb 19, 2026
ae075a9
Questions: Add Central Facilities to Environment
kergomard Feb 19, 2026
eb8f099
Questions: Rename type to type_definition
kergomard Feb 19, 2026
3b135f2
Questions: Start Implementing Feedback
kergomard Feb 25, 2026
997c500
Questions: Move to Generic Persistence
kergomard Feb 25, 2026
b929641
Questions: Implement Feedback
kergomard Mar 10, 2026
d51b767
Questions: Remove Unneeded Parameter
kergomard Mar 13, 2026
ad57193
Questions: Always use FormActions for CSRF-Checks
kergomard Mar 13, 2026
35d91fe
Questions: Remove Unneeded Include
kergomard Mar 13, 2026
d7baa99
Questions: Implement Suggested Learning Content
kergomard Mar 31, 2026
3aa4aa9
Questions: Remove PersistenceFactory in Migration
kergomard Apr 3, 2026
8a3cc16
Questions: Rename EnvironmentImplementation
kergomard Apr 3, 2026
ed57c44
Questions: Rename QuestionClass and Interface
kergomard Apr 3, 2026
2d55d99
Questions: Rename Step to SubAction
kergomard Apr 3, 2026
e5f7fa8
Questions: Move AnswerOptionsUpload to Actor
kergomard Apr 4, 2026
3182a45
Questions: Move ilDBConstants to FieldDefinition
kergomard Apr 4, 2026
5a958a2
Questions: Move Marking to Capability
kergomard Apr 3, 2026
ae6ff65
Questions: Add Missing Parameters to Function Call
kergomard Apr 8, 2026
8daaeba
Questions: Fix Tabs Handling
kergomard Apr 8, 2026
762e4ca
Questions: Add Filter, Range, and Order to Table
kergomard May 6, 2026
4d4b520
Questions: Move From Renderable to Viewable
kergomard May 8, 2026
49c4fad
Questions: Clarify TabeDefinitions
kergomard May 8, 2026
b175a16
Questions: Introduce ForImmediateStorage
kergomard May 8, 2026
0ea81e9
Question: Implementing Attempt
kergomard Apr 27, 2026
d3c6099
Questions: Clarify Parameters in Join
kergomard May 14, 2026
f8cfe53
Question: Extract Database-Functions From Question
kergomard May 14, 2026
7f3d9a6
Questions: Implement Response
kergomard May 18, 2026
5eed0e9
Questions: Add Language Variables
kergomard Jun 4, 2026
4f310ab
Questions: Fix Testing Issues in Combinations
kergomard Jun 5, 2026
1796fd4
Questions: Fix Migrations
kergomard Jun 8, 2026
b8f8903
Questions: Change Name of Getter in Query
kergomard Jun 12, 2026
d9a3b25
Questions: Allow More Flexibility in EditOverview
kergomard Jun 22, 2026
b56740d
Questions: Add Deletion to Capabilities
kergomard Jun 22, 2026
1217bbe
Questions: Implement Async View
kergomard Jun 23, 2026
7a47244
Questions: Implement Copying
kergomard Jun 30, 2026
f7b917a
Migration: Avoid Crash on Missing Old Question
kergomard Jul 30, 2026
b6995f3
Questions: Fix Numeric Gap on Empty Response Value
kergomard Aug 13, 2026
1f6b4a3
Questions: Fix Upload of LongMenu AnswerOptions
kergomard Aug 13, 2026
1afbbfa
Questions: Fix Missing Values in EditForm on Error
kergomard Aug 13, 2026
53e1cb2
Questions: Do not Show Tabs During Creation
kergomard Aug 13, 2026
5bad70e
Questions: Do Not Require Points On Combinations
kergomard Aug 13, 2026
92f3d62
Questions: Fix Pagination in Table
kergomard Aug 14, 2026
1f2ebcb
Questions: Add Missing Language Variable
kergomard Aug 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
/ilias.ini.php
/ilias.log
/db_template_writer.php
/components/ILIAS/setup_/sql/dbupdate_custom.php
/components/ILIAS/Database/sql/dbupdate_custom.php
/install_client.php

# Directories
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,24 @@

# ILIAS

ILIAS is a powerful Open Source Learning Management System for developing and realising web-based e-learning. The software was developed to reduce the costs of using new media in education and further training and to ensure the maximum level of customer influence in the implementation of the software. ILIAS is published under the General Public Licence and free of charge.
ILIAS is a powerful Open Source Learning Management System for developing and realising web-based e-learning. The software was developed to reduce the costs of using new media in education and further training and to ensure the maximum level of customer influence in the implementation of the software. ILIAS is published under the General Public Licence 3.0 and free of charge.

### Features
[see all features on our official website](https://www.ilias.de/en/about-ilias/) or [read our booklet](http://www.ilias.de/docu/goto_docu_file_1854_download.html)
[Read more about ILIAS features on our official website](https://www.ilias.de/en/about-ilias/) or [have a look in our booklet (de)](https://docu.ilias.de/goto_docu_file_4712_download.html)

### Installation

Installation of ILIAS is well documented on [our official Installation manual](http://www.ilias.de/docu/goto_docu_lm_367.html) and in the documentation contained inside this repo: [/docs/configuration/install.md](/docs/configuration/install.md)
Installation of ILIAS is well documented on [our official Installation manual](https://docu.ilias.de/go/lm/367) and in the documentation contained inside this repo: [/docs/configuration/install.md](/docs/configuration/install.md)

### Plugins

ILIAS can be extended with a lot of Plugins. You find the complete list in the [Plugin Repository](http://www.ilias.de/docu/goto.php?target=cat_1442&client_id=docu)
ILIAS can be extended with a lot of Plugins. You find a list in the [Plugin Data Collection](https://docu.ilias.de/go/dcl/3342)


### Community

We have a big [community](http://www.ilias.de/docu/goto.php?target=cat_1444&client_id=docu) and you can get a member of [ILIAS Society](http://www.ilias.de/docu/goto.php?target=cat_1669&client_id=docu).
You may even join us at one of our regular [ILIAS Conferences](http://www.ilias.de/docu/goto.php?target=cat_2255&client_id=docu).
We have a big [community](https://www.ilias.de/en/ilias-society/) and you can get a member of the [ILIAS Society](https://www.ilias.de/en/join-ilias-society/).
You may even join us at one of our regular [ILIAS Conferences](https://www.ilias-conference.org/en/).


### Development
Expand Down
23 changes: 23 additions & 0 deletions components/ILIAS/ADT/PRIVACY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# ADT Privacy
Disclaimer: This documentation does not guarantee completeness or accuracy. Please report any missing or incorrect information via Pull Request (docs/development/contributing.md#pull-request-to-the-repositories).
## General Information
ADT stands for Advanced Definition Type.
[Please provide a brief description of the component here]


## Integrated Services
The Advanced Definition Type component employs the following components, please consult the respective privacy.mds:
- [Please list all components here]


## Data being stored
The Advanced Definition Type component itself does not store any personal data.

## Data being presented
The Advanced Definition Type component itself does not present any personal data.

## Data being deleted
The Advanced Definition Type component itself does not store or delete any personal data.

## Data being exported
The Advanced Definition Type component itself does not export any personal data.
6 changes: 2 additions & 4 deletions components/ILIAS/AccessControl/PRIVACY.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
# Access Control Service Privacy
# AccessControl Privacy

This documentation does not warrant completeness or correctness. Please report any
missing or wrong information using the [ILIAS issue tracker](https://mantis.ilias.de)
or contribute a fix via [Pull Request](docs/development/contributing.md#pull-request-to-the-repositories).
> **Disclaimer: This documentation does not guarantee completeness or accuracy. Please report any missing or incorrect information by submitting a [Pull Request](docs/development/contributing.md#pull-request-to-the-repositories) or, if you prefer, via the [ILIAS bug tracker](https://mantis.ilias.de). When using the bug tracker, please select the corresponding component in the **Category** field.**


## Data being stored
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ private function getGroups(): array
// admin menu layout
$layout = array(
"maintenance" =>
array("adma", "serv", "cron", "bnmk", "lngf", "hlps", "wfe", 'fils', 'logs', 'sysc', "recf", "root"),
array("adma", "serv", "cron", "bnmk", "lngf", "hlps", "wfe", 'fils', 'qsts', 'logs', 'sysc', "recf", "root"),
"layout_and_navigation" =>
array("mme", "gsfo", "dshs", "stys", "adve", "stus"),
"repository_and_objects" =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ protected function getRoles(int $filter): array
{
$opt = [];
foreach ($this->rbac_review->getRolesByFilter($filter) as $role) {
$opt[(int) $role['obj_id']] = $role['title'] . ' (' . $role['obj_id'] . ')';
$opt[(int) $role['obj_id']] = (string) $role['title'];
}

return $opt;
Expand Down
4 changes: 2 additions & 2 deletions components/ILIAS/AdvancedMetaData/PRIVACY.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# AdvancedMetaData
# AdvancedMetaData Privacy
Disclaimer: This documentation does not guarantee completeness or correctness. Please report any missing or incorrect information using the ILIAS issue tracker or contribute a fix via Pull Request (docs/development/contributing.md#pull-request-to-the-repositories).
## General Information
Advanced Metadata is labeled Custom Metadata in the user interface.
Expand All @@ -23,4 +23,4 @@ The Advanced Metadata itself does not present any personal data.
The Advanced Metadata itself does not store or delete any personal data.

## Data being exported
The Advanced Metadata module itself does not export any personal data.
The Advanced Metadata module itself does not export any personal data.
Original file line number Diff line number Diff line change
Expand Up @@ -1363,7 +1363,7 @@ public function saveField(): void
$translations->read();
$translations->updateFromForm($field_definition->getFieldId(), $this->active_language, $form);

$this->tpl->setOnScreenMessage('success', $this->lng->txt('save_settings'), true);
$this->tpl->setOnScreenMessage('success', $this->lng->txt('settings_saved'), true);
$this->ctrl->redirect($this, "editFields");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,6 @@ protected function initRecordSortingDependencies(): void
{
$this->dic = new Container();
$GLOBALS['DIC'] = $this->dic;
$this->setGlobalVariable('ilDB', $this->createMock(ilDBInterface::class));
$this->setGlobalVariable('ilDB', $this->createStub(ilDBInterface::class));
}
}
161 changes: 8 additions & 153 deletions components/ILIAS/AuthShibboleth/resources/shib_logout.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,162 +16,17 @@
*
*********************************************************************/

// A real Shib-Logout ("front" or "back" channel was never implemented resp. removed in ILIAS, because the front-channel
// also had problems concerning the security. If a logout mechanism is desired, please revisit the feature request
// https://docu.ilias.de/goto_docu_wiki_wpage_4657_1357.html and bring it as a suggestion to the community:
// https://docu.ilias.de/goto.php?target=wiki_5307&client_id=docu#ilPageTocA129
/** @noRector */
require_once("../vendor/composer/vendor/autoload.php");
ilContext::init(ilContext::CONTEXT_SHIBBOLETH);
require_once("../artifacts/bootstrap_default.php");
entry_point("ILIAS Legacy Initialisation Adapter");

global $DIC;

$q = $DIC->http()->wrapper()->query();
if (
$q->has('return')
&& $q->has('action')
&& $q->retrieve('action', $DIC->refinery()->to()->string()) === 'logout'
) {
entry_point("ILIAS Legacy Initialisation Adapter");
// Logout out user from application
// Destroy application session/cookie etc
$GLOBALS['DIC']['ilAuthSession']->logout();

// Finally, send user to the return URL
ilUtil::redirect($q->retrieve('action', $DIC->refinery()->kindlyTo()->string()));
}

// Back channel logout //

// Note: This is the preferred logout channel because it also allows
// administrative logout. However, it requires your application to be
// adapated in the sense that the user's Shibboleth session ID must be
// stored in the application's session data.
// See function LogoutNotification below

elseif (!empty(file_get_contents('php://input'))) {
ilContext::init(ilContext::CONTEXT_SOAP);

// Load ILIAS libraries and initialise ILIAS in non-web context
entry_point("ILIAS Legacy Initialisation Adapter");

// Set SOAP header
$server = new SoapServer('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] . '/LogoutNotification.wsdl');
$server->addFunction("LogoutNotification");
$server->handle();
}

// Return WSDL

// Note: This is needed for the PHP SoapServer class.
// Since I'm not a web service guru it might be that the code below is not
// absolutely correct but at least it seems to to its job properly when it
// comes to Shibboleth logout

else {
header('Content-Type: text/xml');

$url = filter_var("https://{$_SERVER['HTTP_HOST']}/shib_logout.php", FILTER_SANITIZE_URL);

echo <<<WSDL
<?xml version ="1.0" encoding ="UTF-8" ?>
<definitions name="LogoutNotification" targetNamespace="urn:mace:shibboleth:2.0:sp:notify"
xmlns:notify="urn:mace:shibboleth:2.0:sp:notify"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>
<schema targetNamespace="urn:mace:shibboleth:2.0:sp:notify"
xmlns="http://www.w3.org/2000/10/XMLSchema"
xmlns:notify="urn:mace:shibboleth:2.0:sp:notify">

<simpleType name="string">
<restriction base="string">
<minLength value="1"/>
</restriction>
</simpleType>

<element name="OK" type="notify:OKType"/>
<complexType name="OKType">
<sequence/>
</complexType>

</schema>
</types>

<message name="getLogoutNotificationRequest">
<part name="SessionID" type="notify:string" />
</message>

<message name="getLogoutNotificationResponse">
<part name="OK"/>
</message>

<portType name="LogoutNotificationPortType">
<operation name="LogoutNotification">
<input message="getLogoutNotificationRequest"/>
<output message="getLogoutNotificationResponse"/>
</operation>
</portType>

<binding name="LogoutNotificationBinding" type="notify:LogoutNotificationPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="LogoutNotification">
<soap:operation soapAction="urn:xmethods-logout-notification#LogoutNotification"/>
</operation>
</binding>

<service name="LogoutNotificationService">
<port name="LogoutNotificationPort" binding="notify:LogoutNotificationBinding">
<soap:address location="{$url}"/>
</port>
</service>
</definitions>
WSDL;
exit;
}

/******************************************************************************/
/// This function does the actual logout
function LogoutNotification($SessionID): ?\SoapFault
{
// Delete session of user using $SessionID to locate the user's session file
// on the file system or in the database
// Then delete this entry or record to clear the session
// However, for that to work it is essential that the user's Shibboleth
// SessionID is stored in the user session data!

global $ilDB;

$q = "SELECT session_id, data FROM usr_session WHERE expires > 'NOW()'";
$r = $ilDB->query($q);

while ($session = $r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) {
$session_data = unserializesession($session['data']);
// Delete this session entry
if (
is_array($session_data)
&& array_key_exists('shibboleth_session_id', $session_data)
&& $session_data['shibboleth_session_id'] === $SessionID
&& !ilSession::_destroy($session['session_id']
)
) {
return new SoapFault('LogoutError', 'Could not delete session entry in database.');
}
}
// If no SoapFault is returned, all is fine
return null;
}

/******************************************************************************/
// Deserializes session data and returns it in a hash array of arrays
/**
* @return mixed[]
*/
function unserializesession($serialized_string): array
{
$variables = [];
$a = preg_split("/(\w+)\|/", (string) $serialized_string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$counter = count($a);
for ($i = 0; $i < $counter; $i += 2) {
$variables[$a[$i]] = unserialize($a[$i + 1]);
}

return ($variables);
}
$GLOBALS['DIC']['ilAuthSession']->logout();
ilUtil::redirect('login.php');
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,19 @@ protected function handleLoginAttempts(): void
$usr_id_candidates = [];
foreach (array_filter($auth_modes) as $auth_mode) {
if ((int) $auth_mode === ilAuthUtils::AUTH_LOCAL) {
$usr_id_candidates[] = ilObjUser::_lookupId($this->getCredentials()->getUsername());
$local_usr_id = ilObjUser::_lookupId($this->getCredentials()->getUsername());
// Mantis #47987: A failed local login must only count against an
// account that can actually be authenticated locally. Without this
// check, external accounts (e.g., Shibboleth/SAML) whose login name
// is entered in the local login form get their login attempts
// incremented and are eventually deactivated - even though a local
// login is impossible for them because "Allow Local Authentication"
// is disabled. This mirrors the gate in ilAuthProviderDatabase.
if (is_int($local_usr_id) && $local_usr_id > 0 && ilAuthUtils::isLocalPasswordEnabledForAuthMode(
(int) ilAuthUtils::_getAuthMode(ilObjUser::_lookupAuthMode($local_usr_id))
)) {
$usr_id_candidates[] = $local_usr_id;
}
continue;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,21 +97,37 @@ public function run(array $input, Observer $observer): Value

foreach ($object_ref_ids as $object_ref_id) {
$object = ilObjectFactory::getInstanceByRefId($object_ref_id);
if (!$object instanceof ilObject) {
continue;
}

$object_type = $object->getType();
$object_name = $object->getTitle();
$object_temp_dir = ""; // empty as content will be added in recurseFolder and getFileDirs
$object_temp_dir = ''; // empty as content will be added in recurseFolder and getFileDirs

if ($object_type === "fold" || $object_type === "crs") {
if (in_array($object_type, ['fold', 'crs', 'grp'], true)) {
$num_recursions = 0;
$files_from_folder = $this->recurseFolder($object_ref_id, $object_name, $object_temp_dir, $num_recursions, $initiated_by_folder_action);
$files_from_folder = $this->recurseFolder(
$object_ref_id,
$object_name,
$object_temp_dir,
$num_recursions,
$initiated_by_folder_action
);
$files = array_merge($files, $files_from_folder);
} elseif (($object_type === "file") && (($file_dirs = $this->getFileDirs(
$object_ref_id,
$object_name,
$object_temp_dir
)) !== false)) {
$files[] = $file_dirs;
continue;
}

if ($object_type !== 'file') {
continue;
}

$file_dirs = $this->getFileDirs($object_ref_id, $object_name, $object_temp_dir);
if (!is_array($file_dirs)) {
continue;
}

$files[] = $file_dirs;
}
$this->logger->debug('Collected files:');
$this->logger->dump($files);
Expand Down Expand Up @@ -154,7 +170,14 @@ private function getFileDirs($a_ref_id, string $a_file_name, string $a_temp_dir)
return false;
}

$filname_with_suffix = $this->ensureSuffix($a_file_name, $file->getFileExtension());
// The object title may contain characters which are not allowed in file names:
// "/" would create a directory inside the archive, while "*", "?" and ":" are
// invalid on Windows and prevent the archive from being extracted. They are
// sanitized the same way as the folder names in recurseFolder().
$filname_with_suffix = $this->ensureSuffix(
ilFileUtils::getASCIIFilename($a_file_name),
$file->getFileExtension()
);

$target_dir = $a_temp_dir . '/' . $filname_with_suffix;

Expand All @@ -165,7 +188,10 @@ private function getFileDirs($a_ref_id, string $a_file_name, string $a_temp_dir)
$target_info = pathinfo($target_dir);
$filename = $target_info["filename"];
$extension = isset($target_info["extension"]) ? "." . $target_info["extension"] : "";
$target_dir = $a_temp_dir . $filename . " (" . ++self::$targets[$target_dir] . ")" . $extension;
// pathinfo() returns the name without its directory, therefore the separator
// has to be added again, just like above
$target_dir = $a_temp_dir . '/' . $filename
. " (" . ++self::$targets[$target_dir] . ")" . $extension;
} else {
self::$targets[$target_dir] = 0;
}
Expand Down
Loading
Loading