Skip to content

[IMPROVEMENT] Finder: Add Micro Optimizations / Better Type Documentation / New API Methods - #11490

Merged
chfsx merged 2 commits into
ILIAS-eLearning:release_10from
mjansenDatabay:improvement/10/finder-micro-optimizations-and-types
Aug 11, 2026
Merged

[IMPROVEMENT] Finder: Add Micro Optimizations / Better Type Documentation / New API Methods#11490
chfsx merged 2 commits into
ILIAS-eLearning:release_10from
mjansenDatabay:improvement/10/finder-micro-optimizations-and-types

Conversation

@mjansenDatabay

Copy link
Copy Markdown
Contributor

This PR ...

  • adds micro optimizations for the Finder,
  • introduces a fluent limit-API on the Finder to allow the iteration over a limited subset of items,
  • adds hasAny() as an existence check optimized for performance-sensitive paths by short-circuiting after the
    first match and avoiding unnecessary sorting work,
  • and improves the explicit and documented PHP types (my static analysis tools no longer report any issues)

@mjansenDatabay mjansenDatabay added improvement php Pull requests that update Php code labels Apr 28, 2026
@mjansenDatabay
mjansenDatabay force-pushed the improvement/10/finder-micro-optimizations-and-types branch 2 times, most recently from db05c7a to a13a214 Compare April 28, 2026 10:43
@mjansenDatabay
mjansenDatabay marked this pull request as draft April 28, 2026 10:47
@mjansenDatabay
mjansenDatabay force-pushed the improvement/10/finder-micro-optimizations-and-types branch 2 times, most recently from e8ebba4 to c71027b Compare April 28, 2026 11:16
- Introduce a fluent `limit`-API on the filesystem `Finder`
- Add `hasAny()` as an existence check optimized for
 performance-sensitive paths by short-circuiting after the
 first match and avoiding unnecessary sorting work.
