[!!!][TASK] Remove deprecated code from backend controllers 38/59438/4
authorChristian Kuhn <lolli@schwarzbu.ch>
Tue, 15 Jan 2019 10:33:08 +0000 (11:33 +0100)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Tue, 15 Jan 2019 13:35:22 +0000 (14:35 +0100)
Last set of deprecation trait removals from controllers
of the backend extension. This one comes with minor and
straight changes to improve code structure of some of the
simple controllers along the way.

Resolves: #87437
Releases: master
Change-Id: I4c6b453a3341ced072337896002fba250dd230a9
Reviewed-on: https://review.typo3.org/59438
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
typo3/sysext/backend/Classes/Controller/File/EditFileController.php
typo3/sysext/backend/Classes/Controller/LoginController.php
typo3/sysext/backend/Classes/Controller/SimpleDataHandlerController.php
typo3/sysext/backend/Classes/Controller/SystemInformationController.php
typo3/sysext/backend/Classes/Controller/Wizard/AddController.php
typo3/sysext/backend/Classes/Controller/Wizard/EditController.php
typo3/sysext/backend/Classes/Controller/Wizard/ListController.php
typo3/sysext/backend/Classes/Controller/Wizard/TableController.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-87193-DeprecatedFunctionalityRemoved.rst
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/PropertyProtectedMatcher.php

index fc8d837..f698a70 100644 (file)
@@ -275,17 +275,6 @@ class EditFileController
     }
 
     /**
-     * Builds the buttons for the docheader and returns them as an
-     *
-     * @deprecated since TYPO3 v9, will be set protected in TYPO3 v10.0
-     */
-    public function getButtons()
-    {
-        trigger_error('EditFileController->getButtons() will be replaced by protected method getButtonsInternal() in TYPO3 v10.0. Do not call from other extension.', E_USER_DEPRECATED);
-        $this->getButtonsInternal();
-    }
-
-    /**
      * Builds the buttons for the docheader
      */
     protected function getButtonsInternal(): void
index d17ff28..e4674bd 100644 (file)
@@ -96,12 +96,48 @@ class LoginController implements LoggerAwareInterface
     protected $view;
 
     /**
+     * Injects the request and response objects for the current request or subrequest
+     * As this controller goes only through the main() method, it is rather simple for now
+     *
+     * @param ServerRequestInterface $request the current request
+     * @return ResponseInterface the finished response with the content
+     */
+    public function formAction(ServerRequestInterface $request): ResponseInterface
+    {
+        $this->init($request);
+        return new HtmlResponse($this->createLoginLogoutForm($request));
+    }
+
+    /**
+     * Calls the main function but with loginRefresh enabled at any time
+     *
+     * @param ServerRequestInterface $request the current request
+     * @return ResponseInterface the finished response with the content
+     */
+    public function refreshAction(ServerRequestInterface $request): ResponseInterface
+    {
+        $this->init($request);
+        $this->loginRefresh = true;
+        return new HtmlResponse($this->createLoginLogoutForm($request));
+    }
+
+    /**
+     * This can be called by single login providers, they receive an instance of $this
+     *
+     * @return string
+     */
+    public function getLoginProviderIdentifier()
+    {
+        return $this->loginProviderIdentifier;
+    }
+
+    /**
      * Initialize the login box. Will also react on a &L=OUT flag and exit.
+     *
+     * @param ServerRequestInterface $request the current request
      */
