[!!!][TASK] Remove FormEngine / TCA related deprecated code 90/52490/6
authorChristian Kuhn <lolli@schwarzbu.ch>
Tue, 18 Apr 2017 16:58:37 +0000 (18:58 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Thu, 20 Apr 2017 12:09:52 +0000 (14:09 +0200)
Resolves: #80913
Releases: master
Change-Id: I151fbf7a02df3e4713d623eb1659ac35ae2cb35a
Reviewed-on: https://review.typo3.org/52490
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
Reviewed-by: Henrik Elsner <helsner@dfau.de>
Tested-by: Henrik Elsner <helsner@dfau.de>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
33 files changed:
typo3/sysext/backend/Classes/Controller/Wizard/ColorpickerController.php [deleted file]
typo3/sysext/backend/Classes/Form/AbstractNode.php
typo3/sysext/backend/Classes/Form/Container/SoloFieldContainer.php [deleted file]
typo3/sysext/backend/Classes/Form/DatabaseFileIconsHookInterface.php [deleted file]
typo3/sysext/backend/Classes/Form/Element/AbstractFormElement.php
typo3/sysext/backend/Classes/Form/Element/GroupElement.php
typo3/sysext/backend/Classes/Form/Element/InputColorPickerElement.php
typo3/sysext/backend/Classes/Form/Element/InputDateTimeElement.php
typo3/sysext/backend/Classes/Form/Element/InputLinkElement.php
typo3/sysext/backend/Classes/Form/Element/InputTextElement.php
typo3/sysext/backend/Classes/Form/Element/SelectCheckBoxElement.php
typo3/sysext/backend/Classes/Form/Element/SelectMultipleSideBySideElement.php
typo3/sysext/backend/Classes/Form/Element/SelectSingleBoxElement.php
typo3/sysext/backend/Classes/Form/Element/SelectSingleElement.php
typo3/sysext/backend/Classes/Form/Element/TextElement.php
typo3/sysext/backend/Classes/Form/Element/TextTableElement.php
typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php
typo3/sysext/backend/Classes/Form/FormDataProvider/TcaFlexProcess.php
typo3/sysext/backend/Classes/Form/FormResultCompiler.php
typo3/sysext/backend/Classes/Form/NodeFactory.php
typo3/sysext/backend/Classes/Form/Wizard/SuggestWizard.php [deleted file]
typo3/sysext/backend/Classes/Form/Wizard/ValueSliderWizard.php [deleted file]
typo3/sysext/backend/Classes/Template/DocumentTemplate.php
typo3/sysext/backend/Configuration/Backend/Routes.php
typo3/sysext/backend/Resources/Private/Templates/Wizards/SuggestWizard.html [deleted file]
typo3/sysext/backend/Resources/Public/JavaScript/jsfunc.inline.js
typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaFlexProcessTest.php
typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php
typo3/sysext/backend/Tests/Unit/Form/Wizard/SuggestWizardTest.php [deleted file]
typo3/sysext/core/Documentation/Changelog/master/Breaking-80700-DeprecatedFunctionalityRemoved.rst
typo3/sysext/rsaauth/Classes/Form/Element/RsaInputElement.php
typo3/sysext/rte_ckeditor/Classes/Form/Element/RichTextElement.php
typo3/sysext/t3editor/Classes/Form/Element/T3editorElement.php

diff --git a/typo3/sysext/backend/Classes/Controller/Wizard/ColorpickerController.php b/typo3/sysext/backend/Classes/Controller/Wizard/ColorpickerController.php
deleted file mode 100644 (file)
index 91cb1e9..0000000
+++ /dev/null
@@ -1,424 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\Controller\Wizard;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use TYPO3\CMS\Backend\Template\DocumentTemplate;
-use TYPO3\CMS\Backend\Utility\BackendUtility;
-use TYPO3\CMS\Core\Page\PageRenderer;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\PathUtility;
-
-/**
- * Script Class for colorpicker wizard
- *
- * Unused with new renderType "inputColorPicker" since v8.
- *
- * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
- */
-class ColorpickerController extends AbstractWizardController
-{
-    /**
-     * Wizard parameters, coming from FormEngine linking to the wizard.
-     *
-     * @var array
-     */
-    public $wizardParameters;
-
-    /**
-     * Value of the current color picked.
-     *
-     * @var string
-     */
-    public $colorValue;
-
-    /**
-     * Serialized functions for changing the field...
-     * Necessary to call when the value is transferred to the FormEngine since the form might
-     * need to do internal processing. Otherwise the value is simply not be saved.
-     *
-     * @var string
-     */
-    public $fieldChangeFunc;
-
-    /**
-     * @var string
-     */
-    protected $fieldChangeFuncHash;
-
-    /**
-     * Form name (from opener script)
-     *
-     * @var string
-     */
-    public $fieldName;
-
-    /**
-     * Field name (from opener script)
-     *
-     * @var string
-     */
-    public $formName;
-
-    /**
-     * ID of element in opener script for which to set color.
-     *
-     * @var string
-     */
-    public $md5ID;
-
-    /**
-     * Internal: If FALSE, a frameset is rendered, if TRUE the content of the picker script.
-     *
-     * @var int
-     */
-    public $showPicker;
-
-    /**
-     * @var string
-     */
-    public $HTMLcolorList = 'aqua,black,blue,fuchsia,gray,green,lime,maroon,navy,olive,purple,red,silver,teal,yellow,white';
-
-    /**
-     * @var string
-     */
-    public $pickerImage = '';
-
-    /**
-     * Error message if image not found.
-     *
-     * @var string
-     */
-    public $imageError = '';
-
-    /**
-     * Document template object
-     *
-     * @var DocumentTemplate
-     */
-    public $doc;
-
-    /**
-     * @var string
-     */
-    public $content;
-
-    /**
-     * @var string
-     */
-    protected $exampleImg;
-
-    /**
-     * Constructor
-     *
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    public function __construct()
-    {
-        GeneralUtility::logDeprecatedFunction();
-        parent::__construct();
-        $this->getLanguageService()->includeLLFile('EXT:lang/Resources/Private/Language/locallang_wizards.xlf');
-        $GLOBALS['SOBE'] = $this;
-
-        $this->init();
-    }
-
-    /**
-     * Initialises the Class
-     */
-    protected function init()
-    {
-        // Setting GET vars (used in frameset script):
-        $this->wizardParameters = GeneralUtility::_GP('P');
-        // Setting GET vars (used in colorpicker script):
-        $this->colorValue = GeneralUtility::_GP('colorValue');
-        $this->fieldChangeFunc = GeneralUtility::_GP('fieldChangeFunc');
-        $this->fieldChangeFuncHash = GeneralUtility::_GP('fieldChangeFuncHash');
-        $this->fieldName = GeneralUtility::_GP('fieldName');
-        $this->formName = GeneralUtility::_GP('formName');
-        $this->md5ID = GeneralUtility::_GP('md5ID');
-        $this->exampleImg = GeneralUtility::_GP('exampleImg');
-        // Resolving image (checking existence etc.)
-        $this->imageError = '';
-        if ($this->exampleImg) {
-            $this->pickerImage = GeneralUtility::getFileAbsFileName($this->exampleImg);
-            if (!$this->pickerImage || !@is_file($this->pickerImage)) {
-                $this->imageError = 'ERROR: The image "' . $this->exampleImg . '" could not be found!';
-            }
-        }
-        $update = [];
-        if ($this->areFieldChangeFunctionsValid()) {
-            // Setting field-change functions:
-            $fieldChangeFuncArr = unserialize($this->fieldChangeFunc);
-            unset($fieldChangeFuncArr['alert']);
-            foreach ($fieldChangeFuncArr as $v) {
-                $update[] = 'parent.opener.' . $v;
-            }
-        }
-        // Initialize document object:
-        $this->doc = GeneralUtility::makeInstance(DocumentTemplate::class);
-        $this->getPageRenderer()->loadRequireJsModule(
-            'TYPO3/CMS/Backend/Wizard/Colorpicker',
-            'function(Colorpicker) {
-                               Colorpicker.setFieldChangeFunctions({
-                                       fieldChangeFunctions: function() {'
-                        . implode('', $update) .
-                    '}
-                               });
-                       }'
-        );
-        // Start page:
-        $this->content .= $this->doc->startPage($this->getLanguageService()->getLL('colorpicker_title'));
-    }
-
-    /**
-     * 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
-     * @param ResponseInterface $response
-     * @return ResponseInterface
-     */
-    public function mainAction(ServerRequestInterface $request, ResponseInterface $response)
-    {
-        $this->main();
-
-        $this->content .= $this->doc->endPage();
-        $this->content = $this->doc->insertStylesAndJS($this->content);
-
-        $response->getBody()->write($this->content);
-        return $response;
-    }
-
-    /**
-     * Main Method, rendering either colorpicker or frameset depending on ->showPicker
-     */
-    public function main()
-    {
-        // Show frameset by default:
-        if (!GeneralUtility::_GP('showPicker')) {
-            $this->frameSet();
-        } else {
-            // Putting together the items into a form:
-            $content = '
-                               <form name="colorform" method="post" action="' . htmlspecialchars(BackendUtility::getModuleUrl('wizard_colorpicker')) . '">
-                                       ' . $this->colorMatrix() . '
-                                       ' . $this->colorList() . '
-                                       ' . $this->colorImage() . '
-
-                                       <!-- Value box: -->
-                                       <p class="c-head">' . htmlspecialchars($this->getLanguageService()->getLL('colorpicker_colorValue')) . '</p>
-                                       <table border="0" cellpadding="0" cellspacing="3">
-                                               <tr>
-                                                       <td>
-                                                               <input id="colorValue" type="text" ' . $this->doc->formWidth(7) . ' maxlength="10" name="colorValue" value="' . htmlspecialchars($this->colorValue) . '" />
-                                                       </td>
-                                                       <td style="background-color:' . htmlspecialchars($this->colorValue) . '; border: 1px solid black;">
-                                                               <span style="color: black;">' . htmlspecialchars($this->getLanguageService()->getLL('colorpicker_black')) . '</span>&nbsp;<span style="color: white;">' . htmlspecialchars($this->getLanguageService()->getLL('colorpicker_white')) . '</span>
-                                                       </td>
-                                                       <td>
-                                                               <input class="btn btn-default" type="submit" id="colorpicker-saveclose" value="' . htmlspecialchars($this->getLanguageService()->getLL('colorpicker_setClose')) . '" />
-                                                       </td>
-                                               </tr>
-                                       </table>
-
-                                       <!-- Hidden fields with values that has to be kept constant -->
-                                       <input type="hidden" name="showPicker" value="1" />
-                                       <input type="hidden" name="fieldChangeFunc" value="' . htmlspecialchars($this->fieldChangeFunc) . '" />
-                                       <input type="hidden" name="fieldChangeFuncHash" value="' . htmlspecialchars($this->fieldChangeFuncHash) . '" />
-                                       <input type="hidden" name="fieldName" value="' . htmlspecialchars($this->fieldName) . '" />
-                                       <input type="hidden" name="formName" value="' . htmlspecialchars($this->formName) . '" />
-                                       <input type="hidden" name="md5ID" value="' . htmlspecialchars($this->md5ID) . '" />
-                                       <input type="hidden" name="exampleImg" value="' . htmlspecialchars($this->exampleImg) . '" />
-                               </form>';
-
-            $this->content .= '<h2>' . htmlspecialchars($this->getLanguageService()->getLL('colorpicker_title')) . '</h2>';
-            $this->content .= $content;
-        }
-    }
-
-    /**
-     * Returns a frameset so our JavaScript Reference isn't lost
-     * Took some brains to figure this one out ;-)
-     * If Peter wouldn't have been I would've gone insane...
-     */
-    public function frameSet()
-    {
-        $this->getDocumentTemplate()->JScode = GeneralUtility::wrapJS('
-                               if (!window.opener) {
-                                       alert("ERROR: Sorry, no link to main window... Closing");
-                                       close();
-                               }
-               ');
-        $this->getDocumentTemplate()->startPage($this->getLanguageService()->getLL('colorpicker_title'));
-
-        // URL for the inner main frame:
-        $url = BackendUtility::getModuleUrl(
-            'wizard_colorpicker',
-            [
-                'showPicker' => 1,
-                'colorValue' => $this->wizardParameters['currentValue'],
-                'fieldName' => $this->wizardParameters['itemName'],
-                'formName' => $this->wizardParameters['formName'],
-                'exampleImg' => $this->wizardParameters['exampleImg'],
-                'md5ID' => $this->wizardParameters['md5ID'],
-                'fieldChangeFunc' => serialize($this->wizardParameters['fieldChangeFunc']),
-                'fieldChangeFuncHash' => $this->wizardParameters['fieldChangeFuncHash'],
-            ]
-        );
-        $this->content = $this->getPageRenderer()->render(PageRenderer::PART_HEADER) . '
-                       <frameset rows="*,1" framespacing="0" frameborder="0" border="0">
-                               <frame name="content" src="' . htmlspecialchars($url) . '" marginwidth="0" marginheight="0" frameborder="0" scrolling="auto" noresize="noresize" />
-                               <frame name="menu" src="' . htmlspecialchars(BackendUtility::getModuleUrl('dummy')) . '" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" noresize="noresize" />
-                       </frameset>
-               </html>';
-    }
-
-    /************************************
-     *
-     * Rendering of various color selectors
-     *
-     ************************************/
-    /**
-     * Creates a color matrix table
-     *
-     * @return string
-     */
-    public function colorMatrix()
-    {
-        $steps = 51;
-        // Get colors:
-        $color = [];
-        for ($rr = 0; $rr < 256; $rr += $steps) {
-            for ($gg = 0; $gg < 256; $gg += $steps) {
-                for ($bb = 0; $bb < 256; $bb += $steps) {
-                    $color[] = '#' . substr(('0' . dechex($rr)), -2) . substr(('0' . dechex($gg)), -2) . substr(('0' . dechex($bb)), -2);
-                }
-            }
-        }
-        // Traverse colors:
-        $columns = 24;
-        $rows = 0;
-        $tRows = [];
-        while (isset($color[$columns * $rows])) {
-            $tCells = [];
-            for ($i = 0; $i < $columns; $i++) {
-                $tCells[] = '<td bgcolor="' . $color[$columns * $rows + $i] . '" class="t3js-colorpicker-value" data-color-value="' . htmlspecialchars($color[($columns * $rows + $i)]) . '" title="' . htmlspecialchars($color[($columns * $rows + $i)]) . '">&nbsp;&nbsp;</td>';
-            }
-            $tRows[] = '<tr>' . implode('', $tCells) . '</tr>';
-            $rows++;
-        }
-        return '<p class="c-head">' . htmlspecialchars($this->getLanguageService()->getLL('colorpicker_fromMatrix')) . '</p>
-                       <table style="width:100%; border: 1px solid black; cursor:crosshair;">' . implode('', $tRows) . '</table>';
-    }
-
-    /**
-     * Creates a selector box with all HTML color names.
-     *
-     * @return string
-     */
-    public function colorList()
-    {
-        // Initialize variables:
-        $colors = explode(',', $this->HTMLcolorList);
-        $currentValue = strtolower($this->colorValue);
-        $opt = [];
-        $opt[] = '<option value=""></option>';
-        // Traverse colors, making option tags for selector box.
-        foreach ($colors as $colorName) {
-            $opt[] = '<option style="background-color: ' . $colorName . ';" value="' . htmlspecialchars($colorName) . '"' . ($currentValue === $colorName ? ' selected="selected"' : '') . '>' . htmlspecialchars($colorName) . '</option>';
-        }
-        // Compile selector box and return result:
-        return '<p class="c-head">' . htmlspecialchars($this->getLanguageService()->getLL('colorpicker_fromList')) . '</p>
-                       <select class="t3js-colorpicker-selector">' . implode(LF, $opt) . '</select><br />';
-    }
-
-    /**
-     * Creates a color image selector
-     *
-     * @return string
-     */
-    public function colorImage()
-    {
-        // Handling color-picker image if any:
-        if (!$this->imageError) {
-            if ($this->pickerImage) {
-                if (GeneralUtility::_POST('coords_x')) {
-                    /** @var $image \TYPO3\CMS\Core\Imaging\GraphicalFunctions */
-                    $image = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\GraphicalFunctions::class);
-                    $this->colorValue = '#' . $this->getIndex($image->imageCreateFromFile($this->pickerImage), GeneralUtility::_POST('coords_x'), GeneralUtility::_POST('coords_y'));
-                }
-                $pickerFormImage = '
-                               <p class="c-head">' . htmlspecialchars($this->getLanguageService()->getLL('colorpicker_fromImage')) . '</p>
-                               <input type="image" src="' . PathUtility::getAbsoluteWebPath($this->pickerImage) . '" name="coords" style="cursor:crosshair;" /><br />';
-            } else {
-                $pickerFormImage = '';
-            }
-        } else {
-            $pickerFormImage = '
-                       <p class="c-head">' . htmlspecialchars($this->imageError) . '</p>';
-        }
-        return $pickerFormImage;
-    }
-
-    /**
-     * Gets the HTML (Hex) Color Code for the selected pixel of an image
-     * This method handles the correct imageResource no matter what format
-     *
-     * @param resource $im Valid ImageResource returned by \TYPO3\CMS\Core\Imaging\GraphicalFunctions::imageCreateFromFile
-     * @param int $x X-Coordinate of the pixel that should be checked
-     * @param int $y Y-Coordinate of the pixel that should be checked
-     * @return string HEX RGB value for color
-     * @see colorImage()
-     */
-    public function getIndex($im, $x, $y)
-    {
-        $rgb = imagecolorat($im, $x, $y);
-        $colorRgb = imagecolorsforindex($im, $rgb);
-        $index['r'] = dechex($colorRgb['red']);
-        $index['g'] = dechex($colorRgb['green']);
-        $index['b'] = dechex($colorRgb['blue']);
-        $hexValue = [];
-        foreach ($index as $value) {
-            if (strlen($value) === 1) {
-                $hexValue[] = strtoupper('0' . $value);
-            } else {
-                $hexValue[] = strtoupper($value);
-            }
-        }
-        $hex = implode('', $hexValue);
-        return $hex;
-    }
-
-    /**
-     * Determines whether submitted field change functions are valid
-     * and are coming from the system and not from an external abuse.
-     *
-     * @return bool Whether the submitted field change functions are valid
-     */
-    protected function areFieldChangeFunctionsValid()
-    {
-        return $this->fieldChangeFunc && $this->fieldChangeFuncHash && $this->fieldChangeFuncHash === GeneralUtility::hmac($this->fieldChangeFunc);
-    }
-
-    /**
-     * @return PageRenderer
-     */
-    protected function getPageRenderer()
-    {
-        return GeneralUtility::makeInstance(PageRenderer::class);
-    }
-}
index a4116aa..8081b81 100644 (file)
@@ -116,11 +116,6 @@ abstract class AbstractNode implements NodeInterface
         if ($mergeHtml && !empty($childReturn['html'])) {
             $existing['html'] .= LF . $childReturn['html'];
         }
-        if (!empty($childReturn['extJSCODE'])) {
-            // @deprecated since TYPO3 CMS 8, will be removed in TYPO3 CMS 9.
-            GeneralUtility::logDeprecatedFunction();
-            $existing['extJSCODE'] .= LF . $childReturn['extJSCODE'];
-        }
         foreach ($childReturn['additionalJavaScriptPost'] as $value) {
             $existing['additionalJavaScriptPost'][] = $value;
         }
@@ -153,20 +148,6 @@ abstract class AbstractNode implements NodeInterface
     }
 
     /**
-     * Build JSON string for validations rules and return it
-     * as data attribute for HTML elements.
-     *
-     * @param array $config
-     * @return string
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9 - use getValidationDataAsJsonString() instead
-     */
-    protected function getValidationDataAsDataAttribute(array $config): string
-    {
-        GeneralUtility::logDeprecatedFunction();
-        return sprintf(' data-formengine-validation-rules="%s" ', htmlspecialchars($this->getValidationDataAsJsonString($config)));
-    }
-
-    /**
      * Build JSON string for validations rules.
      *
      * @param array $config
diff --git a/typo3/sysext/backend/Classes/Form/Container/SoloFieldContainer.php b/typo3/sysext/backend/Classes/Form/Container/SoloFieldContainer.php
deleted file mode 100644 (file)
index e9425a5..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\Form\Container;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Lang\LanguageService;
-
-/**
- * An entry container to render just a single field.
- *
- * The container operates on $this->globalOptions['singleFieldToRender'] to render
- * this field. It initializes language stuff and prepares data in globalOptions for
- * processing of the single field in SingleFieldContainer.
- *
- * @todo: It should be possible to merge this container to ListOfFieldsContainer
- */
-class SoloFieldContainer extends AbstractContainer
-{
-    /**
-     * Entry method
-     *
-     * @return array As defined in initializeResultArray() of AbstractNode
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    public function render()
-    {
-        GeneralUtility::logDeprecatedFunction();
-        $table = $this->data['tableName'];
-        $fieldToRender = $this->data['singleFieldToRender'];
-        $recordTypeValue = $this->data['recordTypeValue'];
-        $resultArray = $this->initializeResultArray();
-
-        // Load the description content for the table if requested
-        if ($GLOBALS['TCA'][$table]['interface']['always_description']) {
-            $languageService = $this->getLanguageService();
-            $languageService->loadSingleTableDescription($table);
-        }
-
-        $itemList = $this->data['processedTca']['types'][$recordTypeValue]['showitem'];
-        $fields = GeneralUtility::trimExplode(',', $itemList, true);
-        foreach ($fields as $fieldString) {
-            $fieldConfiguration = $this->explodeSingleFieldShowItemConfiguration($fieldString);
-            $fieldName = $fieldConfiguration['fieldName'];
-            if ((string)$fieldName === (string)$fieldToRender) {
-                // Field is in showitem configuration
-                // @todo: This field is not rendered if it is "hidden" in a palette!
-                if ($GLOBALS['TCA'][$table]['columns'][$fieldName]) {
-                    $options = $this->data;
-                    $options['fieldName'] = $fieldName;
-                    $options['renderType'] = 'singleFieldContainer';
-                    $resultArray = $this->nodeFactory->create($options)->render();
-                }
-            }
-        }
-
-        return $resultArray;
-    }
-
-    /**
-     * @return LanguageService
-     */
-    protected function getLanguageService()
-    {
-        return $GLOBALS['LANG'];
-    }
-}
diff --git a/typo3/sysext/backend/Classes/Form/DatabaseFileIconsHookInterface.php b/typo3/sysext/backend/Classes/Form/DatabaseFileIconsHookInterface.php
deleted file mode 100644 (file)
index 3945817..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\Form;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * Interface for classes which hook into \TYPO3\CMS\Backend\Form\FormEngine
- * and do additional dbFileIcons processing
- *
- * @deprecated and no longer called since TYPO3 v8, will be removed in TYPO3 v9
- */
-interface DatabaseFileIconsHookInterface
-{
-    /**
-     * Modifies the parameters for selector box form-field for the db/file/select elements (multiple)
-     *
-     * @param array $params An array of additional parameters, eg: "size", "info", "headers" (array with "selector" and "items"), "noBrowser", "thumbnails
-     * @param string $selector Alternative selector box.
-     * @param string $thumbnails Thumbnail view of images. Only filled if there are images only. This images will be shown under the selectorbox.
-     * @param array $icons Defined icons next to the selector box.
-     * @param string $rightbox Thumbnail view of images. Only filled if there are other types as images. This images will be shown right next to the selectorbox.
-     * @param string $fName Form element name
-     * @param array $uidList The array of item-uids. Have a look at \TYPO3\CMS\Backend\Form\FormEngine::dbFileIcons parameter "$itemArray
-     * @param array $additionalParams Array with additional parameters which are be available at method call. Includes $mode, $allowed, $itemArray, $onFocus, $table, $field, $uid.
-     * @param object $parentObject Parent object
-     */
-    public function dbFileIcons_postProcess(array &$params, &$selector, &$thumbnails, array &$icons, &$rightbox, &$fName, array &$uidList, array $additionalParams, $parentObject);
-}
index 8483abb..cb54e9d 100644 (file)
@@ -16,7 +16,6 @@ namespace TYPO3\CMS\Backend\Form\Element;
 
 use TYPO3\CMS\Backend\Form\AbstractNode;
 use TYPO3\CMS\Backend\Form\NodeFactory;
-use TYPO3\CMS\Backend\Form\Utility\FormEngineUtility;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Core\Imaging\IconFactory;
 use TYPO3\CMS\Core\Utility\ArrayUtility;
@@ -308,303 +307,6 @@ abstract class AbstractFormElement extends AbstractNode
     }
 
     /**
-     * @return bool TRUE if wizards are disabled on a global level
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9 - remove together with renderWizards(), log is thrown in renderWizards()
-     */
-    protected function isWizardsDisabled()
-    {
-        return !empty($this->data['disabledWizards']);
-    }
-
-    /**
-     * Rendering wizards for form fields.
-     *
-     * Deprecated, old "wizard" API. This method will be removed in v9, but is kept for
-     * backwards compatibility. Extensions that give the item HTML in $itemKinds, trigger
-     * the legacy mode of this method which wraps calculated wizards around the given item HTML.
-     *
-     * This method is deprecated and will vanish in v9. Migrate old wizards to the "fieldWizard",
-     * "fieldInformation" and "fieldControl" API instead.
-     *
-     * @param null|array $itemKinds Array with the real item in the first value. Array in legacy mode, else null
-     * @param array $wizConf The "wizards" key from the config array for the field (from TCA)
-     * @param string $table Table name
-     * @param array $row The record array
-     * @param string $fieldName The field name
-     * @param array $PA Additional configuration array.
-     * @param string $itemName The field name
-     * @param array $specConf Special configuration if available.
-     * @param bool $RTE Whether the RTE could have been loaded.
-     * @return string|array String in legacy mode, an array with the buttons and the controls in non-legacy mode
-     * @throws \InvalidArgumentException
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    protected function renderWizards(
-        $itemKinds = null,
-        $wizConf = null,
-        $table = null,
-        $row = null,
-        $fieldName = null,
-        $PA = null,
-        $itemName = null,
-        $specConf = null,
-        $RTE = null
-    ) {
-        if ($itemKinds !== null) {
-            // Deprecation log if the old $itemsKinds array comes in containing the item HTML - all core elements
-            // deliver null here. If not null, the legacy mode of the method is enabled that wraps the calculated
-            // wizards around given item HTML.
-            GeneralUtility::logDeprecatedFunction();
-        }
-        $item = '';
-        if (is_array($itemKinds)) {
-            $item = $itemKinds[0];
-        }
-
-        if ($wizConf === null) {
-            $wizConf = $this->data['parameterArray']['fieldConf']['config']['wizards'] ?? null;
-        }
-        if ($table === null) {
-            $table = $this->data['tableName'];
-        }
-        if ($row === null) {
-            $row = $this->data['databaseRow'];
-        }
-        if ($fieldName === null) {
-            $fieldName = $this->data['fieldName'];
-        }
-        if ($PA === null) {
-            $PA = $this->data['parameterArray'];
-        }
-        if ($itemName === null) {
-            $itemName = $PA['itemFormElName'];
-        }
-        if ($RTE === null) {
-            $RTE = false;
-            if ((bool)$this->data['parameterArray']['fieldConf']['config']['enableRichtext'] === true) {
-                $RTE = true;
-            }
-        }
-
-        // Return not changed main item directly if wizards are disabled
-        if (!is_array($wizConf) || $this->isWizardsDisabled()) {
-            if ($itemKinds === null) {
-                return [
-                    'fieldControl' => [],
-                    'fieldWizard' => [],
-                ];
-            } else {
-                return $item;
-            }
-        }
-
-        $languageService = $this->getLanguageService();
-
-        $fieldChangeFunc = $PA['fieldChangeFunc'];
-        $md5ID = 'ID' . GeneralUtility::shortMD5($itemName);
-        $prefixOfFormElName = 'data[' . $table . '][' . $row['uid'] . '][' . $fieldName . ']';
-        $flexFormPath = '';
-        if (GeneralUtility::isFirstPartOfStr($PA['itemFormElName'], $prefixOfFormElName)) {
-            $flexFormPath = str_replace('][', '/', substr($PA['itemFormElName'], strlen($prefixOfFormElName) + 1, -1));
-        }
-
-        // Add a suffix-value if the item is a selector box with renderType "selectSingleBox":
-        if ($PA['fieldConf']['config']['type'] === 'select' && (int)$PA['fieldConf']['config']['maxitems'] > 1 && $PA['fieldConf']['config']['renderType'] === 'selectSingleBox') {
-            $itemName .= '[]';
-        }
-
-        $buttonWizards = [];
-        $otherWizards = [];
-        foreach ($wizConf as $wizardIdentifier => $wizardConfiguration) {
-            if (!isset($wizardConfiguration['module']['name']) && isset($wizardConfiguration['script'])) {
-                throw new \InvalidArgumentException('The way registering a wizard in TCA has changed in 6.2 and was removed in CMS 7. '
-                    . 'Please set module[name]=module_name instead of using script=path/to/script.php in your TCA. ', 1437750231);
-            }
-
-            // If an identifier starts with "_", this is a configuration option like _POSITION and not a wizard
-            if ($wizardIdentifier[0] === '_') {
-                continue;
-            }
-
-            // Sanitize wizard type
-            $wizardConfiguration['type'] = (string)$wizardConfiguration['type'];
-
-            // Wizards can be shown based on selected "type" of record. If this is the case, the wizard configuration
-            // is set to enableByTypeConfig = 1, and the wizardIdentifier is found in $wizardsEnabledByType
-            $wizardIsEnabled = true;
-            // Disable if wizard is for RTE fields only and the handled field is no RTE field or RTE can not be loaded
-            if (isset($wizardConfiguration['RTEonly']) && (bool)$wizardConfiguration['RTEonly'] && !$RTE) {
-                $wizardIsEnabled = false;
-            }
-            // Disable if wizard is for not-new records only and we're handling a new record
-            if (isset($wizardConfiguration['notNewRecords']) && $wizardConfiguration['notNewRecords'] && !MathUtility::canBeInterpretedAsInteger($row['uid'])) {
-                $wizardIsEnabled = false;
-            }
-            // Wizard types script, colorbox and popup must contain a module name configuration
-            if (!isset($wizardConfiguration['module']['name']) && in_array($wizardConfiguration['type'], ['script', 'colorbox', 'popup'], true)) {
-                $wizardIsEnabled = false;
-            }
-
-            if (!$wizardIsEnabled) {
-                continue;
-            }
-
-            // Title / icon:
-            $iTitle = htmlspecialchars($languageService->sL($wizardConfiguration['title']));
-            if (isset($wizardConfiguration['icon'])) {
-                $icon = FormEngineUtility::getIconHtml($wizardConfiguration['icon'], $iTitle, $iTitle);
-            } else {
-                $icon = $iTitle;
-            }
-
-            switch ($wizardConfiguration['type']) {
-                case 'userFunc':
-                    GeneralUtility::logDeprecatedFunction();
-                    $params = [];
-                    $params['params'] = $wizardConfiguration['params'];
-                    $params['exampleImg'] = $wizardConfiguration['exampleImg'];
-                    $params['table'] = $table;
-                    $params['uid'] = $row['uid'];
-                    $params['pid'] = $row['pid'];
-                    $params['field'] = $fieldName;
-                    $params['flexFormPath'] = $flexFormPath;
-                    $params['md5ID'] = $md5ID;
-                    $params['returnUrl'] = $this->data['returnUrl'];
-
-                    $params['formName'] = 'editform';
-                    $params['itemName'] = $itemName;
-                    $params['hmac'] = GeneralUtility::hmac($params['formName'] . $params['itemName'], 'wizard_js');
-                    $params['fieldChangeFunc'] = $fieldChangeFunc;
-                    $params['fieldChangeFuncHash'] = GeneralUtility::hmac(serialize($fieldChangeFunc));
-
-                    $params['item'] = $item;
-                    $params['icon'] = $icon;
-                    $params['iTitle'] = $iTitle;
-                    $params['wConf'] = $wizardConfiguration;
-                    $params['row'] = $row;
-                    $otherWizards[] = GeneralUtility::callUserFunction($wizardConfiguration['userFunc'], $params, $this);
-                    break;
-
-                case 'script':
-                    GeneralUtility::logDeprecatedFunction();
-                    $params = [];
-                    $params['params'] = $wizardConfiguration['params'];
-                    $params['exampleImg'] = $wizardConfiguration['exampleImg'];
-                    $params['table'] = $table;
-                    $params['uid'] = $row['uid'];
-                    $params['pid'] = $row['pid'];
-                    $params['field'] = $fieldName;
-                    $params['flexFormPath'] = $flexFormPath;
-                    $params['md5ID'] = $md5ID;
-                    $params['returnUrl'] = $this->data['returnUrl'];
-
-                    // Resolving script filename and setting URL.
-                    $urlParameters = [];
-                    if (isset($wizardConfiguration['module']['urlParameters']) && is_array($wizardConfiguration['module']['urlParameters'])) {
-                        $urlParameters = $wizardConfiguration['module']['urlParameters'];
-                    }
-                    $wScript = BackendUtility::getModuleUrl($wizardConfiguration['module']['name'], $urlParameters);
-                    $url = $wScript . (strstr($wScript, '?') ? '' : '?') . GeneralUtility::implodeArrayForUrl('', ['P' => $params]);
-                    $buttonWizards[] =
-                        '<a class="btn btn-default" href="' . htmlspecialchars($url) . '" onclick="this.blur(); return !TBE_EDITOR.isFormChanged();">'
-                            . $icon .
-                        '</a>';
-                    break;
-
-                case 'popup':
-                    GeneralUtility::logDeprecatedFunction();
-                    $params = [];
-                    $params['params'] = $wizardConfiguration['params'];
-                    $params['exampleImg'] = $wizardConfiguration['exampleImg'];
-                    $params['table'] = $table;
-                    $params['uid'] = $row['uid'];
-                    $params['pid'] = $row['pid'];
-                    $params['field'] = $fieldName;
-                    $params['flexFormPath'] = $flexFormPath;
-                    $params['md5ID'] = $md5ID;
-                    $params['returnUrl'] = $this->data['returnUrl'];
-
-                    $params['formName'] = 'editform';
-                    $params['itemName'] = $itemName;
-                    $params['hmac'] = GeneralUtility::hmac($params['formName'] . $params['itemName'], 'wizard_js');
-                    $params['fieldChangeFunc'] = $fieldChangeFunc;
-                    $params['fieldChangeFuncHash'] = GeneralUtility::hmac(serialize($fieldChangeFunc));
-
-                    // Resolving script filename and setting URL.
-                    $urlParameters = [];
-                    if (isset($wizardConfiguration['module']['urlParameters']) && is_array($wizardConfiguration['module']['urlParameters'])) {
-                        $urlParameters = $wizardConfiguration['module']['urlParameters'];
-                    }
-                    $wScript = BackendUtility::getModuleUrl($wizardConfiguration['module']['name'], $urlParameters);
-                    $url = $wScript . (strstr($wScript, '?') ? '' : '?') . GeneralUtility::implodeArrayForUrl('', ['P' => $params]);
-
-                    $onlyIfSelectedJS = '';
-                    if (isset($wizardConfiguration['popup_onlyOpenIfSelected']) && $wizardConfiguration['popup_onlyOpenIfSelected']) {
-                        $notSelectedText = $languageService->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:mess.noSelItemForEdit');
-                        $onlyIfSelectedJS =
-                            'if (!TBE_EDITOR.curSelected(' . GeneralUtility::quoteJSvalue($itemName) . ')){' .
-                                'alert(' . GeneralUtility::quoteJSvalue($notSelectedText) . ');' .
-                                'return false;' .
-                            '}';
-                    }
-                    $aOnClick =
-                        'this.blur();' .
-                        $onlyIfSelectedJS .
-                        'vHWin=window.open(' . GeneralUtility::quoteJSvalue($url) . '+\'&P[currentValue]=\'+TBE_EDITOR.rawurlencode(' .
-                                'document.editform[' . GeneralUtility::quoteJSvalue($itemName) . '].value,300' .
-                            ')' .
-                            '+\'&P[currentSelectedValues]=\'+TBE_EDITOR.curSelected(' . GeneralUtility::quoteJSvalue($itemName) . '),' .
-                            GeneralUtility::quoteJSvalue('popUp' . $md5ID) . ',' .
-                            GeneralUtility::quoteJSvalue($wizardConfiguration['JSopenParams']) .
-                        ');' .
-                        'vHWin.focus();' .
-                        'return false;';
-
-                    $buttonWizards[] =
-                        '<a class="btn btn-default" href="#" onclick="' . htmlspecialchars($aOnClick) . '">' .
-                            $icon .
-                        '</a>';
-                    break;
-            }
-        }
-
-        if ($itemKinds === null) {
-            // Return an array with the two wizard types directly if the legacy mode
-            // is not enabled.
-            return [
-                'fieldControl' => $buttonWizards,
-                'fieldWizard' => $otherWizards,
-            ];
-        }
-
-        // For each rendered wizard, put them together around the item.
-        if (!empty($buttonWizards) || !empty($otherWizards)) {
-            $innerContent = '';
-            if (!empty($buttonWizards)) {
-                $innerContent .= '<div class="btn-group' . ($wizConf['_VERTICAL'] ? ' btn-group-vertical' : '') . '">' . implode('', $buttonWizards) . '</div>';
-            }
-            $innerContent .= implode(' ', $otherWizards);
-
-            // Position
-            if ($wizConf['_POSITION'] === 'left') {
-                $innerContent = '<div class="form-wizards-items-aside">' . $innerContent . '</div><div class="form-wizards-element">' . $item . '</div>';
-            } elseif ($wizConf['_POSITION'] === 'top') {
-                $innerContent = '<div class="form-wizards-items-top">' . $innerContent . '</div><div class="form-wizards-element">' . $item . '</div>';
-            } elseif ($wizConf['_POSITION'] === 'bottom') {
-                $innerContent = '<div class="form-wizards-element">' . $item . '</div><div class="form-wizards-items-bottom">' . $innerContent . '</div>';
-            } else {
-                $innerContent = '<div class="form-wizards-element">' . $item . '</div><div class="form-wizards-items-aside">' . $innerContent . '</div>';
-            }
-            $item = '
-                               <div class="form-wizards-wrap">
-                                       ' . $innerContent . '
-                               </div>';
-        }
-
-        return $item;
-    }
-
-    /**
      * @return LanguageService
      */
     protected function getLanguageService()
index 6d8ac29..f98d387 100644 (file)
@@ -287,20 +287,16 @@ class GroupElement extends AbstractFormElement
             $selectorAttributes['multiple'] = 'multiple';
         }
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $html = [];
index cc4511a..439c3d6 100644 (file)
@@ -149,20 +149,16 @@ class InputColorPickerElement extends AbstractFormElement
             $valuePickerHtml[] = '</select>';
         }
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
         $mainFieldHtml = [];
index 3d85bda..732d7f2 100644 (file)
@@ -152,20 +152,16 @@ class InputDateTimeElement extends AbstractFormElement
             }
         }
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
         $expansionHtml = [];
index 050d8e4..1f5806c 100644 (file)
@@ -184,20 +184,16 @@ class InputLinkElement extends AbstractFormElement
             $valuePickerHtml[] = '</select>';
         }
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
         $linkExplanation = $this->getLinkExplanation($itemValue ?: '');
index 1c67c6c..a11d618 100644 (file)
@@ -199,20 +199,16 @@ class InputTextElement extends AbstractFormElement
             $valueSliderHtml[] = '</div>';
         }
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $mainFieldHtml = [];
index 10659ed..1c33db9 100644 (file)
@@ -136,15 +136,12 @@ class SelectCheckBoxElement extends AbstractFormElement
                 }
             }
 
-            $legacyWizards = $this->renderWizards();
-            $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
             $fieldInformationResult = $this->renderFieldInformation();
             $fieldInformationHtml = $fieldInformationResult['html'];
             $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
             $fieldWizardResult = $this->renderFieldWizard();
-            $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+            $fieldWizardHtml = $fieldWizardResult['html'];
             $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
             $html[] = '<div class="formengine-field-item t3js-formengine-field-item">';
index c4ba061..2b609f2 100644 (file)
@@ -16,7 +16,6 @@ namespace TYPO3\CMS\Backend\Form\Element;
 
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
 use TYPO3\CMS\Core\Imaging\Icon;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Core\Utility\MathUtility;
 use TYPO3\CMS\Core\Utility\StringUtility;
 use TYPO3\CMS\Lang\LanguageService;
@@ -193,31 +192,17 @@ class SelectMultipleSideBySideElement extends AbstractFormElement
         if ($maxItems !== 1 && $size !== 1) {
             $multipleAttribute = ' multiple="multiple"';
         }
-        $selectedListStyle = '';
-        if (isset($config['selectedListStyle'])) {
-            GeneralUtility::deprecationLog('TCA property selectedListStyle is deprecated since TYPO3 v8 and will be removed in v9');
-            $selectedListStyle = ' style="' . htmlspecialchars($config['selectedListStyle']) . '"';
-        }
-        $selectableListStyle = '';
-        if (isset($config['itemListStyle'])) {
-            GeneralUtility::deprecationLog('TCA property itemListStyle is deprecated since TYPO3 v8 and will be removed in v9');
-            $selectableListStyle = ' style="' . htmlspecialchars($config['itemListStyle']) . '"';
-        }
-
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
 
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $html = [];
@@ -239,7 +224,6 @@ class SelectMultipleSideBySideElement extends AbstractFormElement
         $html[] =                               ' class="' . implode(' ', $classes) . '"';
         $html[] =                               $multipleAttribute;
         $html[] =                               ' data-formengine-input-name="' . htmlspecialchars($elementName) . '"';