@mjansenDatabay
mjansenDatabay force-pushed the improvement/10/finder-micro-optimizations-and-types branch from c71027b to 28308fc Compare April 28, 2026 11:32
@mjansenDatabay
mjansenDatabay marked this pull request as ready for review April 28, 2026 11:33
@chfsx
chfsx merged commit 1a42b85 into ILIAS-eLearning:release_10 Aug 11, 2026
3 checks passed
chfsx pushed a commit that referenced this pull request Aug 11, 2026
… limit()/hasAny() API (#11490)

- adds micro optimizations for the Finder,
- introduces a fluent limit()-API on the Finder to allow the iteration over a limited subset of items,
- adds hasAny() as an existence check optimized for performance-sensitive paths by short-circuiting after the first match and avoiding unnecessary sorting work,
- and improves the explicit and documented PHP types.

Fixes three latent defects on the way:
- searchInDirectory() appended the VCS patterns to $this->exclude on every call, so repeated iteration or multiple in() directories kept growing the exclude list of a supposedly immutable Finder,
- sorting was applied per directory inside searchInDirectory() and therefore never across the combined result set of multiple in() directories,
- append() rejected every plain iterable because it tested the elements against MetadataType, a constants-only interface which Metadata does not implement.

Cherry-picked from release_10, with two kinds of conflicts resolved:

Code style only, in Finder.php and FileTypeFilterIterator.php: release_11 had
already replaced the Iterator\/Comparator\ prefixes with explicit use statements
and reformatted the same regions. Resolved in favour of the picked version, except
for the #[Depends] attribute in FinderTest, which replaces the @Depends annotation
of the picked version.

Substantial, in RecursiveDirectoryIterator.php and FinderTest.php, against
0047398: that fix wrapped listContents() in rewind() into a try/catch so that a
directory rejected by the path normalizer is treated as empty instead of aborting
the traversal, while this change rewrote the same method from array_combine() to a
plain loop. Both are kept: the try/catch now guards the loop. Its test and the
corresponding mock helper are kept as well.
chfsx pushed a commit that referenced this pull request Aug 11, 2026
… limit()/hasAny() API (#11490)

- adds micro optimizations for the Finder,
- introduces a fluent limit()-API on the Finder to allow the iteration over a limited subset of items,
- adds hasAny() as an existence check optimized for performance-sensitive paths by short-circuiting after the first match and avoiding unnecessary sorting work,
- and improves the explicit and documented PHP types.

Fixes three latent defects on the way:
- searchInDirectory() appended the VCS patterns to $this->exclude on every call, so repeated iteration or multiple in() directories kept growing the exclude list of a supposedly immutable Finder,
- sorting was applied per directory inside searchInDirectory() and therefore never across the combined result set of multiple in() directories,
- append() rejected every plain iterable because it tested the elements against MetadataType, a constants-only interface which Metadata does not implement.

Cherry-picked from release_10, with two kinds of conflicts resolved:

Code style only, in Finder.php and FileTypeFilterIterator.php: this branch had
already replaced the Iterator\/Comparator\ prefixes with explicit use statements
and reformatted the same regions. Resolved in favour of the picked version, except
for the #[Depends] attribute in FinderTest, which replaces the @Depends annotation
of the picked version.

Substantial, in RecursiveDirectoryIterator.php and FinderTest.php, against
0047398: that fix wrapped listContents() in rewind() into a try/catch so that a
directory rejected by the path normalizer is treated as empty instead of aborting
the traversal, while this change rewrote the same method from array_combine() to a
plain loop. Both are kept: the try/catch now guards the loop. Its test and the
corresponding mock helper are kept as well.
@chfsx

chfsx commented Aug 11, 2026

Copy link
Copy Markdown
Member

Thanks a lot, I merged and picked to all relevant branches!

c-knof added a commit to kroepelin-projekte/ILIAS that referenced this pull request Aug 12, 2026
* [FIX] 47851: Evaluation statement text is not saved after < sign (KS textarea)

* fix text sorting in datacollection (ILIAS-eLearning#11720)

* [Fix] Exercise, #47925: Action Evaluation by File does not update evaluation date for Team Uploads

* [FIX] Exercise #47850: Team uploads: Only 1st team member can see evaluation statement

* fix Mantis #47475

* [Fix] LDAP: Correctly display user synchronization cron status

See: https://mantis.ilias.de/view.php?id=48023

* [FEATURE] UI: add `Listing\Inline` and `Listing\Entity\Grid` components (ILIAS-eLearning#11444)

Breaking changes:

- For plugins that provide a custom implementation of `ILIAS\UI\Component\Listing\Entity\Factory` and/or `ILIAS\UI\Component\Listing\Factory` by using the according exchange mechanism.
- For plugins that provide a custom implementation of the following UI components and their respective interface:
	- `ILIAS\UI\Component\Entity\Entity`
	- `ILIAS\UI\Component\Listing\Property`
	- `ILIAS\UI\Component\Symbol\Glyph`
- For skins that replace one or more of the following templates:
	- `Entity/tpl.entity.html`
	- `Listing/tpl.propertylisting.html`

Given the novelty status of the entity (and associated) UI component(s), such cases should be rare, and any breaking change could be fixed in a backwards compatible manner. We therefore consider these breaking changes acceptable, as their value outweighs their harm.

* [Fix] Init: Add installation signature to password assistance emails

See: https://mantis.ilias.de/view.php?id=48027

* sync language files

* Category: #47834: Missing RBAC check in ilContainerFilterAdminGUI

Signed-off-by: Releasemanager <webmaster@ilias.de>

* Object: Do Not Show Debug Info on Import Failure

See: https://mantis.ilias.de/view.php?id=47952
Signed-off-by: Releasemanager <webmaster@ilias.de>

* 47954: Notes: Edit form for private notes accessible by all users

Signed-off-by: Releasemanager <webmaster@ilias.de>

* Fix 0047887: SOAP IDOR by enforcing session-user read access in ilSoapObjectAdministration

Signed-off-by: Releasemanager <webmaster@ilias.de>

* Course: Transform participant selection string

See: https://mantis.ilias.de/view.php?id=47800
Signed-off-by: Releasemanager <webmaster@ilias.de>

* Release 10.9

* 48038: Course Membership View throws error (current test10.ilias.de)

* fix: Export pdf format (ILIAS-eLearning#11731)

* [Bugfix] Badge: Mark Badges without Images as migrated

* 47633: TOC shows chapters with no active pages

* 0047549: Member View disappears when you click on a folder in a course and the slide displays the repository.

* 47946: Link areas do not display tooltip

* [Bugfix] Mail 047999: Fix CC/BCC Mails Generic Placeholder not replaced with corresponding value (ILIAS-eLearning#11713)

* 48062: Unterschiedliches Verhalten bei Klick in Aktionen-Menü von Plugins und Kernfunktionen

* [Bugfix] Mail 047999: Fix DatePresentation lng tearDown in ilMailTemplatePlaceholderToEmptyResolverTest

* Mantis #30823: add Course AboStatus to XML export & import (ILIAS10) (ILIAS-eLearning#10661)

* add Course AboStatus to XML export & import

* revert change to ilias_crs_9_0.xsd

* 0030823: make AboStatus optional to keep existing ILIAS 10 exports compatible

* [FIX] portfolio 46975: prtt_edit does not resolve in Portfolio Template Edit mode

* [FIX] COPage: 42945: Print view doesn't show svg

* [FIX] Container: 31459: Karten einfügen weiterhin als Element für Seitengestaltung auswählbar, obwohl in Administration deaktiviert

* fix data persitation on confirmation (ILIAS-eLearning#11745)

* Fix for mantis issue 48050

* [FIX] Exercise, try to address 48020: Silent Failure: Failed file upload creates 0-byte file without user notification

* blog: centralise permission checks

* 10 map 43204 display markers (ILIAS-eLearning#11690)

* [FIX]: replace MarkerImage with icon object for Google markers (fix mantis #43204)

* [FIX]: display multiple Google maps on one page

* [Fix] Mail: Don't manipulate password from configuration form

* MetaData: accept imports without title, set placeholder title on md transfer if none exists (48040)

* [FIX] Survey: Correct mean calculation (ILIAS-eLearning#11771)

Co-authored-by: Saúl Díaz <sauldiazdiaz210@gmail.com>

* WebLink: truncate too long list title before writing to db (47980)

* [Language] update: T&A spanish language variables (ILIAS-eLearning#11775)

* ECS: Restore HTTP protocol option in GUI

* Calendar: fix mismatched type (48096)

* [Survey] fix: Access to appraisee ID (ILIAS-eLearning#11801)

* fix: preserve blocked status of course members in updateCourse SOAP call (0040575) (ILIAS-eLearning#11602)

* [Survey] fix: Handle non auth access to Survey (ILIAS-eLearning#11804)

* Dependencies: Update PHPSpreadsheet

* ILIASObject: consistently use long description on object creation so that multilingualism does not get confused (48105)

* Object: Add Default Value for Info-Tab visibility

See: https://mantis.ilias.de/view.php?id=46397

* User: skip broken users in gallery

See: https://mantis.ilias.de/view.php?id=47791

* [FIX] 48047: Änderungen im Content Style wirken sich nicht aus

Entries inside a container are stored relative since Mantis 45580 / 47237,
e.g. "style.css". Containers written before that hold the same file as
"/style.css", and once such a container is written again both variants exist
side by side. Streams::ofFileInsideZIP() looked up the variant with the leading
slash first, so consumers kept receiving the outdated legacy entry: a content
style is written correctly but never changes for the user. Newly created styles
are not affected, copies inherit the problem with the cloned ZIP, and
export/import produces a clean container.

ofFileInsideZIP() now looks up the relative entry first and falls back to the
legacy one, which fixes existing containers without touching them - the ZIP
stream wrapper matches entry names literally, so no container can be resolved
to the wrong entry by accident.

Additionally the legacy entries are cleaned up over time: addUploadToContainer()
no longer produces entries with a leading slash itself when the parent path
inside the container is empty, and removePathInsideContainer() removes both
variants of the given path.

* Document SOAP interface access restrictions

Added section on restricting access to the SOAP interface with configuration examples for Apache2 and Nginx.

* Fixed Mantis #0048133: -glo_remove_glossary- // Missing translation

* Test: Fix Feedback in Cloze

See: https://mantis.ilias.de/view.php?id=48135

* Test: Fix Display of SpecialChars in Essay

See: https://mantis.ilias.de/view.php?id=48138

* Update link to the coding guidelines.

* Test: Fix Import on Missing User

* Test: Fix Recalculation of Points

If points are changed and there already is question with changed
points before the one being changed, the points are not recalculated.

* [Survey] fix: Check participation after period (ILIAS-eLearning#11842)

* [Survey] fix: Delete option verification within routings (ILIAS-eLearning#11846)

* copage: array key fix

* copage: prevent ctrl issues in copy process

* Container: remove objectives-settings info blocks in course content

* 47866: Page Editor: Text: List format options expand to the left and are not fully viewable for users

* 47929: Error Allowed memory size exhausted when downloading large files via action Download Selected Submission

* 47835: Using an & in a tilte of a Content-Style Class prevents page rendering

* 47920: Error Opening and ending tag mismatch when editing text blocks containing internal links to missing/deleted objects

* 48126: Page editor whoopses on trying to save paragraph with just an empty list bullet

* learning module: 48061: Ausgeschnittene Kapitel und Seiten lassen sich nicht in ein anderes Lernmodul einfügen

* [FIX] #45665 UI: `Table\Ordering` submission on enter (ILIAS-eLearning#10832)

* Fix https://mantis.ilias.de/view.php?id=45665
* Add event listener to numeric inputs of `Table\Ordering` that prevent form submission on 'Enter'.

* [FEATURE] UI: add new `Symbol\Glyph` variations.

* Add "date", "owner", "presenter" and "location" glyphs
* Update "calendar" glyph

* [FIX] UI: update icon-font binaries

Addendum to c29a2d0 which pushed
faulty icon-font binaries. This recreates proper binaries without
changes to existing icon codes.

* [FIX] Style: recompile delos stylesheet

* [FIX] #46107 UI: update `MainControls\Footer` section sizes (ILIAS-eLearning#10372)

* Fixes https://mantis.ilias.de/view.php?id=46107
* Update section 1 and 5 from 4 column grid to 2 column grid
* Add section grid size CSS modifier

* [FIX] Style: recompile delos stylesheet

* Test: Fix Tab Activation in ErrorText

* Test: Fix Display of ErrorText with Errors

* Test: Remove Unnecessary Setting of Active Tab

* Fixed Mantis #34604: incorrect byline in learning objectives driven courses - settings

* Fixed Mantis #34613: Adjusting the task description of objectives in LOCs

* AdvMD: change lang var for field creation success message (32430)

* Fixed Mantis #42408: Sitzung Einstellungen: Anpassung von Optionen für Benachrichtigung

* Fixed Mantis #42363: Missing lang var for "User Language changed..."

* Modified error message

* Test: Initizalize Variable in Text Question

See: https://mantis.ilias.de/view.php?id=48179

* Test: Fix Unescaped HTML In Kiosk View

See: https://mantis.ilias.de/view.php?id=48066

The participant name in the test kiosk title was inserted as raw HTML,
which could break rendering when the name contained special characters.
The value is now escaped and passed via a legacy UI component.

* Lang: Order Lang Files

* Re-added correct lang var for error message

* [FIX] OrgUnit: Fix "Multi Input" element when managing positions (ILIAS-eLearning#11500)

See: https://mantis.ilias.de/view.php?id=47236

* [FIX] #48172: Fix video playback issue occuring on apple safari (ILIAS-eLearning#11867)

Fixes https://mantis.ilias.de/view.php?id=48172

* ResourceStorage: rewrite the container archive once when unzipping

Appending the contents of a ZIP to a container called addStreamToContainer()
once per file. Every one of those calls opens and closes the container
archive, and ZipArchive::close() never appends in place, so the complete
archive was rewritten for each individual file.

Extract the source archive once and hand the resulting directory to the new
ContainerManager::addDirectoryToContainer(), which writes the container
archive a single time. Extraction reuses ILIAS\Filesystem\Util\Archive, so
the shared ignore list (__MACOSX, .DS_*) applies and no separate path
handling is needed here.

Mantis 48134

* ResourceStorage: report the actual result of the unzip action

unzip() is reached via GET, but postUpload() derives its message from the
POST body, so the action always reported "No Resource(s) added", even when
it succeeded. Report what unzip() actually returned instead.

Also guard against an empty path list, which ran into an undefined offset.

Mantis 48134

* [FIX] 45525: Number of users in "Communication - Announcements" is incorrect

The role selection of an administrative notification labelled every option
with "<role title> (<obj_id>)". Administrators mistook the object id in
parentheses for the number of users assigned to that role, which made the
numbers look arbitrarily wrong - e.g. "Admin (521121)" for a role with three
members, or "Lehrende - Verwaltung - Wimis (166)" for a role with 439 members.

The visibility of a notification was never affected by this: it is resolved
from the stored role ids via ilRbacReview::isAssignedToAtLeastOneGivenRole().

The option label now shows the role title only.

See https://mantis.ilias.de/view.php?id=45525

* [FIX] 45344: HTTPS Detection uses Header value as protocol for question links

RequestFactoryImpl used the configured header value of the automatic https
detection (auto_https_detect_header_value) for two different purposes: as the
value the incoming header is compared against, and as the scheme the request
URI is rewritten to. The second use is wrong - the setting describes when
https is in use, it is not the protocol itself.

With the documented setup

    auto_https_detect_header_name = "FRONT-END-HTTPS"
    auto_https_detect_header_value = "on"

every generated URI therefore started with "on://", which broke the links to
edit questions in a question pool. The problem only stayed invisible for
installations whose header value happens to be the literal string "https",
which is why switching to X-Forwarded-Proto worked around it.

The request URI is now rewritten to https once the configured header matches,
independent of the configured value. This matches what ilHTTPS and the SOAP
entry point already do: they compare the value and then set a fixed result.

Covered by ILIAS\HTTP\Request\RequestFactoryImplTest.

See https://mantis.ilias.de/view.php?id=45344

* [IMPROVEMENT] Finder: micro optimizations, type documentation and new limit()/hasAny() API (ILIAS-eLearning#11490)

- adds micro optimizations for the Finder,
- introduces a fluent limit()-API on the Finder to allow the iteration over a limited subset of items,
- adds hasAny() as an existence check optimized for performance-sensitive paths by short-circuiting after the first match and avoiding unnecessary sorting work,
- and improves the explicit and documented PHP types.

Fixes three latent defects on the way:
- searchInDirectory() appended the VCS patterns to $this->exclude on every call, so repeated iteration or multiple in() directories kept growing the exclude list of a supposedly immutable Finder,
- sorting was applied per directory inside searchInDirectory() and therefore never across the combined result set of multiple in() directories,
- append() rejected every plain iterable because it tested the elements against MetadataType, a constants-only interface which Metadata does not implement.

* [FIX] 47021: Bottleneck AbstractFileSystemStorageHandler::cleanUpContainer

cleanUpContainer() removes the first level directory of a container once it
no longer holds any file. To find that out it counted every file below that
directory with Finder::count(), which runs iterator_count() over the whole
subtree - although the only question is whether at least one file is left.

With MaxNestingPathGenerator the first level consists of three hex characters,
so a platform spreads all of its resources over just 4096 buckets. On larger
installations every bucket therefore holds thousands of files, and since
deleteResource() calls cleanUpContainer() once per resource, deleting a user
with many files paid a full recursive count per file. Measurements in the
report show about 2 seconds for this single call.

The check now uses Finder::hasAny(), which short-circuits after the first
match instead of counting. This is the same predicate as before - hasAny()
is false exactly when count() was 0 - but in the common case, where the
bucket still holds files of other resources, it only has to list the few
directory levels down to the first file.

See https://mantis.ilias.de/view.php?id=47021

* [FIX] 46652: $this->getPlugin()->getDirectory() returns incorrect path

ilComponentRepository::PLUGIN_BASE_PATH is a class constant and therefore has to
be a constant expression, which is why it is written as

    __DIR__ . '/../../../../public/Customizing/global/plugins'

Nothing ever resolved those "..", so every path built from it carried the detour
through the component directory. ilPlugin::getDirectory() handed that out to the
plugins verbatim, which is what the report shows:

    /var/www/ilias10/components/ILIAS/Component/classes/../../../../public/Customizing/global/plugins/...

The path did point at the right directory, but it is unusable for anything that
compares or displays it, and it is not what a plugin can work with.

ilPluginInfo::getPath() now resolves "." and ".." itself. This is done without
touching the file system, so it also works for a plugin which is not installed
yet - realpath() would return false there.

Note that getDirectory() still returns an absolute path. That is intended since
43587, which made PLUGIN_BASE_PATH absolute so that the setup finds plugins in
CLI context as well. Plugins which need a path relative to the web root, e.g. to
reference an asset, have getRelativeDirectory() for that. It no longer collapses
to an empty string when realpath() fails for a plugin directory which does not
exist.

See https://mantis.ilias.de/view.php?id=46652

* [FIX] 44340: adding javascript or css file through global page template does not support absolute path returned by plugin

Javascript and stylesheets are delivered relative to the web root, and both
addJavaScript() and addCss() stored whatever they were given unchanged, so the
value ended up in the markup as it came in. A plugin, however, only knows its own
absolute location - ilPlugin::getDirectory() returns exactly that - which left it
with no way to register an asset: the resulting src pointed at a file system path
no browser can request.

Both entry points now cut the web root off a path which lies below it, so an
absolute path from getDirectory() works as well as a relative one. Everything
outside the web root is left untouched, external URLs and data URIs included,
since they never start with the web root.

The conversion is applied in ilGlobalTemplate and in MetaContent, because the two
template implementations do not share this code: ilGlobalPageTemplate, the global
$tpl since ilInitialisation, delegates to MetaContent, while ilGlobalTemplate is
used for the standalone templates of the startup, error and fullscreen pages.

Plugins may of course still use getRelativeDirectory() to obtain the web path
themselves.

See https://mantis.ilias.de/view.php?id=44340

* [FIX] 0047398: Failed test: Löschen von Datei in temp-Verzeichnis

The cron job "Clean Temp Directory" aborted completely as soon as a single path
containing control characters (e.g. a tab or a line break) was encountered. Such
paths are created by ILIAS itself, but they are rejected by the path normalizer
of Flysystem, which throws a CorruptedPathDetected. The exception was raised
while the finder was traversing the directory tree, therefore it could not be
handled by the try/catch blocks inside the cleanup loops and the whole job died
without deleting anything.

Catch the rejected paths where ILIAS wraps Flysystem, so that they no longer
abort the caller:

- FlySystemDirectoryAccess::hasDir() and FlySystemFileAccess::has() report a
  path the normalizer refuses as non existing instead of throwing.
- RecursiveDirectoryIterator::rewind() treats a directory which cannot be listed
  as empty, so a single unusable directory no longer aborts the traversal.

These paths can neither be listed nor deleted through the filesystem, hence they
are skipped during the cleanup. To keep them visible, the cron job now looks for
them explicitly and logs each of them, reporting only the topmost path of an
affected subtree. Their number is added to the job result, so the cron table
hints at them as well.

Picked from release_11 (e8970a6). Adjusted to this release: the cron job
still builds an ilCronJobResult instead of a JobResult, and the iterator keeps
its foreach loop over the listing, the early return for an unlistable directory
was added on top of it.

* [FIX] 30709: Special char in assignment title breaks download of submissions

Downloading all submissions of an exercise assignment failed with an
UnexpectedValueException whenever the assignment title contained a control
character such as a vertical tab or a tab:

  RecursiveDirectoryIterator::__construct(.../temp/tmpX/KW 49 _ SW 5 - ...):
  Failed to open directory: No such file or directory

Two independent defects add up here:

- ilFileServicesPolicy::ascii() replaced the characters an OS forbids in file
  names, but left the C0 control characters untouched. They therefore ended up
  in the directory created by ilExerciseManagementCollectFilesJob, and in the
  Content-Disposition header built from the same value.

- PathHelper::normalizePath() removed every \p{C} character from the path it
  was given. That path is a real location in the file system, so removing the
  control characters made it point to nothing and zipping the directory failed.
  All three call sites pass real paths, never entries inside the ZIP.

ascii() now maps control characters to an underscore as well, so they no longer
reach the file system, and normalizePath() only strips NUL bytes.

Mantis: https://mantis.ilias.de/view.php?id=30709

* [FIX] 45051: Missing "Read by Users" Information on File Info Page

Since ILIAS 9 the info page of a file object no longer shows the read
statistics, i.e. "Lesezugriffe registrierter Benutzer" and "Gelesen von
Benutzern (Anzahl)", nor the creation date and the owner.

buildInfoScreen() called hideFurtherSections(false) unconditionally. That marks
every section created afterwards as hidden and, because of the false, drops the
toggle that would unfold them again. ilInfoScreenGUI::addObjectSections() adds
its section while rendering, hence after that call, so "Additional Information"
was rendered with style="display:none;" and no way to reveal it.

The call comes from the kiosk mode implementation, where a lean info screen is
wanted, but unlike the other kiosk specific parts of the method it was never
guarded by $kiosk_mode. It is now, which restores the pre ILIAS 9 behaviour for
the regular info page and keeps the kiosk view unchanged.

Mantis: https://mantis.ilias.de/view.php?id=45051

* sync language files

* 0048153: enforce extraction limits in Unzip

Mantis: 0048153
Signed-off-by: Releasemanager <webmaster@ilias.de>

* Container: check if trash functions are called from administration

Signed-off-by: Releasemanager <webmaster@ilias.de>

* Course: add missing permission checks in ilObjCourseGUI (48026)

Signed-off-by: Releasemanager <webmaster@ilias.de>

* fix plugin CSS/JS paths

Signed-off-by: Releasemanager <webmaster@ilias.de>

* Tree: quote sort field in ilTreeTrashQueries (48128)

Signed-off-by: Releasemanager <webmaster@ilias.de>

* LTI: Enforce release settings access

Signed-off-by: Releasemanager <webmaster@ilias.de>

* Course: add permission check for objectives settings (47893)

Signed-off-by: Releasemanager <webmaster@ilias.de>

* fixed 48067: Authenticated RCE via MediaPool

Signed-off-by: Releasemanager <webmaster@ilias.de>

* fixed 48152

Signed-off-by: Releasemanager <webmaster@ilias.de>

* fix(file): confine ilFileXMLParser COPY-mode path to the import dir

Signed-off-by: Releasemanager <webmaster@ilias.de>

* fix(soap): reject COPY/REST modes in ilSoapFileAdministration::addFile()

Signed-off-by: Releasemanager <webmaster@ilias.de>

* Release 10.10

---------

Signed-off-by: Releasemanager <webmaster@ilias.de>
Co-authored-by: Alexander Killing <killing@leifos.de>
Co-authored-by: iszmais <45942348+iszmais@users.noreply.github.com>
Co-authored-by: Uwe Kohnle <kohnle@internetlehrer-gmbh.de>
Co-authored-by: mjansen <mjansen@databay.de>
Co-authored-by: Thibeau Fuhrer <thibeau@sr.solutions>
Co-authored-by: Releasemanager <webmaster@ilias.de>
Co-authored-by: Stephan Kergomard <webmaster@kergomard.ch>
Co-authored-by: Sagun Karki <sagun.karki@minervis.com>
Co-authored-by: Abraham <abrahammordev@gmail.com>
Co-authored-by: Fabian Helfer <fhelfer@databay.de>
Co-authored-by: Stefan Meyer <meyer@leifos.de>
Co-authored-by: Fabian Helfer <82493694+fhelfer@users.noreply.github.com>
Co-authored-by: Ahmed Hamouda <ahm3dhamouda@gmail.com>
Co-authored-by: BettyFromHH <solzbacb@hsu.hamburg>
Co-authored-by: dkippKPG <daniel.kipp@kroepelin-projekte.de>
Co-authored-by: Tim Schmitz <schmitz@leifos.de>
Co-authored-by: Saúl Díaz <sauldiazdiaz210@gmail.com>
Co-authored-by: Ilja Lukin <ilja.lukin@fh-dortmund.de>
Co-authored-by: Sagun Karki <51822939+sKarki999@users.noreply.github.com>
Co-authored-by: Tim Schmitz <104776863+schmitz-ilias@users.noreply.github.com>
Co-authored-by: Fabian Schmid <fabian@sr.solutions>
Co-authored-by: André Schweigert (FAU) <162575681+andreschweigert@users.noreply.github.com>
Co-authored-by: Matthias Kunkel <mkunkel@me.com>
Co-authored-by: Fabian Wolf <wolf@ilias.de>
Co-authored-by: Lukas Eichenauer <47783030+lukas-heinrich@users.noreply.github.com>
Co-authored-by: Matheus Zych <mzych@databay.de>
Co-authored-by: Marvin Beym <79150442+mBeym@users.noreply.github.com>
Co-authored-by: Fred Neumann <neumann@ilias.de>
Co-authored-by: iszmais <iszmais@databay.de>
Co-authored-by: Andre Schweigert <andre.schweigert@fau.de>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

improvement php Pull requests that update Php code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants