Feature Wiki

Information about planned and released features

Tabs

Routing

1 General

Maintainer and tester

The Routing mechanism (or component) is currently part of the UICore component.

  • UICore
    • Authority to Sign off on Conceptual Changes: tfuhrer
    • Authority to Sign off on Code Changes: tfuhrer , fschmid
    • Authority to Curate Test Cases: tfuhrer
    • Authority to (De-)Assign Authorities: tfuhrer
    • Assignee for Security Reports: tfuhrer
    • Assignee for Security Issues: tfuhrer
    • Unit-specific Guidelines, Rules, and Regulations: LINK MISSING

 

Additional

  • Many ILIAS components

Roadmap for the UICore services

Static Routing (ilCtrl)

The superficial goal for the routing service (ilCtrl) can be easily explained by showing the following example:

  • (a) http://ilias.local/ilias.php?baseClass=ilrepositorygui&cmdNode=xf:lt&cmdClass=ilObjCourseGUI&cmd=view&ref_id=85
  • (b) https://ilias.local/repository/course/view/85

ILIAS currently uses an URL similar to (a) in order to show the content of a course. Visually, the goal will be to get the same result using something in the fashion of URL (b), which is way more reabable and anticipatable. Most importantly though, it will be static, meaning the URL for viewing the content of course nr. 85 will always be the same. For the current URL this is not the case, due to the dynamic nature of the control-flow, which will be passed to each request URL and is visible by the cmdNode parameter.

No global state manipulation

Besides having some unpleasing URLs, ilCtrl also struggles with another issue behind the scenes. Currently it is possible to alter the state of ilCtrl globally, which means any controler can affect the outcome of methods which generate link targets (URLs). Culprits for such manipulations are mainly ilCtrl::setParameterByClass() and ilCtrl::saveParameterByClass(), which will most likely be deprecated in the future. This causes very unpredictable outcomes which are only ever recognised at runtime, due to the dynamic nature of the control flow. Besides deprecating these mechanis, we will also introduce new methods to generate isolated link targets if/when possible.

No dynamic control flow

The underlying structure of ilCtrl is a graph, which has one entrypoint and one endpoint per request, but may use different paths accross one or multiple other controllers, depending on the cmdNode request parameter. This structure has been used to reuse functionalities of controllers by routing through them. However, routing through multiple controllers, paradoxically, has led to much redundancy. This is because every controller needs to implement the executeCommand() method which is called by ilCtrl to perform tasks. Because a controller often cannot know which controllers are called prior to them, developers tend to perform the same tasks in every controller (e.g. access-checks, setting up tabs, setting request parameters, etc). This issue can only be properly adressed by changing the underlying data structure and use a more predictable contept instead. To reduce the amount of redundant code, we could introduce an abstract controller which implements the basic requirements like the executeCommand().

No ilCtrl::getHTML()

Next to executeCommand() which is used to forward and dispatch the current request, there is also a getHTML() method, which is used to reuse HTML generated by controllers. This method disrupts the actual control flow by starting a new isolated forwarding process to gather HTML output along the way. This causes even more unexpected behaviour and has nothing to do with routing. While migrating more controllers to UI components there will simultaneously be less controllers that depend on this mechanic. This method will be deprecated in the future.

Actual template engine

ILIAS still uses a relict as a template engine which has been EOL since 2007 and does not compare to what any modern template angine can achieve today. The goal will eventually be to replace this relict with a more modern engine like Blade or Twig, which in the end, should only ever be used in the UI framework.

 

2 Projects

The following projects are planned or have been realised for this component:

NEW Projects

Ongoing Projects

Projects On-Hold

Completed Projects

3 Suggested Features

In the following list you can add a request for a new feature or pick-up an already suggested feature about that should be decided again. The lists below show existing suggestions and scheduled features of this component.

READY for Jour fixe

Already suggested

4 Accepted Features

The following features have been accepted for trunk but are not yet scheduled for a specific ILIAS version.

5 Scheduled Features

The following features have been developed and published in ILIAS ILIAS 12:

The following features have been developed and published in ILIAS ILIAS 11:

6 Redundant and Rejected Feature Requests

Requests that are redundant (already implemented in other requests)

Rejected Feature Requests

Last edited: 24. Nov 2025, 11:55, Kunkel, Matthias [mkunkel]