[TASK] Use trait for public method access deprecation 00/57300/9
authorMathias Brodala <mbrodala@pagemachine.de>
Fri, 22 Jun 2018 16:13:56 +0000 (18:13 +0200)
committerAndreas Wolf <andreas.wolf@typo3.org>
Mon, 25 Jun 2018 18:54:08 +0000 (20:54 +0200)
Resolves: #85344
Releases: master
Change-Id: I47e42e974ea14f91b192c6521196c972c404b442
Reviewed-on: https://review.typo3.org/57300
Reviewed-by: Sebastian Hofer <sebastian.hofer@marit.ag>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Alexander Stehlik <alexander.stehlik@gmail.com>
Tested-by: Alexander Stehlik <alexander.stehlik@gmail.com>
Reviewed-by: Andreas Wolf <andreas.wolf@typo3.org>
Tested-by: Andreas Wolf <andreas.wolf@typo3.org>
typo3/sysext/backend/Classes/Controller/ContentElement/ElementInformationController.php
typo3/sysext/backend/Classes/Controller/EditDocumentController.php
typo3/sysext/backend/Classes/Controller/File/CreateFolderController.php
typo3/sysext/backend/Classes/Controller/File/EditFileController.php
typo3/sysext/backend/Classes/Controller/File/FileController.php

index 7c3537a..f89613b 100644 (file)
@@ -20,6 +20,7 @@ use Psr\Http\Message\ServerRequestInterface;
 use TYPO3\CMS\Backend\Backend\Avatar\Avatar;
 use TYPO3\CMS\Backend\Template\ModuleTemplate;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Core\Compatibility\PublicMethodDeprecationTrait;
 use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Http\HtmlResponse;