-    public function __construct()
+    protected function init(ServerRequestInterface $request): void
     {
-        // @deprecated since TYPO3 v9, will be obsolete in TYPO3 v10.0
-        $request = $GLOBALS['TYPO3_REQUEST'];
         $parsedBody = $request->getParsedBody();
         $queryParams = $request->getQueryParams();
         $this->validateAndSortLoginProviders();
@@ -148,30 +184,6 @@ class LoginController implements LoggerAwareInterface
     }
 
     /**
-     * Injects the request and response objects for the current request or subrequest
-     * As this controller goes only through the main() method, it is rather simple for now
-     *
-     * @param ServerRequestInterface $request the current request
-     * @return ResponseInterface the finished response with the content
-     */
-    public function formAction(ServerRequestInterface $request): ResponseInterface
-    {
-        return new HtmlResponse($this->createLoginLogoutForm($request));
-    }
-
-    /**
-     * Calls the main function but with loginRefresh enabled at any time
-     *
-     * @param ServerRequestInterface $request the current request
-     * @return ResponseInterface the finished response with the content
-     */
-    public function refreshAction(ServerRequestInterface $request): ResponseInterface
-    {
-        $this->loginRefresh = true;
-        return new HtmlResponse($this->createLoginLogoutForm($request));
-    }
-
-    /**
      * Main function - creating the login/logout form
      *
      * @param ServerRequestInterface $request
@@ -549,14 +561,6 @@ class LoginController implements LoggerAwareInterface
     }
 
     /**
-     * @return string
-     */
-    public function getLoginProviderIdentifier()
-    {
-        return $this->loginProviderIdentifier;
-    }
-
-    /**
      * Returns LanguageService
      *
      * @return LanguageService
index c7a9909..cb6491b 100644 (file)
@@ -20,7 +20,6 @@ use Psr\Http\Message\ServerRequestInterface;
 use TYPO3\CMS\Backend\Clipboard\Clipboard;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
-use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
 use TYPO3\CMS\Core\DataHandling\DataHandler;
 use TYPO3\CMS\Core\Http\HtmlResponse;
 use TYPO3\CMS\Core\Http\JsonResponse;
@@ -40,24 +39,6 @@ use TYPO3\CMS\Core\Utility\MathUtility;
  */
 class SimpleDataHandlerController
 {
-    use PublicPropertyDeprecationTrait;
-
-    /**
-     * Properties which have been moved to protected status from public
-     *
-     * @var array
-     */
-    protected $deprecatedPublicProperties = [
-        'flags' => 'Using $flags of class SimpleDataHandlerController from the outside is discouraged, as this variable is only used for internal storage.',
-        'data' => 'Using $data of class SimpleDataHandlerController from the outside is discouraged, as this variable is only used for internal storage.',
-        'cmd' => 'Using $cmd of class SimpleDataHandlerController from the outside is discouraged, as this variable is only used for internal storage.',
-        'mirror' => 'Using $mirror of class SimpleDataHandlerController from the outside is discouraged, as this variable is only used for internal storage.',
-        'cacheCmd' => 'Using $cacheCmd of class SimpleDataHandlerController from the outside is discouraged, as this variable is only used for internal storage.',
-        'redirect' => 'Using $redirect of class SimpleDataHandlerController from the outside is discouraged, as this variable is only used for internal storage.',
-        'CB' => 'Using $CB of class SimpleDataHandlerController from the outside is discouraged, as this variable is only used for internal storage.',
-        'tce' => 'Using $tce of class SimpleDataHandlerController from the outside is discouraged, as this variable is only used for internal storage.',
-    ];
-
     /**
      * Array. Accepts options to be set in TCE object. Currently it supports "reverseOrder" (bool).
      *
@@ -116,18 +97,6 @@ class SimpleDataHandlerController
     protected $tce;
 
     /**
-     * Constructor
-     */
-    public function __construct()
-    {
-        // @deprecated since TYPO3 v9, will be obsolete in TYPO3 v10.0 with removal of init()
-        $request = $GLOBALS['TYPO3_REQUEST'];
-        $GLOBALS['SOBE'] = $this;
-        // @deprecated since TYPO3 v9, will be moved out of __construct() in TYPO3 v10.0
-        $this->init($request);
-    }
-
-    /**
      * Injects the request object for the current request or subrequest
      * As this controller goes only through the processRequest() method, it just redirects to the given URL afterwards.
      *
@@ -136,6 +105,9 @@ class SimpleDataHandlerController
      */
     public function mainAction(ServerRequestInterface $request): ResponseInterface
     {
+        $GLOBALS['SOBE'] = $this;
+        $this->init($request);
+
         $this->initializeClipboard();
         $this->processRequest();
 
@@ -155,6 +127,9 @@ class SimpleDataHandlerController
      */
     public function processAjaxRequest(ServerRequestInterface $request): ResponseInterface
     {
+        $GLOBALS['SOBE'] = $this;
+        $this->init($request);
+
         // do the regular / main logic
         $this->initializeClipboard();
         $this->processRequest();
@@ -192,14 +167,8 @@ class SimpleDataHandlerController
      *
      * @param ServerRequestInterface $request
      */
-    public function init(ServerRequestInterface $request = null): void
+    protected function init(ServerRequestInterface $request): void
     {
-        if ($request === null) {
-            // Method signature in TYPO3 v10.0: protected function init(ServerRequestInterface $request)
-            trigger_error('SimpleDataHandlerController->init() will be set to protected in TYPO3 v10.0. Do not call from other extension.', E_USER_DEPRECATED);
-            $request = $GLOBALS['TYPO3_REQUEST'];
-        }
-
         $beUser = $this->getBackendUser();
 
         $parsedBody = $request->getParsedBody();
@@ -240,28 +209,6 @@ class SimpleDataHandlerController
 
     /**
      * Clipboard pasting and deleting.
-     *
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0
-     */
-    public function initClipboard()
-    {
-        trigger_error('SimpleDataHandlerController->initClipboard() will be replaced by protected method initializeClipboard() in TYPO3 v10.0. Do not call from other extension.', E_USER_DEPRECATED);
-        $this->initializeClipboard();
-    }
-
-    /**
-     * Executing the posted actions ...
-     *
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0
-     */
-    public function main()
-    {
-        trigger_error('SimpleDataHandlerController->main() will be replaced by protected method processRequest() in TYPO3 v10.0. Do not call from other extension.', E_USER_DEPRECATED);
-        $this->processRequest();
-    }
-
-    /**
-     * Clipboard pasting and deleting.
      */
     protected function initializeClipboard(): void
     {
index 8752e26..459f485 100644 (file)
@@ -27,25 +27,13 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 class SystemInformationController
 {
     /**
-     * @var SystemInformationToolbarItem
-     */
-    protected $toolbarItem;
-
-    /**
-     * Set up dependencies
-     */
-    public function __construct()
-    {
-        $this->toolbarItem = GeneralUtility::makeInstance(SystemInformationToolbarItem::class);
-    }
-
-    /**
      * Renders the menu for AJAX calls
      *
      * @return ResponseInterface
      */
     public function renderMenuAction(): ResponseInterface
     {
-        return new HtmlResponse($this->toolbarItem->getDropDown());
+        $toolbarItem = GeneralUtility::makeInstance(SystemInformationToolbarItem::class);
+        return new HtmlResponse($toolbarItem->getDropDown());
     }
 }
index 9c6d2f6..fc3bf6d 100644 (file)
@@ -21,12 +21,10 @@ use TYPO3\CMS\Backend\Form\FormDataCompiler;
 use TYPO3\CMS\Backend\Form\FormDataGroup\TcaDatabaseRecord;
 use TYPO3\CMS\Backend\Routing\UriBuilder;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
-use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
 use TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools;
 use TYPO3\CMS\Core\DataHandling\DataHandler;
 use TYPO3\CMS\Core\Http\RedirectResponse;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\HttpUtility;
 use TYPO3\CMS\Core\Utility\MathUtility;
 
 /**
@@ -36,30 +34,6 @@ use TYPO3\CMS\Core\Utility\MathUtility;
  */
 class AddController extends AbstractWizardController
 {
-    use PublicPropertyDeprecationTrait;
-
-    /**
-     * Properties which have been moved to protected status from public
-     *
-     * @var array
-     */
-    protected $deprecatedPublicProperties = [
-        'content' => 'Using $content of class AddController from the outside is discouraged, as this variable is only used for internal storage.',
-        'processDataFlag' => 'Using $processDataFlag of class AddController from the outside is discouraged, as this variable is only used for internal storage.',
-        'pid' => 'Using $pid of class AddController from the outside is discouraged, as this variable is only used for internal storage.',
-        'table' => 'Using $table of class AddController from the outside is discouraged, as this variable is only used for internal storage.',
-        'id' => 'Using $id of class AddController from the outside is discouraged, as this variable is only used for internal storage.',
-        'P' => 'Using $P of class AddController from the outside is discouraged, as this variable is only used for internal storage.',
-        'returnEditConf' => 'Using $returnEditConf of class AddController from the outside is discouraged, as this variable is only used for internal storage.',
-    ];
-    /**
-     * Content accumulation for the module.
-     *
-     * @var string
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0, unused
-     */
-    protected $content;
-
     /**
      * If set, the DataHandler class is loaded and used to add the returning ID to the parent record.
      *
@@ -103,16 +77,6 @@ class AddController extends AbstractWizardController
     protected $returnEditConf;
 
     /**
-     * Constructor
-     */
-    public function __construct()
-    {
-        $this->getLanguageService()->includeLLFile('EXT:core/Resources/Private/Language/locallang_wizards.xlf');
-        // @deprecated since TYPO3 v9, will be moved out of __construct() in TYPO3 v10.0
-        $this->init($GLOBALS['TYPO3_REQUEST']);
-    }
-
-    /**
      * Injects the request object for the current request or subrequest
      * As this controller goes only through the main() method, it is rather simple for now
      *
@@ -121,95 +85,9 @@ class AddController extends AbstractWizardController
      */
     public function mainAction(ServerRequestInterface $request): ResponseInterface
     {
-        return $this->processRequest($request);
-    }
-
-    /**
-     * Main function
-     * Will issue a location-header, redirecting either BACK or to a new FormEngine instance...
-     *
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0
-     */
-    public function main()
-    {
-        trigger_error('AddController->main() will be replaced by protected method processRequest() in TYPO3 v10.0. Do not call from other extension.', E_USER_DEPRECATED);
-
-        $response = $this->processRequest($GLOBALS['TYPO3_REQUEST']);
-        HttpUtility::redirect($response->getHeaders()['location'][0]);
-    }
-
-    /**
-     * Initialization of the class.
-     * @param ServerRequestInterface $request
-     */
-    protected function init(ServerRequestInterface $request): void
-    {
-        $parsedBody = $request->getParsedBody();
-        $queryParams = $request->getQueryParams();
-        // Init GPvars:
-        $this->P = $parsedBody['P'] ?? $queryParams['P'] ?? [];
-        $this->returnEditConf = $parsedBody['returnEditConf'] ?? $queryParams['returnEditConf'] ?? null;
-        // Get this record
-        $record = BackendUtility::getRecord($this->P['table'], $this->P['uid']);
-        // Set table:
-        $this->table = $this->P['params']['table'];
-        // Get TSconfig for it.
-        $TSconfig = BackendUtility::getTCEFORM_TSconfig(
-            $this->P['table'],
-            is_array($record) ? $record : ['pid' => $this->P['pid']]
-        );
-        // Set [params][pid]
-        if (strpos($this->P['params']['pid'], '###') === 0 && substr($this->P['params']['pid'], -3) === '###') {
-            $keyword = substr($this->P['params']['pid'], 3, -3);
-            if (strpos($keyword, 'PAGE_TSCONFIG_') === 0) {
-                $this->pid = (int)$TSconfig[$this->P['field']][$keyword];
-            } else {
-                $this->pid = (int)$TSconfig['_' . $keyword];
-            }
-        } else {
-            $this->pid = (int)$this->P['params']['pid'];
-        }
-        // Return if new record as parent (not possibly/allowed)
-        if ($this->pid === '') {
-            // HTTP Redirect is performed by processRequest()
-            return;
-        }
-        // Else proceed:
-        // If a new id has returned from a newly created record...
-        if ($this->returnEditConf) {
-            $editConfiguration = json_decode($this->returnEditConf, true);
-            if (is_array($editConfiguration[$this->table]) && MathUtility::canBeInterpretedAsInteger($this->P['uid'])) {
-                // Getting id and cmd from returning editConf array.
-                reset($editConfiguration[$this->table]);
-                $this->id = (int)key($editConfiguration[$this->table]);
-                $cmd = current($editConfiguration[$this->table]);
-                // ... and if everything seems OK we will register some classes for inclusion and instruct the object
-                // to perform processing later.
-                if ($this->P['params']['setValue']
-                    && $cmd === 'edit'
-                    && $this->id
-                    && $this->P['table']
-                    && $this->P['field'] && $this->P['uid']
-                ) {
-                    $liveRecord = BackendUtility::getLiveVersionOfRecord($this->table, $this->id, 'uid');
-                    if ($liveRecord) {
-                        $this->id = $liveRecord['uid'];
-                    }
-                    $this->processDataFlag = 1;
-                }
-            }
-        }
-    }
+        $this->getLanguageService()->includeLLFile('EXT:core/Resources/Private/Language/locallang_wizards.xlf');
+        $this->init($request);
 
-    /**
-     * Main function
-     * Will issue a location-header, redirecting either BACK or to a new FormEngine instance...
-     *
-     * @param ServerRequestInterface $request
-     * @return ResponseInterface
-     */
-    protected function processRequest(ServerRequestInterface $request): ResponseInterface
-    {
         // Return if new record as parent (not possibly/allowed)
         if ($this->pid === '') {
             return new RedirectResponse(GeneralUtility::sanitizeLocalUrl($this->P['returnUrl']));
@@ -339,4 +217,67 @@ class AddController extends AbstractWizardController
 
         return new RedirectResponse($redirectUrl);
     }
+
+    /**
+     * Initialization of the class.
+     * @param ServerRequestInterface $request
+     */
+    protected function init(ServerRequestInterface $request): void
+    {
+        $parsedBody = $request->getParsedBody();
+        $queryParams = $request->getQueryParams();
+        // Init GPvars:
+        $this->P = $parsedBody['P'] ?? $queryParams['P'] ?? [];
+        $this->returnEditConf = $parsedBody['returnEditConf'] ?? $queryParams['returnEditConf'] ?? null;
+        // Get this record
+        $record = BackendUtility::getRecord($this->P['table'], $this->P['uid']);
+        // Set table:
+        $this->table = $this->P['params']['table'];
+        // Get TSconfig for it.
+        $TSconfig = BackendUtility::getTCEFORM_TSconfig(
+            $this->P['table'],
+            is_array($record) ? $record : ['pid' => $this->P['pid']]
+        );
+        // Set [params][pid]
+        if (strpos($this->P['params']['pid'], '###') === 0 && substr($this->P['params']['pid'], -3) === '###') {
+            $keyword = substr($this->P['params']['pid'], 3, -3);
+            if (strpos($keyword, 'PAGE_TSCONFIG_') === 0) {
+                $this->pid = (int)$TSconfig[$this->P['field']][$keyword];
+            } else {
+                $this->pid = (int)$TSconfig['_' . $keyword];
+            }
+        } else {
+            $this->pid = (int)$this->P['params']['pid'];
+        }
+        // Return if new record as parent (not possibly/allowed)
+        if ($this->pid === '') {
+            // HTTP Redirect is performed by processRequest()
+            return;
+        }
+        // Else proceed:
+        // If a new id has returned from a newly created record...
+        if ($this->returnEditConf) {
+            $editConfiguration = json_decode($this->returnEditConf, true);
+            if (is_array($editConfiguration[$this->table]) && MathUtility::canBeInterpretedAsInteger($this->P['uid'])) {
+                // Getting id and cmd from returning editConf array.
+                reset($editConfiguration[$this->table]);
+                $this->id = (int)key($editConfiguration[$this->table]);
+                $cmd = current($editConfiguration[$this->table]);
+                // ... and if everything seems OK we will register some classes for inclusion and instruct the object
+                // to perform processing later.
+                if ($this->P['params']['setValue']
+                    && $cmd === 'edit'
+                    && $this->id
+                    && $this->P['table']
+                    && $this->P['field'] && $this->P['uid']
+                ) {
+                    $liveRecord = BackendUtility::getLiveVersionOfRecord($this->table, $this->id, 'uid');
+                    if ($liveRecord) {
+                        $this->id = $liveRecord['uid'];
+                    }
+                    $this->processDataFlag = 1;
+                }
+            }
+        }
+    }
 }
index bb6172d..117a21f 100644 (file)
@@ -17,13 +17,11 @@ namespace TYPO3\CMS\Backend\Controller\Wizard;
 
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\ServerRequestInterface;
-use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
 use TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools;
 use TYPO3\CMS\Core\Database\RelationHandler;
 use TYPO3\CMS\Core\Http\HtmlResponse;
 use TYPO3\CMS\Core\Http\RedirectResponse;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\HttpUtility;
 use TYPO3\CMS\Core\Utility\MathUtility;
 
 /**
@@ -32,18 +30,6 @@ use TYPO3\CMS\Core\Utility\MathUtility;
  */
 class EditController extends AbstractWizardController
 {
-    use PublicPropertyDeprecationTrait;
-
-    /**
-     * Properties which have been moved to protected status from public
-     *
-     * @var array
-     */
-    protected $deprecatedPublicProperties = [
-        'P' => 'Using $P of class EditController from the outside is discouraged, as this variable is only used for internal storage.',
-        'doClose' => 'Using $doClose of class EditController from the outside is discouraged, as this variable is only used for internal storage.',
-    ];
-
     /**
      * Wizard parameters, coming from FormEngine linking to the wizard.
      *
@@ -76,33 +62,6 @@ class EditController extends AbstractWizardController
     protected $closeWindow = '<script language="javascript" type="text/javascript">close();</script>';
 
     /**
-     * Constructor
-     */
-    public function __construct()
-    {
-        $this->getLanguageService()->includeLLFile('EXT:core/Resources/Private/Language/locallang_wizards.xlf');
-
-        // @deprecated since TYPO3 v9, will be moved out of __construct() in TYPO3 v10.0
-        $this->init($GLOBALS['TYPO3_REQUEST']);
-    }
-
-    /**
-     * Initialization of the script
-     *
-     * @param ServerRequestInterface $request
-     */
-    protected function init(ServerRequestInterface $request)
-    {
-        $parsedBody = $request->getParsedBody();
-        $queryParams = $request->getQueryParams();
-
-        $this->P = $parsedBody['P'] ?? $queryParams['P'] ?? [];
-
-        // Used for the return URL to FormEngine so that we can close the window.
-        $this->doClose = $parsedBody['doClose'] ?? $queryParams['doClose'] ?? 0;
-    }
-
-    /**
      * Injects the request object for the current request or subrequest
      * As this controller goes only through the main() method, it is rather simple for now
      *
@@ -111,30 +70,16 @@ class EditController extends AbstractWizardController
      */
     public function mainAction(ServerRequestInterface $request): ResponseInterface
     {
-        $content = $this->processRequest($request);
-        return $content;
-    }
+        $this->getLanguageService()->includeLLFile('EXT:core/Resources/Private/Language/locallang_wizards.xlf');
 
-    /**
-     * Main function
-     * Makes a header-location redirect to an edit form IF POSSIBLE from the passed data - otherwise the window will
-     * just close.
-     *
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0
-     * @return string
-     */
-    public function main()
-    {
-        trigger_error('EditController->main() will be set to protected in TYPO3 v10.0. Do not call from other extension.', E_USER_DEPRECATED);
-        $request = $GLOBALS['TYPO3_REQUEST'];
+        $parsedBody = $request->getParsedBody();
+        $queryParams = $request->getQueryParams();
 
-        $response = $this->processRequest($request);
+        $this->P = $parsedBody['P'] ?? $queryParams['P'] ?? [];
+        // Used for the return URL to FormEngine so that we can close the window.
+        $this->doClose = $parsedBody['doClose'] ?? $queryParams['doClose'] ?? 0;
 
-        if ($response instanceof RedirectResponse) {
-            HttpUtility::redirect($response->getHeaders()['location'][0]);
-        } else {
-            return $response->getBody()->getContents();
-        }
+        return $this->processRequest();
     }
 
     /**
@@ -142,10 +87,9 @@ class EditController extends AbstractWizardController
      * Makes a header-location redirect to an edit form IF POSSIBLE from the passed data - otherwise the window will
      * just close.
      *
-     * @param  ServerRequestInterface $request
      * @return ResponseInterface
      */
-    protected function processRequest(ServerRequestInterface $request): ResponseInterface
+    protected function processRequest(): ResponseInterface
     {
         if ($this->doClose) {
             return new HtmlResponse($this->closeWindow);
index c020d17..cd7ed3f 100644 (file)
@@ -19,10 +19,8 @@ use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\ServerRequestInterface;
 use TYPO3\CMS\Backend\Routing\UriBuilder;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
-use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
-use TYPO3\CMS\Core\Http\HtmlResponse;
+use TYPO3\CMS\Core\Http\RedirectResponse;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\HttpUtility;
 
 /**
  * Script Class for redirecting the user to the Web > List module if a wizard-link has been clicked in FormEngine
@@ -30,128 +28,58 @@ use TYPO3\CMS\Core\Utility\HttpUtility;
  */
 class ListController extends AbstractWizardController
 {
-    use PublicPropertyDeprecationTrait;
-
-    /**
-     * Properties which have been moved to protected status from public
-     *
-     * @var array
-     */
-    protected $deprecatedPublicProperties = [
-        'pid' => 'Using $pid of class ListController from the outside is discouraged, as this variable is only used for internal storage.',
-        'P' => 'Using $P of class ListController from the outside is discouraged, as this variable is only used for internal storage.',
-        'table' => 'Using $table of class ListController from the outside is discouraged, as this variable is only used for internal storage.',
-        'id' => 'Using $id of class ListController from the outside is discouraged, as this variable is only used for internal storage.',
-    ];
-    /**
-     * @var int
-     */
-    protected $pid;
-
-    /**
-     * Wizard parameters, coming from FormEngine linking to the wizard.
-     *
-     * @var array
-     */
-    protected $P;
-
     /**
-     * Table to show, if none, then all tables are listed in list module.
+     * Injects the request object for the current request or sub request
      *
-     * @var string
-     */
-    protected $table;
-
-    /**
-     * Page id to list.
-     *
-     * @var string
-     */
-    protected $id;
-
-    /**
-     * Initialization of the class, setting GPvars.
+     * @param ServerRequestInterface $request
+     * @return ResponseInterface
      */
-    public function __construct()
+    public function mainAction(ServerRequestInterface $request): ResponseInterface
     {
         $this->getLanguageService()->includeLLFile('EXT:core/Resources/Private/Language/locallang_wizards.xlf');
 
-        // @deprecated since TYPO3 v9, will be obsolete in TYPO3 v10.0
-        $request = $GLOBALS['TYPO3_REQUEST'];
         $parsedBody = $request->getParsedBody();
         $queryParams = $request->getQueryParams();
 
-        $this->P = $parsedBody['P'] ?? $queryParams['P'] ?? null;
-        $this->table = $parsedBody['table'] ?? $queryParams['table'] ?? null;
-        $this->id = $parsedBody['id'] ?? $queryParams['id'] ?? null;
-    }
-
-    /**
-     * Injects the request object for the current request or subrequest
-     * As this controller goes only through the main() method, it is rather simple for now
-     *
-     * @param ServerRequestInterface $request
-     * @return ResponseInterface
-     */
-    public function mainAction(ServerRequestInterface $request): ResponseInterface
-    {
-        $this->processRequest($request);
-        return new HtmlResponse('');
-    }
-
-    /**
-     * Main function
-     * Will issue a location-header, redirecting either BACK or to a new FormEngine instance...
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0
-     */
-    public function main(): void
-    {
-        trigger_error('ListController->main() will be replaced by protected method processRequest() in TYPO3 v10.0. Do not call from other extension.', E_USER_DEPRECATED);
-        $this->processRequest($GLOBALS['TYPO3_REQUEST']);
-    }
-    /**
-     * Main function
-     * Will issue a location-header, redirecting either BACK or to a new FormEngine instance...
-     * @param ServerRequestInterface $request
-     */
-    protected function processRequest(ServerRequestInterface $request): void
-    {
-        // Get this record
-        $origRow = BackendUtility::getRecord($this->P['table'], $this->P['uid']);
-        // Get TSconfig for it.
-        $TSconfig = BackendUtility::getTCEFORM_TSconfig(
-            $this->table,
-            is_array($origRow) ? $origRow : ['pid' => $this->P['pid']]
+        // Wizard parameters, coming from FormEngine linking to this wizard.
+        $parameters = $parsedBody['P'] ?? $queryParams['P'] ?? null;
+        // Table to show, if none, then all tables are listed in list module.
+        $table = $parsedBody['table'] ?? $queryParams['table'] ?? null;
+        $id = $parsedBody['id'] ?? $queryParams['id'] ?? null;
+        $origRow = BackendUtility::getRecord($parameters['table'], $parameters['uid']);
+        $tsConfig = BackendUtility::getTCEFORM_TSconfig(
+            $table,
+            is_array($origRow) ? $origRow : ['pid' => $parameters['pid']]
         );
-        // Set [params][pid]
-        if (strpos($this->P['params']['pid'], '###') === 0 && substr($this->P['params']['pid'], -3) === '###') {
-            $keyword = substr($this->P['params']['pid'], 3, -3);
+
+        if (strpos($parameters['params']['pid'], '###') === 0 && substr($parameters['params']['pid'], -3) === '###') {
+            $keyword = substr($parameters['params']['pid'], 3, -3);
             if (strpos($keyword, 'PAGE_TSCONFIG_') === 0) {
-                $this->pid = (int)$TSconfig[$this->P['field']][$keyword];
+                $pid = (int)$tsConfig[$parameters['field']][$keyword];
             } else {
-                $this->pid = (int)$TSconfig['_' . $keyword];
+                $pid = (int)$tsConfig['_' . $keyword];
             }
         } else {
-            $this->pid = (int)$this->P['params']['pid'];
+            $pid = (int)$parameters['params']['pid'];
         }
-        // Make redirect:
-        // If pid is blank OR if id is set, then return...
-        if ((string)$this->id !== '') {
-            $redirectUrl = GeneralUtility::sanitizeLocalUrl($this->P['returnUrl']);
+
+        if ((string)$id !== '') {
+            // If pid is blank
+            $redirectUrl = GeneralUtility::sanitizeLocalUrl($parameters['returnUrl']);
         } else {
-            /** @var UriBuilder $uriBuilder */
+            // Otherwise, show the list
             $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
             $normalizedParams = $request->getAttribute('normalizedParams');
             $requestUri = $normalizedParams->getRequestUri();
-            // Otherwise, show the list:
             $urlParameters = [];
-            $urlParameters['id'] = $this->pid;
-            $urlParameters['table'] = $this->P['params']['table'];
-            $urlParameters['returnUrl'] = !empty($this->P['returnUrl'])
-                ? GeneralUtility::sanitizeLocalUrl($this->P['returnUrl'])
+            $urlParameters['id'] = $pid;
+            $urlParameters['table'] = $parameters['params']['table'];
+            $urlParameters['returnUrl'] = !empty($parameters['returnUrl'])
+                ? GeneralUtility::sanitizeLocalUrl($parameters['returnUrl'])
                 : $requestUri;
             $redirectUrl = (string)$uriBuilder->buildUriFromRoute('web_list', $urlParameters);
         }
-        HttpUtility::redirect($redirectUrl);
+
+        return new RedirectResponse($redirectUrl);
     }
 }
index 382e564..fdf188a 100644 (file)
@@ -35,14 +35,6 @@ use TYPO3\CMS\Core\Utility\MathUtility;
  */
 class TableController extends AbstractWizardController
 {
-
-    /**
-     * Content accumulation for the module.
-     *
-     * @var string
-     */
-    protected $content;
-
     /**
      * If TRUE, <input> fields are shown instead of textareas.
      *
@@ -116,18 +108,6 @@ class TableController extends AbstractWizardController
     protected $moduleTemplate;
 
     /**
-     * Constructor
-     */
-    public function __construct()
-    {
-        $this->moduleTemplate = GeneralUtility::makeInstance(ModuleTemplate::class);
-        $this->getLanguageService()->includeLLFile('EXT:core/Resources/Private/Language/locallang_wizards.xlf');
-
-        // @deprecated since TYPO3 v9, will be moved out of __construct() in TYPO3 v10.0
-        $this->init($GLOBALS['TYPO3_REQUEST']);
-    }
-
-    /**
      * Injects the request object for the current request or subrequest
      * As this controller goes only through the main() method, it is rather simple for now
      *
@@ -136,13 +116,35 @@ class TableController extends AbstractWizardController
      */
     public function mainAction(ServerRequestInterface $request): ResponseInterface
     {
-        $response = $this->renderContent($request);
+        $this->moduleTemplate = GeneralUtility::makeInstance(ModuleTemplate::class);
+        $this->getLanguageService()->includeLLFile('EXT:core/Resources/Private/Language/locallang_wizards.xlf');
+        $this->init($request);
+
+        $normalizedParams = $request->getAttribute('normalizedParams');
+        $requestUri = $normalizedParams->getRequestUri();
+        list($rUri) = explode('#', $requestUri);
+        $content = '<form action="' . htmlspecialchars($rUri) . '" method="post" id="TableController" name="wizardForm">';
+        if ($this->P['table'] && $this->P['field'] && $this->P['uid']) {
+            $tableWizard = $this->renderTableWizard($request);
 
-        if (empty($response)) {
-            $response = new HtmlResponse($this->moduleTemplate->renderContent());
+            if ($tableWizard instanceof RedirectResponse) {
+                return $tableWizard;
+            }
+
+            $content .= '<h2>' . htmlspecialchars($this->getLanguageService()->getLL('table_title')) . '</h2>'
+                . '<div>' . $tableWizard . '</div>';
+        } else {
+            $content .= '<h2>' . htmlspecialchars($this->getLanguageService()->getLL('table_title')) . '</h2>'
+                . '<div><span class="text-danger">' . htmlspecialchars($this->getLanguageService()->getLL('table_noData')) . '</span></div>';
         }
+        $content .= '</form>';
 
-        return $response;
+        // Setting up the buttons and markers for docHeader
+        $this->getButtons();
+        // Build the <body> for the module
+        $this->moduleTemplate->setContent($content);
+
+        return new HtmlResponse($this->moduleTemplate->renderContent());
     }
 
     /**
@@ -167,40 +169,6 @@ class TableController extends AbstractWizardController
     }
 
     /**
-     * Main function, rendering the table wizard
-     *
-     * @param ServerRequestInterface $request
-     * @return ResponseInterface|null
-     */
-    protected function renderContent(ServerRequestInterface $request): ?ResponseInterface
-    {
-        $normalizedParams = $request->getAttribute('normalizedParams');
-        $requestUri = $normalizedParams->getRequestUri();
-        list($rUri) = explode('#', $requestUri);
-        $this->content .= '<form action="' . htmlspecialchars($rUri) . '" method="post" id="TableController" name="wizardForm">';
-        if ($this->P['table'] && $this->P['field'] && $this->P['uid']) {
-            $tableWizard = $this->renderTableWizard($request);
-
-            if ($tableWizard instanceof RedirectResponse) {
-                return $tableWizard;
-            }
-
-            $this->content .= '<h2>' . htmlspecialchars($this->getLanguageService()->getLL('table_title')) . '</h2>'
-                . '<div>' . $tableWizard . '</div>';
-        } else {
-            $this->content .= '<h2>' . htmlspecialchars($this->getLanguageService()->getLL('table_title')) . '</h2>'
-                . '<div><span class="text-danger">' . htmlspecialchars($this->getLanguageService()->getLL('table_noData')) . '</span></div>';
-        }
-        $this->content .= '</form>';
-        // Setting up the buttons and markers for docHeader
-        $this->getButtons();
-        // Build the <body> for the module
-        $this->moduleTemplate->setContent($this->content);
-
-        return null;
-    }
-
-    /**
      * Create the panel of buttons for submitting the form or otherwise perform operations.
      */
     protected function getButtons(): void
index 7b65eb2..7e22d75 100644 (file)
@@ -206,6 +206,7 @@ The following PHP class methods that have been previously deprecated for v9 have
 * :php:`TYPO3\CMS\Backend\Controller\EditDocumentController->openInNewWindowLink()`
 * :php:`TYPO3\CMS\Backend\Controller\EditDocumentController->setDocument()`
 * :php:`TYPO3\CMS\Backend\Controller\EditDocumentController->shortCutLink()`
+* :php:`TYPO3\CMS\Backend\Controller\EditFileController->getButtons()`
 * :php:`TYPO3\CMS\Backend\Controller\File\FileController->finish()`
 * :php:`TYPO3\CMS\Backend\Controller\File\FileUploadController->main()`
 * :php:`TYPO3\CMS\Backend\Controller\File\FileUploadController->renderUploadForm()`
@@ -223,6 +224,11 @@ The following PHP class methods that have been previously deprecated for v9 have
 * :php:`TYPO3\CMS\Backend\Controller\NewRecordController->regularNew()`
 * :php:`TYPO3\CMS\Backend\Controller\NewRecordController->showNewRecLink()`
 * :php:`TYPO3\CMS\Backend\Controller\NewRecordController->sortNewRecordsByConfig()`
+* :php:`TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->main()`
+* :php:`TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->initClipboard()`
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\AddController->main()`
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\EditController->main()`
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\ListController->main()`
 * :php:`TYPO3\CMS\Backend\Controller\Wizard\TableController->cfgArray2CfgString()`
 * :php:`TYPO3\CMS\Backend\Controller\Wizard\TableController->cfgString2CfgArray()`
 * :php:`TYPO3\CMS\Backend\Controller\Wizard\TableController->changeFunc()`
@@ -531,6 +537,11 @@ The following public class properties have been dropped:
 * :php:`TYPO3\CMS\Backend\Controller\File\ReplaceFileController->content`
 * :php:`TYPO3\CMS\Backend\Controller\File\ReplaceFileController->doc`
 * :php:`TYPO3\CMS\Backend\Controller\File\ReplaceFileController->title`
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\AddController->content`
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\ListController->id`
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\ListController->P`
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\ListController->pid`
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\ListController->table`
 * :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extAdmEnabled`
 * :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->adminPanel`
 * :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->frontendEdit`
@@ -681,6 +692,7 @@ The following class methods have changed visibility:
 * :php:`TYPO3\CMS\Backend\Controller\PageLayoutController->menuConfig()` changed from public to protected
 * :php:`TYPO3\CMS\Backend\Controller\PageLayoutController->pageIsNotLockedForEditors()` changed from public to protected
 * :php:`TYPO3\CMS\Backend\Controller\PageLayoutController->renderContent()` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->init()` changed from public to protected
 * :php:`TYPO3\CMS\Beuser\Controller\BackendUserController->initializeView()` changed from public to protected
 * :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\BlowfishPasswordHash->base64Encode()` changed from public to protected
 * :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\BlowfishPasswordHash->isValidSalt()` changed from public to protected
@@ -933,6 +945,22 @@ The following class properties have changed visibility:
 * :php:`TYPO3\CMS\Backend\Controller\PageLayoutController->search_field` changed from public to protected
 * :php:`TYPO3\CMS\Backend\Controller\PageLayoutController->search_levels` changed from public to protected
 * :php:`TYPO3\CMS\Backend\Controller\PageLayoutController->showLimit` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->cacheCmd` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->CB` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->cmd` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->data` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->flags` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->mirror` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->redirect` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->tce` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\AddController->id` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\AddController->P` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\AddController->pid` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\AddController->processDataFlag` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\AddController->returnEditConf` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\AddController->table` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\EditController->doClose` changed from public to protected
+* :php:`TYPO3\CMS\Backend\Controller\Wizard\EditController->P` changed from public to protected
 * :php:`TYPO3\CMS\Backend\Controller\Wizard\TableController->content` changed from public to protected
 * :php:`TYPO3\CMS\Backend\Controller\Wizard\TableController->inputStyle` changed from public to protected
 * :php:`TYPO3\CMS\Backend\Controller\Wizard\TableController->xmlStorage` changed from public to protected
index a017f72..4e689ef 100644 (file)
@@ -2266,6 +2266,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-84374-ProtectedMethodsAndPropertiesInSimpleDataHandlerController.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Controller\Wizard\TableController->tableWizard' => [
index 8365d6a..95bef98 100644 (file)
@@ -441,16 +441,19 @@ return [
     'TYPO3\CMS\Backend\Controller\Wizard\AddController->processDataFlag' => [
         'restFiles' => [
             'Deprecation-84321-ProtectedMethodsAndPropertiesInAddController.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Controller\Wizard\AddController->P' => [
         'restFiles' => [
             'Deprecation-84321-ProtectedMethodsAndPropertiesInAddController.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Controller\Wizard\AddController->returnEditConf' => [
         'restFiles' => [
             'Deprecation-84321-ProtectedMethodsAndPropertiesInAddController.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Controller\File\RenameFileController->title' => [
@@ -564,26 +567,31 @@ return [
     'TYPO3\CMS\Backend\Controller\Wizard\EditController->doClose' => [
         'restFiles' => [
             'Deprecation-84327-DeprecatedPublicMethodsAndPropertiesInWizardEditController.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->flags' => [
         'restFiles' => [
             'Deprecation-84374-ProtectedMethodsAndPropertiesInSimpleDataHandlerController.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->mirror' => [
         'restFiles' => [
             'Deprecation-84374-ProtectedMethodsAndPropertiesInSimpleDataHandlerController.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->cacheCmd' => [
         'restFiles' => [
             'Deprecation-84374-ProtectedMethodsAndPropertiesInSimpleDataHandlerController.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Controller\SimpleDataHandlerController->CB' => [
         'restFiles' => [
             'Deprecation-84374-ProtectedMethodsAndPropertiesInSimpleDataHandlerController.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Controller\Wizard\TableController->inputStyle' => [