-        $html[] =                               $selectedListStyle;
         $html[] =                           '>';
         $html[] =                               implode(LF, $selectedItemsHtml);
         $html[] =                           '</select>';
@@ -305,7 +289,6 @@ class SelectMultipleSideBySideElement extends AbstractFormElement
         $html[] =                       ' size="' . $size . '"';
         $html[] =                       ' onchange="' . htmlspecialchars(implode('', $parameterArray['fieldChangeFunc'])) . '"';
         $html[] =                       ' data-formengine-validation-rules="' . htmlspecialchars($this->getValidationDataAsJsonString($config)) . '"';
-        $html[] =                       $selectableListStyle;
         $html[] =                   '>';
         $html[] =                       implode(LF, $selectableItemsHtml);
         $html[] =                   '</select>';
index fdad3f4..b4832b4 100644 (file)
@@ -98,20 +98,16 @@ class SelectSingleBoxElement extends AbstractFormElement
 
         $selectElement = $this->renderSelectElement($optionElements, $parameterArray, $config);
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $html = [];
@@ -184,10 +180,6 @@ class SelectSingleBoxElement extends AbstractFormElement
         if ($config['readOnly']) {
             $attributes['disabled'] = 'disabled';
         }
-        if (isset($config['itemListStyle'])) {
-            GeneralUtility::deprecationLog('TCA property itemListStyle is deprecated since TYPO3 v8 and will be removed in v9');
-            $attributes['style'] = $config['itemListStyle'];
-        }
 
         $html = [];
         $html[] = '<select ' . GeneralUtility::implodeAttributes($attributes, true) . '>';
index e5af068..b14ee6c 100644 (file)
@@ -190,15 +190,12 @@ class SelectSingleElement extends AbstractFormElement
             $selectAttributes['disabled'] = 'disabled';
         }
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $html = [];
index 632caf0..14c1391 100644 (file)
@@ -189,20 +189,16 @@ class TextElement extends AbstractFormElement
             $valuePickerHtml[] = '</select>';
         }
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $mainFieldHtml = [];
index 1584245..f08a521 100644 (file)
@@ -168,20 +168,16 @@ class TextTableElement extends AbstractFormElement
             $attributes['placeholder'] = htmlspecialchars(trim($config['placeholder']));
         }
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $html = [];
index 0d81e9b..77b2384 100644 (file)
@@ -136,23 +136,6 @@ abstract class AbstractItemProvider
                     && !empty($addItemsArray[$value . '.']['icon'])
                 ) {
                     $iconIdentifier = $addItemsArray[$value . '.']['icon'];
-                    if (!$iconRegistry->isRegistered($iconIdentifier)) {
-                        GeneralUtility::deprecationLog(
-                            'Using a file path for icon in pageTsConfig addItems is deprecated.' .
-                            'Use a registered iconIdentifier instead'
-                        );
-                        $iconPath = GeneralUtility::getFileAbsFileName($iconIdentifier);
-                        if ($iconPath !== '') {
-                            $iconIdentifier = md5($iconPath);
-                            $iconRegistry->registerIcon(
-                                $iconIdentifier,
-                                $iconRegistry->detectIconProvider($iconPath),
-                                [
-                                    'source' => $iconPath
-                                ]
-                            );
-                        }
-                    }
                 }
                 $items[] = [$label, $value, $iconIdentifier];
             }
@@ -1067,19 +1050,11 @@ abstract class AbstractItemProvider
             }
 
             $pageTsConfigId = 0;
-            if ($result['pageTsConfig']['flexHack.']['PAGE_TSCONFIG_ID']) {
-                // @deprecated since TYPO3 v8, will be removed in TYPO3 v9 - see also the flexHack part in TcaFlexProcess
-                $pageTsConfigId = (int)$result['pageTsConfig']['flexHack.']['PAGE_TSCONFIG_ID'];
-            }
             if ($result['pageTsConfig']['TCEFORM.'][$localTable . '.'][$localFieldName . '.']['PAGE_TSCONFIG_ID']) {
                 $pageTsConfigId = (int)$result['pageTsConfig']['TCEFORM.'][$localTable . '.'][$localFieldName . '.']['PAGE_TSCONFIG_ID'];
             }
 
             $pageTsConfigIdList = 0;
-            if ($result['pageTsConfig']['flexHack.']['PAGE_TSCONFIG_IDLIST']) {
-                // @deprecated since TYPO3 v8, will be removed in TYPO3 v9 - see also the flexHack part in TcaFlexProcess
-                $pageTsConfigIdList = $result['pageTsConfig']['flexHack.']['PAGE_TSCONFIG_IDLIST'];
-            }
             if ($result['pageTsConfig']['TCEFORM.'][$localTable . '.'][$localFieldName . '.']['PAGE_TSCONFIG_IDLIST']) {
                 $pageTsConfigIdList = $result['pageTsConfig']['TCEFORM.'][$localTable . '.'][$localFieldName . '.']['PAGE_TSCONFIG_IDLIST'];
             }
@@ -1093,10 +1068,6 @@ abstract class AbstractItemProvider
             $pageTsConfigIdList = implode(',', $pageTsConfigIdList);
 
             $pageTsConfigString = '';
-            if ($result['pageTsConfig']['flexHack.']['PAGE_TSCONFIG_STR']) {
-                // @deprecated since TYPO3 v8, will be removed in TYPO3 v9 - see also the flexHack part in TcaFlexProcess
-                $pageTsConfigString = $connection->quote($result['pageTsConfig']['flexHack.']['PAGE_TSCONFIG_STR']);
-            }
             if ($result['pageTsConfig']['TCEFORM.'][$localTable . '.'][$localFieldName . '.']['PAGE_TSCONFIG_STR']) {
                 $pageTsConfigString = $result['pageTsConfig']['TCEFORM.'][$localTable . '.'][$localFieldName . '.']['PAGE_TSCONFIG_STR'];
                 $pageTsConfigString = $connection->quote($pageTsConfigString);
index 0f4f7b2..11e3055 100644 (file)
@@ -363,43 +363,6 @@ class TcaFlexProcess implements FormDataProviderInterface
                 $pageTsConfig['TCEFORM.'][$tableName . '.'] = $pageTsConfig[$dataStructureSheetName . '.'];
             }
 