@@ -38,14 +39,22 @@ use TYPO3\CMS\Fluid\View\StandaloneView;
  */
 class ElementInformationController
 {
+    use PublicMethodDeprecationTrait;
     use PublicPropertyDeprecationTrait;
 
     /**
+     * @var array
+     */
+    private $deprecatedPublicMethods = [
+        'getLabelForTableColumn' => 'Using ElementInformationController::getLabelForTableColumn() is deprecated and will not be possible anymore in TYPO3 v10.',
+    ];
+
+    /**
      * Properties which have been moved to protected status from public
      *
      * @var array
      */
-    protected $deprecatedPublicProperties = [
+    private $deprecatedPublicProperties = [
         'table' => 'Using $table of class ElementInformationController from the outside is discouraged, as this variable is only used for internal storage.',
         'uid' => 'Using $uid of class ElementInformationController from the outside is discouraged, as this variable is only used for internal storage.',
         'access' => 'Using $access of class ElementInformationController from the outside is discouraged, as this variable is only used for internal storage.',
@@ -497,15 +506,8 @@ class ElementInformationController
      * @param string $fieldName Column name
      * @return string label
      */
-    public function getLabelForTableColumn($tableName, $fieldName)
+    protected function getLabelForTableColumn($tableName, $fieldName)
     {
-        // Foreign class call? Method will be protected in v10, giving core freedom to move stuff around
-        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-        if (end($backtrace)['class'] !== __CLASS__) {
-            // @deprecated since TYPO3 v9, this method will be set to protected in v10
-            trigger_error('Method getLabelForTableColumn() will be set to protected in v10. Do not call from other extension', E_USER_DEPRECATED);
-        }
-
         if ($GLOBALS['TCA'][$tableName]['columns'][$fieldName]['label'] !== null) {
             $field = $this->getLanguageService()->sL($GLOBALS['TCA'][$tableName]['columns'][$fieldName]['label']);
             if (trim($field) === '') {
index 9fa0e1b..5d23b15 100644 (file)
@@ -28,6 +28,7 @@ use TYPO3\CMS\Backend\Routing\UriBuilder;
 use TYPO3\CMS\Backend\Template\Components\ButtonBar;
 use TYPO3\CMS\Backend\Template\ModuleTemplate;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Core\Compatibility\PublicMethodDeprecationTrait;
 use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\Query\QueryBuilder;
@@ -60,6 +61,7 @@ use TYPO3\CMS\Frontend\Page\PageRepository;
  */
 class EditDocumentController
 {
+    use PublicMethodDeprecationTrait;
     use PublicPropertyDeprecationTrait;
 
     /**
@@ -71,11 +73,23 @@ class EditDocumentController
     public const DOCUMENT_CLOSE_MODE_NO_REDIRECT = 4;
 
     /**
+     * @var array
+     */
+    private $deprecatedPublicMethods = [
+        'makeEditForm' => 'Using EditDocumentController::makeEditForm() is deprecated and will not be possible anymore in TYPO3 v10.',
+        'compileForm' => 'Using EditDocumentController::compileForm() is deprecated and will not be possible anymore in TYPO3 v10.',
+        'languageSwitch' => 'Using EditDocumentController::languageSwitch() is deprecated and will not be possible anymore in TYPO3 v10.',
+        'getLanguages' => 'Using EditDocumentController::getLanguages() is deprecated and will not be possible anymore in TYPO3 v10.',
+        'fixWSversioningInEditConf' => 'Using EditDocumentController::fixWSversioningInEditConf() is deprecated and will not be possible anymore in TYPO3 v10.',
+        'getRecordForEdit' => 'Using EditDocumentController::getRecordForEdit() is deprecated and will not be possible anymore in TYPO3 v10.',
+    ];
+
+    /**
      * Properties which have been moved to protected status from public
      *
      * @var array
      */
-    protected $deprecatedPublicProperties = [
+    private $deprecatedPublicProperties = [
         'editconf' => 'Using $editconf of class EditDocumentTemplate from the outside is discouraged, as this variable is only used for internal storage.',
         'defVals' => 'Using $defVals of class EditDocumentTemplate from the outside is discouraged, as this variable is only used for internal storage.',
         'overrideVals' => 'Using $overrideVals of class EditDocumentTemplate from the outside is discouraged, as this variable is only used for internal storage.',
@@ -1207,15 +1221,8 @@ class EditDocumentController
      *
      * @return string HTML form elements wrapped in tables
      */
-    public function makeEditForm(): string
+    protected function makeEditForm(): string
     {
-        // Foreign class call? Method will be protected in v10, giving core freedom to move stuff around
-        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-        if (end($backtrace)['class'] !== __CLASS__) {
-            // @deprecated since TYPO3 v9, this method will be set to protected in v10
-            trigger_error('Method makeEditForm() will be set to protected in v10. Do not call from other extension', E_USER_DEPRECATED);
-        }
-
         // Initialize variables
         $this->elementsData = [];
         $this->errorC = 0;
@@ -2069,15 +2076,8 @@ class EditDocumentController
      * @param string $editForm HTML form.
      * @return string Composite HTML
      */
-    public function compileForm(string $editForm): string
+    protected function compileForm(string $editForm): string
     {
-        // Foreign class call? Method will be protected in v10, giving core freedom to move stuff around
-        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-        if (end($backtrace)['class'] !== __CLASS__) {
-            // @deprecated since TYPO3 v9, this method will be set to protected in v10
-            trigger_error('Method compileForm() will be set to protected in v10. Do not call from other extension', E_USER_DEPRECATED);
-        }
-
         $formContent = '
             <form
                 action="' . htmlspecialchars($this->R_URI) . '"
@@ -2205,15 +2205,8 @@ class EditDocumentController
      * @param int $uid Uid for which to create a new language
      * @param int $pid|null Pid of the record
      */
-    public function languageSwitch(string $table, int $uid, $pid = null)
+    protected function languageSwitch(string $table, int $uid, $pid = null)
     {
-        // Foreign class call? Method will be protected in v10, giving core freedom to move stuff around
-        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-        if (end($backtrace)['class'] !== __CLASS__) {
-            // @deprecated since TYPO3 v9, this method will be set to protected in v10
-            trigger_error('Method fixWSversioningInEditConf() will be set to protected in v10. Do not call from other extension', E_USER_DEPRECATED);
-        }
-
         $languageField = $GLOBALS['TCA'][$table]['ctrl']['languageField'];
         $transOrigPointerField = $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'];
         /** @var UriBuilder $uriBuilder */
@@ -2436,15 +2429,8 @@ class EditDocumentController
      * @param string $table For pages we want all languages, for other records the languages of the page translations
      * @return array Language records including faked record for default language
      */
-    public function getLanguages(int $id, string $table = ''): array
+    protected function getLanguages(int $id, string $table = ''): array
     {
-        // Foreign class call? Method will be protected in v10, giving core freedom to move stuff around
-        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-        if (end($backtrace)['class'] !== __CLASS__) {
-            // @deprecated since TYPO3 v9, this method will be set to protected in v10
-            trigger_error('Method getLanguages() will be set to protected in v10. Do not call from other extension', E_USER_DEPRECATED);
-        }
-
         $languageService = $this->getLanguageService();
         $modPageTsConfig = BackendUtility::getPagesTSconfig($id)['mod.']['SHARED.'] ?? [];
         // Fallback non sprite-configuration
@@ -2524,15 +2510,8 @@ class EditDocumentController
      *
      * @param array|bool $mapArray Mapping between old and new ids if auto-versioning has been performed.
      */
-    public function fixWSversioningInEditConf($mapArray = false): void
+    protected function fixWSversioningInEditConf($mapArray = false): void
     {
-        // Foreign class call? Method will be protected in v10, giving core freedom to move stuff around
-        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-        if (end($backtrace)['class'] !== __CLASS__) {
-            // @deprecated since TYPO3 v9, this method will be set to protected in v10
-            trigger_error('Method fixWSversioningInEditConf() will be set to protected in v10. Do not call from other extension', E_USER_DEPRECATED);
-        }
-
         // Traverse the editConf array
         if (is_array($this->editconf)) {
             // Tables:
@@ -2578,15 +2557,8 @@ class EditDocumentController
      * @param int $theUid Record UID
      * @return array|false Returns record to edit, false if none
      */
-    public function getRecordForEdit(string $table, int $theUid)
+    protected function getRecordForEdit(string $table, int $theUid)
     {
-        // Foreign class call? Method will be protected in v10, giving core freedom to move stuff around
-        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-        if (end($backtrace)['class'] !== __CLASS__) {
-            // @deprecated since TYPO3 v9, this method will be set to protected in v10
-            trigger_error('Method getRecordForEdit() will be set to protected in v10. Do not call from other extension', E_USER_DEPRECATED);
-        }
-
         // Fetch requested record:
         $reqRecord = BackendUtility::getRecord($table, $theUid, 'uid,pid');
         if (is_array($reqRecord)) {
index f851c50..e0b056b 100644 (file)
@@ -20,6 +20,7 @@ use Psr\Http\Message\ServerRequestInterface;
 use TYPO3\CMS\Backend\Routing\UriBuilder;
 use TYPO3\CMS\Backend\Template\ModuleTemplate;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Core\Compatibility\PublicMethodDeprecationTrait;
 use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
 use TYPO3\CMS\Core\Http\HtmlResponse;
 use TYPO3\CMS\Core\Imaging\Icon;
@@ -38,12 +39,20 @@ use TYPO3\CMS\Fluid\View\StandaloneView;
  */
 class CreateFolderController
 {
+    use PublicMethodDeprecationTrait;
     use PublicPropertyDeprecationTrait;
 
     /**
      * @var array
      */
-    protected $deprecatedPublicProperties = [
+    private $deprecatedPublicMethods = [
+        'main' => 'Using CreateFolderController::main() is deprecated and will not be possible anymore in TYPO3 v10.',
+    ];
+
+    /**
+     * @var array
+     */
+    private $deprecatedPublicProperties = [
         'number' => 'Using $number of class CreateFolderController from outside is discouraged, as this variable is only used for internal storage.',
         'folderNumber' => 'Using $folderNumber of class CreateFolderController from outside is discouraged, as this variable is only used for internal storage.',
         'target' => 'Using $target of class CreateFolderController from outside is discouraged, as this variable is only used for internal storage.',
@@ -212,15 +221,8 @@ class CreateFolderController
     /**
      * Main function, rendering the main module content
      */
-    public function main()
+    protected function main()
     {
-        // Foreign class call? Method will be protected in v10, giving core freedom to move stuff around
-        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-        if (end($backtrace)['class'] !== __CLASS__) {
-            // @deprecated since TYPO3 v9, this method will be set to protected in v10
-            trigger_error('Method main() will be set to protected in v10. Do not call from other extension', E_USER_DEPRECATED);
-        }
-
         $lang = $this->getLanguageService();
         $assigns = [];
         $assigns['target'] = $this->target;
index 924b9b1..cccfde7 100644 (file)
@@ -24,6 +24,7 @@ use TYPO3\CMS\Backend\Template\Components\ButtonBar;
 use TYPO3\CMS\Backend\Template\DocumentTemplate;
 use TYPO3\CMS\Backend\Template\ModuleTemplate;
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
+use TYPO3\CMS\Core\Compatibility\PublicMethodDeprecationTrait;
 use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
 use TYPO3\CMS\Core\Http\HtmlResponse;
 use TYPO3\CMS\Core\Http\RedirectResponse;
@@ -42,12 +43,20 @@ use TYPO3\CMS\Fluid\View\StandaloneView;
  */
 class EditFileController
 {
+    use PublicMethodDeprecationTrait;
     use PublicPropertyDeprecationTrait;
 
     /**
      * @var array
      */
-    protected $deprecatedPublicProperties = [
+    private $deprecatedPublicMethods = [
+        'main' => 'Using EditFileController::main() is deprecated and will not be possible anymore in TYPO3 v10.',
+    ];
+
+    /**
+     * @var array
+     */
+    private $deprecatedPublicProperties = [
         'origTarget' => 'Using $origTarget of class EditFileController from outside is discouraged, as this variable is only used for internal storage.',
         'target' => 'Using $target of class EditFileController from outside is discouraged, as this variable is only used for internal storage.',
         'returnUrl' => 'Using $returnUrl of class EditFileController from outside is discouraged, as this variable is only used for internal storage.',
@@ -129,13 +138,26 @@ class EditFileController
      */
     public function mainAction(ServerRequestInterface $request): ResponseInterface
     {
-        if ($response = $this->main()) {
+        if ($response = $this->process()) {
             return $response;
         }
+
         return new HtmlResponse($this->moduleTemplate->renderContent());
     }
 
     /**
+     * Main function, rendering the actual content of the editing page
+     */
+    protected function main()
+    {
+        $response = $this->process();
+
+        if ($response instanceof RedirectResponse) {
+            HttpUtility::redirect($response->getHeaderLine('location'), $response->getStatusCode());
+        }
+    }
+
+    /**
      * Initialize script class
      *
      * @param ServerRequestInterface $request
@@ -191,18 +213,8 @@ class EditFileController
      *
      * @return ResponseInterface|null Possible redirect response
      */
-    public function main(): ?ResponseInterface
+    protected function process(): ?ResponseInterface
     {
-        // @deprecated Variable can be removed in v10
-        $deprecatedCaller = false;
-        // Foreign class call? Method will be protected in v10, giving core freedom to move stuff around
-        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-        if (end($backtrace)['class'] !== __CLASS__) {
-            // @deprecated since TYPO3 v9, this method will be set to protected in v10
-            trigger_error('Method main() will be set to protected in v10. Do not call from other extension', E_USER_DEPRECATED);
-            $deprecatedCaller = true;
-        }
-
         $dataColumnDefinition = [
             'label' => htmlspecialchars($this->getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:file'))
                 . ' ' . htmlspecialchars($this->target),
@@ -295,11 +307,7 @@ class EditFileController
             $defaultFlashMessageQueue = $flashMessageService->getMessageQueueByIdentifier();
             $defaultFlashMessageQueue->enqueue($flashMessage);
 
-            if ($deprecatedCaller === true) {
-                HttpUtility::redirect($this->returnUrl, HttpUtility::HTTP_STATUS_500);
-            } else {
-                return new RedirectResponse($this->returnUrl, HttpUtility::HTTP_STATUS_500);
-            }
+            return new RedirectResponse($this->returnUrl, HttpUtility::HTTP_STATUS_500);
         }
 
         // Rendering of the output via fluid
index 9111b8c..3c3221d 100644 (file)
@@ -21,6 +21,7 @@ use TYPO3\CMS\Backend\Clipboard\Clipboard;
 use TYPO3\CMS\Backend\Routing\UriBuilder;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
+use TYPO3\CMS\Core\Compatibility\PublicMethodDeprecationTrait;
 use TYPO3\CMS\Core\Http\HtmlResponse;
 use TYPO3\CMS\Core\Http\JsonResponse;
 use TYPO3\CMS\Core\Http\RedirectResponse;
@@ -42,6 +43,16 @@ use TYPO3\CMS\Core\Utility\HttpUtility;
  */
 class FileController
 {
+    use PublicMethodDeprecationTrait;
+
+    /**
+     * @var array
+     */
+    private $deprecatedPublicMethods = [
+        'initClipboard' => 'Using FileController::initClipboard() is deprecated and will not be possible anymore in TYPO3 v10.',
+        'main' => 'Using FileController::main() is deprecated and will not be possible anymore in TYPO3 v10.',
+    ];
+
     /**
      * Array of file-operations.
      *
@@ -221,14 +232,8 @@ class FileController
     /**
      * Initialize the Clipboard. This will fetch the data about files to paste/delete if such an action has been sent.
      */
-    public function initClipboard(): void
+    protected function initClipboard(): void
     {
-        // Foreign class call? Method will be protected in v10, giving core freedom to move stuff around
-        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-        if (end($backtrace)['class'] !== __CLASS__) {
-            // @deprecated since TYPO3 v9, this method will be set to protected in v10
-            trigger_error('Method initClipboard() will be set to protected in v10. Do not call from other extension', E_USER_DEPRECATED);
-        }
         if (is_array($this->CB)) {
             $clipObj = GeneralUtility::makeInstance(Clipboard::class);
             $clipObj->initializeClipboard();
@@ -247,14 +252,8 @@ class FileController
      * Performing the file admin action:
      * Initializes the objects, setting permissions, sending data to object.
      */
-    public function main(): void
+    protected function main(): void
     {
-        // Foreign class call? Method will be protected in v10, giving core freedom to move stuff around
-        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
-        if (end($backtrace)['class'] !== __CLASS__) {
-            // @deprecated since TYPO3 v9, this method will be set to protected in v10
-            trigger_error('Method main() will be set to protected in v10. Do not call from other extension', E_USER_DEPRECATED);
-        }
         // Initializing:
         $this->fileProcessor->setActionPermissions();
         $this->fileProcessor->setExistingFilesConflictMode($this->overwriteExistingFiles);