All page names need to be in English.
en da  de  fr  it  ja  km  nl  ru  zh


From TYPO3Wiki
Jump to: navigation, search


Feature: #20194 - Configuration for displaying the "Save & View" button


The "Save & View" button is configurable by TSConfig "TCEMAIN.preview.disableButtonForDokType" (CSV of "doktype" IDs) to disable the button for custom page "doktypes". The default value is set in the PHP implementation: "254, 255, 199" (Storage Folder, Recycler and Menu Seperator)


The "Save & View" button is no longer displayed in folders and recycler pages.

Feature: #34922 - Allow .ts file extension for static TypoScript templates


Only these TypoScript file names were allowed:

  • constants.txt
  • setup.txt
  • include_static.txt
  • include_static_files.txt

The ts file extension has been allowed for constants and setup and is prioritised over txt.


There is a little performance impact when loading the TypoScript from scratch like in the backend and frontend without cache as the new file extension is always tested.

Feature: #48947 - Avatars for backend users


To improve the user experience in collaborative content editing, avatars for backend users have been introduced. Avatars will be either user defined by uploading a custom image or generated by the system.


The avatars will be shown in the topbar, users list and other places.

Feature: #56133 - Replace file feature for fal file list


Now its possible to replace files for a specific record at the extended view in the FAL record list.


Provides a new button "replace" at the extended view in FAL equal to DAM. It's possible to replace a file * with a new one -> old file will be overwritten; identifier of the file object will be kept * with a new one -> old file will be deleted; identifier of the file object will be changed to the new filename

The file replacing also respects unique file names.

Feature: #56644 - Hook for InlineRecordContainer::checkAccess()


Hook to post-process InlineRecordContainer::checkAccess result. InlineRecordContainer::checkAccess is used to check the access to related inline records. It's implemented in the same way as the hook $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/alt_doc.php']['makeEditForm_accessCheck'] in the EditDocumentController.

Register it like this:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tceforms_inline.php']['checkAccess'][] = 'My\\Package\\HookClass->hookMethod';

Feature: #59231 - Hook for AbstractUserAuthentication::checkAuthentication()


Hook to post-process login failures in AbstractUserAuthentication::checkAuthentication. By default the process sleeps for five seconds in case of failing. By using this hook, different solutions for brute force protection can be implemented.

Register like this:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['postLoginFailureProcessing'][] = 'My\\Package\\HookClass->hookMethod';

Feature: #59384 - XML parser options for xml2tree()


GeneralUtility::xml2tree() gets an optional parameter: an array that can hold options for the parser. Those will simply be passed through to the PHP-function xml_parser_set_option().

GeneralUtility::xml2tree($xmlData, 999, array(XML_OPTION_SKIP_WHITE => 1));


It's just an optional parameter. If you don't specify it, simply no additional initialisation of the XML-parser will be done.

Feature: #59570 - Add description-field for filemounts


A new field "description" has been added to the table sys_filemounts. With the new field it is possible to give a short description what a certain filemount should be used for or which documents it contains, etc.


The new field is optional and can be used in all projects.

Feature: #65698 - Additional localization files in backend workspace module


The AdditionalResourceService of the workspace module in the backend is extended by the functionality to register custom localization files that are forwarded to the PageRenderer in the end. This way, labels can be accessed in JavaScript using the TYPO3.l10n.localize() function for instance.


Feature: #66070 - Configure anchor for pagination widget


This feature allows to add a key "section" to the configuration of a fluid pagination widget. The anchor gets appended to every link of the pagination widget. The "" viewHelper used by the pagination widget already supports this.


The following example will render the page browser having a section parameter "#archive" appended to every link

<f:widget.paginate objects="{plantpestWarnings}" as="paginatedWarnings" configuration="{section: 'archive', itemsPerPage: 10, insertAbove: 0, insertBelow: 1, maximumNumberOfLinks: 10}">


If the "section" attribute does not get specified or no configuration is supplied at all then no section parameter (#section) will get appended to the links and the pagination widget behaves as usual.

Feature: #67228 - Emit Signal when an IndexRecord is marked as missing


The new signal recordMarkedAsMissing is emitted when the FAL indexer encounters a sys_file record which does not have a corresponding filesystem entry and marks it as missing. It passes the sys_file record uid.


This can be used by extensions that provide or extend file management capabilities (versioning, synchronizations, recovery etc).

Feature: #67290 - DBAL: DBMS specific conversion between Meta/MySQL field types


DBAL did a generic translation between MySQL native and DBMS specific field types.

The translation of field types has been enhanced to allow more specific conversions per DBMS driver. Overrides for PostgreSQL have been added with optimized mappings for BLOB, SERIAL, DOUBLE and INTEGER columns.


Running PostgreSQL, the Upgrade Wizard in the Install Tool will show a lot of field alterations as the optimized mappings will be used.

Feature: #67293 - Dependency ordering service


In many cases it is necessary to establish a sorted list of items from a set of "dependencies". The ordered list is then used to execute actions in the given order.

Some examples from the Core are: - Hook execution order - Extension loading order - Listing of menu items

The dependencies are therefore specified in a relative manner, outlining that an item has to be executed/loaded/listed "before" or "after" some other item.

Typical use case:

$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['someExt']['someHook'][<some id>] = [
    'handler' => someClass::class,
    'runBefore' => [ <some other ID> ],
    'runAfter' => [ ... ],

In order to evaluate such relative dependencies to finally have a sorted list for ['someHook'], we introduced a new helper class \TYPO3\CMS\Core\Service\DependencyOrderingService, which does the evaluation work for you.

Example usage:

$hooks = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['someExt']['someHook'];
$sortedHooks = GeneralUtility:makeInstance(DependencyOrderingService::class)->orderByDependencies($hooks , 'runBefore', 'runAfter');

$sortedHooks will then contain the content of $hooks, but sorted according to the dependencies.

The DependencyOrderingService class also detects cycles in the dependencies and will throw an Exception in case conflicting dependencies have been defined.

In case the initial list does not specify a dependency for an item, those items will be put last in the final sorted list.

Feature: #67545 - AJAX call to check whether file exists


A Backend AJAX call to check whether a file exists has been added. The call needs two parameters to work properly.


The method can be called with TYPO3.settings.ajaxUrls['TYPO3_tcefile::fileExists']. The parameters fileName and fileTarget are required:

  • fileName: Name of the file
  • fileTarget: Combined identifier of target directory for the file

Feature: #67574 - Display online status in backend user list


A badge that shows the online status of a backend user has been integrated.


The badge will be shown next to the username in the backend user list.

Feature: #67578 - Add description-field for backend-users


A new field "description" has been added to the table be_users. With the new field it is possible to give a short description about a user, like there is already for be_groups.


The new field is optional and can be used in all projects.

Feature: #67765 - Introduce TypoLinkCodecService


The new TypoLinkCodecService class helps to simplify encoding and decoding of TypoLink strings.

A given TypoLink string can be passed to the decode method, which will return an associative array with the decoded parts. The encode method takes care of assembling a valid TypoLink string for an array of TypoLink parts.

The encoding uses proper quoting and escaping, which allows safe usage of characters like "\<space>.

Feature: #67808 - Introduce Application classes for entry points and equivalent RequestHandlers


All entry points are encapsulating all previous initialization code in an Application class depending on the TYPO3_MODE and several context-dependant constraints. Each Application class registers Request Handlers to the TYPO3 Bootstrap to run a certain request type (e.g. eID or TSFE-logic, or AJAX requests in the Backend). Each Application is handed over the Class Loader provided by Composer.

There are four types of Applications provided by the TYPO3 Core:


All incoming web requests coming to index.php in the main directory, handling all TSFE and eID requests. The Application sets TYPO3_MODE=FE very early. The Application checks if all configuration is given, otherwise redirects to the TYPO3 Install Tool.


All incoming web requests for any regular Backend call inside typo3/*. This handles three types of Request Handlers: - The AJAX Request Handler, which is triggered on requests with an "ajaxID" GET Parameter given. - The Backend Module Request Handler, which handles all types of modules triggered on requests with an "M" GET Parameter - The regular Request handler for typical other backend calls on index.php. The Application checks if all configuration is given, otherwise redirects to the TYPO3 Install Tool.


All CLI Requests handled by cli_dispatch.php. Only executes the parts that are necessary for Backend CLI Scripts used with the cliKey syntax. The typical CliRequestHandler is used for handling requests set up by this Application.


The install tool Application only runs with a very limited bootstrap set up with a Failsafe Package Manager not taking the ext_localconf.php scripts of installed extensions into account.

Feature: #67932 - New rsaauth API


The rsaauth API has been rewritten to be more generic and can now be used easily in more parts of the core as well as in third party extensions.


Form fields (e.g. password fields) can be encrypted before transmission. This helps to improve the security of your and your user's data.



Encoding is done automatically via a JavaScript function which gets a public key and encrypts the data.

1) Include JavaScript to parse form fields for encryption. You can either choose to include a RequireJS module or a plain Javascript file.

$rsaEncryptionEncoder = GeneralUtility::makeInstance(\TYPO3\CMS\Rsaauth\RsaEncryptionEncoder::class);
$rsaEncryptionEncoder->enableRsaEncryption(); // Adds plain JavaScript
$rsaEncryptionEncoder->enableRsaEncryption(TRUE); // Adds RequireJS module
  1. Activate encryption for your from fields with the data attribute data-rsa-encryption.
<input type="password" id="pass" name="pass" value="" data-rsa-encryption="" />

If you want the encrypted value to be stored in another field, you have to use the RequiredJS module and you can pass the id of that form field as value to the data attribute.

<input type="password" id="t3-password" name="p_field" value="" data-rsa-encryption="t3-field-userident" />
<input type="hidden" name="userident" id="t3-field-userident" />


To decode your data you can use the method TYPO3\CMS\Rsaauth\RsaEncryptionDecoder::decrypt which can either handle a string or an array as parameter.

Notice: A RSA public key can only be used once to decrypt data. If you encrypt multiple fields in your form you have to pass an array to the decrypt function with all data you want to decrypt. The function parses the values for a rsa: prefix so you can be sure that non-matching data will not be changed.

$rsaEncryptionDecoder = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Rsaauth\RsaEncryptionDecoder::class);

// Decrypt a single string
$password = $loginData['uident'];
$decryptedPassword = $rsaEncryptionDecoder->decrypt($password);

// Decrypt an array
if ($this->isRsaAvailable()) {
    $parameters['be_user_data'] = $this->getRsaEncryptionDecoder()->decrypt($parameters['be_user_data']);

Feature: #67950 - Move CE table options from flexform to tt_content


The CE table (processing) configuration

  • Table caption
  • Field delimiter
  • Text enclosure
  • Table header position
  • Use table footer were in EXT:css_styled_content configured/saved in a flexform. This has now been moved to regular database fields.


When EXT:css_styled_content isn't installed a Migration wizard is shown in the install tool to move the flexform values to regular database fields in the tt_content table.

Feature: #68022 - Added base date attribute to DateViewHelper


The DateViewHelper has been improved with an optional attribute named base. The attribute can be used to define a base-date when using a relative time specification for date. If date is a DateTime object, base is ignored.

The possible relative date format specification can be found in:

< format="Y" base="{dateObject}">-1 year</>

This will result in the output 2016 assuming the dateObject is some date in 2017.

Feature: #68047 - Emit a signal for each mapped object


The signal afterMappingSingleRow is emitted whenever the DataMapper creates an object.

Feature: #68184 - Paths to typo3/cms package and document root can be specified in composer.json


With the new composer installer it is possible to specify the path of the document root and also the path of the typo3/cms package.

It can be specified in the extra section of your composer root package like that:

    "repositories": [
        { "type": "composer", "url": "" }
    "name": "typo3/cms-base-distribution",
    "description" : "TYPO3 CMS Base Distribution",
    "license": "GPL-2.0+",
    "config": {
        "vendor-dir": "Packages/Libraries",
        "bin-dir": "bin"
    "require": {
        "typo3/cms": "dev-master"
    "require-dev": {
        "mikey179/vfsStream": "1.3.*@dev",
        "phpunit/phpunit": "~4.4.0",
        "twbs/bootstrap": "3.3.*",
        "fortawesome/font-awesome": "4.2.*"
    "extra": {
        "typo3/cms": {
            "cms-package-dir": "{$vendor-dir}/typo3/cms",
            "web-dir": "web"


When specifying the configuration like mentioned above, the directory structure of a composer install will change.

Feature: #68186 - PSR-7 support for eID added


The eID dispatcher now supports eID scripts using the TYPO3\CMS\Core\Http\ControllerInterface. This allows to handle the request using the Request and Response objects.

Feature: #68197 - Show a dialog for existing files on upload


The "Shall existing files be overwritten?" confirm dialog when uploading files in the "Files" backend module has been replaced by a modal window that appears when there are really file conflicts.


The user is able to define an action for each conflicted image. A file can be replaced, renamed or skipped.

Feature: #68218 - Lock edit for tt_content


Content elements can now be restricted to be editable by admins only on a per record base. This has already been possible for pages with the checkbox "Restrict editing by non-Admins".


This is useful to generally allow editors to edit content but be able to assure that important elements like the imprint or specific plugins are not changed.

Feature: #68282 - Make DatabaseRecordList configurable to be editable


A new property editable is added to \TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList which is set to TRUE by default. If set to FALSE, the records can't be edited.


The record list in the Element Browser benefits from the new setting as the localization view is now enabled. This will show editors translated records properly intended below the record with the default language.

Feature: #68395 - Allow real copies of content elements into foreign languages


A new button has been added to each column in the "Page" module which allows "real" copies of content element into a language. This allows to create copies from any language into the destination. References, like FAL records, become independent records and are not related to the original record, as there is no parent anymore.


The button will be either displayed as as standalone button if a page has no records in the default language or as a split button if there are records in the default language.

Creating real copies will cause the loss of any functionality between the copy and the default language (e.g. diff), as the copy is not defined as child of the element where it was copied from.

Feature: #68589 - Add CLI command to dump class loading information


In rare cases it is useful to update the additional class loading information TYPO3 writes in non composer mode. We now provide a CLI command which does that.


By executing typo3/cli_dispatch.phpsh extbase extension:dumpclassloadinginformation on the command line, the class loading information of all active extensions is updated.