-            // It is possible to have a flex field field with of foreign_table (eg. type=select) that has markers in
-            // a foreign_table_where like ###PAGE_TSCONFIG_ID###. It was possible to set this in page TSConfig for flex fields like this:
-            // TCEFORM.theTable.theFlexfield.PAGE_TSCONFIG_ID = 42
-            // This hands over this PAGE_TSCONFIG_ID to all flex fields that have this foreign_table_where marker.
-            // This is a contradiction to the "usual" page TSConfig flex configuration that should be done for single flex fields:
-            // TCEFORM.theTable.theFlexfield.theDataStructure.theSheet.theField.PAGE_TSCONFIG_ID = 42
-            // The below code is a hack to still simulate the old behavior that is now deprecated.
-            // @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-            // When deleting this code and comment block, the according code within AbstractItemProvider can be removed, too.
-            if (isset($result['pageTsConfig']['TCEFORM.'][$tableName . '.'][$fieldName . '.']['PAGE_TSCONFIG_ID'])) {
-                GeneralUtility::deprecationLog(
-                    'The page TSConfig setting TCEFORM.' . $tableName . '.' . $fieldName . '.PAGE_TSCONFIG_ID for flex forms'
-                    . ' is deprecated. Use this setting for single flex fields instead, example: TCEFORM.' . $tableName . '.'
-                    . $fieldName . '.theDataStructureName.theSheet.theFieldName.PAGE_TSCONFIG_ID. Be aware these settings are'
-                    . ' no longer allowed for fields within flex form section container elements.'
-                );
-                $pageTsConfig['flexHack.']['PAGE_TSCONFIG_ID'] = $result['pageTsConfig']['TCEFORM.'][$tableName . '.'][$fieldName . '.']['PAGE_TSCONFIG_ID'];
-            }
-            if (isset($result['pageTsConfig']['TCEFORM.'][$tableName . '.'][$fieldName . '.']['PAGE_TSCONFIG_IDLIST'])) {
-                GeneralUtility::deprecationLog(
-                    'The page TSConfig setting TCEFORM.' . $tableName . '.' . $fieldName . '.PAGE_TSCONFIG_IDLIST for flex forms'
-                    . ' is deprecated. Use this setting for single flex fields instead, example: TCEFORM.' . $tableName . '.'
-                    . $fieldName . '.theDataStructureName.theSheet.theFieldName.PAGE_TSCONFIG_IDLIST. Be aware these settings are'
-                    . ' no longer allowed for fields within flex form section container elements.'
-                );
-                $pageTsConfig['flexHack.']['PAGE_TSCONFIG_IDLIST'] = $result['pageTsConfig']['TCEFORM.'][$tableName . '.'][$fieldName . '.']['PAGE_TSCONFIG_IDLIST'];
-            }
-            if (isset($result['pageTsConfig']['TCEFORM.'][$tableName . '.'][$fieldName . '.']['PAGE_TSCONFIG_STR'])) {
-                GeneralUtility::deprecationLog(
-                    'The page TSConfig setting TCEFORM.' . $tableName . '.' . $fieldName . '.PAGE_TSCONFIG_STR for flex forms'
-                    . ' is deprecated. Use this setting for single flex fields instead, example: TCEFORM.' . $tableName . '.'
-                    . $fieldName . '.theDataStructureName.theSheet.theFieldName.PAGE_TSCONFIG_STR.  Be aware these settings are'
-                    . ' no longer allowed for fields within flex form section container elements.'
-                );
-                $pageTsConfig['flexHack.']['PAGE_TSCONFIG_STR'] = $result['pageTsConfig']['TCEFORM.'][$tableName . '.'][$fieldName . '.']['PAGE_TSCONFIG_STR'];
-            }
-
             // List of "new" tca fields that have no value within the flexform, yet. Those will be compiled in one go later.
             $tcaNewColumns = [];
             // List of "edit" tca fields that have a value in flexform, already. Those will be compiled in one go later.
index 9fdb1f1..cfa99db 100644 (file)
@@ -159,18 +159,6 @@ class FormResultCompiler
     }
 
     /**
-     * JavaScript code added BEFORE the form is drawn:
-     *
-     * @return string
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    public function JStop()
-    {
-        GeneralUtility::logDeprecatedFunction();
-        return $this->addCssFiles();
-    }
-
-    /**
      * Adds CSS files BEFORE the form is drawn
      *
      * @return string
index 9ba4098..d7bca93 100644 (file)
@@ -63,7 +63,6 @@ class NodeFactory
         'outerWrapContainer' => Container\OuterWrapContainer::class,
         'paletteAndSingleContainer' => Container\PaletteAndSingleContainer::class,
         'singleFieldContainer' => Container\SingleFieldContainer::class,
-        'soloFieldContainer' => Container\SoloFieldContainer::class,
         'tabsContainer' => Container\TabsContainer::class,
 
         // Default single element classes
diff --git a/typo3/sysext/backend/Classes/Form/Wizard/SuggestWizard.php b/typo3/sysext/backend/Classes/Form/Wizard/SuggestWizard.php
deleted file mode 100644 (file)
index eca5903..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\Form\Wizard;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Fluid\View\StandaloneView;
-
-/**
- * Wizard for rendering an AJAX selector for records.
- * See SuggestWizardController for the ajax handling counterpart.
- *
- * @deprecated since TYPO3 v8, will be removed in TYPO3 v9 - suggest has been merged to GroupElement directly
- */
-class SuggestWizard
-{
-
-    /**
-     * @var StandaloneView
-     */
-    protected $view;
-
-    /**
-     * Construct
-     *
-     * @param StandaloneView $view
-     * @deprecated since TYPO3 CMS 8, will be removed in TYPO3 CMS 9.
-     */
-    public function __construct(StandaloneView $view = null)
-    {
-        GeneralUtility::logDeprecatedFunction();
-        $this->view = $view ?: $this->getFluidTemplateObject('SuggestWizard.html');
-    }
-
-    /**
-     * Renders an ajax-enabled text field. Also adds required JS
-     *
-     * @param array $data Main data array from FormEngine
-     * @throws \RuntimeException for incomplete incoming arguments
-     * @return string The HTML code for the selector
-     */
-    public function renderSuggestSelector(array $data)
-    {
-        $fieldName = $data['fieldName'];
-        $dataStructureIdentifier = '';
-        $flexFormSheetName = '';
-        $flexFormFieldName = '';
-        $flexFormContainerName = '';
-        $flexFormContainerFieldName = '';
-        if ($data['processedTca']['columns'][$fieldName]['config']['type'] === 'flex') {
-            $flexFormConfig = $data['processedTca']['columns'][$fieldName];
-            $dataStructureIdentifier = $flexFormConfig['config']['dataStructureIdentifier'];
-            if (!isset($flexFormConfig['config']['dataStructureIdentifier'])) {
-                throw new \RuntimeException(
-                    'A data structure identifier must be set in [\'config\'] part of a flex form.'
-                    . ' This is usually added by TcaFlexPrepare data processor',
-                    1478604742
-                );
-            }
-            if (isset($data['flexFormSheetName'])) {
-                $flexFormSheetName = $data['flexFormSheetName'];
-            }
-            if (isset($data['flexFormFieldName'])) {
-                $flexFormFieldName = $data['flexFormFieldName'];
-            }
-            if (isset($data['flexFormContainerName'])) {
-                $flexFormContainerName = $data['flexFormContainerName'];
-            }
-            if (isset($data['flexFormContainerFieldName'])) {
-                $flexFormContainerFieldName = $data['flexFormContainerFieldName'];
-            }
-        }
-
-        // Get minimumCharacters from TCA
-        $minChars = 0;
-        $fieldTca = $data['parameterArray']['fieldConf'];
-        if (isset($fieldTca['config']['wizards']['suggest']['default']['minimumCharacters'])) {
-            $minChars = (int)$fieldTca['config']['wizards']['suggest']['default']['minimumCharacters'];
-        }
-        // Overwrite it with minimumCharacters from TSConfig if given
-        $fieldTsConfig = $data['parameterArray']['fieldTSConfig'];
-        if (isset($fieldTsConfig['suggest.']['default.']['minimumCharacters'])) {
-            $minChars = (int)$fieldTsConfig['suggest.']['default.']['minimumCharacters'];
-        }
-        $minChars = $minChars > 0 ? $minChars : 2;
-
-        $this->view->assignMultiple([
-            'placeholder' => 'LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.findRecord',
-            'fieldName' => $data['fieldName'],
-            'tableName' => $data['tableName'],
-            'field' => $data['parameterArray']['itemFormElName'],
-            'uid' => $data['databaseRow']['uid'],
-            'pid' => (int)$data['effectivePid'],
-            'dataStructureIdentifier' => $dataStructureIdentifier,
-            'flexFormSheetName' => $flexFormSheetName,
-            'flexFormFieldName' => $flexFormFieldName,
-            'flexFormContainerName' => $flexFormContainerName,
-            'flexFormContainerFieldName' => $flexFormContainerFieldName,
-            'fieldtype' => $fieldTca['config']['type'],
-            'minchars' => (int)$minChars,
-        ]);
-
-        return $this->view->render();
-    }
-
-    /**
-     * Returns a new standalone view, shorthand function
-     *
-     * @param string $filename Which templateFile should be used.
-     *
-     * @return StandaloneView
-     */
-    protected function getFluidTemplateObject(string $filename = null): StandaloneView
-    {
-        /** @var StandaloneView $view */
-        $view = GeneralUtility::makeInstance(StandaloneView::class);
-        $view->setLayoutRootPaths([GeneralUtility::getFileAbsFileName('EXT:backend/Resources/Private/Layouts')]);
-        $view->setPartialRootPaths([GeneralUtility::getFileAbsFileName('EXT:backend/Resources/Private/Partials')]);
-        $view->setTemplateRootPaths([GeneralUtility::getFileAbsFileName('EXT:backend/Resources/Private/Templates')]);
-
-        if ($filename === null) {
-            $filename = 'SuggestWizard.html';
-        }
-
-        $view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName('EXT:backend/Resources/Private/Templates/Wizards/' . $filename));
-
-        $view->getRequest()->setControllerExtensionName('Backend');
-        return $view;
-    }
-}
diff --git a/typo3/sysext/backend/Classes/Form/Wizard/ValueSliderWizard.php b/typo3/sysext/backend/Classes/Form/Wizard/ValueSliderWizard.php
deleted file mode 100644 (file)
index 5906529..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\Form\Wizard;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Wizard for rendering an AJAX selector for records
- *
- * This is the old implementation of the slider as wizard, that has been called
- * via "renderWizards()" method. This is no longer used and the slider implementation
- * has been integrated to the "InputTextElement" directly as config option "slider".
- *
- * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
- */
-class ValueSliderWizard
-{
-    /**
-     * Renders the slider value wizard
-     *
-     * @param array $params
-     * @return string
-     * @deprecated since TYPO3 CMS 8, will be removed in TYPO3 CMS 9.
-     */
-    public function renderWizard($params)
-    {
-        GeneralUtility::logDeprecatedFunction();
-        $field = $params['field'];
-        if (is_array($params['row'][$field])) {
-            $value = $params['row'][$field][0];
-        } else {
-            $value = $params['row'][$field];
-        }
-        // If Slider is used in a flexform
-        if (!empty($params['flexFormPath'])) {
-            $flexFormTools = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools::class);
-            $flexFormValue = $flexFormTools->getArrayValueByPath($params['flexFormPath'], $params['row'][$field]);
-            if ($flexFormValue !== null) {
-                $value = $flexFormValue;
-            }
-        }
-        $itemName = $params['itemName'];
-        // Set default values (which correspond to those of the JS component)
-        $min = 0;
-        $max = 10000;
-        // Use the range property, if defined, to set min and max values
-        if (isset($params['fieldConfig']['range'])) {
-            $min = isset($params['fieldConfig']['range']['lower']) ? (int)$params['fieldConfig']['range']['lower'] : 0;
-            $max = isset($params['fieldConfig']['range']['upper']) ? (int)$params['fieldConfig']['range']['upper'] : 10000;
-        }
-        $elementType = $params['fieldConfig']['type'];
-        $step = $params['wConf']['step'] ?: 1;
-        $width = (int)$params['wConf']['width'] ?: 400;
-        $type = 'null';
-        if (isset($params['fieldConfig']['eval'])) {
-            $eval = GeneralUtility::trimExplode(',', $params['fieldConfig']['eval'], true);
-            if (in_array('int', $eval, true)) {
-                $type = 'int';
-                $value = (int)$value;
-            } elseif (in_array('double2', $eval, true)) {
-                $type = 'double';
-                $value = (double)$value;
-            }
-        }
-        if (isset($params['fieldConfig']['items'])) {
-            $type = 'array';
-            $index = 0;
-            $itemAmount = count($params['fieldConfig']['items']);
-            for (; $index < $itemAmount; ++$index) {
-                $item = $params['fieldConfig']['items'][$index];
-                if ((string)$item[1] === $value) {
-                    break;
-                }
-            }
-            $min = 0;
-            $max = $itemAmount -1;
-            $step = 1;
-            $value = $index;
-        }
-        $callbackParams = [ $params['table'], $params['row']['uid'], $params['field'], $params['itemName'] ];
-        $id = 'slider-' . $params['md5ID'];
-        $content =
-            '<div'
-                . ' id="' . $id . '"'
-                . ' data-slider-id="' . $id . '"'
-                . ' data-slider-min="' . $min . '"'
-                . ' data-slider-max="' . $max . '"'
-                . ' data-slider-step="' . htmlspecialchars($step) . '"'
-                . ' data-slider-value="' . htmlspecialchars($value) . '"'
-                . ' data-slider-value-type="' . htmlspecialchars($type) . '"'
-                . ' data-slider-item-name="' . htmlspecialchars($itemName) . '"'
-                . ' data-slider-element-type="' . htmlspecialchars($elementType) . '"'
-                . ' data-slider-callback-params="' . htmlspecialchars(json_encode($callbackParams)) . '"'
-                . ' style="width: ' . $width . 'px;"'
-            . '></div>';
-
-        return $content;
-    }
-}
index 451ea2c..4711847 100644 (file)
@@ -57,14 +57,6 @@ class DocumentTemplate
     public $JScode = '';
 
     /**
-     * Additional header code for ExtJS. It will be included in document header and inserted in a Ext.onReady(function()
-     *
-     * @var string
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9, use PageRenderers's JS methods to inject JavaScript on a backend page.
-     */
-    public $extJScode = '';
-
-    /**
      * Similar to $JScode but for use as array with associative keys to prevent double inclusion of JS code. a <script> tag is automatically wrapped around.
      *
      * @var array
@@ -604,11 +596,6 @@ function jumpToUrl(URL) {
             $this->pageRenderer->addJsInlineCode($name, $code, false);
         }
 
-        if ($this->extJScode) {
-            GeneralUtility::deprecationLog('The property DocumentTemplate->extJScode to add ExtJS-based onReadyCode is deprecated since TYPO3 v8, and will be removed in TYPO3 v9. Use the page renderer directly instead to add JavaScript code.');
-            $this->pageRenderer->addExtOnReadyCode($this->extJScode);
-        }
-
         // Load jquery and twbs JS libraries on every backend request
         $this->pageRenderer->loadJquery();
         // Note: please do not reference "bootstrap" outside of the TYPO3 Core (not in your own extensions)
@@ -630,7 +617,7 @@ function jumpToUrl(URL) {
         }
         // Construct page header.
         $str = $this->pageRenderer->render(PageRenderer::PART_HEADER);
-        $this->JScode = ($this->extJScode = '');
+        $this->JScode = '';
         $this->JScodeArray = [];
         $this->endOfPageJsBlock = $this->pageRenderer->render(PageRenderer::PART_FOOTER);
         $str .= $this->docBodyTagBegin() . ($this->divClass ? '
index 3974ef6..6dfb145 100644 (file)
@@ -38,13 +38,6 @@ return [
     ],
 
     /** Wizards */
-    // Register colorpicker wizard
-    // @deprecated since TYPO3 v8, will be removed in TYPO3 v9.
-    'wizard_colorpicker' => [
-        'path' => '/wizard/colorpicker',
-        'target' => Controller\Wizard\ColorpickerController::class . '::mainAction'
-    ],
-
     // Register table wizard
     'wizard_table' => [
         'path' => '/wizard/table',
diff --git a/typo3/sysext/backend/Resources/Private/Templates/Wizards/SuggestWizard.html b/typo3/sysext/backend/Resources/Private/Templates/Wizards/SuggestWizard.html
deleted file mode 100644 (file)
index e08102e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<f:comment>@deprecated since TYPO3 v8, will be removed in TYPO3 v9</f:comment>
-<div class="autocomplete t3-form-suggest-container">
-    <div class="input-group">
-        <span class="input-group-addon">
-            <core:icon identifier="actions-search" size="small" />
-        </span>
-        <input type="search" class="t3-form-suggest form-control"
-            placeholder="{f:translate(key: placeholder)}"
-            data-fieldname="{fieldName -> f:format.htmlspecialchars()}"
-            data-tablename="{tableName -> f:format.htmlspecialchars()}"
-            data-field="{field -> f:format.htmlspecialchars()}"
-            data-uid="{uid}"
-            data-pid="{pid}"
-            data-fieldtype="{fieldtype -> f:format.htmlspecialchars()}"
-            data-minchars="{minchars}"
-            data-datastructureidentifier="{dataStructureIdentifier -> f:format.htmlspecialchars()}"
-            data-flexformsheetname="{flexFormSheetName -> f:format.htmlspecialchars()}"
-            data-flexformfieldname="{flexFormFieldName -> f:format.htmlspecialchars()}"
-            data-flexformcontainername="{flexFormContainerName -> f:format.htmlspecialchars()}"
-            data-flexformcontainerfieldname="{flexFormContainerFieldName -> f:format.htmlspecialchars()}"
-        />
-    </div>
-</div>
index 4ac4ad8..63c5f1f 100644 (file)
@@ -1203,17 +1203,6 @@ var inline = {
        },
 
        /**
-        * Escapes object identifiers to be used as jQuery selector.
-        *
-        * @param {String} objectId
-        * @return string
-        * @deprecated since TYPO3 CMS v8, this method will be removed in TYPO3 CMS v9. Use $.escapeSelector() instead, which was added with jQuery 3.0.
-        */
-       escapeSelectorObjectId: function (objectId) {
-               return $.escapeSelector(objectId);
-       },
-
-       /**
         * Helper function to get clean trimmed array from comma list
         *
         * @param {String} delimiter
index 6dec75f..89c9da4 100644 (file)
@@ -1458,76 +1458,4 @@ class TcaFlexProcessTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
 
         (new TcaFlexProcess())->addData($input);
     }
-
-    /**
-     * Test for the deprecated "flexHack" pageTsConfig transition, verifies that
-     * all three PAGE_TSCONFIG_ID, PAGE_TSCONFIG_IDLIST and PAGE_TSCONFIG_STR
-     * are hand over to the flex field compiler.
-     *
-     * @test
-     */
-    public function addDataHandsPageTsConfigIdOverToFlexFormSegmentGroupAsFlexHack()
-    {
-        $input = [
-            'tableName' => 'aTable',
-            'databaseRow' => [
-                'aField' => [
-                    'data' => [],
-                ],
-                'pointerField' => 'aFlex',
-            ],
-            'processedTca' => [
-                'columns' => [
-                    'aField' => [
-                        'config' => [
-                            'type' => 'flex',
-                            'ds_pointerField' => 'pointerField',
-                            'dataStructureIdentifier' => '{"type":"tca","tableName":"aTable","fieldName":"aField","dataStructureKey":"aFlex"}',
-                            'ds' => [
-                                'sheets' => [
-                                    'sDEF' => [
-                                        'ROOT' => [
-                                            'type' => 'array',
-                                            'el' => [
-                                                'aFlexField' => [
-                                                    'label' => 'aFlexFieldLabel',
-                                                    'config' => [
-                                                        'type' => 'input',
-                                                    ],
-                                                ],
-                                            ],
-                                        ],
-                                    ],
-                                ],
-                            ],
-                        ],
-                    ],
-                ],
-            ],
-            'pageTsConfig' => [
-                'TCEFORM.' => [
-                    'aTable.' => [
-                        'aField.' => [
-                            'PAGE_TSCONFIG_ID' => '42',
-                            'PAGE_TSCONFIG_IDLIST' => '2,3,5',
-                            'PAGE_TSCONFIG_STR' => 'configString',
-                        ],
-                    ],
-                ],
-            ],
-        ];
-
-        /** @var FlexFormSegment|ObjectProphecy $dummyGroupExisting */
-        $dummyGroupExisting = $this->prophesize(FlexFormSegment::class);
-        GeneralUtility::addInstance(FlexFormSegment::class, $dummyGroupExisting->reveal());
-        // Check array given to flex group contains pageTsConfig with flexHack field
-        $dummyGroupExisting->compile(Argument::that(function ($result) use ($input) {
-            if ($result['pageTsConfig']['flexHack.'] === $input['pageTsConfig']['TCEFORM.']['aTable.']['aField.']) {
-                return true;
-            }
-            return false;
-        }))->shouldBeCalled()->willReturnArgument(0);
-
-        (new TcaFlexProcess())->addData($input);
-    }
 }
