From 9c5bd9fde93d98952366fa6d2f43efd6bd35321c Mon Sep 17 00:00:00 2001 From: Konrad Michalik Date: Fri, 5 Jun 2026 08:50:15 +0200 Subject: [PATCH 1/3] feat: add backend avatar provider for move-elevator.de users --- .../Avatar/MoveElevatorAvatarProvider.php | 36 ++++++++++++++++++ README.md | 7 ++++ Resources/Public/Icons/me.png | Bin 0 -> 17385 bytes Resources/Public/Icons/me.svg | 1 + ext_localconf.php | 5 +++ 5 files changed, 49 insertions(+) create mode 100644 Classes/Backend/Avatar/MoveElevatorAvatarProvider.php create mode 100644 Resources/Public/Icons/me.png create mode 100644 Resources/Public/Icons/me.svg diff --git a/Classes/Backend/Avatar/MoveElevatorAvatarProvider.php b/Classes/Backend/Avatar/MoveElevatorAvatarProvider.php new file mode 100644 index 0000000..c7a127d --- /dev/null +++ b/Classes/Backend/Avatar/MoveElevatorAvatarProvider.php @@ -0,0 +1,36 @@ + $backendUser + */ + public function getImage(array $backendUser, mixed $size): ?Image + { + if ((int)($backendUser['avatar'] ?? 0) > 0) { + return null; + } + + $email = strtolower((string)($backendUser['email'] ?? '')); + if ($email === '' || !str_ends_with($email, self::EMAIL_DOMAIN)) { + return null; + } + + return new Image( + PathUtility::getPublicResourceWebPath(self::LOGO_PATH), + $size, + $size, + ); + } +} diff --git a/README.md b/README.md index f72f068..b573439 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ This extension provides several tools for TYPO3 integrators and developers. - Adds a CSS view helper that enables the rendering of a `noscript` variant and allows inline styles to be replaced by a key-value-based `inlineReplacements` option flag - Adds a sentry middleware and frontend module ... - Adds a custom TYPO3 page renderer template which removes some unnecessary spaces and changes the order of inline CSS injection +- Adds a backend avatar provider that assigns the move elevator logo to backend users with an `@move-elevator.de` email address (when no custom avatar is set) ## Version support @@ -96,6 +97,12 @@ The `ContentMinifierEventListener` automatically minifies the HTML output of all | Remove CKEditor data attributes | Strips `data-list-item-id` attributes from `
  • ` elements added by CKEditor 5 ([TYPO3#109002](https://forge.typo3.org/issues/109002), [CKEditor5#19006](https://github.com/ckeditor/ckeditor5/issues/19006)) | | Trim tag content whitespace | Removes leading/trailing whitespace inside `h1`–`h6`, `p`, `li`, `td`, `th`, `dt`, `dd`, `button`, and `label` tags | +### Backend Avatar + +The `MoveElevatorAvatarProvider` automatically assigns the move elevator logo (`Resources/Public/Icons/me.svg`) as the backend avatar for any backend user whose email address ends with `@move-elevator.de`. + +Personal avatars uploaded via the user settings always take precedence — the logo is only used as a fallback when no custom avatar is configured. + ### Middlewares | Middleware | Path/ Parameter | Description | diff --git a/Resources/Public/Icons/me.png b/Resources/Public/Icons/me.png new file mode 100644 index 0000000000000000000000000000000000000000..568bb645d18d3b168259be45aaa9e80b7da53242 GIT binary patch literal 17385 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 U2^+ll3IG5A07*qoM6N<$f*y+Tg8%>k literal 0 HcmV?d00001 diff --git a/Resources/Public/Icons/me.svg b/Resources/Public/Icons/me.svg new file mode 100644 index 0000000..0ac693f --- /dev/null +++ b/Resources/Public/Icons/me.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ext_localconf.php b/ext_localconf.php index 6bc5d17..cee45da 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -1,5 +1,6 @@ AssetRenderer::class, ]; + $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['getBackendUserAvatar']['moveElevatorAvatar'] = [ + 'provider' => MoveElevatorAvatarProvider::class, + ]; + $extConf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get(Configuration::EXT_KEY->value); if ((bool)($extConf['sentryBackendEnabled'] ?? false)) { $GLOBALS['TYPO3_CONF_VARS']['SYS']['debugExceptionHandler'] = SentryClient\DebugExceptionHandler::class; From 5c7a69b3a5f724ccc35e3d8c77b296540b95cf34 Mon Sep 17 00:00:00 2001 From: Konrad Michalik Date: Fri, 5 Jun 2026 09:05:33 +0200 Subject: [PATCH 2/3] refactor: migrate avatar provider to system resource API --- .../Backend/Avatar/MoveElevatorAvatarProvider.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Classes/Backend/Avatar/MoveElevatorAvatarProvider.php b/Classes/Backend/Avatar/MoveElevatorAvatarProvider.php index c7a127d..441b875 100644 --- a/Classes/Backend/Avatar/MoveElevatorAvatarProvider.php +++ b/Classes/Backend/Avatar/MoveElevatorAvatarProvider.php @@ -6,13 +6,19 @@ use TYPO3\CMS\Backend\Backend\Avatar\AvatarProviderInterface; use TYPO3\CMS\Backend\Backend\Avatar\Image; -use TYPO3\CMS\Core\Utility\PathUtility; +use TYPO3\CMS\Core\SystemResource\Publishing\SystemResourcePublisherInterface; +use TYPO3\CMS\Core\SystemResource\SystemResourceFactory; -final class MoveElevatorAvatarProvider implements AvatarProviderInterface +final readonly class MoveElevatorAvatarProvider implements AvatarProviderInterface { private const string EMAIL_DOMAIN = '@move-elevator.de'; private const string LOGO_PATH = 'EXT:typo3_toolbox/Resources/Public/Icons/me.svg'; + public function __construct( + private SystemResourceFactory $systemResourceFactory, + private SystemResourcePublisherInterface $resourcePublisher, + ) {} + /** * @param array $backendUser */ @@ -27,8 +33,10 @@ public function getImage(array $backendUser, mixed $size): ?Image return null; } + $resource = $this->systemResourceFactory->createPublicResource(self::LOGO_PATH); + return new Image( - PathUtility::getPublicResourceWebPath(self::LOGO_PATH), + (string)$this->resourcePublisher->generateUri($resource, null), $size, $size, ); From 27bc131282481774c7a2b0ab051dd6d745a6242d Mon Sep 17 00:00:00 2001 From: Konrad Michalik Date: Fri, 5 Jun 2026 09:44:34 +0200 Subject: [PATCH 3/3] style: expand empty constructor body for braces_position rule --- Classes/Backend/Avatar/MoveElevatorAvatarProvider.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Classes/Backend/Avatar/MoveElevatorAvatarProvider.php b/Classes/Backend/Avatar/MoveElevatorAvatarProvider.php index 441b875..931e126 100644 --- a/Classes/Backend/Avatar/MoveElevatorAvatarProvider.php +++ b/Classes/Backend/Avatar/MoveElevatorAvatarProvider.php @@ -17,7 +17,8 @@ public function __construct( private SystemResourceFactory $systemResourceFactory, private SystemResourcePublisherInterface $resourcePublisher, - ) {} + ) { + } /** * @param array $backendUser