Files
gutachten_t3/typo3/sysext/adminpanel/Classes/Utility/ResourceUtility.php
T
2026-10-19 08:18:39 +02:00

141 lines
4.5 KiB
PHP

<?php
declare(strict_types = 1);
namespace TYPO3\CMS\Adminpanel\Utility;
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
use TYPO3\CMS\Adminpanel\ModuleApi\ResourceProviderInterface;
use TYPO3\CMS\Adminpanel\ModuleApi\SubmoduleProviderInterface;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\PathUtility;
class ResourceUtility
{
/**
* Get additional resources (css, js) from modules and merge it to
* one array - returns an array of full html tags
*
* @param \TYPO3\CMS\Adminpanel\ModuleApi\ResourceProviderInterface[] $modules
* @return array
*/
public static function getAdditionalResourcesForModules(array $modules): array
{
$result = [
'js' => '',
'css' => '',
];
foreach ($modules as $module) {
if ($module instanceof ResourceProviderInterface) {
foreach ($module->getJavaScriptFiles() as $file) {
$result['js'] .= static::getJsTag($file);
}
foreach ($module->getCssFiles() as $file) {
$result['css'] .= static::getCssTag($file);
}
}
if ($module instanceof SubmoduleProviderInterface) {
$subResult = self::getAdditionalResourcesForModules($module->getSubModules());
$result['js'] .= $subResult['js'];
$result['css'] .= $subResult['css'];
}
}
return $result;
}
public static function getAdditionalResourcesForModule(ResourceProviderInterface $module): array
{
$result = [
'js' => '',
'css' => '',
];
foreach ($module->getJavaScriptFiles() as $file) {
$result['js'] .= static::getJsTag($file);
}
foreach ($module->getCssFiles() as $file) {
$result['css'] .= static::getCssTag($file);
}
return $result;
}
/**
* Returns a link tag with the admin panel stylesheet
* defined using TBE_STYLES
*
* @return string
*/
protected static function getAdminPanelStylesheet(): string
{
$result = '';
if (!empty($GLOBALS['TBE_STYLES']['stylesheets']['admPanel'])) {
$stylesheet = GeneralUtility::locationHeaderUrl($GLOBALS['TBE_STYLES']['stylesheets']['admPanel']);
$result = '<link rel="stylesheet" type="text/css" href="' .
htmlspecialchars($stylesheet, ENT_QUOTES | ENT_HTML5) . '" />';
}
return $result;
}
/**
* Get a css tag for file - with absolute web path resolving
*
* @param string $cssFileLocation
* @return string
*/
protected static function getCssTag(string $cssFileLocation): string
{
$css = '<link type="text/css" rel="stylesheet" href="' .
htmlspecialchars(
PathUtility::getAbsoluteWebPath(GeneralUtility::getFileAbsFileName($cssFileLocation)),
ENT_QUOTES | ENT_HTML5
) .
'" media="all" />';
return $css;
}
/**
* Get a script tag for JavaScript with absolute paths
*
* @param string $jsFileLocation
* @return string
*/
protected static function getJsTag(string $jsFileLocation): string
{
$js = '<script type="text/javascript" src="' .
htmlspecialchars(
PathUtility::getAbsoluteWebPath(GeneralUtility::getFileAbsFileName($jsFileLocation)),
ENT_QUOTES | ENT_HTML5
) .
'"></script>';
return $js;
}
/**
* Return a string with tags for main admin panel resources
*
* @return array
*/
public static function getResources(): array
{
$jsFileLocation = 'EXT:adminpanel/Resources/Public/JavaScript/AdminPanel.js';
$js = ResourceUtility::getJsTag($jsFileLocation);
$cssFileLocation = 'EXT:adminpanel/Resources/Public/Css/adminpanel.css';
$css = ResourceUtility::getCssTag($cssFileLocation);
return [
'css' => $css . ResourceUtility::getAdminPanelStylesheet(),
'js' => $js,
];
}
}