Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Classes/Traits/SourceSetViewHelperTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public function getImgResource(
?string $params = null,
?string $crop = null
): array {
$contentObject = ContentObjectFetcher::resolve($this->configurationManager);
$contentObject = ContentObjectFetcher::resolve($this->configurationManager, $this->renderingContext);
if ($contentObject === null) {
throw new Exception(static::class . ' requires a ContentObjectRenderer, none found', 1737808465);
}
Expand Down
42 changes: 36 additions & 6 deletions Classes/Utility/ContentObjectFetcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,17 @@
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;

class ContentObjectFetcher
{
public static function resolve(?ConfigurationManagerInterface $configurationManager = null): ?ContentObjectRenderer
{
$contentObject = null;
$request = ($configurationManager !== null && method_exists($configurationManager, 'getRequest')
? $configurationManager->getRequest()
: ($GLOBALS['TYPO3_REQUEST'] ?? null)) ?? $GLOBALS['TYPO3_REQUEST'] ?? null;
public static function resolve(
?ConfigurationManagerInterface $configurationManager = null,
?RenderingContextInterface $renderingContext = null
): ?ContentObjectRenderer {

$contentObject = null;
$request = static::getRequest($configurationManager, $renderingContext);
if ($request) {
$contentObject = static::resolveFromRequest($request);
}
Expand All @@ -45,4 +46,33 @@ protected static function resolveFromRequest(ServerRequestInterface $request): ?
$controller = $request->getAttribute('frontend.controller');
return $controller instanceof TypoScriptFrontendController ? $controller->cObj : null;
}

protected static function getRequest(
?ConfigurationManagerInterface $configurationManager = null,
?RenderingContextInterface $renderingContext = null
): ?ServerRequestInterface {

if ($renderingContext !== null) {
//TYPO3 v13+
if (method_exists($renderingContext, 'getAttribute')
&& method_exists($renderingContext, 'hasAttribute')
&& $renderingContext->hasAttribute(ServerRequestInterface::class)
) {
return $renderingContext->getAttribute(ServerRequestInterface::class);
}

//TYPO3 v12
if (method_exists($renderingContext, 'getRequest')) {
return $renderingContext->getRequest();
}
}

if ($configurationManager !== null) {
if (method_exists($configurationManager, 'getRequest')) {
return $configurationManager->getRequest();
}
}

return $GLOBALS['TYPO3_REQUEST'] ?? null;
}
}
2 changes: 1 addition & 1 deletion Classes/ViewHelpers/Content/AbstractContentViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ protected function getPageUid(): int
*/
protected function getRenderedRecords(array $rows): array
{
$contentObject = ContentObjectFetcher::resolve($this->configurationManager);
$contentObject = ContentObjectFetcher::resolve($this->configurationManager, $this->renderingContext);

/** @var array $loadRegister */
$loadRegister = $this->arguments['loadRegister'];
Expand Down
2 changes: 1 addition & 1 deletion Classes/ViewHelpers/Content/InfoViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public function render()
$record = false;

if (0 === $contentUid) {
$cObj = ContentObjectFetcher::resolve($this->configurationManager);
$cObj = ContentObjectFetcher::resolve($this->configurationManager, $this->renderingContext);

if ($cObj === null) {
throw new Exception('v:content.info requires a ContentObjectRenderer, none found', 1737807859);
Expand Down
6 changes: 3 additions & 3 deletions Classes/ViewHelpers/Format/Placeholder/LipsumViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public static function renderStatic(
$lipsum = implode("\n", $paragraphs);
if ($arguments['html']) {
$tsParserPath = $arguments['parseFuncTSPath'] ? '< ' . $arguments['parseFuncTSPath'] : null;
$lipsum = static::getContentObject()->parseFunc($lipsum, [], (string) $tsParserPath);
$lipsum = static::getContentObject($renderingContext)->parseFunc($lipsum, [], (string) $tsParserPath);
}
return $lipsum;
}
Expand Down Expand Up @@ -164,12 +164,12 @@ protected static function getDefaultLoremIpsum(): string
return $safeLipsum;
}

protected static function getContentObject(): ContentObjectRenderer
protected static function getContentObject(RenderingContextInterface $renderingContext): ContentObjectRenderer
{
/** @var ConfigurationManagerInterface $configurationManager */
$configurationManager = GeneralUtility::makeInstance(ConfigurationManagerInterface::class);
/** @var ContentObjectRenderer|null $contentObject */
$contentObject = ContentObjectFetcher::resolve($configurationManager);
$contentObject = ContentObjectFetcher::resolve($configurationManager, $renderingContext);
if ($contentObject === null) {
throw new Exception('v:format.placeholder.lipsum requires a ContentObjectRenderer, none found', 1737807859);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ public function preprocessImage(?string $imageSource = null): void

$tsfeBackup = FrontendSimulationUtility::simulateFrontendEnvironment();

$contentObject = ContentObjectFetcher::resolve($this->configurationManager);
$contentObject = ContentObjectFetcher::resolve($this->configurationManager, $this->renderingContext);
if ($contentObject === null) {
throw new Exception(static::class . ' requires a ContentObjectRenderer, none found', 1737808465);
}
Expand Down
2 changes: 1 addition & 1 deletion Classes/ViewHelpers/Media/SourceViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ public function render()
if (is_string($imageSource) && ContextUtility::isBackend() && '../' === mb_substr($imageSource, 0, 3)) {
$imageSource = mb_substr($imageSource, 3);
}
$contentObject = ContentObjectFetcher::resolve($this->configurationManager);
$contentObject = ContentObjectFetcher::resolve($this->configurationManager, $this->renderingContext);
if ($contentObject === null) {
throw new Exception('v:media.source requires a ContentObjectRenderer, none found', 1737807859);
}
Expand Down
2 changes: 1 addition & 1 deletion Classes/ViewHelpers/Page/LanguageMenuViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ public function render()
return '';
}
/** @var ContentObjectRenderer|null $contentObject */
$contentObject = ContentObjectFetcher::resolve($this->configurationManager);
$contentObject = ContentObjectFetcher::resolve($this->configurationManager, $this->renderingContext);
if ($contentObject === null) {
throw new Exception('v:page.languageMenu requires a ContentObjectRenderer, none found', 1737807859);
}
Expand Down
2 changes: 1 addition & 1 deletion Classes/ViewHelpers/Render/RequestViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public static function renderStatic(
$pluginName = $arguments['pluginName'];
$requestArguments = is_array($arguments['arguments']) ? $arguments['arguments'] : [];
$configurationManager = static::getConfigurationManager();
$contentObjectBackup = ContentObjectFetcher::resolve($configurationManager);
$contentObjectBackup = ContentObjectFetcher::resolve($configurationManager, $renderingContext);
$configurationBackup = $configurationManager->getConfiguration(
ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK
);
Expand Down
6 changes: 3 additions & 3 deletions Classes/ViewHelpers/Render/UncacheViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ public static function renderStatic(
$conf['partialRootPaths'] = $renderingContext->getTemplatePaths()->getPartialRootPaths();
}

$contentObjectRenderer = static::getContentObject();
$contentObjectRenderer = static::getContentObject($renderingContext);

$content = $contentObjectRenderer->cObjGetSingle(
'COA_INT',
Expand All @@ -121,12 +121,12 @@ public static function renderStatic(
return $content;
}

protected static function getContentObject(): ContentObjectRenderer
protected static function getContentObject(RenderingContextInterface $renderingContext): ContentObjectRenderer
{
/** @var ConfigurationManagerInterface $configurationManager */
$configurationManager = GeneralUtility::makeInstance(ConfigurationManagerInterface::class);
/** @var ContentObjectRenderer|null $contentObject */
$contentObject = ContentObjectFetcher::resolve($configurationManager);
$contentObject = ContentObjectFetcher::resolve($configurationManager, $renderingContext);
if ($contentObject === null) {
throw new Exception('v:render.uncache requires a ContentObjectRenderer, none found', 1737808465);
}
Expand Down
2 changes: 1 addition & 1 deletion Classes/ViewHelpers/Resource/AbstractImageViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public function preprocessImages(array $files, bool $onlyProperties = false): ?a

$tsfeBackup = FrontendSimulationUtility::simulateFrontendEnvironment();

$contentObject = ContentObjectFetcher::resolve($this->configurationManager);
$contentObject = ContentObjectFetcher::resolve($this->configurationManager, $this->renderingContext);
if ($contentObject === null) {
throw new Exception(static::class . ' requires a ContentObjectRenderer, none found', 1737807859);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ public function getRecord(int $id): ?array

public function getActiveRecord(): array
{
$contentObject = ContentObjectFetcher::resolve($this->configurationManager);
$contentObject = ContentObjectFetcher::resolve($this->configurationManager, $this->renderingContext);
if ($contentObject === null) {
throw new Exception(static::class . ' requires a ContentObjectRenderer, none found', 1737807859);
}
Expand Down
2 changes: 2 additions & 0 deletions Tests/Fixtures/Classes/DummySourceSetViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@

use FluidTYPO3\Vhs\Traits\SourceSetViewHelperTrait;
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;

class DummySourceSetViewHelper
{
use SourceSetViewHelperTrait;

public ?ConfigurationManagerInterface $configurationManager = null;
public array $arguments = [];
public ?RenderingContextInterface $renderingContext = null;

public static function preprocessSourceUri(string $src, array $arguments): string
{
Expand Down
Loading