[TASK] Protected methods in ReportController 14/58214/3
authorChristian Kuhn <lolli@schwarzbu.ch>
Fri, 7 Sep 2018 12:51:23 +0000 (14:51 +0200)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Fri, 7 Sep 2018 16:59:04 +0000 (18:59 +0200)
There are only two methods in the report controller, calling
them via call_user_function() does not make much sense.
The patch simplifies the dispatcher logic and sets the two
actions to protected.
Note this does not affect the extendability of the reports
module itself.

Resolves: #86184
Related: #84231
Releases: master
Change-Id: Ia329b7de7251825028a5587899be3f6c694873e5
Reviewed-on: https://review.typo3.org/58214
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Tested-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: rolandgolla <rolandgolla@gmail.com>
Tested-by: rolandgolla <rolandgolla@gmail.com>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
typo3/sysext/core/Documentation/Changelog/master/Deprecation-86184-ProtectedMethodsInReportController.rst [new file with mode: 0644]
typo3/sysext/reports/Classes/Controller/ReportController.php

diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-86184-ProtectedMethodsInReportController.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-86184-ProtectedMethodsInReportController.rst
new file mode 100644 (file)
index 0000000..e7acbcc
--- /dev/null
@@ -0,0 +1,36 @@
+.. include:: ../../Includes.txt
+
+===========================================================
+Deprecation: #86184 - Protected methods in ReportController
+===========================================================
+
+See :issue:`86184`
+
+Description
+===========
+
+The following methods of class :php:`TYPO3\CMS\Reports\Controller\ReportController`
+changed their visibility from public to protected and should not be called any longer:
+
+* :php:`indexAction()`
+* :php:`detailAction()`
+
+Impact
+======
+
+Calling one of the above methods from an external object triggers a PHP :php:`E_USER_DEPRECATED` error.
+
+
+Affected Installations
+======================
+
+Both methods are called internally only. Extensions extending the reports module
+using the normal reports API are not affected by this.
+
+
+Migration
+=========
+
+No migration possible.
+
+.. index:: Backend, PHP-API, NotScanned, ext:reports
\ No newline at end of file
index 899c9a9..f946604 100644 (file)
@@ -19,6 +19,7 @@ use Psr\Http\Message\ServerRequestInterface;
 use TYPO3\CMS\Backend\Routing\UriBuilder;
 use TYPO3\CMS\Backend\Template\ModuleTemplate;
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
+use TYPO3\CMS\Core\Compatibility\PublicMethodDeprecationTrait;
 use TYPO3\CMS\Core\Http\HtmlResponse;
 use TYPO3\CMS\Core\Http\RedirectResponse;
 use TYPO3\CMS\Core\Localization\LanguageService;
@@ -33,6 +34,16 @@ use TYPO3Fluid\Fluid\View\ViewInterface;
  */
 class ReportController
 {
+    use PublicMethodDeprecationTrait;
+
+    /**
+     * @var array
+     */
+    private $deprecatedPublicMethods = [
+        'indexAction' => 'Using ReportController::indexAction() is deprecated and will not be possible anymore in TYPO3 v10.',
+        'detailAction' => 'Using ReportController::detailAction() is deprecated and will not be possible anymore in TYPO3 v10.',
+    ];
+
     /**
      * ModuleTemplate object
      *
@@ -68,12 +79,11 @@ class ReportController
      */
     public function handleRequest(ServerRequestInterface $request): ResponseInterface
     {
-        $actionDefault = $request->getQueryParams()['action'] ?? $request->getParsedBody()['action'];
-        $action = $actionDefault ?: 'index';
+        $action = $request->getQueryParams()['action'] ?? $request->getParsedBody()['action'] ?? 'index';
         $extension = $request->getQueryParams()['extension'] ?? $request->getParsedBody()['extension'];
         $isRedirect = $request->getQueryParams()['redirect'] ?? $request->getParsedBody()['redirect'] ?? false;
 
-        if ($actionDefault !== 'index' && !$isRedirect && !$extension
+        if ($action !== 'index' && !$isRedirect && !$extension
             && is_array($GLOBALS['BE_USER']->uc['reports']['selection'])) {
             $previousSelection = $GLOBALS['BE_USER']->uc['reports']['selection'];
             if (!empty($previousSelection['extension']) && !empty($previousSelection['report'])) {
@@ -89,9 +99,15 @@ class ReportController
 
         $this->initializeView($action);
 
-        $result = call_user_func_array([$this, $action . 'Action'], [$request]);
-        if ($result instanceof ResponseInterface) {
-            return $result;
+        if ($action === 'index') {
+            $this->indexAction();
+        } elseif ($action === 'detail') {
+            $this->detailAction($request);
+        } else {
+            throw new \RuntimeException(
+                'Reports module has only "index" and "detail" action, ' . (string)$action . ' given',
+                1536322935
+            );
         }
 
         $this->generateMenu($request);
@@ -117,7 +133,7 @@ class ReportController
     /**
      * Overview
      */
-    public function indexAction()
+    protected function indexAction()
     {
         $this->view->assign('reports', $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['reports']);
         $this->saveState();
@@ -128,7 +144,7 @@ class ReportController
      *
      * @param ServerRequestInterface $request
      */
-    public function detailAction(ServerRequestInterface $request)
+    protected function detailAction(ServerRequestInterface $request)
     {
         $content = $error = '';
         $extension = $request->getQueryParams()['extension'] ?? $request->getParsedBody()['extension'];