index fa6a19c..5aee8d7 100644 (file)
@@ -1633,51 +1633,6 @@ class TcaSelectItemsTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
                     ],
                 ],
             ],
-            'deprecated flexHack PAGE_TSCONFIG_ID is substituted' => [
-                'AND fTable.uid=###PAGE_TSCONFIG_ID###',
-                [
-                    ['fTable.uid=123'],
-                    [' 1=1'],
-                    ['`pages.uid` = `fTable.pid`']
-                ],
-                [
-                    'pageTsConfig' => [
-                        'flexHack.' => [
-                            'PAGE_TSCONFIG_ID' => '123',
-                        ],
-                    ],
-                ],
-            ],
-            'deprecated flexHack PAGE_TSCONFIG_IDLIST is substituted' => [
-                'AND fTable.uid IN (###PAGE_TSCONFIG_IDLIST###)',
-                [
-                    ['fTable.uid IN (123,124)'],
-                    [' 1=1'],
-                    ['`pages.uid` = `fTable.pid`']
-                ],
-                [
-                    'pageTsConfig' => [
-                        'flexHack.' => [
-                            'PAGE_TSCONFIG_IDLIST' => '123,124',
-                        ],
-                    ],
-                ],
-            ],
-            'deprecated flexHack PAGE_TSCONFIG_STR is substituted' => [
-                'AND fTable.uid=\'###PAGE_TSCONFIG_STR###\'',
-                [
-                    ['fTable.uid=\'aString\''],
-                    [' 1=1'],
-                    ['`pages.uid` = `fTable.pid`']
-                ],
-                [
-                    'pageTsConfig' => [
-                        'flexHack.' => [
-                            'PAGE_TSCONFIG_STR' => 'aString',
-                        ],
-                    ],
-                ],
-            ],
         ];
     }
 
diff --git a/typo3/sysext/backend/Tests/Unit/Form/Wizard/SuggestWizardTest.php b/typo3/sysext/backend/Tests/Unit/Form/Wizard/SuggestWizardTest.php
deleted file mode 100644 (file)
index 7fccbd6..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-namespace TYPO3\CMS\Backend\Tests\Unit\Form\Wizard;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Backend\Form\Wizard\SuggestWizard;
-use TYPO3\CMS\Fluid\View\StandaloneView;
-
-/**
- * Test case
- */
-class SuggestWizardTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
-{
-    /**
-     * @test
-     */
-    public function renderSuggestSelectorThrowsExceptionIfFlexFieldDoesNotContainDataStructureIdentifier()
-    {
-        $viewProphecy = $this->prophesize(StandaloneView::class);
-        $input = [
-            'fieldName' => 'aFieldName',
-            'processedTca' => [
-                'columns' => [
-                    'aFieldName' => [
-                        'config' => [
-                            'type' => 'flex',
-                            // there should be a 'dataStructureIdentifier' here
-                        ],
-                    ],
-                ],
-            ],
-        ];
-        $this->expectException(\RuntimeException::class);
-        $this->expectExceptionCode(1478604742);
-        (new SuggestWizard($viewProphecy->reveal()))->renderSuggestSelector($input);
-    }
-}
index 44267a1..746b7cd 100644 (file)
@@ -13,6 +13,10 @@ The following PHP classes that have been previously deprecated for v8 have been
 * RemoveXSS
 * TYPO3\CMS\Backend\Console\Application
 * TYPO3\CMS\Backend\Console\CliRequestHandler
+* TYPO3\CMS\Backend\Controller\Wizard\ColorpickerController
+* TYPO3\CMS\Backend\Form\Container\SoloFieldContainer
+* TYPO3\CMS\Backend\Form\Wizard\SuggestWizard
+* TYPO3\CMS\Backend\Form\Wizard\ValueSliderWizard
 * TYPO3\CMS\Core\Controller\CommandLineController
 * TYPO3\CMS\Core\Http\AjaxRequestHandler
 * TYPO3\CMS\Core\Messaging\AbstractStandaloneMessage
@@ -22,7 +26,14 @@ The following PHP classes that have been previously deprecated for v8 have been
 * TYPO3\CMS\Frontend\Page\FramesetRenderer
 * TYPO3\CMS\Lowlevel\CleanerCommand
 
+The following PHP interfaces have been dropped:
+* TYPO3\CMS\Backend\Form\DatabaseFileIconsHookInterface
+
 The following PHP class methods that have been previously deprecated for v8 have been removed:
+* TYPO3\CMS\Backend\Form\AbstractFormElement->isWizardsDisabled()
+* TYPO3\CMS\Backend\Form\AbstractFormElement->renderWizards()
+* TYPO3\CMS\Backend\Form\AbstractNode->getValidationDataAsDataAttribute()
+* TYPO3\CMS\Backend\Form\FormResultCompiler->JStop()
 * TYPO3\CMS\Backend\Routing\UriBuilder->buildUriFromAjaxId()
 * TYPO3\CMS\Backend\Utility\BackendUtility::getAjaxUrl()
 * TYPO3\CMS\Backend\Utility\BackendUtility::getFlexFormDS()
@@ -155,6 +166,7 @@ The following methods changed signature according to previous deprecations in v8
 * TYPO3\CMS\Lang\LanguageService->getsL() - Second argument dropped
 
 The following public class properties have been dropped:
+* TYPO3\CMS\Backend\Template\DocumentTemplate->extJScode
 * TYPO3\CMS\Core\Charset\CharsetConverter->charSetArray
 * TYPO3\CMS\Core\Charset\CharsetConverter->fourByteSets
 * TYPO3\CMS\Core\DataHandling\DataHandler->checkWorkspaceCache
@@ -205,6 +217,20 @@ The following TypoScript options have been removed:
 * page.frameSet
 * page.insertClassesFromRTE
 
+The following TCA properties have been removed:
+* type=select selectedListStyle
+* type=select itemListStyle
+
+The following PageTsConfig properties have been removed:
+* TCEFORM.[table].[field].addItems.icon - with icons not registered in IconRegistry
+* TCEFORM.[table].[flexFormField].PAGE_TSCONFIG_ID
+* TCEFORM.[table].[flexFormField].PAGE_TSCONFIG_IDLIST
+* TCEFORM.[table].[flexFormField].PAGE_TSCONFIG_STR
+
+The following array constructs have been removed:
+* extJSCODE in FormEngine render result
+
+
 Impact
 ======
 
index 1698966..6a5e858 100644 (file)
@@ -137,20 +137,16 @@ class RsaInputElement extends AbstractFormElement
             $attributes['autocomplete'] = 'new-' . $fieldName;
         }
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $html = [];
index f485c41..9c2f00f 100644 (file)
@@ -75,20 +75,16 @@ class RichTextElement extends AbstractFormElement
 
         $value = $this->data['parameterArray']['itemFormElValue'] ?? '';
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldInformationResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldControlResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $resultArray = $this->mergeChildReturnIntoExistingResult($resultArray, $fieldWizardResult, false);
 
         $attributes = [
index b7fd643..88cfd51 100644 (file)
@@ -148,20 +148,16 @@ class T3editorElement extends AbstractFormElement
             ['target' => 0]
         );
 
-        $legacyWizards = $this->renderWizards();
-        $legacyFieldControlHtml = implode(LF, $legacyWizards['fieldControl']);
-        $legacyFieldWizardHtml = implode(LF, $legacyWizards['fieldWizard']);
-
         $fieldInformationResult = $this->renderFieldInformation();
         $fieldInformationHtml = $fieldInformationResult['html'];
         $this->resultArray = $this->mergeChildReturnIntoExistingResult($this->resultArray, $fieldInformationResult, false);
 
         $fieldControlResult = $this->renderFieldControl();
-        $fieldControlHtml = $legacyFieldControlHtml . $fieldControlResult['html'];
+        $fieldControlHtml = $fieldControlResult['html'];
         $this->resultArray = $this->mergeChildReturnIntoExistingResult($this->resultArray, $fieldControlResult, false);
 
         $fieldWizardResult = $this->renderFieldWizard();
-        $fieldWizardHtml = $legacyFieldWizardHtml . $fieldWizardResult['html'];
+        $fieldWizardHtml = $fieldWizardResult['html'];
         $this->resultArray = $this->mergeChildReturnIntoExistingResult($this->resultArray, $fieldWizardResult, false);
 
         $html = [];