• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

FluidTYPO3 / vhs / 28588690713

02 Jul 2026 12:06PM UTC coverage: 70.321% (+0.4%) from 69.971%
28588690713

Pull #1986

github

web-flow
Merge 072edf753 into a434c98d5
Pull Request #1986: [TASK] Update test base class

21 of 32 new or added lines in 7 files covered. (65.63%)

81 existing lines in 10 files now uncovered.

4836 of 6877 relevant lines covered (70.32%)

4.41 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

53.57
/Classes/View/UncacheTemplateView.php
1
<?php
2
namespace FluidTYPO3\Vhs\View;
3

4
/*
5
 * This file is part of the FluidTYPO3/Vhs project under GPLv2 or later.
6
 *
7
 * For the full copyright and license information, please read the
8
 * LICENSE.md file that was distributed with this source code.
9
 */
10

11
use TYPO3\CMS\Core\Utility\GeneralUtility;
12
use TYPO3\CMS\Core\Utility\VersionNumberUtility;
13
use TYPO3\CMS\Extbase\Mvc\Controller\ControllerContext;
14
use TYPO3\CMS\Extbase\Mvc\ExtbaseRequestParameters;
15
use TYPO3\CMS\Extbase\Mvc\Request;
16
use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
17
use TYPO3\CMS\Fluid\Compatibility\TemplateParserBuilder;
18
use TYPO3\CMS\Fluid\Core\Rendering\RenderingContext;
19
use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextFactory;
20
use TYPO3\CMS\Fluid\View\TemplateView;
21
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
22

23
class UncacheTemplateView extends TemplateView
24
{
25
    public function callUserFunction(string $postUserFunc, array $conf): string
26
    {
27
        $partial = $conf['partial'] ?? null;
4✔
28
        $section = $conf['section'] ?? null;
4✔
29
        $arguments = $conf['arguments'] ?? [];
4✔
30
        $parameters = $conf['controllerContext'] ?? null;
4✔
31
        $extensionName = $parameters instanceof ExtbaseRequestParameters
4✔
UNCOV
32
            ? $parameters->getControllerExtensionName()
×
33
            : $parameters['extensionName'] ?? null;
4✔
34

35
        if (empty($partial)) {
4✔
36
            return '';
2✔
37
        }
38

39
        if (class_exists(RenderingContextFactory::class)) {
2✔
40
            $renderingContext = $this->createRenderingContextWithRenderingContextFactory();
2✔
41
            if (method_exists($renderingContext, 'setRequest')) {
2✔
42
                $request = $parameters instanceof ExtbaseRequestParameters
2✔
43
                    ? $GLOBALS['TYPO3_REQUEST']->withAttribute('extbase', $parameters)
×
44
                    : $GLOBALS['TYPO3_REQUEST'];
2✔
45
                $renderingContext->setRequest(
2✔
46
                    // TYPO3 v11.x needs the ServerRequest wrapped in an Extbase Request.
47
                    version_compare(VersionNumberUtility::getCurrentTypo3Version(), '12.0', '<')
2✔
UNCOV
48
                        ? new Request($request)
×
49
                        : $request
2✔
50
                );
2✔
51
            }
52
        } else {
53
            /** @var ControllerContext $controllerContext */
54
            $controllerContext = GeneralUtility::makeInstance(ControllerContext::class);
×
55
            /** @var Request $request */
56
            $request = GeneralUtility::makeInstance(Request::class);
×
57
            $controllerContext->setRequest($request);
×
58

59
            /** @var UriBuilder $uriBuilder */
60
            $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
×
61
            $uriBuilder->setRequest($request);
×
62
            $controllerContext->setUriBuilder($uriBuilder);
×
63

64
            if ($parameters) {
×
65
                if (method_exists($request, 'setControllerActionName')) {
×
UNCOV
66
                    $request->setControllerActionName($parameters['actionName']);
×
67
                }
68

UNCOV
69
                if (method_exists($request, 'setControllerExtensionName')) {
×
UNCOV
70
                    $request->setControllerExtensionName($parameters['extensionName']);
×
71
                }
72

UNCOV
73
                if (method_exists($request, 'setControllerName')) {
×
UNCOV
74
                    $request->setControllerName($parameters['controllerName']);
×
75
                }
76

UNCOV
77
                if (method_exists($request, 'setControllerObjectName')) {
×
UNCOV
78
                    $request->setControllerObjectName($parameters['controllerObjectName']);
×
79
                }
80

UNCOV
81
                if (method_exists($request, 'setPluginName')) {
×
UNCOV
82
                    $request->setPluginName($parameters['pluginName']);
×
83
                }
84

UNCOV
85
                if (method_exists($request, 'setFormat')) {
×
UNCOV
86
                    $request->setFormat($parameters['format']);
×
87
                }
88
            }
89

90
            /** @var RenderingContext $renderingContext */
UNCOV
91
            $renderingContext = GeneralUtility::makeInstance(RenderingContext::class);
×
92
        }
93

94
        $this->prepareContextsForUncachedRendering($renderingContext);
2✔
95
        if (!empty($conf['partialRootPaths'])) {
2✔
96
            $renderingContext->getTemplatePaths()->setPartialRootPaths($conf['partialRootPaths']);
2✔
UNCOV
97
        } elseif ($extensionName) {
×
UNCOV
98
            $extensionKey = GeneralUtility::camelCaseToLowerCaseUnderscored($extensionName);
×
UNCOV
99
            $renderingContext->getTemplatePaths()->fillDefaultsByPackageName($extensionKey);
×
100
        }
101
        return $this->renderPartialUncached($renderingContext, $partial, $section, $arguments);
2✔
102
    }
103

104
    protected function prepareContextsForUncachedRendering(RenderingContextInterface $renderingContext): void
105
    {
106
        $this->setRenderingContext($renderingContext);
4✔
107
    }
108

109
    protected function renderPartialUncached(
110
        RenderingContextInterface $renderingContext,
111
        string $partial,
112
        ?string $section = null,
113
        array $arguments = []
114
    ): string {
115
        $this->renderingStack[] = [
2✔
116
            'type' => static::RENDERING_TEMPLATE,
2✔
117
            'parsedTemplate' => $this->getCurrentParsedTemplate(),
2✔
118
            'renderingContext' => $renderingContext,
2✔
119
        ];
2✔
120
        /** @var string $rendered */
121
        $rendered = $this->renderPartial($partial, $section, $arguments);
2✔
122
        array_pop($this->renderingStack);
2✔
123
        return $rendered;
2✔
124
    }
125

126
    /**
127
     * @codeCoverageIgnore
128
     */
129
    protected function createRenderingContextWithRenderingContextFactory(): RenderingContextInterface
130
    {
131
        /** @var RenderingContextFactory $renderingContextFactory */
132
        $renderingContextFactory = GeneralUtility::makeInstance(RenderingContextFactory::class);
133
        return $renderingContextFactory->create();
134
    }
135
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc