Passed
Push — master ( 682083...f429aa )
by
unknown
13:05
created

rationManager()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
/*
4
 * This file is part of the TYPO3 CMS project.
5
 *
6
 * It is free software; you can redistribute it and/or modify it under
7
 * the terms of the GNU General Public License, either version 2
8
 * of the License, or any later version.
9
 *
10
 * For the full copyright and license information, please read the
11
 * LICENSE.txt file that was distributed with this source code.
12
 *
13
 * The TYPO3 project - inspiring people to share!
14
 */
15
16
namespace TYPO3\CMS\Extbase\Mvc\Web;
17
18
use Psr\Http\Message\ResponseInterface;
19
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
20
use TYPO3\CMS\Extbase\Mvc\Dispatcher;
21
use TYPO3\CMS\Extbase\Mvc\Exception\InfiniteLoopException;
22
use TYPO3\CMS\Extbase\Mvc\RequestHandlerInterface;
23
use TYPO3\CMS\Extbase\Mvc\RequestInterface;
24
use TYPO3\CMS\Extbase\Service\EnvironmentService;
25
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
26
27
/**
28
 * A request handler which can handle web requests invoked by the frontend.
29
 * @internal only to be used within Extbase, not part of TYPO3 Core API.
30
 */
31
class FrontendRequestHandler implements RequestHandlerInterface
32
{
33
    protected Dispatcher $dispatcher;
34
    protected EnvironmentService $environmentService;
35
    protected ConfigurationManagerInterface $configurationManager;
36
37
    public function __construct(
38
        Dispatcher $dispatcher,
39
        EnvironmentService $environmentService,
40
        ConfigurationManagerInterface $configurationManager
41
    ) {
42
        $this->dispatcher = $dispatcher;
43
        $this->environmentService = $environmentService;
44
        $this->configurationManager = $configurationManager;
45
    }
46
47
    /**
48
     * Handles the web request. The response will automatically be sent to the client.
49
     *
50
     * @param RequestInterface $request
51
     * @return ResponseInterface|null
52
     * @throws InfiniteLoopException
53
     */
54
    public function handleRequest(RequestInterface $request)
55
    {
56
        if ($this->isActionCacheable($request->getControllerObjectName(), $request->getControllerActionName())) {
0 ignored issues
show
Bug introduced by
The method getControllerActionName() does not exist on TYPO3\CMS\Extbase\Mvc\RequestInterface. Did you maybe mean getControllerObjectName()? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

56
        if ($this->isActionCacheable($request->getControllerObjectName(), $request->/** @scrutinizer ignore-call */ getControllerActionName())) {

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
57
            $request->setIsCached(true);
0 ignored issues
show
Bug introduced by
The method setIsCached() does not exist on TYPO3\CMS\Extbase\Mvc\RequestInterface. Since it exists in all sub-types, consider adding an abstract or default implementation to TYPO3\CMS\Extbase\Mvc\RequestInterface. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

57
            $request->/** @scrutinizer ignore-call */ 
58
                      setIsCached(true);
Loading history...
58
        } else {
59
            $contentObject = $this->configurationManager->getContentObject();
60
            if ($contentObject->getUserObjectType() === ContentObjectRenderer::OBJECTTYPE_USER) {
0 ignored issues
show
introduced by
The condition $contentObject->getUserO...nderer::OBJECTTYPE_USER is always false.
Loading history...
61
                $contentObject->convertToUserIntObject();
62
                // \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::convertToUserIntObject() will recreate the object, so we have to stop the request here
63
                return null; // todo: Instead of returning null, throw an Exception instead and harden the interface.
64
            }
65
            $request->setIsCached(false);
66
        }
67
68
        return $this->dispatcher->dispatch($request);
69
    }
70
71
    /**
72
     * This request handler can handle any web request.
73
     *
74
     * @param RequestInterface $request
75
     * @return bool If the request is a web request, TRUE otherwise FALSE
76
     */
77
    public function canHandleRequest(RequestInterface $request)
78
    {
79
        return $this->environmentService->isEnvironmentInFrontendMode();
80
    }
81
82
    protected function isActionCacheable(string $controllerClassName, string $actionName): bool
83
    {
84
        $frameworkConfiguration = $this->configurationManager->getConfiguration(
85
            ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK
86
        );
87
88
        $nonCacheableActions = $frameworkConfiguration['controllerConfiguration'][$controllerClassName]['nonCacheableActions'] ?? null;
89
90
        if (!is_array($nonCacheableActions)) {
91
            return true;
92
        }
93
94
        return !in_array($actionName, $frameworkConfiguration['controllerConfiguration'][$controllerClassName]['nonCacheableActions'], true);
95
    }
96
97
    public function getPriority(): int
98
    {
99
        return 100;
100
    }
101
}
102