Feature: #99118 - PSR-14 event to define whether files are selectable

See forge#99118

Description

A new PSR-14 event \TYPO3\CMS\Backend\ElementBrowser\Event\IsFileSelectableEvent has been introduced. It allows to define whether a file can be selected in the file browser. Previously, this was only possible by overriding the \TYPO3\CMS\Backend\ElementBrowser\FileBrowser->fileIsSelectableInFileList() method via an XCLASS.

The event features the following methods:

  • getFile(): Returns the \TYPO3\CMS\Core\Resource\FileInterface in question
  • isFileSelectable(): Whether the file is allowed to be selected
  • allowFileSelection(): Allow selection of the file in question
  • denyFileSelection(): Deny selection of the file in question

Registration of the event in your extension's Services.yaml:

EXT:my_extension/Configuration/Services.yaml
MyVendor\MyExtension\Backend\MyEventListener:
  tags:
    - name: event.listener
      identifier: 'my-extension/backend/modify-file-is-selectable'
Copied!

The corresponding event listener class:

EXT:my_extension/Classes/Backend/MyEventListener.php
namespace MyVendor\MyExtension\Backend;

use TYPO3\CMS\Backend\ElementBrowser\Event\IsFileSelectableEvent;

final class MyEventListener {

    public function __invoke(IsFileSelectableEvent $event): void
    {
        // Deny selection of "png" images
        if ($event->getFile()->getExtension() === 'png') {
            $event->denyFileSelection();
        }
    }
}
Copied!

Impact

It is now possible to decide whether a file can be selected in the file browser, using an improved PSR-14 approach instead of cross classing.