[TASK] Move EXT:rtehtmlarea to TER and provide update wizard 13/52313/6
authorBenni Mack <benni@typo3.org>
Sat, 1 Apr 2017 15:58:12 +0000 (17:58 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Sun, 2 Apr 2017 13:51:10 +0000 (15:51 +0200)
Resolves: #80628
Releases: master
Change-Id: I9db7ee577258cae6b25eb940000eab2b5be5ee37
Reviewed-on: https://review.typo3.org/52313
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
492 files changed:
composer.json
composer.lock
typo3/sysext/core/Documentation/Changelog/master/Breaking-80628-ExtensionRtehmlareaMovedToTER.rst [new file with mode: 0644]
typo3/sysext/impexp/Tests/Functional/Export/PagesAndTtContentWithRteImagesAndFileLink/ExportTest.php [deleted file]
typo3/sysext/install/Classes/Updates/RteHtmlAreaExtractionUpdate.php [new file with mode: 0644]
typo3/sysext/install/ext_localconf.php
typo3/sysext/rtehtmlarea/Classes/Controller/AccessibilityLinkController.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Controller/BrowseLinksController.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Controller/CustomAttributeController.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Controller/ImageRenderingController.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Controller/ParseHtmlController.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Controller/SelectImageController.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Controller/SpellCheckingController.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Controller/UserElementsController.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Controller/Wizard/RteController.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/Abbreviation.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/AboutEditor.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/BlockElements.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/BlockStyle.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/CharacterMap.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/ContextMenu.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/CopyPaste.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/DefaultClean.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/DefaultImage.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/DefaultInline.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/DefaultLink.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/DefinitionList.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/EditElement.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/EditorMode.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/FindReplace.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/InlineElements.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/InsertSmiley.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/Language.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/MicroDataSchema.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/Plaintext.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/QuickTag.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/RemoveFormat.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/SelectFont.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/Spellchecker.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/TableOperations.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/TextIndicator.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/TextStyle.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/Typo3Color.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/Typo3HtmlParser.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/Typo3Image.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/Typo3Link.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/UndoRedo.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Extension/UserElements.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Form/Element/RichTextElement.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Form/FieldControl/FullScreenRichtext.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Form/Resolver/RichTextNodeResolver.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Hook/Install/DeprecatedRteProperties.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Hook/Install/RteAcronymButtonRenamedToAbbreviation.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Hook/SoftReferenceHook.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/Hook/StatusReportConflictsCheckHook.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/ImageHandler/AddImageHandler.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/ImageHandler/EditImageHandler.php [deleted file]
typo3/sysext/rtehtmlarea/Classes/RteHtmlAreaApi.php [deleted file]
typo3/sysext/rtehtmlarea/Configuration/Backend/AjaxRoutes.php [deleted file]
typo3/sysext/rtehtmlarea/Configuration/Backend/Routes.php [deleted file]
typo3/sysext/rtehtmlarea/Configuration/PageTSconfig/AccessibilityIcons/pageTSConfig.txt [deleted file]
typo3/sysext/rtehtmlarea/Configuration/PageTSconfig/Advanced/pageTSConfig.txt [deleted file]
typo3/sysext/rtehtmlarea/Configuration/PageTSconfig/Demo/pageTSConfig.txt [deleted file]
typo3/sysext/rtehtmlarea/Configuration/PageTSconfig/Extensions/InlineElements/pageTSConfig.txt [deleted file]
typo3/sysext/rtehtmlarea/Configuration/PageTSconfig/Image/pageTSConfig.txt [deleted file]
typo3/sysext/rtehtmlarea/Configuration/PageTSconfig/Proc/pageTSConfig.txt [deleted file]
typo3/sysext/rtehtmlarea/Configuration/PageTSconfig/Style/pageTSConfig.txt [deleted file]
typo3/sysext/rtehtmlarea/Configuration/PageTSconfig/Typical/pageTSConfig.txt [deleted file]
typo3/sysext/rtehtmlarea/Configuration/TCA/Overrides/pages.php [deleted file]
typo3/sysext/rtehtmlarea/Configuration/TCA/Overrides/sys_news.php [deleted file]
typo3/sysext/rtehtmlarea/Configuration/TCA/Overrides/sys_template.php [deleted file]
typo3/sysext/rtehtmlarea/Configuration/TCA/Overrides/tt_content.php [deleted file]
typo3/sysext/rtehtmlarea/Configuration/TCA/Overrides/tx_rtehtmlarea_acronym.php [deleted file]
typo3/sysext/rtehtmlarea/Configuration/TCA/tx_rtehtmlarea_acronym.php [deleted file]
typo3/sysext/rtehtmlarea/Configuration/TypoScript/AccessibilityIcons/setup.txt [deleted file]
typo3/sysext/rtehtmlarea/Configuration/TypoScript/ImageRendering/setup.txt [deleted file]
typo3/sysext/rtehtmlarea/Configuration/UserTSconfig/Demo.txt [deleted file]
typo3/sysext/rtehtmlarea/Documentation/.gitignore [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/AnchorAccessibility/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/Clickenlarge/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/CustomTags/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/DefaultWebsiteLanguage/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/ExtensionConfiguration/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/FrontEndPlugins/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/InstallingMultipleRtes/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/PageTsconfig/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/PageTsconfig/classes/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/PageTsconfig/classesAnchor/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/PageTsconfig/fontSizes/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/PageTsconfig/fonts/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/PageTsconfig/interfaceConfiguration/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/PageTsconfig/mutuallyExclusiveClasses/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/PageTsconfig/userCategory/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/PageTsconfig/userElements/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/ServerConfiguration/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/ToolbarElements/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Configuration/UserTsconfig/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Copyright/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/DefaultConfigurations/Default/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/DefaultConfigurations/Demo/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/DefaultConfigurations/Image/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/DefaultConfigurations/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/DefaultConfigurations/Minimal/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/DefaultConfigurations/Typical/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Includes.txt [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Installation/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Introduction/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Settings.cfg [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Targets.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Troubleshooting/FirefoxExtensionNoscript/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Troubleshooting/GzipCachingProblem/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Troubleshooting/HtmlTagAbbr/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Troubleshooting/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Troubleshooting/OperaExtensionHyperTranslate/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/Troubleshooting/SecurityErrorStylesheets/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/DefinitionLists/Buttons/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/DefinitionLists/Creating/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/DefinitionLists/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/DefinitionLists/Nesting/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/DefinitionLists/Remapping/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/Faq/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/FormatingInlineElements/DropDownBehavior/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/FormatingInlineElements/DropDownLabels/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/FormatingInlineElements/ElementsList/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/FormatingInlineElements/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/Hotkeys/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/MarkingLanguage/DropDownList/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/MarkingLanguage/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/MarkingLanguage/LanguageMarks/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/StylingInlineElements/DropDownBehavior/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/StylingInlineElements/DropDownLabels/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/StylingInlineElements/ElementsList/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Documentation/UsersManual/StylingInlineElements/Index.rst [deleted file]
typo3/sysext/rtehtmlarea/Migrations/Code/ClassAliasMap.php [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/Abbreviation/locallang_csh.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/Abbreviation/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/BlockElements/locallang.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/BlockElements/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/BlockStyle/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/CharacterMap/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/ContextMenu/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/CopyPaste/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/DefaultClean/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/DefaultImage/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/DefaultInline/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/DefaultLink/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/DefinitionList/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/EditElement/locallang_csh.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/EditElement/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/EditorMode/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/FindReplace/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/InlineElements/locallang.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/InlineElements/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/InsertSmiley/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/Language/locallang.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/Language/locallang_csh.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/Language/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/MicrodataSchema/locallang.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/MicrodataSchema/locallang_csh.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/MicrodataSchema/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/PlainText/locallang_csh.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/PlainText/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/QuickTag/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/RemoveFormat/locallang_csh.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/RemoveFormat/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/SelectFont/locallang.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/SpellChecker/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/TYPO3Color/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/TYPO3HtmlParser/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/TYPO3Image/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/TableOperations/locallang_csh.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/TableOperations/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/TextStyle/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/Plugins/UserElements/locallang_js.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_accessibilityicons.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_browselinkscontroller.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_contentcss.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_csh.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_csh_abbreviation.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_db.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_dialogs.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_em.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_msg.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_selectimagecontroller.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_statusreport.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_tooltips.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Private/Language/locallang_userelementscontroller.xlf [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Css/ContentCss/Default.css [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Css/Skin/Plugins/spell-checker-iframe.css [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Css/Skin/bootstrap.css [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Css/Skin/htmlarea-edited-content.css [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Css/Skin/htmlarea.css [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Css/Skin/jquery-ui-resizable.css [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Html/blank.html [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Icons/Extension.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/abbreviation-edit.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/bidi-override.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/big.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/blockquote.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/bold.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/cell-delete.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/cell-edit-properties.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/cell-insert-after.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/cell-insert-before.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/cell-merge.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/cell-split.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/character-insert-from-map.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/citation.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/code.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/color-background.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/color-foreground.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/column-delete.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/column-edit-properties.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/column-insert-after.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/column-insert-before.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/column-split.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/copy.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/cut.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/definition-list-item.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/definition-list.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/definition.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/delete-item.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/deleted-text.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/editor-show-about.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/editor-toggle-mode.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/element-edit.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/emphasis.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/find-replace.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/horizontal-rule-insert.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/image-edit.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/indent.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/inserted-text.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/italic.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/justify-center.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/justify-full.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/justify-left.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/justify-right.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/keyboard.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/language-marks-show.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/link-edit.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/microdata-show.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/mono-spaced.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/ordered-list.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/outdent.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/paragraph-insert-after.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/paragraph-insert-before.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/paste-behaviour.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/paste-toggle.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/paste.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/quotation.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/redo.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/remove-format.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/row-delete.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/row-edit-properties.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/row-insert-above.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/row-insert-under.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/row-split.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/sample.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/small.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/smiley-insert.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/soft-hyphen-insert.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/span.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/spell-check.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/strike-through.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/strong.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/subscript.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/superscript.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/table-edit-properties.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/table-insert.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/table-restyle.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/table-show-borders.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/tag-insert.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/text-direction-left-to-right.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/text-direction-right-to-left.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/underline.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/undo.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/unlink.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/unordered-list.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/user-element-edit.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Actions/variable.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/Abbreviation/abbreviation.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/AboutEditor/about.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/BlockElements/blockquote.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/BlockElements/indent.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/BlockElements/insertHorizontalRule.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/BlockElements/insertOrderedList.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/BlockElements/insertParagraphAfter.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/BlockElements/insertParagraphBefore.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/BlockElements/insertUnorderedList.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/BlockElements/justifyCenter.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/BlockElements/justifyFull.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/BlockElements/justifyLeft.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/BlockElements/justifyRight.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/BlockElements/outdent.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/CharacterMap/character-insert-from-map.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/CharacterMap/soft-hyphen-insert.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/CopyPaste/copy.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/CopyPaste/cut.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/CopyPaste/paste.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/DefaultImage/image.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/DefaultInline/bold.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/DefaultInline/italic.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/DefaultInline/strikethrough.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/DefaultInline/subscript.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/DefaultInline/superscript.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/DefaultInline/underline.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/DefaultLink/link.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/DefaultLink/unlink.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/DefinitionList/definitionItem.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/DefinitionList/definitionList.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/EditElement/element-edit.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/EditorMode/ed_html.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/FindReplace/find.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/bidioverride.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/big.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/bold.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/citation.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/code.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/definition.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/deletedtext.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/emphasis.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/insertedtext.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/italic.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/keyboard.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/monospaced.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/quotation.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/sample.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/small.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/span.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/strikethrough.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/strong.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/subscript.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/superscript.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/underline.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InlineElements/variable.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_cool.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_cry.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_embarassed.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_footinmouth.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_frown.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_innocent.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_kiss.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_laughing.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_moneyinmouth.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_sealed.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_smile.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_surprised.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_tongueout.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_undecided.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_wink.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/Smileys/mozilla_yell.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/InsertSmiley/smiley.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/Language/left_to_right.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/Language/right_to_left.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/Language/show-language-marks.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/MicrodataSchema/microdata-show.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/PlainText/paste-behaviour.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/PlainText/paste-toggle.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/QuickTag/inserttag.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/RemoveFormat/remove-format.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/SpellChecker/spell-check.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TYPO3Color/forecolor.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TYPO3Color/hilitecolor.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TYPO3Image/image.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TYPO3Link/link.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TYPO3Link/unlink.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/cell-delete.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/cell-insert-after.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/cell-insert-before.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/cell-merge.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/cell-prop.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/cell-split.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/col-delete.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/col-insert-after.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/col-insert-before.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/col-prop.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/col-split.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/insert_table.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/row-delete.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/row-insert-above.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/row-insert-under.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/row-prop.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/row-split.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/table-prop.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/table-restyle.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/TableOperations/toggle-borders.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/UndoRedo/redo.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/UndoRedo/undo.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Plugins/UserElements/user.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Sprites/actions.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Sprites/actions.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Status/dialog-information.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Status/dialog-ok.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Status/loading-balls.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Status/loading.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/Status/resizable.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/alt_menu_mainitem_bg.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/download.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/external_link.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/external_link_new_window.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/internal_link.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/internal_link_new_window.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/jquery/ui-icons_222222_256x240.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/language-marker.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/mail.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/microdata.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/panel-title-light-bg.gif [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/red_arrow_bullet.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/row-header.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Images/system-help-open.png [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/AddImage.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/EditImage.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Ajax/Ajax.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/CSS/Parser.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Components/Select.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Configuration/Config.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/DOM/BookMark.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/DOM/DOM.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/DOM/Node.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/DOM/Selection.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/DOM/Walker.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Editor/Editor.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Editor/Framework.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Editor/Iframe.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Editor/StatusBar.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Editor/TextAreaContainer.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Editor/Toolbar.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Event/Event.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Event/KeyMap.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/HTMLArea.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/LoremIpsum.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Plugin/Plugin.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Toolbar/Button.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Toolbar/Select.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Toolbar/ToolbarText.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/UserAgent/UserAgent.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Util/Color.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Util/Resizable.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Util/String.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Util/TYPO3.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Util/Tips.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/HTMLArea/Util/Util.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/Abbreviation.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/AboutEditor.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/BlockElements.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/BlockStyle.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/CharacterMap.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/ContextMenu.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/CopyPaste.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/DefaultClean.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/DefaultImage.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/DefaultInline.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/DefaultLink.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/DefinitionList.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/EditElement.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/EditorMode.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/FindReplace.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/InlineElements.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/InsertSmiley.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/Language.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/MicrodataSchema.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/PlainText.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/QuickTag.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/RemoveFormat.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/SelectFont.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/SpellChecker.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/TYPO3Color.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/TYPO3HtmlParser.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/TYPO3Image.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/TYPO3Link.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/TableOperations.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/TextIndicator.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/TextStyle.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/UndoRedo.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/Plugins/UserElements.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/RteLinkBrowser.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/JavaScript/SelectImage.js [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Licenses/MozillaPublicLicense.txt [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Licenses/htmlArea.txt [deleted file]
typo3/sysext/rtehtmlarea/Resources/Public/Rdf/MicrodataSchema/SchemaOrgAll.rdf [deleted file]
typo3/sysext/rtehtmlarea/Tests/Functional/Tca/AcronymVisibleFieldsTest.php [deleted file]
typo3/sysext/rtehtmlarea/composer.json [deleted file]
typo3/sysext/rtehtmlarea/ext_conf_template.txt [deleted file]
typo3/sysext/rtehtmlarea/ext_emconf.php [deleted file]
typo3/sysext/rtehtmlarea/ext_localconf.php [deleted file]
typo3/sysext/rtehtmlarea/ext_tables.php [deleted file]
typo3/sysext/rtehtmlarea/ext_tables.sql [deleted file]
typo3/sysext/rtehtmlarea/static/clickenlarge/setup.txt [deleted file]

index 7cd886d..eb5f581 100644 (file)
@@ -75,7 +75,6 @@
                        "class-alias-maps": [
                                "typo3/sysext/extbase/Migrations/Code/ClassAliasMap.php",
                                "typo3/sysext/fluid/Migrations/Code/ClassAliasMap.php",
-                               "typo3/sysext/rtehtmlarea/Migrations/Code/ClassAliasMap.php",
                                "typo3/sysext/version/Migrations/Code/ClassAliasMap.php"
                        ]
                },
                "typo3/cms-reports": "self.version",
                "typo3/cms-rsaauth": "self.version",
                "typo3/cms-rte-ckeditor": "self.version",
-               "typo3/cms-rtehtmlarea": "self.version",
                "typo3/cms-saltedpasswords": "self.version",
                "typo3/cms-scheduler": "self.version",
                "typo3/cms-setup": "self.version",
                        "TYPO3\\CMS\\Reports\\": "typo3/sysext/reports/Classes/",
                        "TYPO3\\CMS\\Rsaauth\\": "typo3/sysext/rsaauth/Classes/",
                        "TYPO3\\CMS\\RteCKEditor\\": "typo3/sysext/rte_ckeditor/Classes/",
-                       "TYPO3\\CMS\\Rtehtmlarea\\": "typo3/sysext/rtehtmlarea/Classes/",
                        "TYPO3\\CMS\\Saltedpasswords\\": "typo3/sysext/saltedpasswords/Classes/",
                        "TYPO3\\CMS\\Scheduler\\": "typo3/sysext/scheduler/Classes/",
                        "TYPO3\\CMS\\Setup\\": "typo3/sysext/setup/Classes/",
                        "TYPO3\\CMS\\Recordlist\\Tests\\": "typo3/sysext/recordlist/Tests/",
                        "TYPO3\\CMS\\Reports\\Tests\\": "typo3/sysext/reports/Tests/",
                        "TYPO3\\CMS\\Rsaauth\\Tests\\": "typo3/sysext/rsaauth/Tests/",
-                       "TYPO3\\CMS\\Rtehtmlarea\\Tests\\": "typo3/sysext/rtehtmlarea/Tests/",
                        "TYPO3\\CMS\\Saltedpasswords\\Tests\\": "typo3/sysext/saltedpasswords/Tests/",
                        "TYPO3\\CMS\\Scheduler\\Tests\\": "typo3/sysext/scheduler/Tests/",
                        "TYPO3\\CMS\\Sv\\Tests\\": "typo3/sysext/sv/Tests/",
index 6609863..ea2f5d2 100644 (file)
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "0a93bff6ece95bdbe45d883432719012",
+    "content-hash": "bbc35746c3ff38592cd496cb7dd4736b",
     "packages": [
         {
             "name": "cogpowered/finediff",
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-80628-ExtensionRtehmlareaMovedToTER.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-80628-ExtensionRtehmlareaMovedToTER.rst
new file mode 100644 (file)
index 0000000..f5cfb5a
--- /dev/null
@@ -0,0 +1,40 @@
+.. include:: ../../Includes.txt
+
+====================================================
+Breaking: #80628 - Extension rtehmlarea moved to TER
+====================================================
+
+See :issue:`80628`
+
+Description
+===========
+
+The legacy extension ``EXT:rtehtmlarea`` has been removed from the TYPO3 CMS core
+and is only available as TER extension.
+
+
+Impact
+======
+
+The new extension ``EXT:rte_ckeditor`` is loaded by default, if you need features
+of the old rtehmlarea extension, you have to install ``EXT:rtehtmlarea`` from TER.
+An upgrade wizard can do this for you in the upgrade process of the install tool.
+If you have allowed images in RTE, you should install the rtehtmlarea extension,
+the ckeditor extension does not support images in RTE.
+
+
+Affected Installations
+======================
+
+Most installations are not affected. Instances are only affected if a loaded
+extension has a dependency to EXT:rtehtmlarea extension, or if the instance
+has used special plugins.
+
+
+Migration
+=========
+
+Use the upgrade wizard provided by the install tool to fetch and load the extensions
+from TER if you really need it.
+
+.. index:: Backend, RTE
diff --git a/typo3/sysext/impexp/Tests/Functional/Export/PagesAndTtContentWithRteImagesAndFileLink/ExportTest.php b/typo3/sysext/impexp/Tests/Functional/Export/PagesAndTtContentWithRteImagesAndFileLink/ExportTest.php
deleted file mode 100644 (file)
index 5dc0408..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-namespace TYPO3\CMS\Impexp\Tests\Functional\Export\PagesAndTtContentWithRteImagesAndFileLink;
-
-/*
- * 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\Utility\BackendUtility;
-
-/**
- * Functional test for the Export
- */
-class ExportTest extends \TYPO3\CMS\Impexp\Tests\Functional\Export\AbstractExportTestCase
-{
-    /**
-     * @var array
-     */
-    protected $coreExtensionsToLoad = [
-        'rtehtmlarea',
-        'impexp'
-    ];
-
-    /**
-     * @var array
-     */
-    protected $pathsToLinkInTestInstance = [
-        'typo3/sysext/impexp/Tests/Functional/Fixtures/Folders/fileadmin/user_upload' => 'fileadmin/user_upload',
-        'typo3/sysext/impexp/Tests/Functional/Fixtures/Folders/fileadmin/_processed_' => 'fileadmin/_processed_'
-    ];
-
-    protected function setUp()
-    {
-        parent::setUp();
-
-        $this->importDataSet(__DIR__ . '/../../Fixtures/Database/pages.xml');
-        $this->importDataSet(__DIR__ . '/../../Fixtures/Database/tt_content-with-rte-image-n-file-link.xml');
-        $this->importDataSet(__DIR__ . '/../../Fixtures/Database/sys_file.xml');
-        $this->importDataSet(__DIR__ . '/../../Fixtures/Database/sys_file_reference.xml');
-        $this->importDataSet(__DIR__ . '/../../Fixtures/Database/sys_file_storage.xml');
-    }
-
-    /**
-     * @test
-     */
-    public function exportPagesAndRelatedTtContentWithRteImagesAndFileLink()
-    {
-        $this->export->setRecordTypesIncludeFields(
-            [
-                'pages' => [
-                    'title',
-                    'deleted',
-                    'doktype',
-                    'hidden',
-                    'perms_everybody'
-                ],
-                'tt_content' => [
-                    'CType',
-                    'header',
-                    'deleted',
-                    'hidden',
-                    'bodytext',
-                    't3ver_oid'
-                ],
-                'sys_file' => [
-                    'storage',
-                    'type',
-                    'metadata',
-                    'identifier',
-                    'identifier_hash',
-                    'folder_hash',
-                    'extension',
-                    'mime_type',
-                    'name',
-                    'sha1',
-                    'size',
-                    'creation_date',
-                    'modification_date',
-                ],
-                'sys_file_storage' => [
-                    'name',
-                    'description',
-                    'driver',
-                    'configuration',
-                    'is_default',
-                    'is_browsable',
-                    'is_public',
-                    'is_writable',
-                    'is_online'
-                ]
-            ]
-        );
-
-        $this->export->relOnlyTables = [
-            'sys_file',
-            'sys_file_storage'
-        ];
-
-        $this->export->export_addRecord('pages', BackendUtility::getRecord('pages', 1));
-        $this->export->export_addRecord('pages', BackendUtility::getRecord('pages', 2));
-        $this->export->export_addRecord('tt_content', BackendUtility::getRecord('tt_content', 1));
-
-        $this->setPageTree(1, 1);
-
-        // After adding ALL records we set relations:
-        for ($a = 0; $a < 10; $a++) {
-            $addR = $this->export->export_addDBRelations($a);
-            if (empty($addR)) {
-                break;
-            }
-        }
-
-        $this->export->export_addFilesFromRelations();
-        $this->export->export_addFilesFromSysFilesRecords();
-
-        $out = $this->export->compileMemoryToFileContent('xml');
-
-        $this->assertXmlStringEqualsXmlFile(
-            $this->getXmlFilePath('pages-and-ttcontent-with-rte-image-n-file-link.xml'),
-            $out
-        );
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/RteHtmlAreaExtractionUpdate.php b/typo3/sysext/install/Classes/Updates/RteHtmlAreaExtractionUpdate.php
new file mode 100644 (file)
index 0000000..0237106
--- /dev/null
@@ -0,0 +1,123 @@
+<?php
+namespace TYPO3\CMS\Install\Updates;
+
+/*
+ * 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;
+
+/**
+ * Installs and downloads EXT:rtehtmlarea if needed
+ */
+class RteHtmlAreaExtractionUpdate extends AbstractDownloadExtensionUpdate
+{
+    /**
+     * @var string
+     */
+    protected $title = 'Install extension "rtehtmlarea" from TER';
+
+    /**
+     * @var string
+     */
+    protected $extensionKey = 'rtehtmlarea';
+
+    /**
+     * @var array
+     */
+    protected $extensionDetails = [
+        'rtehtmlarea' => [
+            'title' => 'RTE HTMLArea for TYPO3',
+            'description' => 'Provides the well-known RTE used in previous TYPO3 versions, if handling of images or custom configurations are necessary.',
+            'versionString' => '8.7.0',
+        ]
+    ];
+
+    /**
+     * Checks if an update is needed
+     *
+     * @param string $description The description for the update
+     * @return bool Whether an update is needed (true) or not (false)
+     */
+    public function checkForUpdate(&$description)
+    {
+        $description = 'The extension "rtehtmlarea" (RTE based on HtmlArea) was extracted into'
+            . ' the TYPO3 Extension Repository. This update downloads the TYPO3 Extension from the TER.'
+            . ' Use this if you have special configurations or image handling within Rich Text fields and uninstall the shipped EXT:rte_ckeditor.';
+
+        $updateNeeded = false;
+
+        if (!$this->isWizardDone()) {
+            $updateNeeded = true;
+        }
+
+        return $updateNeeded;
+    }
+
+    /**
+     * Second step: Ask user to install the extension
+     *
+     * @param string $inputPrefix input prefix, all names of form fields have to start with this. Append custom name in [ ... ]
+     * @return string HTML output
+     */
+    public function getUserInput($inputPrefix)
+    {
+        return '
+            <div class="panel panel-danger">
+                <div class="panel-heading">Are you really sure?</div>
+                <div class="panel-body">
+                    <p>You should install EXT:rtehtmlarea only if you really need it.</p>
+                    <p>This update wizard cannot check if the extension was installed before the update.</p>
+                    <p>Are you really sure, you want to install EXT:rtehtmlarea?</p>
+                    <div class="btn-group clearfix" data-toggle="buttons">
+                        <label class="btn btn-default active">
+                            <input type="radio" name="' . $inputPrefix . '[install]" value="0" checked="checked" /> no, don\'t install
+                        </label>
+                        <label class="btn btn-default">
+                            <input type="radio" name="' . $inputPrefix . '[install]" value="1" /> yes, please install
+                        </label>
+                    </div>
+                </div>
+            </div>
+        ';
+    }
+
+    /**
+     * Performs the update if EXT:compatibility7 should be installed.
+     *
+     * @param array $databaseQueries Queries done in this update
+     * @param string $customMessage Custom message
+     * @return bool
+     */
+    public function performUpdate(array &$databaseQueries, &$customMessage)
+    {
+        $requestParams = GeneralUtility::_GP('install');
+        if (!isset($requestParams['values']['rtehtmlareaExtension']['install'])) {
+            return false;
+        }
+        $install = (int)$requestParams['values']['rtehtmlareaExtension']['install'];
+
+        if ($install === 1) {
+            // user decided to install extension, install and mark wizard as done
+            $updateSuccessful = $this->installExtension($this->extensionKey, $customMessage);
+            if ($updateSuccessful) {
+                $this->markWizardAsDone();
+                return true;
+            }
+        } else {
+            // user decided to not install extension, mark wizard as done
+            $this->markWizardAsDone();
+            return true;
+        }
+        return $updateSuccessful;
+    }
+}
index 1723984..d2318aa 100644 (file)
@@ -72,3 +72,5 @@ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['compatibilit
     = \TYPO3\CMS\Install\Updates\Compatibility7ExtractionUpdate::class;
 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['formLegacyExtractionUpdate']
     = \TYPO3\CMS\Install\Updates\FormLegacyExtractionUpdate::class;
+$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['rtehtmlareaExtension']
+    = \TYPO3\CMS\Install\Updates\RteHtmlAreaExtractionUpdate::class;
diff --git a/typo3/sysext/rtehtmlarea/Classes/Controller/AccessibilityLinkController.php b/typo3/sysext/rtehtmlarea/Classes/Controller/AccessibilityLinkController.php
deleted file mode 100644 (file)
index 6b45351..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Controller;
-
-/*
- * 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!
- */
-
-/**
- * Remove accessibility icon when no link was rendered
- */
-class AccessibilityLinkController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlugin
-{
-    /**
-     * Same as class name
-     */
-    public $prefixId = 'AccessibilityLinkController';
-
-    /**
-     * Path to this script relative to the extension dir
-     */
-    public $scriptRelPath = 'Classes/Controller/AccessibilityLinkController.php';
-
-    /**
-     * The extension key
-     */
-    public $extKey = 'rtehtmlarea';
-
-    /**
-     * Configuration
-     */
-    public $conf = [];
-
-    /**
-     * cObj object
-     *
-     * @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
-     */
-    public $cObj;
-
-    /**
-     * Remove accessibility icon when no link was rendered, called from TypoScript
-     *
-     * @param string $content Content input. Not used, ignore.
-     * @param array $conf TypoScript configuration
-     * @return string HTML output.
-     * @access private
-     */
-    public function removeAccessibilityIcon($content, $conf)
-    {
-        // If the link was not rendered
-        if (substr($content, 0, 3) !== '<a ' && substr($content, 0, 5) === '<img ') {
-            // Let's remove the accessibility icon, if there is one
-            $matches = [];
-            if (preg_match('/^<img .*>/', $content, $matches) === 1) {
-                $attributes = \TYPO3\CMS\Core\Utility\GeneralUtility::get_tag_attributes($matches[0]);
-                if ($attributes['src']) {
-                    // Get RTE Configconfiguration
-                    $pageTSConfig = $this->frontendController->getPagesTSconfig();
-                    if (is_array($pageTSConfig) && is_array($pageTSConfig['RTE.'])) {
-                        $classesAnchorConfiguration = $pageTSConfig['RTE.']['classesAnchor.'];
-                        if (is_array($classesAnchorConfiguration)) {
-                            // Make the url of the source relative
-                            $siteUrl = \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_SITE_URL');
-                            if (\TYPO3\CMS\Core\Utility\GeneralUtility::isFirstPartOfStr($attributes['src'], $siteUrl)) {
-                                $attributes['src'] = substr($attributes['src'], strlen($siteUrl));
-                            }
-                            // Lookup the RTE.classesAnchor array
-                            foreach ($classesAnchorConfiguration as $item => $conf) {
-                                if ($conf['image']) {
-                                    $imagePath = $this->getFullFileName(trim(str_replace('\'', '', str_replace('"', '', $conf['image']))));
-                                    if ($attributes['src'] === $imagePath) {
-                                        // If found, remove the img tag and break
-                                        $content = substr($content, strlen($matches[0]));
-                                        break;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return $content;
-    }
-    /*
-     * Returns the full name of a file referenced in Page TSConfig
-     */
-    protected function getFullFileName($filename)
-    {
-        if (strpos($filename, 'EXT:') === 0) {
-            list($extKey, $local) = explode('/', substr($filename, 4), 2);
-            $newFilename = '';
-            if ((string)$extKey !== '' && \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded($extKey) && (string)$local !== '') {
-                $newFilename = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($extKey) . $local;
-            }
-        } elseif ($filename[0] !== '/') {
-            $newFilename = $filename;
-        } else {
-            $newFilename = substr($filename, 1);
-        }
-        return  \TYPO3\CMS\Core\Utility\GeneralUtility::resolveBackPath($newFilename);
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Controller/BrowseLinksController.php b/typo3/sysext/rtehtmlarea/Classes/Controller/BrowseLinksController.php
deleted file mode 100644 (file)
index 1b8be7b..0000000
+++ /dev/null
@@ -1,611 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Controller;
-
-/*
- * 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\ServerRequestInterface;
-use TYPO3\CMS\Core\Configuration\Richtext;
-use TYPO3\CMS\Core\LinkHandling\LinkService;
-use TYPO3\CMS\Core\Page\PageRenderer;
-use TYPO3\CMS\Core\Utility\ArrayUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Lang\LanguageService;
-use TYPO3\CMS\Recordlist\Controller\AbstractLinkBrowserController;
-
-/**
- * Extended controller for link browser
- */
-class BrowseLinksController extends AbstractLinkBrowserController
-{
-    /**
-     * Active with TYPO3 Element Browser: Contains the name of the form field for which this window
-     * opens - thus allows us to make references back to the main window in which the form is.
-     * Example value: "data[pages][39][bodytext]|||tt_content|"
-     * or "data[tt_content][NEW3fba56fde763d][image]|||gif,jpg,jpeg,tif,bmp,pcx,tga,png,pdf,ai|"
-     *
-     * Values:
-     * 0: form field name reference, eg. "data[tt_content][123][image]"
-     * 1: htmlArea RTE parameters: editorNo:contentTypo3Language
-     * 2: RTE config parameters: RTEtsConfigParams
-     * 3: allowed types. Eg. "tt_content" or "gif,jpg,jpeg,tif,bmp,pcx,tga,png,pdf,ai"
-     *
-     * $pArr = explode('|', $this->bparams);
-     * $formFieldName = $pArr[0];
-     * $allowedTablesOrFileTypes = $pArr[3];
-     *
-     * @var string
-     */
-    protected $bparams;
-
-    /**
-     * @var int
-     */
-    protected $editorNo;
-
-    /**
-     * TYPO3 language code of the content language
-     *
-     * @var int
-     */
-    protected $contentTypo3Language;
-
-    /**
-     * Language service object for localization to the content language
-     *
-     * @var LanguageService
-     */
-    protected $contentLanguageService;
-
-    /**
-     * @var array
-     */
-    protected $buttonConfig = [];
-
-    /**
-     * @var array
-     */
-    protected $thisConfig = [];
-
-    /**
-     * Used with the Rich Text Editor.
-     * Example value: "tt_content:NEW3fba58c969f5c:bodytext:23:text:23:"
-     *
-     * @var string
-     */
-    protected $RTEtsConfigParams;
-
-    /**
-     * @var array
-     */
-    protected $classesAnchorDefault = [];
-
-    /**
-     * @var array
-     */
-    protected $classesAnchorDefaultTitle = [];
-
-    /**
-     * @var array
-     */
-    protected $classesAnchorClassTitle = [];
-
-    /**
-     * @var array
-     */
-    protected $classesAnchorDefaultTarget = [];
-
-    /**
-     * @var array
-     */
-    protected $classesAnchorJSOptions = [];
-
-    /**
-     * @var string
-     */
-    protected $defaultLinkTarget = '';
-
-    /**
-     * @var array
-     */
-    protected $additionalAttributes = [];
-
-    /**
-     * @var string
-     */
-    protected $siteUrl = '';
-
-    /**
-     * Initialize controller
-     */
-    protected function init()
-    {
-        parent::init();
-
-        $lang = $this->getLanguageService();
-        $lang->includeLLFile('EXT:rtehtmlarea/Resources/Private/Language/locallang_browselinkscontroller.xlf');
-        $lang->includeLLFile('EXT:rtehtmlarea/Resources/Private/Language/locallang_dialogs.xlf');
-
-        $this->contentLanguageService = GeneralUtility::makeInstance(LanguageService::class);
-    }
-
-    /**
-     * @param ServerRequestInterface $request
-     */
-    protected function initVariables(ServerRequestInterface $request)
-    {
-        parent::initVariables($request);
-
-        $queryParameters = $request->getQueryParams();
-        $this->bparams = isset($queryParameters['bparams']) ? $queryParameters['bparams'] : '';
-
-        $this->siteUrl = GeneralUtility::getIndpEnv('TYPO3_SITE_URL');
-
-        $currentLinkParts = isset($queryParameters['curUrl']) ? $queryParameters['curUrl'] : [];
-        if (isset($currentLinkParts['all'])) {
-            $currentLinkParts = GeneralUtility::get_tag_attributes($queryParameters['curUrl']['all']);
-            $currentLinkParts['url'] = htmlspecialchars_decode($currentLinkParts['href']);
-            unset($currentLinkParts['href']);
-        }
-        $this->currentLinkParts = $currentLinkParts;
-
-        // Process bparams
-        $pArr = explode('|', $this->bparams);
-        $pRteArr = explode(':', $pArr[1]);
-        $this->editorNo = $pRteArr[0];
-        $this->contentTypo3Language = $pRteArr[1];
-        $this->RTEtsConfigParams = $pArr[2];
-        if (!$this->editorNo) {
-            $this->editorNo = GeneralUtility::_GP('editorNo');
-            $this->contentTypo3Language = GeneralUtility::_GP('contentTypo3Language');
-            $this->RTEtsConfigParams = GeneralUtility::_GP('RTEtsConfigParams');
-        }
-        $pArr[1] = implode(':', [$this->editorNo, $this->contentTypo3Language]);
-        $pArr[2] = $this->RTEtsConfigParams;
-        $this->bparams = implode('|', $pArr);
-
-        $this->contentLanguageService->init($this->contentTypo3Language);
-
-        // @todo: This needs refactoring to enable sane config in flex form, either transfer parts of 'config', or use data providers
-        $RTEtsConfigParts = explode(':', $this->RTEtsConfigParams);
-        $table = $RTEtsConfigParts[0];
-        $field = $RTEtsConfigParts[2];
-        $recordType = $RTEtsConfigParts[3];
-        $tcaConfigOfField = $GLOBALS['TCA'][$table][$field]['config'] ?? [];
-        $columnsOverridesConfigOfField = $GLOBALS['TCA'][$table]['types'][$recordType]['columnsOverrides'][$field]['config'] ?? [];
-        if (!empty($columnsOverridesConfigOfField)) {
-            ArrayUtility::mergeRecursiveWithOverrule($tcaConfigOfField, $columnsOverridesConfigOfField);
-        }
-        $richtextConfigurationProvider = GeneralUtility::makeInstance(Richtext::class);
-        $richtextConfiguration = $richtextConfigurationProvider->getConfiguration(
-            $RTEtsConfigParts[0],
-            $RTEtsConfigParts[2],
-            $RTEtsConfigParts[3],
-            $RTEtsConfigParts[4],
-            $tcaConfigOfField
-        );
-        $this->thisConfig = $richtextConfiguration;
-
-        $this->buttonConfig = isset($this->thisConfig['buttons.']['link.'])
-            ? $this->thisConfig['buttons.']['link.']
-            : [];
-    }
-
-    /**
-     * Initialize document template object
-     */
-    protected function initDocumentTemplate()
-    {
-        parent::initDocumentTemplate();
-
-        $pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
-        $pageRenderer->loadRequireJsModule('TYPO3/CMS/Rtehtmlarea/RteLinkBrowser');
-    }
-
-    /**
-     * Initialize $this->currentLink and $this->currentLinkHandler
-     */
-    protected function initCurrentUrl()
-    {
-        if (empty($this->currentLinkParts)) {
-            return;
-        }
-
-        if (!empty($this->currentLinkParts['url'])) {
-            $linkService = GeneralUtility::makeInstance(LinkService::class);
-            $data = $linkService->resolve($this->currentLinkParts['url']);
-            $this->currentLinkParts['type'] = $data['type'];
-            unset($data['type']);
-            $this->currentLinkParts['url'] = $data;
-        }
-
-        if (!empty($this->currentLinkParts['class'])) {
-            // remove required classes
-            $currentClasses = GeneralUtility::trimExplode(' ', $this->currentLinkParts['class'], true);
-            if (count($currentClasses) > 1) {
-                $this->currentLinkParts['class'] = end($currentClasses);
-            }
-        }
-        parent::initCurrentUrl();
-    }
-
-    /**
-     * Renders the link attributes for the selected link handler
-     *
-     * @return string
-     */
-    public function renderLinkAttributeFields()
-    {
-        // Processing the classes configuration
-        if (!empty($this->buttonConfig['properties.']['class.']['allowedClasses'])) {
-            $classesAnchorArray = GeneralUtility::trimExplode(',', $this->buttonConfig['properties.']['class.']['allowedClasses'], true);
-            // Collecting allowed classes and configured default values
-            $classesAnchor = [
-                'all' => []
-            ];
-            $titleReadOnly = $this->buttonConfig['properties.']['title.']['readOnly']
-                || $this->buttonConfig[$this->displayedLinkHandlerId . '.']['properties.']['title.']['readOnly'];
-            if (is_array($this->thisConfig['classesAnchor.'])) {
-                foreach ($this->thisConfig['classesAnchor.'] as $label => $conf) {
-                    if (in_array($conf['class'], $classesAnchorArray)) {
-                        $classesAnchor['all'][] = $conf['class'];
-                        if ($conf['type'] === $this->displayedLinkHandlerId) {
-                            $classesAnchor[$conf['type']][] = $conf['class'];
-                            if ($this->buttonConfig[$conf['type'] . '.']['properties.']['class.']['default'] == $conf['class']) {
-                                $this->classesAnchorDefault[$conf['type']] = $conf['class'];
-                                if ($conf['titleText']) {
-                                    $this->classesAnchorDefaultTitle[$conf['type']] = $this->contentLanguageService->sL(trim($conf['titleText']));
-                                }
-                                if (isset($conf['target'])) {
-                                    $this->classesAnchorDefaultTarget[$conf['type']] = trim($conf['target']);
-                                }
-                            }
-                        }
-                        if ($titleReadOnly && $conf['titleText']) {
-                            $this->classesAnchorClassTitle[$conf['class']] = ($this->classesAnchorDefaultTitle[$conf['type']] = $this->contentLanguageService->sL(trim($conf['titleText'])));
-                        }
-                    }
-                }
-            }
-            if (isset($this->linkAttributeValues['class'])
-                && isset($classesAnchor[$this->displayedLinkHandlerId])
-                && !in_array($this->linkAttributeValues['class'], $classesAnchor[$this->displayedLinkHandlerId], true)
-            ) {
-                unset($this->linkAttributeValues['class']);
-            }
-            // Constructing the class selector options
-            foreach ($classesAnchorArray as $class) {
-                if (!in_array($class, $classesAnchor['all']) || in_array($class, $classesAnchor['all']) && is_array($classesAnchor[$this->displayedLinkHandlerId]) && in_array($class, $classesAnchor[$this->displayedLinkHandlerId])) {
-                    $selected = '';
-                    if ($this->linkAttributeValues['class'] === $class || !$this->linkAttributeValues['class'] && $this->classesAnchorDefault[$this->displayedLinkHandlerId] == $class) {
-                        $selected = 'selected="selected"';
-                    }
-                    $classLabel = !empty($this->thisConfig['classes.'][$class . '.']['name'])
-                        ? $this->getPageConfigLabel($this->thisConfig['classes.'][$class . '.']['name'], 0)
-                        : $class;
-                    $classStyle = !empty($this->thisConfig['classes.'][$class . '.']['value'])
-                        ? $this->thisConfig['classes.'][$class . '.']['value']
-                        : '';
-                    $this->classesAnchorJSOptions[$this->displayedLinkHandlerId] .= '<option ' . $selected . ' value="' . $class . '"' . ($classStyle ? ' style="' . $classStyle . '"' : '') . '>' . $classLabel . '</option>';
-                }
-            }
-            if ($this->classesAnchorJSOptions[$this->displayedLinkHandlerId] && !($this->buttonConfig['properties.']['class.']['required'] || $this->buttonConfig[$this->displayedLinkHandlerId . '.']['properties.']['class.']['required'])) {
-                $selected = '';
-                if (!$this->linkAttributeValues['class'] && !$this->classesAnchorDefault[$this->displayedLinkHandlerId]) {
-                    $selected = 'selected="selected"';
-                }
-                $this->classesAnchorJSOptions[$this->displayedLinkHandlerId] = '<option ' . $selected . ' value=""></option>' . $this->classesAnchorJSOptions[$this->displayedLinkHandlerId];
-            }
-        }
-        // Default target
-        $this->defaultLinkTarget = $this->classesAnchorDefault[$this->displayedLinkHandlerId] && $this->classesAnchorDefaultTarget[$this->displayedLinkHandlerId]
-            ? $this->classesAnchorDefaultTarget[$this->displayedLinkHandlerId]
-            : (isset($this->buttonConfig[$this->displayedLinkHandlerId . '.']['properties.']['target.']['default'])
-                ? $this->buttonConfig[$this->displayedLinkHandlerId . '.']['properties.']['target.']['default']
-                : (isset($this->buttonConfig['properties.']['target.']['default'])
-                    ? $this->buttonConfig['properties.']['target.']['default']
-                    : ''));
-        // Initializing additional attributes
-        if ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['rtehtmlarea']['plugins']['TYPO3Link']['additionalAttributes']) {
-            $addAttributes = GeneralUtility::trimExplode(',', $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['rtehtmlarea']['plugins']['TYPO3Link']['additionalAttributes'], true);
-            foreach ($addAttributes as $attribute) {
-                $this->additionalAttributes[$attribute] = isset($this->linkAttributeValues[$attribute]) ? $this->linkAttributeValues[$attribute] : '';
-            }
-        }
-        return parent::renderLinkAttributeFields();
-    }
-
-    /**
-     * Localize a label obtained from Page TSConfig
-     *
-     * @param string $string The label to be localized
-     * @param bool $JScharCode If needs to be converted to an array of char numbers
-     * @return string Localized string
-     */
-    public function getPageConfigLabel($string, $JScharCode = true)
-    {
-        if (substr($string, 0, 4) !== 'LLL:') {
-            $label = $string;
-        } else {
-            $label = $this->getLanguageService()->sL(trim($string));
-        }
-        $label = str_replace('"', '\\"', str_replace('\\\'', '\'', $label));
-        return $JScharCode ? GeneralUtility::quoteJSvalue($label) : $label;
-    }
-
-    /**
-     * @return string
-     */
-    protected function renderCurrentUrl()
-    {
-        $removeLink = ' <a href="#" class="t3js-removeCurrentLink">' . htmlspecialchars($this->getLanguageService()->getLL('removeLink')) . '</a>';
-        return '
-            <div class="element-browser-panel element-browser-title">' .
-                htmlspecialchars($this->getLanguageService()->getLL('currentLink')) .
-                ': ' .
-                htmlspecialchars($this->currentLinkHandler->formatCurrentUrl()) .
-                '<span class="pull-right">' . $removeLink . '</span>' .
-            '</div>';
-    }
-
-    /**
-     * Get the allowed items or tabs
-     *
-     * @return string[]
-     */
-    protected function getAllowedItems()
-    {
-        $allowedItems = parent::getAllowedItems();
-
-        $blindLinkOptions = isset($this->thisConfig['blindLinkOptions'])
-            ? GeneralUtility::trimExplode(',', $this->thisConfig['blindLinkOptions'], true)
-            : [];
-        $allowedItems = array_diff($allowedItems, $blindLinkOptions);
-
-        if (is_array($this->buttonConfig['options.']) && $this->buttonConfig['options.']['removeItems']) {
-            $allowedItems = array_diff($allowedItems, GeneralUtility::trimExplode(',', $this->buttonConfig['options.']['removeItems'], true));
-        }
-
-        return $allowedItems;
-    }
-
-    /**
-     * Get the allowed link attributes
-     *
-     * @return string[]
-     */
-    protected function getAllowedLinkAttributes()
-    {
-        $allowedLinkAttributes = parent::getAllowedLinkAttributes();
-
-        $blindLinkFields = isset($this->thisConfig['blindLinkFields'])
-            ? GeneralUtility::trimExplode(',', $this->thisConfig['blindLinkFields'], true)
-            : [];
-        $allowedLinkAttributes = array_diff($allowedLinkAttributes, $blindLinkFields);
-
-        return $allowedLinkAttributes;
-    }
-
-    /**
-     * Create an array of link attribute field rendering definitions
-     *
-     * @return string[]
-     */
-    protected function getLinkAttributeFieldDefinitions()
-    {
-        $fieldRenderingDefinitions = parent::getLinkAttributeFieldDefinitions();
-        $fieldRenderingDefinitions['title'] = $this->getTitleField();
-        $fieldRenderingDefinitions['class'] = $this->getClassField();
-        $fieldRenderingDefinitions['target'] = $this->getTargetField();
-        $fieldRenderingDefinitions['rel'] = $this->getRelField();
-        if (empty($this->buttonConfig['queryParametersSelector.']['enabled'])) {
-            unset($fieldRenderingDefinitions['params']);
-        }
-        return $fieldRenderingDefinitions;
-    }
-
-    /**
-     * Add rel field
-     *
-     * @return string
-     */
-    protected function getRelField()
-    {
-        if (empty($this->buttonConfig['relAttribute.']['enabled'])) {
-            return '';
-        }
-        // @todo add rel to attributes
-        $currentRel = $this->displayedLinkHandler === $this->currentLinkHandler && !empty($this->currentLinkParts)
-            ? $this->linkAttributeValues['rel']
-            : '';
-        // @todo define label "linkRelationship" below in xlf
-        return '
-            <form action="" name="lrelform" id="lrelform" class="t3js-dummyform form-horizontal">
-                 <div class="form-group form-group-sm">
-                    <label class="col-xs-4 control-label">' .
-                        htmlspecialchars($this->getLanguageService()->getLL('linkRelationship')) .
-                    '</label>
-                    <div class="col-xs-8">
-                        <input type="text" name="lrel" class="form-control" value="' . $currentRel . '" />
-                    </div>
-                </div>
-            </form>
-            ';
-    }
-
-    /**
-     * Add target selector
-     *
-     * @return string
-     */
-    protected function getTargetField()
-    {
-        $targetSelectorConfig = [];
-        if (is_array($this->buttonConfig['targetSelector.'])) {
-            $targetSelectorConfig = $this->buttonConfig['targetSelector.'];
-        }
-        $target = $this->linkAttributeValues['target'] ?: $this->defaultLinkTarget;
-        $lang = $this->getLanguageService();
-        $targetSelector = '';
-
-        if (!$targetSelectorConfig['disabled']) {
-            $targetSelector = '
-                                               <select name="ltarget_type" class="t3js-targetPreselect form-control">
-                                                       <option value=""></option>
-                                                       <option value="_top">' . htmlspecialchars($lang->getLL('top')) . '</option>
-                                                       <option value="_blank">' . htmlspecialchars($lang->getLL('newWindow')) . '</option>
-                                               </select>
-                       ';
-        }
-
-        return '
-                               <form action="" name="ltargetform" id="ltargetform" class="t3js-dummyform form-horizontal">
-                    <div class="form-group form-group-sm" ' . ($targetSelectorConfig['disabled'] ? ' style="display: none;"' : '') . '>
-                        <label class="col-xs-4 control-label">' . htmlspecialchars($lang->getLL('target')) . '</label>
-                                               <div class="col-xs-4">
-                                                       <input type="text" name="ltarget" class="t3js-linkTarget form-control"
-                                                           value="' . htmlspecialchars($target) . '" />
-                                               </div>
-                                               <div class="col-xs-4">
-                                                       ' . $targetSelector . '
-                                               </div>
-                                       </div>
-                               </form>
-                               ';
-    }
-
-    /**
-     * Add title selector
-     *
-     * @return string
-     */
-    protected function getTitleField()
-    {
-        if ($this->linkAttributeValues['title']) {
-            $title = $this->linkAttributeValues['title'];
-        } else {
-            $title = $this->classesAnchorDefaultTitle[$this->displayedLinkHandlerId] ?: '';
-        }
-        if (isset($this->buttonConfig[$this->displayedLinkHandlerId . '.']['properties.']['title.']['readOnly'])) {
-            $readOnly = (bool)$this->buttonConfig[$this->displayedLinkHandlerId . '.']['properties.']['title.']['readOnly'];
-        } else {
-            $readOnly = isset($this->buttonConfig['properties.']['title.']['readOnly'])
-                ? (bool)$this->buttonConfig['properties.']['title.']['readOnly']
-                : false;
-        }
-
-        if ($readOnly) {
-            $currentClass = $this->linkAttributeFields['class'];
-            if (!$currentClass) {
-                $currentClass = empty($this->classesAnchorDefault[$this->displayedLinkHandlerId]) ? '' : $this->classesAnchorDefault[$this->displayedLinkHandlerId];
-            }
-            $title = $currentClass
-                ? $this->classesAnchorClassTitle[$currentClass]
-                : $this->classesAnchorDefaultTitle[$this->displayedLinkHandlerId];
-        }
-        return '
-                <form action="" name="ltitleform" id="ltitleform" class="t3js-dummyform form-horizontal">
-                    <div class="form-group form-group-sm">
-                        <label class="col-xs-4 control-label">
-                            ' . htmlspecialchars($this->getLanguageService()->getLL('anchor_title')) . '
-                         </label>
-                         <div class="col-xs-8">
-                                <span style="display: ' . ($readOnly ? 'none' : 'inline') . ';">
-                                    <input type="text" name="ltitle" class="form-control"
-                                        value="' . htmlspecialchars($title) . '" />
-                                </span>
-                                <span id="rtehtmlarea-browse-links-title-readonly"
-                                    style="display: ' . ($readOnly ? 'inline' : 'none') . ';">
-                                    ' . htmlspecialchars($title) . '</span>
-                        </div>
-                    </div>
-                </form>
-                ';
-    }
-
-    /**
-     * Return html code for the class selector
-     *
-     * @return string the html code to be added to the form
-     */
-    protected function getClassField()
-    {
-        $selectClass = '';
-        if ($this->classesAnchorJSOptions[$this->displayedLinkHandlerId]) {
-            $selectClass = '
-                <form action="" name="lclassform" id="lclassform" class="t3js-dummyform form-horizontal">
-                    <div class="form-group form-group-sm">
-                        <label class="col-xs-4 control-label">
-                            ' . htmlspecialchars($this->getLanguageService()->getLL('anchor_class')) . '
-                        </label>
-                        <div class="col-xs-8">
-                            <select name="lclass" class="t3js-class-selector form-control">
-                                ' . $this->classesAnchorJSOptions[$this->displayedLinkHandlerId] . '
-                            </select>
-                        </div>
-                    </div>
-                </form>
-            ';
-        }
-        return $selectClass;
-    }
-
-    /**
-     * Return the ID of current page
-     *
-     * @return int
-     */
-    protected function getCurrentPageId()
-    {
-        return explode(':', $this->RTEtsConfigParams)[5];
-    }
-
-    /**
-     * Retrieve the configuration
-     *
-     * This is only used by RTE currently.
-     *
-     * @return array
-     */
-    public function getConfiguration()
-    {
-        return $this->buttonConfig;
-    }
-
-    /**
-     * Get attributes for the body tag
-     *
-     * @return string[] Array of body-tag attributes
-     */
-    protected function getBodyTagAttributes()
-    {
-        $parameters = parent::getBodyTagAttributes();
-        $parameters['data-site-url'] = $this->siteUrl;
-        return $parameters;
-    }
-
-    /**
-     * @param array $overrides
-     *
-     * @return array Array of parameters which have to be added to URLs
-     */
-    public function getUrlParameters(array $overrides = null)
-    {
-        return [
-            'act' => isset($overrides['act']) ? $overrides['act'] : $this->displayedLinkHandlerId,
-            'bparams' => $this->bparams,
-            'editorNo' => $this->editorNo,
-            'contentTypo3Language' => $this->contentTypo3Language
-        ];
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Controller/CustomAttributeController.php b/typo3/sysext/rtehtmlarea/Classes/Controller/CustomAttributeController.php
deleted file mode 100644 (file)
index a426333..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Controller;
-
-/*
- * 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!
- */
-
-/**
- * Render custom attribute data-htmlarea-clickenlarge
- */
-class CustomAttributeController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlugin
-{
-    // Default plugin variables:
-    /**
-     * @var string
-     */
-    public $prefixId = 'tx_rtehtmlarea_pi3';
-
-    // Same as class name
-    /**
-     * @var string
-     */
-    public $scriptRelPath = 'pi3/class.tx_rtehtmlarea_pi3.php';
-
-    // Path to this script relative to the extension dir.
-    /**
-     * @var string
-     */
-    public $extKey = 'rtehtmlarea';
-
-    // The extension key.
-    /**
-     * @var array
-     */
-    public $conf = [];
-
-    /**
-     * cObj object
-     *
-     * @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
-     */
-    public $cObj;
-
-    /**
-     * Rendering the "data-htmlarea-clickenlarge" custom attribute, called from TypoScript
-     *
-     * @param string $content Content input. Not used, ignore.
-     * @param array $conf TypoScript configuration
-     * @return string HTML output.
-     * @access private
-     */
-    public function render_clickenlarge($content, $conf)
-    {
-        $clickenlarge = isset($this->cObj->parameters['data-htmlarea-clickenlarge']) ? $this->cObj->parameters['data-htmlarea-clickenlarge'] : 0;
-        if (!$clickenlarge) {
-            // Backward compatibility
-            $clickenlarge = isset($this->cObj->parameters['clickenlarge']) ? $this->cObj->parameters['clickenlarge'] : 0;
-        }
-        $fileFactory = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance();
-        $fileUid = $this->cObj->parameters['data-htmlarea-file-uid'];
-        if ($fileUid) {
-            $fileObject = $fileFactory->getFileObject($fileUid);
-            $filePath = $fileObject->getForLocalProcessing(false);
-            $file = \TYPO3\CMS\Core\Utility\PathUtility::stripPathSitePrefix($filePath);
-        } else {
-            // Pre-FAL backward compatibility
-            $path = $this->cObj->parameters['src'];
-            $magicFolder = $fileFactory->getFolderObjectFromCombinedIdentifier($GLOBALS['TYPO3_CONF_VARS']['BE']['RTE_imageStorageDir']);
-            if ($magicFolder instanceof \TYPO3\CMS\Core\Resource\Folder) {
-                $magicFolderPath = $magicFolder->getPublicUrl();
-                $pathPre = $magicFolderPath . 'RTEmagicC_';
-                if (\TYPO3\CMS\Core\Utility\GeneralUtility::isFirstPartOfStr($path, $pathPre)) {
-                    // Find original file:
-                    $pI = pathinfo(substr($path, strlen($pathPre)));
-                    $filename = substr($pI['basename'], 0, -strlen(('.' . $pI['extension'])));
-                    $file = $magicFolderPath . 'RTEmagicP_' . $filename;
-                } else {
-                    $file = $this->cObj->parameters['src'];
-                }
-            }
-        }
-        // Unset clickenlarge custom attribute
-        unset($this->cObj->parameters['data-htmlarea-clickenlarge']);
-        // Backward compatibility
-        unset($this->cObj->parameters['clickenlarge']);
-        unset($this->cObj->parameters['allParams']);
-        $content = '<img ' . \TYPO3\CMS\Core\Utility\GeneralUtility::implodeAttributes($this->cObj->parameters, true, true) . ' />';
-        if ($clickenlarge && is_array($conf['imageLinkWrap.'])) {
-            $theImage = $file ? $this->frontendController->tmpl->getFileName($file) : '';
-            if ($theImage) {
-                $this->cObj->parameters['origFile'] = $theImage;
-                if ($this->cObj->parameters['title']) {
-                    $conf['imageLinkWrap.']['title'] = $this->cObj->parameters['title'];
-                }
-                if ($this->cObj->parameters['alt']) {
-                    $conf['imageLinkWrap.']['alt'] = $this->cObj->parameters['alt'];
-                }
-                $content = $this->cObj->imageLinkWrap($content, $theImage, $conf['imageLinkWrap.']);
-                $content = $this->cObj->stdWrap($content, $conf['stdWrap.']);
-            }
-        }
-        return $content;
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Controller/ImageRenderingController.php b/typo3/sysext/rtehtmlarea/Classes/Controller/ImageRenderingController.php
deleted file mode 100644 (file)
index bde4735..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Controller;
-
-/*
- * 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\Resource;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Render the image attributes and reconstruct magic images, if necessary (and possible)
- */
-class ImageRenderingController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlugin
-{
-    /**
-     * Same as class name
-     *
-     * @var string
-     */
-    public $prefixId = 'ImageRenderingController';
-
-    /**
-     * Path to this script relative to the extension dir
-     *
-     * @var string
-     */
-    public $scriptRelPath = 'Classes/Controller/ImageRenderingController.php';
-
-    /**
-     * The extension key
-     *
-     * @var string
-     */
-    public $extKey = 'rtehtmlarea';
-
-    /**
-     * Configuration
-     *
-     * @var array
-     */
-    public $conf = [];
-
-    /**
-     * cObj object
-     *
-     * @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
-     */
-    public $cObj;
-
-    /**
-     * Returns a processed image to be displayed on the Frontend.
-     *
-     * @param string $content Content input (not used).
-     * @param array $conf TypoScript configuration
-     * @return string HTML output
-     */
-    public function renderImageAttributes($content = '', $conf)
-    {
-        $imageAttributes = $this->getImageAttributes();
-
-        // It is pretty rare to be in presence of an external image as the default behaviour
-        // of the RTE is to download the external image and create a local image.
-        // However, it may happen if the RTE has the flag "disable"
-        if (!$this->isExternalImage()) {
-            $fileUid = (int)$imageAttributes['data-htmlarea-file-uid'];
-            if ($fileUid) {
-                try {
-                    $file = Resource\ResourceFactory::getInstance()->getFileObject($fileUid);
-                    if ($imageAttributes['src'] !== $file->getPublicUrl()) {
-                        // Source file is a processed image
-                        $imageConfiguration = [
-                            'width' => (int)$imageAttributes['width'],
-                            'height' => (int)$imageAttributes['height']
-                        ];
-                        $processedFile = $this->getMagicImageService()->createMagicImage($file, $imageConfiguration);
-                        $additionalAttributes = [
-                            'src' => $processedFile->getPublicUrl(),
-                            'title' => $imageAttributes['title'] ?: $file->getProperty('title'),
-                            'alt' => $imageAttributes['alt'] ?: $file->getProperty('alternative'),
-                            'width' => $processedFile->getProperty('width'),
-                            'height' => $processedFile->getProperty('height'),
-                        ];
-                        $imageAttributes = array_merge($imageAttributes, $additionalAttributes);
-                    }
-                } catch (Resource\Exception\FileDoesNotExistException $fileDoesNotExistException) {
-                    // Log the fact the file could not be retrieved.
-                    $message = sprintf('I could not find file with uid "%s"', $fileUid);
-                    $this->getLogger()->error($message);
-                }
-            }
-        }
-        return '<img ' . GeneralUtility::implodeAttributes($imageAttributes, true, true) . ' />';
-    }
-
-    /**
-     * Returns a sanitizes array of attributes out of $this->cObj
-     *
-     * @return array
-     */
-    protected function getImageAttributes()
-    {
-        return $this->cObj->parameters;
-    }
-
-    /**
-     * Instantiates and prepares the Magic Image service.
-     *
-     * @return \TYPO3\CMS\Core\Resource\Service\MagicImageService
-     */
-    protected function getMagicImageService()
-    {
-
-        /** @var $magicImageService Resource\Service\MagicImageService */
-        $magicImageService = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Resource\Service\MagicImageService::class);
-
-        // Get RTE configuration
-        $pageTSConfig = $this->frontendController->getPagesTSconfig();
-        if (is_array($pageTSConfig) && is_array($pageTSConfig['RTE.']['default.'])) {
-            $magicImageService->setMagicImageMaximumDimensions($pageTSConfig['RTE.']['default.']);
-        }
-
-        return $magicImageService;
-    }
-
-    /**
-     * Tells whether the image URL is found to be "external".
-     *
-     * @return bool
-     */
-    protected function isExternalImage()
-    {
-        $srcAbsoluteUrl = $this->cObj->parameters['src'];
-        return strtolower(substr($srcAbsoluteUrl, 0, 4)) === 'http' || substr($srcAbsoluteUrl, 0, 2) === '//';
-    }
-
-    /**
-     * @return \TYPO3\CMS\Core\Log\Logger
-     */
-    protected function getLogger()
-    {
-
-        /** @var $logManager \TYPO3\CMS\Core\Log\LogManager */
-        $logManager = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Log\LogManager::class);
-
-        return $logManager->getLogger(get_class($this));
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Controller/ParseHtmlController.php b/typo3/sysext/rtehtmlarea/Classes/Controller/ParseHtmlController.php
deleted file mode 100644 (file)
index ab2c7c4..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Controller;
-
-/*
- * 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\Core\Configuration\Richtext;
-use TYPO3\CMS\Core\Utility\ArrayUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Content parsing for htmlArea RTE
- */
-class ParseHtmlController
-{
-    /**
-     * @var string
-     */
-    public $content;
-
-    /**
-     * @var array
-     */
-    public $modData;
-
-    /**
-     * document template object
-     *
-     * @var \TYPO3\CMS\Backend\Template\DocumentTemplate
-     */
-    public $doc;
-
-    /**
-     * @var string
-     */
-    public $extKey = 'rtehtmlarea';
-
-    /**
-     * @var string
-     */
-    public $prefixId = 'TYPO3HtmlParser';
-
-    /**
-     * The name of the module
-     *
-     * @var string
-     */
-    protected $moduleName = 'rtehtmlarea_wizard_parse_html';
-
-    /**
-     * Initialize
-     */
-    public function __construct()
-    {
-        $this->init();
-    }
-
-    /**
-     * Initializes necessary parameters before calling the actual main action.
-     */
-    public function init()
-    {
-        $this->doc = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Template\DocumentTemplate::class);
-        $this->doc->JScode = '';
-        $this->modData = $GLOBALS['BE_USER']->getModuleData($this->moduleName, 'ses');
-        if (GeneralUtility::_GP('OC_key')) {
-            $parts = explode('|', GeneralUtility::_GP('OC_key'));
-            $this->modData['openKeys'][$parts[1]] = $parts[0] === 'O' ? 1 : 0;
-            $GLOBALS['BE_USER']->pushModuleData($this->moduleName, $this->modData);
-        }
-    }
-
-    /**
-     * Injects the request object for the current request or subrequest
-     * As this controller goes only through the main_parse_html() method, it is rather simple for now
-     *
-     * @param ServerRequestInterface $request the current request
-     * @param ResponseInterface $response
-     * @return ResponseInterface the response with the content
-     */
-    public function mainAction(ServerRequestInterface $request, ResponseInterface $response)
-    {
-        $this->content .= $this->main_parse_html($this->modData['openKeys']);
-
-        $response->getBody()->write($this->content);
-        $response = $response->withHeader('Content-Type', 'text/plain; charset=utf-8');
-        return $response;
-    }
-
-    /**
-     * Rich Text Editor (RTE) html parser
-     *
-     * @param array $openKeys Unused
-     * @return string
-     */
-    public function main_parse_html($openKeys)
-    {
-        $html = GeneralUtility::_GP('content');
-
-        // @todo: This needs refactoring to enable sane config in flex form, either transfer parts of 'config', or use data providers
-        $RTEtsConfigParts = explode(':', GeneralUtility::_GP('RTEtsConfigParams'));
-        $table = $RTEtsConfigParts[0];
-        $field = $RTEtsConfigParts[2];
-        $recordType = $RTEtsConfigParts[3];
-        $tcaConfigOfField = $GLOBALS['TCA'][$table][$field]['config'] ?? [];
-        $columnsOverridesConfigOfField = $GLOBALS['TCA'][$table]['types'][$recordType]['columnsOverrides'][$field]['config'] ?? [];
-        if (!empty($columnsOverridesConfigOfField)) {
-            ArrayUtility::mergeRecursiveWithOverrule($tcaConfigOfField, $columnsOverridesConfigOfField);
-        }
-        $richtextConfigurationProvider = GeneralUtility::makeInstance(Richtext::class);
-        $richtextConfiguration = $richtextConfigurationProvider->getConfiguration(
-            $RTEtsConfigParts[0],
-            $RTEtsConfigParts[2],
-            $RTEtsConfigParts[3],
-            $RTEtsConfigParts[4],
-            $tcaConfigOfField
-        );
-        $thisConfig = $richtextConfiguration;
-
-        $HTMLParser = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Html\HtmlParser::class);
-        if (is_array($thisConfig['enableWordClean.'])) {
-            $HTMLparserConfig = $thisConfig['enableWordClean.']['HTMLparser.'];
-            if (is_array($HTMLparserConfig)) {
-                $this->keepSpanTagsWithId($HTMLparserConfig);
-                $HTMLparserConfig = $HTMLParser->HTMLparserConfig($HTMLparserConfig);
-            }
-        }
-        if (is_array($HTMLparserConfig)) {
-            $html = $HTMLParser->HTMLcleaner($html, $HTMLparserConfig[0], $HTMLparserConfig[1], $HTMLparserConfig[2], $HTMLparserConfig[3]);
-        }
-        if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey][$this->prefixId]['cleanPastedContent'])) {
-            foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey][$this->prefixId]['cleanPastedContent'] as $classRef) {
-                $hookObj = GeneralUtility::getUserObj($classRef);
-                if (method_exists($hookObj, 'cleanPastedContent_afterCleanWord')) {
-                    $html = $hookObj->cleanPastedContent_afterCleanWord($html, $thisConfig);
-                }
-            }
-        }
-        return $html;
-    }
-
-    /**
-     * Modify incoming HTMLparser config in an attempt to keep span tags with id
-     * Such tags are used by the RTE in order to restore the cursor position when the cleaning operation is completed.
-     *
-     * @param array $HTMLparserConfig: incoming HTMLParser configuration (wil be modified)
-     */
-    protected function keepSpanTagsWithId(&$HTMLparserConfig)
-    {
-        // Allow span tag
-        if (isset($HTMLparserConfig['allowTags'])) {
-            if (!GeneralUtility::inList($HTMLparserConfig['allowTags'], 'span')) {
-                $HTMLparserConfig['allowTags'] .= ',span';
-            }
-        } else {
-            $HTMLparserConfig['allowTags'] = 'span';
-        }
-        // Allow attributes on span tags
-        if (isset($HTMLparserConfig['noAttrib']) && GeneralUtility::inList($HTMLparserConfig['noAttrib'], 'span')) {
-            $HTMLparserConfig['noAttrib'] = GeneralUtility::rmFromList('span', $HTMLparserConfig['noAttrib']);
-        }
-        // Do not remove span tags
-        if (isset($HTMLparserConfig['removeTags']) && GeneralUtility::inList($HTMLparserConfig['removeTags'], 'span')) {
-            $HTMLparserConfig['removeTags'] = GeneralUtility::rmFromList('span', $HTMLparserConfig['removeTags']);
-        }
-        // Review the tags array
-        if (is_array($HTMLparserConfig['tags.'])) {
-            // Allow span tag
-            if (isset($HTMLparserConfig['tags.']['span']) && !$HTMLparserConfig['tags.']['span']) {
-                $HTMLparserConfig['tags.']['span'] = 1;
-            }
-            if (is_array($HTMLparserConfig['tags.']['span.'])) {
-                if (isset($HTMLparserConfig['tags.']['span.']['allowedAttribs'])) {
-                    if (!$HTMLparserConfig['tags.']['span.']['allowedAttribs']) {
-                        $HTMLparserConfig['tags.']['span.']['allowedAttribs'] = 'id';
-                    } elseif (!GeneralUtility::inList($HTMLparserConfig['tags.']['span.']['allowedAttribs'], 'id')) {
-                        $HTMLparserConfig['tags.']['span.']['allowedAttribs'] .= ',id';
-                    }
-                }
-                if (isset($HTMLparserConfig['tags.']['span.']['fixAttrib.']['id.']['unset'])) {
-                    unset($HTMLparserConfig['tags.']['span.']['fixAttrib.']['id.']['unset']);
-                }
-            }
-        }
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Controller/SelectImageController.php b/typo3/sysext/rtehtmlarea/Classes/Controller/SelectImageController.php
deleted file mode 100644 (file)
index 118a8de..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Controller;
-
-/*
- * 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\Core\Configuration\Richtext;
-use TYPO3\CMS\Core\Resource\ResourceFactory;
-use TYPO3\CMS\Core\Resource\Service\MagicImageService;
-use TYPO3\CMS\Core\Service\DependencyOrderingService;
-use TYPO3\CMS\Core\Utility\ArrayUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Recordlist\Controller\AbstractLinkBrowserController;
-use TYPO3\CMS\Recordlist\LinkHandler\LinkHandlerInterface;
-
-/**
- * Script class to select images in RTE
- */
-class SelectImageController extends AbstractLinkBrowserController
-{
-    /**
-     * These file extensions are allowed in the "plain" image selection mode.
-     *
-     * @const
-     */
-    const PLAIN_MODE_IMAGE_FILE_EXTENSIONS = 'jpg,jpeg,gif,png';
-
-    /**
-     * Active with TYPO3 Element Browser: Contains the name of the form field for which this window
-     * opens - thus allows us to make references back to the main window in which the form is.
-     * Example value: "data[pages][39][bodytext]|||tt_content|"
-     * or "data[tt_content][NEW3fba56fde763d][image]|||gif,jpg,jpeg,tif,bmp,pcx,tga,png,pdf,ai|"
-     *
-     * Values:
-     * 0: form field name reference, eg. "data[tt_content][123][image]"
-     * 1: htmlArea RTE parameters: editorNo:contentTypo3Language
-     * 2: RTE config parameters: RTEtsConfigParams
-     * 3: allowed types. Eg. "tt_content" or "gif,jpg,jpeg,tif,bmp,pcx,tga,png,pdf,ai"
-     *
-     * $pArr = explode('|', $this->bparams);
-     * $formFieldName = $pArr[0];
-     * $allowedTablesOrFileTypes = $pArr[3];
-     *
-     * @var string
-     */
-    protected $bparams;
-
-    /**
-     * RTE configuration
-     *
-     * @var array
-     */
-    protected $RTEProperties = [];
-
-    /**
-     * Used with the Rich Text Editor.
-     * Example value: "tt_content:NEW3fba58c969f5c:bodytext:23:text:23:"
-     *
-     * @var string
-     */
-    protected $RTEtsConfigParams;
-
-    /**
-     * @var int
-     */
-    protected $editorNo;
-
-    /**
-     * TYPO3 language code of the content language
-     *
-     * @var int
-     */
-    protected $contentTypo3Language;
-
-    /**
-     * @var array
-     */
-    protected $buttonConfig = [];
-
-    /**
-     * Initialize controller
-     */
-    protected function init()
-    {
-        parent::init();
-        $this->getLanguageService()->includeLLFile('EXT:rtehtmlarea/Resources/Private/Language/locallang_dialogs.xlf');
-    }
-
-    /**
-     * @param ServerRequestInterface $request
-     */
-    protected function initVariables(ServerRequestInterface $request)
-    {
-        parent::initVariables($request);
-
-        $queryParameters = $request->getQueryParams();
-        $this->bparams = isset($queryParameters['bparams']) ? $queryParameters['bparams'] : '';
-        $this->currentLinkParts['currentImage'] = !empty($queryParameters['fileUid']) ? $queryParameters['fileUid'] : 0;
-
-        // Process bparams
-        $pArr = explode('|', $this->bparams);
-        $pRteArr = explode(':', $pArr[1]);
-        $this->editorNo = $pRteArr[0];
-        $this->contentTypo3Language = $pRteArr[1];
-        $this->RTEtsConfigParams = $pArr[2];
-        if (!$this->editorNo) {
-            $this->editorNo = GeneralUtility::_GP('editorNo');
-            $this->contentTypo3Language = GeneralUtility::_GP('contentTypo3Language');
-            $this->RTEtsConfigParams = GeneralUtility::_GP('RTEtsConfigParams');
-        }
-        $pArr[1] = implode(':', [$this->editorNo, $this->contentTypo3Language]);
-        $pArr[2] = $this->RTEtsConfigParams;
-        $pArr[3] = $this->displayedLinkHandlerId === 'plain'
-            ? self::PLAIN_MODE_IMAGE_FILE_EXTENSIONS
-            : '';
-        $this->bparams = implode('|', $pArr);
-
-        // @todo: This needs refactoring to enable sane config in flex form, either transfer parts of 'config', or use data providers
-        $RTEtsConfigParts = explode(':', $this->RTEtsConfigParams);
-        $table = $RTEtsConfigParts[0];
-        $field = $RTEtsConfigParts[2];
-        $recordType = $RTEtsConfigParts[3];
-        $tcaConfigOfField = $GLOBALS['TCA'][$table][$field]['config'] ?? [];
-        $columnsOverridesConfigOfField = $GLOBALS['TCA'][$table]['types'][$recordType]['columnsOverrides'][$field]['config'] ?? [];
-        if (!empty($columnsOverridesConfigOfField)) {
-            ArrayUtility::mergeRecursiveWithOverrule($tcaConfigOfField, $columnsOverridesConfigOfField);
-        }
-        $richtextConfigurationProvider = GeneralUtility::makeInstance(Richtext::class);
-        $richtextConfiguration = $richtextConfigurationProvider->getConfiguration(
-            $RTEtsConfigParts[0],
-            $RTEtsConfigParts[2],
-            $RTEtsConfigParts[3],
-            $RTEtsConfigParts[4],
-            $tcaConfigOfField
-        );
-        $this->RTEProperties = $richtextConfiguration;
-
-        $this->buttonConfig = isset($this->RTEProperties['buttons.']['image.'])
-            ? $this->RTEProperties['buttons.']['image.']
-            : [];
-    }
-
-    /**
-     * Initialize hook objects implementing the interface
-     *
-     * @throws \UnexpectedValueException
-     */
-    protected function initHookObjects()
-    {
-        if (
-            isset($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['RteImageSelector']['hooks'])
-            && is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['RteImageSelector']['hooks'])
-        ) {
-            $hooks = GeneralUtility::makeInstance(DependencyOrderingService::class)->orderByDependencies(
-                $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['RteImageSelector']['hooks']
-            );
-            foreach ($hooks as $key => $hook) {
-                $this->hookObjects[] = GeneralUtility::makeInstance($hook['handler']);
-            }
-        }
-    }
-
-    /**
-     * Reads the configured image handlers from page TSconfig
-     *
-     * @return array
-     * @throws \UnexpectedValueException
-     */
-    protected function getLinkHandlers()
-    {
-        $imageHandler = $this->buttonConfig['options.']['imageHandler.'];
-
-        foreach ($this->hookObjects as $hookObject) {
-            if (method_exists($hookObject, 'modifyImageHandlers')) {
-                $imageHandler = $hookObject->modifyImageHandlers($imageHandler, $this->currentLinkParts);
-            }
-        }
-
-        if (empty($imageHandler)) {
-            throw new \UnexpectedValueException('No image handlers are configured. Check page TSconfig RTE.default.buttons.image.options.imageHandler.', 1455499673);
-        }
-
-        return $imageHandler;
-    }
-
-    /**
-     * Initialize $this->currentLinkParts and $this->currentLinkHandler
-     */
-    protected function initCurrentUrl()
-    {
-        if (empty($this->currentLinkParts)) {
-            return;
-        }
-
-        $orderedHandlers = GeneralUtility::makeInstance(DependencyOrderingService::class)->orderByDependencies($this->linkHandlers, 'scanBefore', 'scanAfter');
-
-        // find responsible handler for current image
-        foreach ($orderedHandlers as $key => $configuration) {
-            /** @var LinkHandlerInterface $handler */
-            $handler = $configuration['handlerInstance'];
-            if ($handler->canHandleLink($this->currentLinkParts)) {
-                $this->currentLinkHandler = $handler;
-                $this->currentLinkHandlerId = $key;
-                break;
-            }
-        }
-        // reset the image reference if we have no handler for it
-        if (!$this->currentLinkHandler) {
-            $this->currentLinkParts = [];
-        }
-    }
-
-    /**
-     * Render the currently set URL
-     *
-     * @return string
-     */
-    protected function renderCurrentUrl()
-    {
-        return '<!-- Print current URL -->
-            <div class="element-browser-panel element-browser-title">' .
-                htmlspecialchars($this->getLanguageService()->getLL('currentImage')) .
-                ': ' .
-                htmlspecialchars($this->currentLinkHandler->formatCurrentUrl()) .
-            '</div>';
-    }
-
-    /**
-     * Get the allowed items or tabs
-     *
-     * @return string[]
-     */
-    protected function getAllowedItems()
-    {
-        $allowedItems = array_keys($this->linkHandlers);
-
-        foreach ($this->hookObjects as $hookObject) {
-            if (method_exists($hookObject, 'modifyAllowedItems')) {
-                $allowedItems = $hookObject->modifyAllowedItems($allowedItems, $this->currentLinkParts);
-            }
-        }
-
-        return $allowedItems;
-    }
-
-    /**
-     * @param array $overrides
-     *
-     * @return array Array of parameters which have to be added to URLs
-     */
-    public function getUrlParameters(array $overrides = null)
-    {
-        return [
-            'act' => isset($overrides['act']) ? $overrides['act'] : $this->displayedLinkHandlerId,
-            'bparams' => $this->bparams,
-            'editorNo' => $this->editorNo
-        ];
-    }
-
-    /**
-     * @return array
-     */
-    public function getButtonConfiguration()
-    {
-        return $this->buttonConfig;
-    }
-
-    /**
-     * @return array
-     */
-    public function getRteProperties()
-    {
-        return $this->RTEProperties;
-    }
-
-    /**
-     * Compile the final tags to be inserted into RTE
-     *
-     * @param ServerRequestInterface $request
-     * @param ResponseInterface $response
-     * @return ResponseInterface
-     */
-    public function buildImageMarkup(ServerRequestInterface $request, ResponseInterface $response)
-    {
-        $this->initVariables($request);
-        $uidList = GeneralUtility::_GP('uidList');
-        // handle ajax request for
-        $uids = explode('|', $uidList);
-        $tags = [];
-        foreach ($uids as $uid) {
-            $fileObject = ResourceFactory::getInstance()->getFileObject((int)$uid);
-            // Get default values for alt and title attributes from file properties
-            $altText = $fileObject->getProperty('alternative');
-            $titleText = $fileObject->getProperty('title');
-            if ($this->displayedLinkHandlerId === 'magic') {
-                // Create the magic image service
-                $magicImageService = GeneralUtility::makeInstance(MagicImageService::class);
-                $magicImageService->setMagicImageMaximumDimensions($this->RTEProperties);
-                // Create the magic image
-                $imageConfiguration = [
-                    'width' => GeneralUtility::_GP('cWidth'),
-                    'height' => GeneralUtility::_GP('cHeight')
-                ];
-                $fileObject = $magicImageService->createMagicImage($fileObject, $imageConfiguration);
-                $width = $fileObject->getProperty('width');
-                $height = $fileObject->getProperty('height');
-            } else {
-                $width = $fileObject->getProperty('width');
-                $height = $fileObject->getProperty('height');
-                if (!$width || !$height) {
-                    $filePath = $fileObject->getForLocalProcessing(false);
-                    $imageInfo = @getimagesize($filePath);
-                    $width = $imageInfo[0];
-                    $height = $imageInfo[1];
-                }
-            }
-            $imageUrl = $fileObject->getPublicUrl();
-            // If file is local, make the url absolute
-            if (strpos($imageUrl, 'http') !== 0) {
-                $imageUrl = GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . $imageUrl;
-            }
-            $tags[] = '<img src="' . htmlspecialchars($imageUrl) . '" width="' . htmlspecialchars($width) . '" height="' . htmlspecialchars($height) . '"'
-                      . (isset($this->buttonConfig['properties.']['class.']['default'])
-                    ? ' class="' . trim($this->buttonConfig['properties.']['class.']['default']) . '"'
-                    : '')
-                      . ' alt = "' . ($altText ? htmlspecialchars($altText) : '') . '"'
-                      . ($titleText ? ' title="' . htmlspecialchars($titleText) . '"' : '')
-                      . ' data-htmlarea-file-uid="' . (int)$uid . '" />';
-        }
-        $finalHtmlCode = implode(' ', $tags);
-
-        $response->getBody()->write(json_encode(['images' => $finalHtmlCode]));
-        return $response;
-    }
-
-    /**
-     * Return the ID of current page
-     *
-     * @return int
-     * @throws \RuntimeException
-     */
-    protected function getCurrentPageId()
-    {
-        throw new \RuntimeException('Invalid method call. This function is not supported for image handlers', 1455499679);
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Controller/SpellCheckingController.php b/typo3/sysext/rtehtmlarea/Classes/Controller/SpellCheckingController.php
deleted file mode 100644 (file)
index 39d5b59..0000000
+++ /dev/null
@@ -1,698 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Controller;
-
-/*
- * 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\Core\Utility\GeneralUtility;
-
-/**
- * Spell checking plugin 'tx_rtehtmlarea_pi1' for the htmlArea RTE extension.
- */
-class SpellCheckingController
-{
-    /**
-     * @var \TYPO3\CMS\Core\Charset\CharsetConverter
-     */
-    protected $csConvObj;
-
-    // The extension key
-    /**
-     * @var string
-     */
-    public $extKey = 'rtehtmlarea';
-
-    /**
-     * @var string
-     */
-    public $siteUrl;
-
-    /**
-     * @var string
-     */
-    public $charset = 'utf-8';
-
-    /**
-     * @var string
-     */
-    public $parserCharset = 'utf-8';
-
-    /**
-     * @var string
-     */
-    public $defaultAspellEncoding = 'utf-8';
-
-    /**
-     * @var string
-     */
-    public $aspellEncoding;
-
-    /**
-     * @var string
-     */
-    public $result;
-
-    /**
-     * @var string
-     */
-    public $text;
-
-    /**
-     * @var array
-     */
-    public $misspelled = [];
-
-    /**
-     * @var array
-     */
-    public $suggestedWords;
-
-    /**
-     * @var int
-     */
-    public $wordCount = 0;
-
-    /**
-     * @var int
-     */
-    public $suggestionCount = 0;
-
-    /**
-     * @var int
-     */
-    public $suggestedWordCount = 0;
-
-    /**
-     * @var int
-     */
-    public $pspell_link;
-
-    /**
-     * @var string
-     */
-    public $pspellMode = 'normal';
-
-    /**
-     * @var string
-     */
-    public $dictionary;
-
-    /**
-     * @var string
-     */
-    public $AspellDirectory;
-
-    /**
-     * @var bool
-     */
-    public $pspell_is_available;
-
-    /**
-     * @var bool
-     */
-    public $forceCommandMode = 0;
-
-    /**
-     * @var string
-     */
-    public $filePrefix = 'rtehtmlarea_';
-
-    /**
-     * Pre-FAL backward compatibility
-     *
-     * @var string
-     */
-    protected $uploadFolder = 'uploads/tx_rtehtmlarea/';
-
-    /**
-     * Path to main dictionary
-     *
-     * @var string
-     */
-    protected $mainDictionaryPath;
-
-    /**
-     * Path to personal dictionary
-     *
-     * @var string
-     */
-    protected $personalDictionaryPath;
-
-    /**
-     * @var string
-     */
-    public $xmlCharacterData = '';
-
-    /**
-     * AJAX entry point
-     *
-     * @param ServerRequestInterface $request
-     * @param ResponseInterface $response
-     * @return ResponseInterface
-     * @throws \UnexpectedValueException
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    public function main(ServerRequestInterface $request, ResponseInterface $response)
-    {
-        GeneralUtility::logDeprecatedFunction();
-        return $this->processRequest($request, $response);
-    }
-
-    /**
-     * Main class of Spell Checker plugin
-     *
-     * @param ServerRequestInterface $request
-     * @param ResponseInterface $response
-     * @return ResponseInterface
-     * @throws \InvalidArgumentException
-     * @throws \UnexpectedValueException
-     */
-    public function processRequest(ServerRequestInterface $request, ResponseInterface $response)
-    {
-        $this->csConvObj = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Charset\CharsetConverter::class);
-        // Setting start time
-        $time_start = microtime(true);
-        $this->pspell_is_available = in_array('pspell', get_loaded_extensions());
-        $this->AspellDirectory = trim($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey]['plugins']['SpellChecker']['AspellDirectory']) ?: '/usr/bin/aspell';
-        // Setting command mode if requested and available
-        $this->forceCommandMode = trim($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extKey]['plugins']['SpellChecker']['forceCommandMode']) ?: 0;
-        if (!$this->pspell_is_available || $this->forceCommandMode) {
-            $AspellVersionString = explode('Aspell', shell_exec($this->AspellDirectory . ' -v'));
-            $AspellVersion = substr($AspellVersionString[1], 0, 4);
-            if ((float)$AspellVersion < 0.5 && (!$this->pspell_is_available || $this->forceCommandMode)) {
-                echo 'Configuration problem: Aspell version ' . $AspellVersion . ' too old. Spell checking cannot be performed in command mode.';
-            }
-            $this->defaultAspellEncoding = trim(shell_exec($this->AspellDirectory . ' config encoding'));
-        }
-        // Setting the list of dictionaries
-        $dictionaryList = shell_exec($this->AspellDirectory . ' dump dicts');
-        $dictionaryList = implode(',', GeneralUtility::trimExplode(LF, $dictionaryList, true));
-        $dictionaryArray = GeneralUtility::trimExplode(',', $dictionaryList, true);
-        $restrictToDictionaries = GeneralUtility::_POST('restrictToDictionaries');
-        if ($restrictToDictionaries) {
-            $dictionaryArray = array_intersect($dictionaryArray, GeneralUtility::trimExplode(',', $restrictToDictionaries, 1));
-        }
-        if (empty($dictionaryArray)) {
-            $dictionaryArray[] = 'en';
-        }
-        $this->dictionary = GeneralUtility::_POST('dictionary');
-        uasort($dictionaryArray, 'strcoll');
-        $dictionaryList = implode(',', $dictionaryArray);
-        // Setting the dictionary
-        if (empty($this->dictionary) || !in_array($this->dictionary, $dictionaryArray)) {
-            $this->dictionary = 'en';
-        }
-        // Setting the pspell suggestion mode
-        $this->pspellMode = GeneralUtility::_POST('pspell_mode') ? GeneralUtility::_POST('pspell_mode') : $this->pspellMode;
-        switch ($this->pspellMode) {
-            case 'ultra':
-
-            case 'fast':
-                $pspellModeFlag = PSPELL_FAST;
-                break;
-            case 'bad-spellers':
-                $pspellModeFlag = PSPELL_BAD_SPELLERS;
-                break;
-            case 'normal':
-
-            default:
-                $pspellModeFlag = PSPELL_NORMAL;
-                // sanitize $this->pspellMode
-                $this->pspellMode = 'normal';
-        }
-        // Setting the charset
-        if (GeneralUtility::_POST('pspell_charset')) {
-            $this->charset = trim(GeneralUtility::_POST('pspell_charset'));
-        }
-        if (strtolower($this->charset) === 'iso-8859-1') {
-            $this->parserCharset = strtolower($this->charset);
-        }
-        // In some configurations, Aspell uses 'iso8859-1' instead of 'iso-8859-1'
-        $this->aspellEncoding = $this->parserCharset;
-        if ($this->parserCharset === 'iso-8859-1' && strstr($this->defaultAspellEncoding, '8859-1')) {
-            $this->aspellEncoding = $this->defaultAspellEncoding;
-        }
-        // However, we are going to work only in the parser charset
-        if ($this->pspell_is_available && !$this->forceCommandMode) {
-            $this->pspell_link = pspell_new($this->dictionary, '', '', $this->parserCharset, $pspellModeFlag);
-        }
-        // Setting the path to main dictionary
-        $this->setMainDictionaryPath();
-        // Setting the path to user personal dictionary, if any
-        $this->setPersonalDictionaryPath();
-        $this->fixPersonalDictionaryCharacterSet();
-        $cmd = GeneralUtility::_POST('cmd');
-        if ($cmd === 'learn') {
-            // Only available for BE_USERS, die silently if someone has gotten here by accident
-            if (TYPO3_MODE !== 'BE' || !is_object($GLOBALS['BE_USER'])) {
-                die('');
-            }
-            // Updating the personal word list
-            $to_p_dict = GeneralUtility::_POST('to_p_dict');
-            $to_p_dict = $to_p_dict ? $to_p_dict : [];
-            $to_r_list = GeneralUtility::_POST('to_r_list');
-            $to_r_list = $to_r_list ? $to_r_list : [];
-            header('Content-Type: text/plain; charset=' . strtoupper($this->parserCharset));
-            header('Pragma: no-cache');
-            if ($to_p_dict || $to_r_list) {
-                $tmpFileName = GeneralUtility::tempnam($this->filePrefix);
-                $filehandle = fopen($tmpFileName, 'wb');
-                if ($filehandle) {
-                    // Get the character set of the main dictionary
-                    // We need to convert the input into the character set of the main dictionary
-                    $mainDictionaryCharacterSet = $this->getMainDictionaryCharacterSet();
-                    // Write the personal words addition commands to the temporary file
-                    foreach ($to_p_dict as $personal_word) {
-                        $cmd = '&' . $this->csConvObj->conv($personal_word, $this->parserCharset, $mainDictionaryCharacterSet) . LF;
-                        fwrite($filehandle, $cmd, strlen($cmd));
-                    }
-                    // Write the replacent pairs addition commands to the temporary file
-                    foreach ($to_r_list as $replace_pair) {
-                        $cmd = '$$ra ' . $this->csConvObj->conv($replace_pair[0], $this->parserCharset, $mainDictionaryCharacterSet) . ' , ' . $this->csConvObj->conv($replace_pair[1], $this->parserCharset, $mainDictionaryCharacterSet) . LF;
-                        fwrite($filehandle, $cmd, strlen($cmd));
-                    }
-                    $cmd = '#' . LF;
-                    $result = fwrite($filehandle, $cmd, strlen($cmd));
-                    if ($result === false) {
-                        GeneralUtility::sysLog('SpellChecker tempfile write error: ' . $tmpFileName, $this->extKey, GeneralUtility::SYSLOG_SEVERITY_ERROR);
-                    } else {
-                        // Assemble the Aspell command
-                        $aspellCommand = ((TYPO3_OS === 'WIN') ? 'type ' : 'cat ') . escapeshellarg($tmpFileName) . ' | '
-                            . $this->AspellDirectory
-                            . ' -a --mode=none'
-                            . ($this->personalDictionaryPath ? ' --home-dir=' . escapeshellarg($this->personalDictionaryPath) : '')
-                            . ' --lang=' . escapeshellarg($this->dictionary)
-                            . ' --encoding=' . escapeshellarg($mainDictionaryCharacterSet)
-                            . ' 2>&1';
-                        $aspellResult = shell_exec($aspellCommand);
-                        // Close and delete the temporary file
-                        fclose($filehandle);
-                        GeneralUtility::unlink_tempfile($tmpFileName);
-                    }
-                } else {
-                    GeneralUtility::sysLog('SpellChecker tempfile open error: ' . $tmpFileName, $this->extKey, GeneralUtility::SYSLOG_SEVERITY_ERROR);
-                }
-            }
-            flush();
-            die;
-        } else {
-            // Check spelling content
-            // Initialize output
-            $this->result = '<?xml version="1.0" encoding="' . $this->parserCharset . '"?>
-<!DOCTYPE html
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="' . substr($this->dictionary, 0, 2) . '" lang="' . substr($this->dictionary, 0, 2) . '">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=' . $this->parserCharset . '" />
-<link rel="stylesheet" type="text/css" media="all" href="' . (TYPO3_MODE === 'BE' ? '../' : '') . \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::siteRelPath($this->extKey) . '/Resources/Public/Css/Skin/Plugins/spell-checker-iframe.css" />
-<script type="text/javascript">
-/*<![CDATA[*/
-<!--
-var callerWindow;
-if (typeof top.TYPO3.Backend !== "undefined" && typeof top.TYPO3.Backend.ContentContainer.get() !== "undefined") {
-       callerWindow = top.TYPO3.Backend.ContentContainer.get();
-} else {
-       callerWindow = window.parent;
-}
-';
-            // Getting the input content
-            $content = GeneralUtility::_POST('content');
-            // Parsing the input HTML
-            $parser = xml_parser_create(strtoupper($this->parserCharset));
-            // Disables the functionality to allow external entities to be loaded when parsing the XML, must be kept
-            $previousValueOfEntityLoader = libxml_disable_entity_loader(true);
-            xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
-            xml_set_object($parser, $this);
-            if (!xml_set_element_handler($parser, 'startHandler', 'endHandler')) {
-                echo 'Bad xml handler setting';
-            }
-            if (!xml_set_character_data_handler($parser, 'collectDataHandler')) {
-                echo 'Bad xml handler setting';
-            }
-            if (!xml_set_default_handler($parser, 'defaultHandler')) {
-                echo 'Bad xml handler setting';
-            }
-            if (!xml_parse($parser, ('<?xml version="1.0" encoding="' . $this->parserCharset . '"?><spellchecker> ' . preg_replace(('/&nbsp;/' . ($this->parserCharset == 'utf-8' ? 'u' : '')), ' ', $content) . ' </spellchecker>'))) {
-                echo 'Bad parsing';
-            }
-            if (xml_get_error_code($parser)) {
-                throw new \UnexpectedValueException('Line ' . xml_get_current_line_number($parser) . ': ' . xml_error_string(xml_get_error_code($parser)), 1294585788);
-            }
-            libxml_disable_entity_loader($previousValueOfEntityLoader);
-            xml_parser_free($parser);
-            if ($this->pspell_is_available && !$this->forceCommandMode) {
-                pspell_clear_session($this->pspell_link);
-            }
-            $this->result .= 'var suggestedWords = {' . $this->suggestedWords . '};
-var dictionaries = "' . $dictionaryList . '";
-var selectedDictionary = "' . $this->dictionary . '";
-';
-            // Calculating parsing and spell checkting time
-            $time = number_format(microtime(true) - $time_start, 2, ',', ' ');
-            // Insert spellcheck info
-            $this->result .= 'var spellcheckInfo = { "Total words":"' . $this->wordCount . '","Misspelled words":"' . count($this->misspelled) . '","Total suggestions":"' . $this->suggestionCount . '","Total words suggested":"' . $this->suggestedWordCount . '","Spelling checked in":"' . $time . '" };
-// -->
-/*]]>*/
-</script>
-</head>
-';
-            $this->result .= '<body onload="callerWindow.RTEarea[' . GeneralUtility::quoteJSvalue(GeneralUtility::_POST('editorId')) . '].editor.getPlugin(\'SpellChecker\').spellCheckComplete();">';
-            $this->result .= preg_replace('/' . preg_quote('<?xml') . '.*' . preg_quote('?>') . '[' . preg_quote((LF . CR . chr(32))) . ']*/' . ($this->parserCharset == 'utf-8' ? 'u' : ''), '', $this->text);
-            // Closing
-            $this->result .= '
-</body></html>';
-            // Outputting
-            $response = $response->withHeader('Content-Type', 'text/html; charset=' . strtoupper($this->parserCharset));
-            $response->getBody()->write($this->result);
-            return $response;
-        }
-    }
-
-    /**
-     * Sets the path to the main dictionary
-     *
-     * @return string path to the main dictionary
-     */
-    protected function setMainDictionaryPath()
-    {
-        $this->mainDictionaryPath = '';
-        $aspellCommand = $this->AspellDirectory . ' config dict-dir';
-        $aspellResult = shell_exec($aspellCommand);
-        if ($aspellResult) {
-            $this->mainDictionaryPath = trim($aspellResult);
-        }
-        if (!$aspellResult || !$this->mainDictionaryPath) {
-            GeneralUtility::sysLog('SpellChecker main dictionary path retrieval error: ' . $aspellCommand, $this->extKey, GeneralUtility::SYSLOG_SEVERITY_ERROR);
-        }
-        return $this->mainDictionaryPath;
-    }
-
-    /**
-     * Gets the character set the main dictionary
-     *
-     * @return string character set the main dictionary
-     */
-    protected function getMainDictionaryCharacterSet()
-    {
-        $characterSet = '';
-        if ($this->mainDictionaryPath) {
-            // Keep only the first part of the dictionary name
-            $mainDictionary = preg_split('/[-_]/', $this->dictionary, 2);
-            // Read the options of the dictionary
-            $dictionaryFileName = $this->mainDictionaryPath . '/' . $mainDictionary[0] . '.dat';
-            $dictionaryHandle = fopen($dictionaryFileName, 'rb');
-            if (!$dictionaryHandle) {
-                GeneralUtility::sysLog('SpellChecker main dictionary open error: ' . $dictionaryFileName, $this->extKey, GeneralUtility::SYSLOG_SEVERITY_ERROR);
-            } else {
-                $dictionaryContent = fread($dictionaryHandle, 500);
-                if ($dictionaryContent === false) {
-                    GeneralUtility::sysLog('SpellChecker main dictionary read error: ' . $dictionaryFileName, $this->extKey, GeneralUtility::SYSLOG_SEVERITY_ERROR);
-                } else {
-                    fclose($dictionaryHandle);
-                    // Get the line that contains the character set option
-                    $dictionaryContent = preg_split('/charset\s*/', $dictionaryContent, 2);
-                    if ($dictionaryContent[1]) {
-                        // Isolate the character set
-                        $dictionaryContent = GeneralUtility::trimExplode(LF, $dictionaryContent[1]);
-                        // Fix Aspell character set oddity (i.e. iso8859-1)
-                        $characterSet = str_replace(
-                            ['iso', '--'],
-                            ['iso-', '-'],
-                            $dictionaryContent[0]
-                        );
-                    }
-                    if (!$characterSet) {
-                        GeneralUtility::sysLog('SpellChecker main dictionary character set retrieval error: ' . $dictionaryContent[1], $this->extKey, GeneralUtility::SYSLOG_SEVERITY_ERROR);
-                    }
-                }
-            }
-        }
-        return $characterSet;
-    }
-
-    /**
-     * Sets the path to the personal dictionary
-     *
-     * @return string path to the personal dictionary
-     */
-    protected function setPersonalDictionaryPath()
-    {
-        $this->personalDictionaryPath = '';
-        if (GeneralUtility::_POST('enablePersonalDicts') === 'true' && TYPO3_MODE === 'BE' && is_object($GLOBALS['BE_USER'])) {
-            if ($GLOBALS['BE_USER']->user['uid']) {
-                $personalDictionaryFolderName = 'BE_' . $GLOBALS['BE_USER']->user['uid'];
-                // Check for pre-FAL personal dictionary folder
-                try {
-                    $personalDictionaryFolder = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance()->getFolderObjectFromCombinedIdentifier(PATH_site . $this->uploadFolder . $personalDictionaryFolderName);
-                } catch (\Exception $e) {
-                    $personalDictionaryFolder = false;
-                }
-                // The personal dictionary folder is created in the user's default upload folder and named BE_(uid)_personaldictionary
-                if (!$personalDictionaryFolder) {
-                    $personalDictionaryFolderName .= '_personaldictionary';
-                    $backendUserDefaultFolder = $GLOBALS['BE_USER']->getDefaultUploadFolder();
-                    if ($backendUserDefaultFolder->hasFolder($personalDictionaryFolderName)) {
-                        $personalDictionaryFolder = $backendUserDefaultFolder->getSubfolder($personalDictionaryFolderName);
-                    } else {
-                        $personalDictionaryFolder = $backendUserDefaultFolder->createFolder($personalDictionaryFolderName);
-                    }
-                }
-                $this->personalDictionaryPath = PATH_site . rtrim($personalDictionaryFolder->getPublicUrl(), '/');
-            }
-        }
-        return $this->personalDictionaryPath;
-    }
-
-    /**
-     * Ensures that the personal dictionary is utf-8 encoded
-     */
-    protected function fixPersonalDictionaryCharacterSet()
-    {
-        if ($this->personalDictionaryPath) {
-            // Fix the options of the personl word list and of the replacement pairs files
-            // Aspell creates such files only for the main dictionary
-            $fileNames = [];
-            $mainDictionary = preg_split('/[-_]/', $this->dictionary, 2);
-            $fileNames[0] = $this->personalDictionaryPath . '/' . '.aspell.' . $mainDictionary[0] . '.pws';
-            $fileNames[1] = $this->personalDictionaryPath . '/' . '.aspell.' . $mainDictionary[0] . '.prepl';
-            foreach ($fileNames as $fileName) {
-                if (file_exists($fileName)) {
-                    $fileContent = file_get_contents($fileName);
-                    if ($fileContent === false) {
-                        GeneralUtility::sysLog('SpellChecker personal word list read error: ' . $fileName, $this->extKey, GeneralUtility::SYSLOG_SEVERITY_ERROR);
-                    } else {
-                        $fileContent = explode(LF, $fileContent);
-                        if (strpos($fileContent[0], 'utf-8') === false) {
-                            $fileContent[0] .= ' utf-8';
-                            $fileContent = implode(LF, $fileContent);
-                            $result = file_put_contents($fileName, $fileContent);
-                            if ($result === false) {
-                                GeneralUtility::sysLog('SpellChecker personal word list write error: ' . $fileName, $this->extKey, GeneralUtility::SYSLOG_SEVERITY_ERROR);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Handler for the opening of a tag
-     */
-    public function startHandler($xml_parser, $tag, $attributes)
-    {
-        if ((string)$this->xmlCharacterData !== '') {
-            $this->spellCheckHandler($xml_parser, $this->xmlCharacterData);
-            $this->xmlCharacterData = '';
-        }
-        switch ($tag) {
-            case 'spellchecker':
-                break;
-            case 'br':
-
-            case 'BR':
-
-            case 'img':
-
-            case 'IMG':
-
-            case 'hr':
-
-            case 'HR':
-
-            case 'area':
-
-            case 'AREA':
-                $this->text .= '<' . mb_strtolower($tag, $this->parserCharset) . ' ';
-                foreach ($attributes as $key => $val) {
-                    $this->text .= $key . '="' . $val . '" ';
-                }
-                $this->text .= ' />';
-                break;
-            default:
-                $this->text .= '<' . mb_strtolower($tag, $this->parserCharset) . ' ';
-                foreach ($attributes as $key => $val) {
-                    $this->text .= $key . '="' . $val . '" ';
-                }
-                $this->text .= '>';
-        }
-    }
-
-    /**
-     * Handler for the closing of a tag
-     */
-    public function endHandler($xml_parser, $tag)
-    {
-        if ((string)$this->xmlCharacterData !== '') {
-            $this->spellCheckHandler($xml_parser, $this->xmlCharacterData);
-            $this->xmlCharacterData = '';
-        }
-        switch ($tag) {
-            case 'spellchecker':
-
-            case 'br':
-
-            case 'BR':
-
-            case 'img':
-
-            case 'IMG':
-
-            case 'hr':
-
-            case 'HR':
-
-            case 'input':
-
-            case 'INPUT':
-
-            case 'area':
-
-            case 'AREA':
-                break;
-            default:
-                $this->text .= '</' . $tag . '>';
-        }
-    }
-
-    /**
-     * Handler for the content of a tag
-     */
-    public function spellCheckHandler($xml_parser, $string)
-    {
-        $incurrent = [];
-        $stringText = $string;
-        $words = preg_split($this->parserCharset == 'utf-8' ? '/\\P{L}+/u' : '/\\W+/', $stringText);
-        foreach ($words as $word) {
-            $word = preg_replace('/ /' . ($this->parserCharset == 'utf-8' ? 'u' : ''), '', $word);
-            if ($word && !is_numeric($word)) {
-                if ($this->pspell_is_available && !$this->forceCommandMode) {
-                    if (!pspell_check($this->pspell_link, $word)) {
-                        if (!in_array($word, $this->misspelled)) {
-                            if (count($this->misspelled) != 0) {
-                                $this->suggestedWords .= ',';
-                            }
-                            $suggest = pspell_suggest($this->pspell_link, $word);
-                            if (count($suggest) != 0) {
-                                $this->suggestionCount++;
-                                $this->suggestedWordCount += count($suggest);
-                            }
-                            $this->suggestedWords .= '"' . $word . '":"' . implode(',', $suggest) . '"';
-                            $this->misspelled[] = $word;
-                            unset($suggest);
-                        }
-                        if (!in_array($word, $incurrent)) {
-                            $stringText = preg_replace('/\\b' . $word . '\\b/' . ($this->parserCharset == 'utf-8' ? 'u' : ''), '<span class="htmlarea-spellcheck-error">' . $word . '</span>', $stringText);
-                            $incurrent[] = $word;
-                        }
-                    }
-                } else {
-                    $tmpFileName = GeneralUtility::tempnam($this->filePrefix);
-                    if (!($filehandle = fopen($tmpFileName, 'wb'))) {
-                        echo 'SpellChecker tempfile open error';
-                    }
-                    if (!fwrite($filehandle, $word)) {
-                        echo 'SpellChecker tempfile write error';
-                    }
-                    if (!fclose($filehandle)) {
-                        echo 'SpellChecker tempfile close error';
-                    }
-                    $catCommand = TYPO3_OS === 'WIN' ? 'type' : 'cat';
-                    $AspellCommand = $catCommand . ' ' . escapeshellarg($tmpFileName) . ' | '
-                        . $this->AspellDirectory
-                        . ' -a check'
-                        . ' --mode=none'
-                        . ' --sug-mode=' . escapeshellarg($this->pspellMode)
-                        . ($this->personalDictionaryPath ? ' --home-dir=' . escapeshellarg($this->personalDictionaryPath) : '')
-                        . ' --lang=' . escapeshellarg($this->dictionary)
-                        . ' --encoding=' . escapeshellarg($this->aspellEncoding)
-                        . ' 2>&1';
-                    $AspellAnswer = shell_exec($AspellCommand);
-                    $AspellResultLines = GeneralUtility::trimExplode(LF, $AspellAnswer, true);
-                    if (substr($AspellResultLines[0], 0, 6) === 'Error:') {
-                        echo '{' . $AspellAnswer . '}';
-                    }
-                    GeneralUtility::unlink_tempfile($tmpFileName);
-                    if ($AspellResultLines['1'][0] !== '*') {
-                        if (!in_array($word, $this->misspelled)) {
-                            if (count($this->misspelled) != 0) {
-                                $this->suggestedWords .= ',';
-                            }
-                            $suggest = [];
-                            $suggestions = [];
-                            if ($AspellResultLines['1'][0] === '&') {
-                                $suggestions = GeneralUtility::trimExplode(':', $AspellResultLines['1'], true);
-                                $suggest = GeneralUtility::trimExplode(',', $suggestions['1'], true);
-                            }
-                            if (count($suggest) != 0) {
-                                $this->suggestionCount++;
-                                $this->suggestedWordCount += count($suggest);
-                            }
-                            $this->suggestedWords .= '"' . $word . '":"' . implode(',', $suggest) . '"';
-                            $this->misspelled[] = $word;
-                            unset($suggest);
-                            unset($suggestions);
-                        }
-                        if (!in_array($word, $incurrent)) {
-                            $stringText = preg_replace('/\\b' . $word . '\\b/' . ($this->parserCharset === 'utf-8' ? 'u' : ''), '<span class="htmlarea-spellcheck-error">' . $word . '</span>', $stringText);
-                            $incurrent[] = $word;
-                        }
-                    }
-                    unset($AspellResultLines);
-                }
-                $this->wordCount++;
-            }
-        }
-        $this->text .= $stringText;
-        unset($incurrent);
-    }
-
-    /**
-     * Handler for collecting data within a tag
-     */
-    public function collectDataHandler($xml_parser, $string)
-    {
-        $this->xmlCharacterData .= $string;
-    }
-
-    /**
-     * Default handler for the xml parser
-     */
-    public function defaultHandler($xml_parser, $string)
-    {
-        $this->text .= $string;
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Controller/UserElementsController.php b/typo3/sysext/rtehtmlarea/Classes/Controller/UserElementsController.php
deleted file mode 100644 (file)
index 349212f..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Controller;
-
-/*
- * 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\Core\Configuration\Richtext;
-use TYPO3\CMS\Core\Utility\ArrayUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * User defined content for htmlArea RTE
- */
-class UserElementsController
-{
-    /**
-     * @var string
-     */
-    public $content;
-
-    /**
-     * @var array
-     */
-    public $modData;
-
-    /**
-     * @var string
-     */
-    public $siteUrl;
-
-    /**
-     * document template object
-     *
-     * @var \TYPO3\CMS\Backend\Template\DocumentTemplate
-     */
-    public $doc;
-
-    /**
-     * @var string
-     */
-    public $editorNo;
-
-    /**
-     * Initialize language files
-     */
-    public function __construct()
-    {
-        $GLOBALS['LANG']->includeLLFile('EXT:rtehtmlarea/Resources/Private/Language/locallang_userelementscontroller.xlf');
-        $GLOBALS['LANG']->includeLLFile('EXT:rtehtmlarea/Resources/Private/Language/locallang_dialogs.xlf');
-
-        $this->init();
-    }
-
-    /**
-     * Initializes necessary parameters before calling the actual main action.
-     */
-    public function init()
-    {
-        $this->editorNo = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('editorNo');
-        $this->siteUrl = \TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_SITE_URL');
-        $this->doc = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Template\DocumentTemplate::class);
-        $this->doc->bodyTagAdditions = 'onload="Init();"';
-        $this->doc->form = '
-       <form action="" id="process" name="process" method="post">
-               <input type="hidden" name="processContent" value="" />
-               <input type="hidden" name="returnUrl" value="' . htmlspecialchars(\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('REQUEST_URI')) . '" />
-               ';
-        $JScode = '
-                       var callerWindow;
-                       if (typeof top.TYPO3.Backend !== "undefined" && typeof top.TYPO3.Backend.ContentContainer.get() !== "undefined") {
-                               callerWindow = top.TYPO3.Backend.ContentContainer.get();
-                       } else {
-                               callerWindow = window.parent;
-                       }
-                       var plugin = callerWindow.RTEarea["' . $this->editorNo . '"].editor.getPlugin("UserElements");
-                       var HTMLArea = callerWindow.HTMLArea;
-                       var editor = plugin.editor;
-
-                       function Init() {
-                       };
-                       function insertHTML(content,noHide) {
-                               plugin.restoreSelection();
-                               editor.getSelection().insertHtml(content);
-                               if(!noHide) plugin.close();
-                       };
-                       function wrapHTML(wrap1,wrap2,noHide) {
-                               plugin.restoreSelection();
-                               if(!editor.getSelection().isEmpty()) {
-                                       editor.getSelection().surroundHtml(wrap1,wrap2);
-                               } else {
-                                       alert(' . GeneralUtility::quoteJSvalue($GLOBALS['LANG']->getLL('noTextSelection')) . ');
-                               }
-                               if(!noHide) plugin.close();
-                       };
-                       function processSelection(script) {
-                               plugin.restoreSelection();
-                               document.process.action = script;
-                               document.process.processContent.value = editor.getSelection().getHtml();
-                               document.process.submit();
-                       };
-                       function jumpToUrl(URL) {
-                               var RTEtsConfigParams = "&RTEtsConfigParams=' . rawurlencode(\TYPO3\CMS\Core\Utility\GeneralUtility::_GP('RTEtsConfigParams')) . '";
-                               var editorNo = "&editorNo=' . rawurlencode($this->editorNo) . '";
-                               theLocation = URL+RTEtsConfigParams+editorNo;
-                               window.location.href = theLocation;
-                       }
-               ';
-
-        // unset the default jumpToUrl() function
-        unset($this->doc->JScodeArray['jumpToUrl']);
-
-        $this->doc->JScode = GeneralUtility::wrapJS($JScode);
-        $this->modData = $GLOBALS['BE_USER']->getModuleData('user.php', 'ses');
-        if (\TYPO3\CMS\Core\Utility\GeneralUtility::_GP('OC_key')) {
-            $parts = explode('|', \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('OC_key'));
-            $this->modData['openKeys'][$parts[1]] = $parts[0] === 'O' ? 1 : 0;
-            $GLOBALS['BE_USER']->pushModuleData('user.php', $this->modData);
-        }
-    }
-
-    /**
-     * Injects the request object for the current request or subrequest
-     * As this controller goes only through the main_user() method, it is rather simple for now
-     *
-     * @param ServerRequestInterface $request the current request
-     * @param ResponseInterface $response the prepared response object
-     * @return ResponseInterface the response with the content
-     */
-    public function mainAction(ServerRequestInterface $request, ResponseInterface $response)
-    {
-        $content = $this->main_user($this->modData['openKeys']);
-        $response->getBody()->write($content);
-        return $response;
-    }
-
-    /********************************
-     *
-     * Other functions
-     *
-     *********************************/
-    /**
-     * @param array $imgInfo
-     * @param int $maxW
-     * @param int $maxH
-     * @return array
-     */
-    public function calcWH($imgInfo, $maxW = 380, $maxH = 500)
-    {
-        $IW = $imgInfo[0];
-        $IH = $imgInfo[1];
-        if ($IW > $maxW) {
-            $IH = ceil($IH / $IW * $maxW);
-            $IW = $maxW;
-        }
-        if ($IH > $maxH) {
-            $IW = ceil($IW / $IH * $maxH);
-            $IH = $maxH;
-        }
-        $imgInfo[3] = 'width="' . $IW . '" height="' . $IH . '"';
-        return $imgInfo;
-    }
-
-    /**
-     * Rich Text Editor (RTE) user element selector
-     *
-     * @param array $openKeys
-     * @return string
-     */
-    public function main_user($openKeys)
-    {
-        // Starting content:
-        $content = $this->doc->startPage(htmlspecialchars($GLOBALS['LANG']->getLL('Insert Custom Element')));
-
-        // @todo: This needs refactoring to enable sane config in flex form, either transfer parts of 'config', or use data providers
-        $RTEtsConfigParts = explode(':', GeneralUtility::_GP('RTEtsConfigParams'));
-        $table = $RTEtsConfigParts[0];
-        $field = $RTEtsConfigParts[2];
-        $recordType = $RTEtsConfigParts[3];
-        $tcaConfigOfField = $GLOBALS['TCA'][$table][$field]['config'] ?? [];
-        $columnsOverridesConfigOfField = $GLOBALS['TCA'][$table]['types'][$recordType]['columnsOverrides'][$field]['config'] ?? [];
-        if (!empty($columnsOverridesConfigOfField)) {
-            ArrayUtility::mergeRecursiveWithOverrule($tcaConfigOfField, $columnsOverridesConfigOfField);
-        }
-        $richtextConfigurationProvider = GeneralUtility::makeInstance(Richtext::class);
-        $richtextConfiguration = $richtextConfigurationProvider->getConfiguration(
-            $RTEtsConfigParts[0],
-            $RTEtsConfigParts[2],
-            $RTEtsConfigParts[3],
-            $RTEtsConfigParts[4],
-            $tcaConfigOfField
-        );
-        $thisConfig = $richtextConfiguration;
-
-        if (is_array($thisConfig['userElements.'])) {
-            $categories = [];
-            foreach ($thisConfig['userElements.'] as $k => $value) {
-                $ki = (int)$k;
-                $v = $thisConfig['userElements.'][$ki . '.'];
-                if (substr($k, -1) === '.' && is_array($v)) {
-                    $subcats = [];
-                    $openK = $ki;
-                    if ($openKeys[$openK]) {
-                        $mArray = '';
-                        if ($v['load'] === 'images_from_folder') {
-                            $mArray = [];
-                            if ($v['path'] && @is_dir((PATH_site . $v['path']))) {
-                                $files = \TYPO3\CMS\Core\Utility\GeneralUtility::getFilesInDir(PATH_site . $v['path'], 'gif,jpg,jpeg,png', 0, '');
-                                if (is_array($files)) {
-                                    $c = 0;
-                                    foreach ($files as $filename) {
-                                        $iInfo = @getimagesize((PATH_site . $v['path'] . $filename));
-                                        $iInfo = $this->calcWH($iInfo, 50, 100);
-                                        $ks = (string)(100 + $c);
-                                        $mArray[$ks] = $filename;
-                                        $mArray[$ks . '.'] = [
-                                            'content' => '<img src="' . $this->siteUrl . $v['path'] . $filename . '" />',
-                                            '_icon' => '<img src="' . $this->siteUrl . $v['path'] . $filename . '" ' . $iInfo[3] . ' />',
-                                            'description' => $GLOBALS['LANG']->getLL('filesize') . ': ' . str_replace('&nbsp;', ' ', \TYPO3\CMS\Core\Utility\GeneralUtility::formatSize(@filesize((PATH_site . $v['path'] . $filename)))) . ', ' . htmlspecialchars($GLOBALS['LANG']->getLL('pixels')) . ': ' . $iInfo[0] . 'x' . $iInfo[1]
-                                        ];
-                                        $c++;
-                                    }
-                                }
-                            }
-                        }
-                        if (is_array($mArray)) {
-                            if ($v['merge']) {
-                                \TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($mArray, $v);
-                                $v = $mArray;
-                            } else {
-                                $v = $mArray;
-                            }
-                        }
-                        foreach ($v as $k2 => $dummyValue) {
-                            $k2i = (int)$k2;
-                            if (substr($k2, -1) === '.' && is_array($v[$k2i . '.'])) {
-                                $title = trim($v[$k2i]);
-                                if (!$title) {
-                                    $title = '[' . htmlspecialchars($GLOBALS['LANG']->getLL('noTitle')) . ']';
-                                } else {
-                                    $title = htmlspecialchars($GLOBALS['LANG']->sL($title));
-                                }
-                                $description = htmlspecialchars($GLOBALS['LANG']->sL($v[$k2i . '.']['description'])) . '<br />';
-                                if (!$v[$k2i . '.']['dontInsertSiteUrl']) {
-                                    $v[$k2i . '.']['content'] = str_replace('###_URL###', $this->siteUrl, $v[$k2i . '.']['content']);
-                                }
-                                $logo = $v[$k2i . '.']['_icon'] ?: '';
-                                $onClickEvent = '';
-                                switch ((string)$v[$k2i . '.']['mode']) {
-                                    case 'wrap':
-                                        $wrap = explode('|', $v[$k2i . '.']['content']);
-                                        $onClickEvent = 'wrapHTML(' . GeneralUtility::quoteJSvalue($wrap[0]) . ',' . GeneralUtility::quoteJSvalue($wrap[1]) . ',false);';
-                                        break;
-                                    case 'processor':
-                                        $script = trim($v[$k2i . '.']['submitToScript']);
-                                        if (substr($script, 0, 4) !== 'http') {
-                                            $script = $this->siteUrl . $script;
-                                        }
-                                        if ($script) {
-                                            $onClickEvent = 'processSelection(' . GeneralUtility::quoteJSvalue($script) . ');';
-                                        }
-                                        break;
-                                    case 'insert':
-
-                                    default:
-                                        $onClickEvent = 'insertHTML(' . GeneralUtility::quoteJSvalue($v[$k2i . '.']['content']) . ');';
-                                }
-                                $A = ['<a href="#" onClick="' . $onClickEvent . 'return false;">', '</a>'];
-                                $subcats[$k2i] = '<tr>
-                                                                       <td></td>
-                                                                       <td>' . $A[0] . $logo . $A[1] . '</td>
-                                                                       <td>' . $A[0] . '<strong>' . $title . '</strong><br />' . $description . $A[1] . '</td>
-                                                               </tr>';
-                            }
-                        }
-                        ksort($subcats);
-                    }
-                    $categories[$ki] = implode('', $subcats);
-                }
-            }
-            ksort($categories);
-            // Render menu of the items:
-            $lines = [];
-            foreach ($categories as $k => $v) {
-                $title = trim($thisConfig['userElements.'][$k]);
-                $openK = $k;
-                if (!$title) {
-                    $title = '[' . htmlspecialchars($GLOBALS['LANG']->getLL('noTitle')) . ']';
-                } else {
-                    $title = htmlspecialchars($GLOBALS['LANG']->sL($title));
-                }
-
-                $uriBuilder = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Routing\UriBuilder::class);
-                $url = (string)$uriBuilder->buildUriFromRoute('rtehtmlarea_wizard_user_elements', ['OC_key' => ($openKeys[$openK] ? 'C|' : 'O|') . $openK]);
-
-                $lines[] = '<tr><td colspan="3"><a href="#" title="' . htmlspecialchars($GLOBALS['LANG']->getLL('expand')) . '" onClick="jumpToUrl(' . GeneralUtility::quoteJSvalue($url) . ');return false;"><i class="fa fa-caret-square-o-' . ($openKeys[$openK] ? 'left' : 'right') . '" title="' . htmlspecialchars($GLOBALS['LANG']->getLL('expand')) . '"></i><strong>' . $title . '</strong></a></td></tr>';
-                $lines[] = $v;
-            }
-            $content .= '<table class="table table-striped table-hover">' . implode('', $lines) . '</table>';
-        }
-        $content .= $this->doc->endPage();
-        return $content;
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Controller/Wizard/RteController.php b/typo3/sysext/rtehtmlarea/Classes/Controller/Wizard/RteController.php
deleted file mode 100644 (file)
index 13e7fa5..0000000
+++ /dev/null
@@ -1,357 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\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\Controller\Wizard\AbstractWizardController;
-use TYPO3\CMS\Backend\Form\FormDataCompiler;
-use TYPO3\CMS\Backend\Form\FormDataGroup\TcaDatabaseRecord;
-use TYPO3\CMS\Backend\Form\FormResultCompiler;
-use TYPO3\CMS\Backend\Form\NodeFactory;
-use TYPO3\CMS\Backend\Template\Components\ButtonBar;
-use TYPO3\CMS\Backend\Utility\BackendUtility;
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Imaging\Icon;
-use TYPO3\CMS\Core\Imaging\IconFactory;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Script class for rendering the full screen RTE display
- */
-class RteController extends AbstractWizardController
-{
-    /**
-     * Content accumulation for the module.
-     *
-     * @var string
-     */
-    public $content;
-
-    /**
-     * Wizard parameters, coming from FormEngine linking to the wizard.
-     *
-     * @var array
-     */
-    public $P;
-
-    /**
-     * If set, launch a new window with the current records pid.
-     *
-     * @var string
-     */
-    public $popView;
-
-    /**
-     * Set to the URL of this script including variables which is needed to re-display the form. See main()
-     *
-     * @var string
-     */
-    public $R_URI;
-
-    /**
-     * Module configuration
-     *
-     * @var array
-     */
-    public $MCONF = [];
-
-    /**
-     * Constructor
-     */
-    public function __construct()
-    {
-        parent::__construct();
-        $this->iconFactory = GeneralUtility::makeInstance(IconFactory::class);
-        $this->getLanguageService()->includeLLFile('EXT:lang/Resources/Private/Language/locallang_wizards.xlf');
-        $GLOBALS['SOBE'] = $this;
-
-        $this->init();
-    }
-
-    /**
-     * Initialization of the class
-     */
-    protected function init()
-    {
-        // Setting GPvars:
-        $this->P = GeneralUtility::_GP('P');
-        $this->popView = GeneralUtility::_GP('popView');
-        $this->R_URI = GeneralUtility::linkThisScript(['popView' => '']);
-        // "Module name":
-        $this->MCONF['name'] = 'wizard_rte';
-        // Need to NOT have the page wrapped in DIV since if we do that we destroy
-        // the feature that the RTE spans the whole height of the page!!!
-    }
-
-    /**
-     * 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();
-
-        $response->getBody()->write($this->moduleTemplate->renderContent());
-        return $response;
-    }
-
-    /**
-     * Main function, rendering the document with the iFrame with the RTE in.
-     */
-    public function main()
-    {
-        $this->content .= '<form action="'
-            . htmlspecialchars(BackendUtility::getModuleUrl('tce_db'))
-            . '" method="post" enctype="multipart/form-data" id="RteController" name="editform" '
-            . ' onsubmit="return TBE_EDITOR.checkSubmit(1);">';
-        // Translate id to the workspace version:
-        if ($versionedRecord = BackendUtility::getWorkspaceVersionOfRecord(
-            $this->getBackendUserAuthentication()->workspace,
-            $this->P['table'],
-            $this->P['uid'],
-            'uid'
-        )) {
-            $this->P['uid'] = $versionedRecord['uid'];
-        }
-        // If all parameters are available:
-        if ($this->P['table']
-            && $this->P['field']
-            && $this->P['uid']
-            && $this->checkEditAccess($this->P['table'], $this->P['uid'])) {
-            /** @var TcaDatabaseRecord $formDataGroup */
-            $formDataGroup = GeneralUtility::makeInstance(TcaDatabaseRecord::class);
-            /** @var FormDataCompiler $formDataCompiler */
-            $formDataCompiler = GeneralUtility::makeInstance(FormDataCompiler::class, $formDataGroup);
-            /** @var NodeFactory $nodeFactory */
-            $nodeFactory = GeneralUtility::makeInstance(NodeFactory::class);
-
-            $formDataCompilerInput = [
-                'vanillaUid' => (int)$this->P['uid'],
-                'tableName' => $this->P['table'],
-                'command' => 'edit',
-                'disabledWizards' => true,
-            ];
-
-            $formData = $formDataCompiler->compile($formDataCompilerInput);
-
-            $formData['fieldListToRender'] = $this->P['field'];
-            $formData['renderType'] = 'outerWrapContainer';
-            $formResult = $nodeFactory->create($formData)->render();
-
-            /** @var FormResultCompiler $formResultCompiler */
-            $formResultCompiler = GeneralUtility::makeInstance(FormResultCompiler::class);
-            $formResultCompiler->mergeResult($formResult);
-
-            // override the default jumpToUrl
-            $this->moduleTemplate->addJavaScriptCode(
-                'RteWizardInlineCode',
-                'function jumpToUrl(URL,formEl) {
-                                       if (document.editform) {
-                                               if (!TBE_EDITOR.isFormChanged()) {
-                                                       window.location.href = URL;
-                                               } else if (formEl) {
-                                                       if (formEl.type=="checkbox") formEl.checked = formEl.checked ? 0 : 1;
-                                               }
-                                       } else {
-                                               window.location.href = URL;
-                                       }
-                               }
-                       '
-            );
-
-            // Setting JavaScript of the pid value for viewing:
-            if ($this->popView) {
-                $this->moduleTemplate->addJavaScriptCode(
-                    'PopupViewInlineJS',
-                    BackendUtility::viewOnClick(
-                        $formData['databaseRow']['pid'],
-                        '',
-                        BackendUtility::BEgetRootLine($formData['databaseRow']['pid'])
-                    )
-                );
-            }
-
-            $pageTsConfigMerged = $formData['pageTsConfigMerged'];
-            if ((string)$pageTsConfigMerged['TCEFORM.'][$this->P['table'] . '.'][$this->P['field'] . '.']['RTEfullScreenWidth'] !== '') {
-                $width = (string)$pageTsConfigMerged['TCEFORM.'][$this->P['table'] . '.'][$this->P['field'] . '.']['RTEfullScreenWidth'];
-            } else {
-                $width = '100%';
-            }
-            // Get the form field and wrap it in the table with the buttons:
-            $formContent = $formResult['html'];
-            $formContent = '
-                               <table border="0" cellpadding="0" cellspacing="0" width="' . $width . '" id="typo3-rtewizard">
-                                       <tr>
-                                               <td width="' . $width . '" colspan="2" id="c-formContent">' . $formContent . '</td>
-                                               <td></td>
-                                       </tr>
-                               </table>';
-
-            // Adding hidden fields:
-            $formContent .= '<input type="hidden" name="redirect" value="' . htmlspecialchars($this->R_URI) . '" />
-                                               <input type="hidden" name="_serialNumber" value="' . md5(microtime()) . '" />';
-            // Finally, add the whole setup:
-            $this->content .= $formResultCompiler->addCssFiles()
-                . $formContent
-                . $formResultCompiler->printNeededJSFunctions();
-        } else {
-            // ERROR:
-            $this->content .= '<h2>' . htmlspecialchars($this->getLanguageService()->getLL('forms_title')) . '</h2>'
-                . '<div><span class="text-danger">'
-                . htmlspecialchars($this->getLanguageService()->getLL('table_noData'))
-                . '</span></div>';
-        }
-        // Setting up the buttons and markers for docHeader
-        $this->getButtons();
-        // Build the <body> for the module
-
-        $this->content .= '</form>';
-        $this->moduleTemplate->setContent($this->content);
-    }
-
-    /**
-     * Create the panel of buttons for submitting the form or otherwise perform operations.
-     *
-     * @return array All available buttons as an assoc. array
-     */
-    protected function getButtons()
-    {
-        $buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
-        if ($this->P['table']
-            && $this->P['field']
-            && $this->P['uid']
-            && $this->checkEditAccess($this->P['table'], $this->P['uid'])) {
-            $closeUrl = GeneralUtility::sanitizeLocalUrl($this->P['returnUrl']);
-            // Getting settings for the undo button:
-            $undoButton = false;
-
-            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                ->getQueryBuilderForTable('sys_history');
-
-            $undoButtonR = $queryBuilder
-                ->select('tstamp')
-                ->from('sys_history')
-                ->where(
-                    $queryBuilder->expr()->eq(
-                        'tablename',
-                        $queryBuilder->createNamedParameter($this->P['table'], \PDO::PARAM_STR)
-                    ),
-                    $queryBuilder->expr()->eq(
-                        'recuid',
-                        $queryBuilder->createNamedParameter($this->P['uid'], \PDO::PARAM_INT)
-                    )
-                )
-                ->orderBy('tstamp', 'desc')
-                ->setMaxResults(1)
-                ->execute()
-                ->fetchColumn();
-
-            if ($undoButtonR !== false) {
-                $undoButton = true;
-            }
-            // Close
-            $closeButton = $buttonBar->makeLinkButton()
-                ->setHref($closeUrl)
-                ->setTitle($this->getLanguageService()->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:rm.closeDoc'))
-                ->setIcon($this->moduleTemplate->getIconFactory()->getIcon('actions-close', Icon::SIZE_SMALL));
-            $buttonBar->addButton($closeButton, ButtonBar::BUTTON_POSITION_LEFT, 10);
-
-            // Save
-            $saveButton = $buttonBar->makeInputButton()
-                ->setName('_savedok_x')
-                ->setValue('1')
-                ->setForm('RteController')
-                ->setOnClick('TBE_EDITOR.checkAndDoSubmit(1); return false;')
-                ->setTitle($this->getLanguageService()->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:rm.saveDoc'))
-                ->setIcon($this->moduleTemplate->getIconFactory()->getIcon('actions-document-save', Icon::SIZE_SMALL));
-            // Save & View
-            $saveAndViewButton = $buttonBar->makeInputButton()
-                ->setName('_savedokview_x')
-                ->setValue('1')
-                ->setForm('RteController')
-                ->setOnClick('document.editform.redirect.value+= ' . GeneralUtility::quoteJSvalue('&popView=1') . '; '
-                    . ' TBE_EDITOR.checkAndDoSubmit(1); return false;')
-                ->setTitle($this->getLanguageService()->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:rm.saveDocShow'))
-                ->setIcon(
-                    $this->moduleTemplate->getIconFactory()->getIcon('actions-document-save-view', Icon::SIZE_SMALL)
-                );
-
-            // Save & Close
-            $saveAndCloseButton = $buttonBar->makeInputButton()
-                ->setName('_saveandclosedok_x')
-                ->setValue('1')
-                ->setForm('RteController')
-                ->setOnClick('document.editform.redirect.value=' . GeneralUtility::quoteJSvalue($closeUrl)
-                    . '; TBE_EDITOR.checkAndDoSubmit(1); return false;')
-                ->setTitle($this->getLanguageService()->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:rm.saveCloseDoc'))
-                ->setIcon($this->moduleTemplate->getIconFactory()->getIcon(
-                    'actions-document-save-close',
-                    Icon::SIZE_SMALL
-                ));
-
-            // Save SplitButton
-            $saveSplitButton = $buttonBar->makeSplitButton()
-                ->addItem($saveButton)
-                ->addItem($saveAndViewButton)
-                ->addItem($saveAndCloseButton);
-            $buttonBar->addButton($saveSplitButton, ButtonBar::BUTTON_POSITION_LEFT, 20);
-
-            // Undo/Revert:
-            if ($undoButton) {
-                $aOnClick = 'window.location.href=' .
-                    GeneralUtility::quoteJSvalue(
-                        BackendUtility::getModuleUrl(
-                            'record_history',
-                            [
-                                'element' => $this->P['table'] . ':' . $this->P['uid'],
-                                'revert' => 'field:' . $this->P['field'],
-                                'returnUrl' => $this->R_URI,
-                            ]
-                        )
-                    ) . '; return false;';
-
-                $undoText = $this->getLanguageService()->sL(
-                    'LLL:EXT:lang/Resources/Private/Language/locallang_wizards.xlf:rte_undoLastChange'
-                );
-                $lastChangeLabel = sprintf(
-                    $undoText,
-                    BackendUtility::calcAge(
-                        ($GLOBALS['EXEC_TIME'] - $undoButtonR['tstamp']),
-                        $this->getLanguageService()->sL(
-                            'LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.minutesHoursDaysYears'
-                        )
-                    )
-                );
-
-                $undoRevertButton = $buttonBar->makeLinkButton()
-                    ->setHref('#')
-                    ->setOnClick($aOnClick)
-                    ->setTitle($lastChangeLabel)
-                    ->setIcon($this->moduleTemplate->getIconFactory()->getIcon('actions-edit-undo', Icon::SIZE_SMALL));
-                $buttonBar->addButton($undoRevertButton, ButtonBar::BUTTON_POSITION_LEFT, 30);
-            }
-            // Shortcut
-            $shortButton = $buttonBar->makeShortcutButton()
-                ->setModuleName($this->MCONF['name'])
-                ->setGetVariables(['P']);
-            $buttonBar->addButton($shortButton);
-        }
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/Abbreviation.php b/typo3/sysext/rtehtmlarea/Classes/Extension/Abbreviation.php
deleted file mode 100644 (file)
index e227034..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Authentication\BackendUserAuthentication;
-use TYPO3\CMS\Core\Database\Connection;
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Database\QueryGenerator;
-use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * Abbreviation extension for htmlArea RTE
- */
-class Abbreviation extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'Abbreviation';
-
-    /**
-     * Comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'abbreviation';
-
-    /**
-     * Name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'abbreviation' => 'Abbreviation'
-    ];
-
-    /**
-     * Absolute number of acronyms
-     *
-     * @var int
-     */
-    protected $acronymIndex = 0;
-
-    /**
-     * Absolute number of abbreviations
-     *
-     * @var int
-     */
-    protected $abbreviationIndex = 0;
-
-    /**
-     * Returns TRUE if the plugin is available and correctly initialized
-     *
-     * @param array $configuration Configuration array given from calling object down to the single plugins
-     * @return bool TRUE if this plugin object should be made available in the current environment and is correctly initialized
-     */
-    public function main(array $configuration)
-    {
-        $enabled = parent::main($configuration);
-        // acronym button is deprecated as of TYPO3 CMS 7.0, use abbreviation instead
-        // Convert the acronym button configuration
-        if (isset($this->configuration['thisConfig']['buttons.']['acronym.']) && is_array($this->configuration['thisConfig']['buttons.']['acronym.'])) {
-            if (!isset($this->configuration['thisConfig']['buttons.']['abbreviation.']) || !is_array($this->configuration['thisConfig']['buttons.']['abbreviation.'])) {
-                $this->configuration['thisConfig']['buttons.']['abbreviation.'] = $this->configuration['thisConfig']['buttons.']['acronym.'];
-            }
-            unset($this->configuration['thisConfig']['buttons.']['acronym.']);
-        }
-        // Convert any other reference to acronym two levels down in Page TSconfig, except in processing options and removeFieldsets property
-        foreach ($this->configuration['thisConfig'] as $key => $config) {
-            if ($key !== 'proc.') {
-                if (is_array($config)) {
-                    foreach ($config as $subKey => $subConfig) {
-                        if (is_array($subConfig)) {
-                            foreach ($subConfig as $subSubKey => $subSubConfig) {
-                                if ($subSubKey !== 'removeFieldsets') {
-                                    $this->configuration['thisConfig'][$key][$subKey][$subSubKey] = str_replace('acronym', 'abbreviation', $subSubConfig);
-                                }
-                            }
-                        } else {
-                            if ($subKey !== 'removeFieldsets') {
-                                $this->configuration['thisConfig'][$key][$subKey] = str_replace('acronym', 'abbreviation', $subConfig);
-                            }
-                        }
-                    }
-                } else {
-                    if ($key !== 'removeFieldsets') {
-                        $this->configuration['thisConfig'][$key] = str_replace('acronym', 'abbreviation', $config);
-                    }
-                }
-            }
-        }
-        // Convert any reference to acronym in special configuration options
-        if (is_array($this->configuration['specConf']['richtext']['parameters'])) {
-            foreach ($this->configuration['specConf']['richtext']['parameters'] as $key => $config) {
-                $this->configuration['specConf']['richtext']['parameters'][$key] = str_replace('acronym', 'abbreviation', $config);
-            }
-        }
-        // Convert any reference to acronym in user TSconfig
-        if (is_object($GLOBALS['BE_USER']) && isset($GLOBALS['BE_USER']->userTS['options.']['RTEkeyList'])) {
-            $GLOBALS['BE_USER']->userTS['options.']['RTEkeyList'] = str_replace('acronym', 'abbreviation', $GLOBALS['BE_USER']->userTS['options.']['RTEkeyList']);
-        }
-        // Remove button if all fieldsets are removed
-        $removedFieldsets = GeneralUtility::trimExplode(',', $this->configuration['thisConfig']['buttons.']['abbreviation.']['removeFieldsets'], true);
-        return $enabled && ExtensionManagementUtility::isLoaded('static_info_tables') && count($removedFieldsets) < 4;
-    }
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins, in this case, JS configuration of block elements
-     */
-    public function buildJavascriptConfiguration()
-    {
-        $button = 'abbreviation';
-        $jsArray = [];
-        if (in_array($button, $this->toolbar)) {
-            if (!is_array($this->configuration['thisConfig']['buttons.']) || !is_array($this->configuration['thisConfig']['buttons.'][$button . '.'])) {
-                $jsArray[] = 'RTEarea[editornumber].buttons.' . $button . ' = new Object();';
-            }
-            $jsArray[] = 'RTEarea[editornumber].buttons.' . $button . '.abbreviationUrl = "' . $this->writeTemporaryFile('abbreviation_' . $this->configuration['contentLanguageUid'], 'js', $this->buildJSAbbreviationArray()) . '";';
-            $jsArray[] = 'RTEarea[editornumber].buttons.' . $button . '.noAcronym = ' . ($this->acronymIndex ? 'false' : 'true') . ';';
-            $jsArray[] = 'RTEarea[editornumber].buttons.' . $button . '.noAbbr =  ' . ($this->abbreviationIndex ? 'false' : 'true') . ';';
-        }
-        return implode(LF, $jsArray);
-    }
-
-    /**
-     * Return an abbreviation array for the Abbreviation plugin
-     *
-     * @return string abbreviation Javascript array
-     */
-    protected function buildJSAbbreviationArray()
-    {
-        $backendUser = $this->getBackendUserAuthentication();
-        $button = 'abbreviation';
-        $acronymArray = [];
-        $abbrArray = [];
-        $tableA = 'tx_rtehtmlarea_acronym';
-        $tableB = 'static_languages';
-
-        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getQueryBuilderForTable($tableA);
-
-        $queryBuilder->select('a.type', 'a.term', 'a.acronym', 'b.lg_iso_2', 'b.lg_country_iso_2');
-        $queryBuilder->from($tableA, 'a');
-        $queryBuilder->leftJoin(
-            'a',
-            $tableB,
-            'b',
-            $queryBuilder->expr()->eq('a.static_lang_isocode', $queryBuilder->quoteIdentifier('b.uid'))
-        );
-
-        $loadRecordsFromDatabase = true;
-        // Get all abbreviations on pages to which the user has access
-        $lockBeUserToDBmounts = isset($this->configuration['thisConfig']['buttons.'][$button . '.']['lockBeUserToDBmounts']) ? $this->configuration['thisConfig']['buttons.'][$button . '.']['lockBeUserToDBmounts'] : $GLOBALS['TYPO3_CONF_VARS']['BE']['lockBeUserToDBmounts'];
-        $savedGroupDataWebmounts = $backendUser->groupData['webmounts'];
-        if (!$backendUser->isAdmin() && $GLOBALS['TYPO3_CONF_VARS']['BE']['lockBeUserToDBmounts'] && $lockBeUserToDBmounts) {
-            // Temporarily setting alternative web browsing mounts
-            $altMountPoints = trim($backendUser->getTSConfigVal('options.pageTree.altElementBrowserMountPoints'));
-            if ($altMountPoints) {
-                $backendUser->groupData['webmounts'] = implode(',', array_unique(GeneralUtility::intExplode(',', $altMountPoints)));
-            }
-            $webMounts = $backendUser->returnWebmounts();
-            $perms_clause = $backendUser->getPagePermsClause(1);
-            $recursive = isset($this->configuration['thisConfig']['buttons.'][$button . '.']['recursive']) ? (int)$this->configuration['thisConfig']['buttons.'][$button . '.']['recursive'] : 0;
-            if (trim($this->configuration['thisConfig']['buttons.'][$button . '.']['pages'])) {
-                $pids = GeneralUtility::trimExplode(',', $this->configuration['thisConfig']['buttons.'][$button . '.']['pages'], true);
-                foreach ($pids as $key => $val) {
-                    if (!$backendUser->isInWebMount($val, $perms_clause)) {
-                        unset($pids[$key]);
-                    }
-                }
-            } else {
-                $pids = $webMounts;
-            }
-            // Restoring webmounts
-            $backendUser->groupData['webmounts'] = $savedGroupDataWebmounts;
-            $queryGenerator = GeneralUtility::makeInstance(QueryGenerator::class);
-            $pageTree = '';
-            $pageTreePrefix = '';
-            foreach ($pids as $key => $val) {
-                if ($pageTree) {
-                    $pageTreePrefix = ',';
-                }
-                $pageTree .= $pageTreePrefix . $queryGenerator->getTreeList($val, $recursive, ($begin = 0), $perms_clause);
-            }
-
-            if ($pageTree !== '') {
-                $queryBuilder->where(
-                    $queryBuilder->expr()->in(
-                        'a.pid',
-                        $queryBuilder->createNamedParameter($pageTree, Connection::PARAM_INT_ARRAY)
-                    )
-                );
-            } else {
-                // If page tree is empty the user does not have access to any pages / acronyms.
-                // This is why we do not try do read any records from the database.
-                $loadRecordsFromDatabase = false;
-            }
-        }
-
-        if ($loadRecordsFromDatabase) {
-            // Restrict to abbreviations applicable to the language of current content element
-            if ($this->configuration['contentLanguageUid'] > -1) {
-                $queryBuilder->andWhere(
-                    $queryBuilder->expr()->orX(
-                        $queryBuilder->expr()->eq(
-                            'a.sys_language_uid',
-                            $queryBuilder->createNamedParameter(
-                                $this->configuration['contentLanguageUid'],
-                                \PDO::PARAM_INT
-                            )
-                        ),
-                        $queryBuilder->expr()->eq(
-                            'a.sys_language_uid',
-                            $queryBuilder->createNamedParameter(-1, \PDO::PARAM_INT)
-                        )
-                    )
-                );
-            }
-            // Restrict to abbreviations in certain languages
-            if (is_array($this->configuration['thisConfig']['buttons.']) && is_array($this->configuration['thisConfig']['buttons.']['language.']) && isset($this->configuration['thisConfig']['buttons.']['language.']['restrictToItems'])) {
-                $languageList = GeneralUtility::trimExplode(',', strtoupper($this->configuration['thisConfig']['buttons.']['language.']['restrictToItems']));
-                $queryBuilder->andWhere(
-                    $queryBuilder->expr()->in(
-                        'b.lg_iso_2',
-                        $queryBuilder->createNamedParameter($languageList, Connection::PARAM_STR_ARRAY)
-                    )
-                );
-            }
-
-            $result = $queryBuilder->execute();
-            while ($abbreviationRow = $result->fetch()) {
-                $item = ['term' => $abbreviationRow['term'], 'abbr' => $abbreviationRow['acronym'], 'language' => strtolower($abbreviationRow['lg_iso_2']) . ($abbreviationRow['lg_country_iso_2'] ? '-' . $abbreviationRow['lg_country_iso_2'] : '')];
-                if ($abbreviationRow['type'] == 1) {
-                    $acronymArray[] = $item;
-                } elseif ($abbreviationRow['type'] == 2) {
-                    $abbrArray[] = $item;
-                }
-            }
-        }
-
-        $this->acronymIndex = count($acronymArray);
-        $this->abbreviationIndex = count($abbrArray);
-        return json_encode(['abbr' => $abbrArray, 'acronym' => $acronymArray]);
-    }
-
-    /**
-     * @return BackendUserAuthentication
-     */
-    protected function getBackendUserAuthentication()
-    {
-        return $GLOBALS['BE_USER'];
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/AboutEditor.php b/typo3/sysext/rtehtmlarea/Classes/Extension/AboutEditor.php
deleted file mode 100644 (file)
index 3ab4b86..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * About Editor plugin for htmlArea RTE
- */
-class AboutEditor extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'AboutEditor';
-
-    /**
-     * Comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'about';
-
-    /**
-     * Name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'about' => 'About'
-    ];
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins
-     */
-    public function buildJavascriptConfiguration()
-    {
-        return '';
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/BlockElements.php b/typo3/sysext/rtehtmlarea/Classes/Extension/BlockElements.php
deleted file mode 100644 (file)
index 29ad0f0..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * BlockElements extension for htmlArea RTE
- */
-class BlockElements extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'BlockElements';
-
-    /**
-     * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'formatblock, indent, outdent, blockquote, insertparagraphbefore, insertparagraphafter, left, center, right, justifyfull, orderedlist, unorderedlist, line';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'formatblock' => 'FormatBlock',
-        'indent' => 'Indent',
-        'outdent' => 'Outdent',
-        'blockquote' => 'Blockquote',
-        'insertparagraphbefore' => 'InsertParagraphBefore',
-        'insertparagraphafter' => 'InsertParagraphAfter',
-        'left' => 'JustifyLeft',
-        'center' => 'JustifyCenter',
-        'right' => 'JustifyRight',
-        'justifyfull' => 'JustifyFull',
-        'orderedlist' => 'InsertOrderedList',
-        'unorderedlist' => 'InsertUnorderedList',
-        'line' => 'InsertHorizontalRule'
-    ];
-
-    /**
-     * List of default block elements
-     *
-     * @var array
-     */
-    protected $defaultBlockElements = [
-        'none' => 'No block',
-        'p' => 'Paragraph',
-        'h1' => 'Heading 1',
-        'h2' => 'Heading 2',
-        'h3' => 'Heading 3',
-        'h4' => 'Heading 4',
-        'h5' => 'Heading 5',
-        'h6' => 'Heading 6',
-        'pre' => 'Preformatted',
-        'address' => 'Address',
-        'article' => 'Article',
-        'aside' => 'Aside',
-        'blockquote' => 'Long quotation',
-        'div' => 'Container',
-        'footer' => 'Footer',
-        'header' => 'Header',
-        'nav' => 'Navigation',
-        'section' => 'Section'
-    ];
-
-    /**
-     * Default order of block elements
-     *
-     * @var string
-     */
-    protected $defaultBlockElementsOrder = 'none, p, h1, h2, h3, h4, h5, h6, pre, address, article, aside, blockquote, div, footer, header, nav, section';
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins, in this case, JS configuration of block elements
-     */
-    public function buildJavascriptConfiguration()
-    {
-        $jsArray = [];
-        if (in_array('formatblock', $this->toolbar)) {
-            if (!is_array($this->configuration['thisConfig']['buttons.']) || !is_array($this->configuration['thisConfig']['buttons.']['formatblock.'])) {
-                $jsArray[] = 'RTEarea[editornumber].buttons.formatblock = new Object();';
-            }
-            // Default block elements
-            $hideItems = [];
-            $addItems = [];
-            $restrictTo = ['*'];
-            $blockElementsOrder = $this->defaultBlockElementsOrder;
-            $prefixLabelWithTag = false;
-            $postfixLabelWithTag = false;
-            // Processing PageTSConfig
-            if (is_array($this->configuration['thisConfig']['buttons.']) && is_array($this->configuration['thisConfig']['buttons.']['formatblock.'])) {
-                // Removing elements
-                if ($this->configuration['thisConfig']['buttons.']['formatblock.']['removeItems']) {
-                    $hideItems = GeneralUtility::trimExplode(',', $this->cleanList(strtolower($this->configuration['thisConfig']['buttons.']['formatblock.']['removeItems'])), true);
-                }
-                // Adding elements
-                if ($this->configuration['thisConfig']['buttons.']['formatblock.']['addItems']) {
-                    $addItems = GeneralUtility::trimExplode(',', $this->cleanList(strtolower($this->configuration['thisConfig']['buttons.']['formatblock.']['addItems'])), true);
-                }
-                // Restriction clause
-                if ($this->configuration['thisConfig']['buttons.']['formatblock.']['restrictToItems']) {
-                    $restrictTo = GeneralUtility::trimExplode(',', $this->cleanList('none,' . strtolower($this->configuration['thisConfig']['buttons.']['formatblock.']['restrictToItems'])), true);
-                }
-                // Elements order
-                if ($this->configuration['thisConfig']['buttons.']['formatblock.']['orderItems']) {
-                    $blockElementsOrder = 'none,' . strtolower($this->configuration['thisConfig']['buttons.']['formatblock.']['orderItems']);
-                }
-                $prefixLabelWithTag = $this->configuration['thisConfig']['buttons.']['formatblock.']['prefixLabelWithTag'] ? true : $prefixLabelWithTag;
-                $postfixLabelWithTag = $this->configuration['thisConfig']['buttons.']['formatblock.']['postfixLabelWithTag'] ? true : $postfixLabelWithTag;
-            }
-            // Adding custom items
-            $blockElementsOrder = array_merge(GeneralUtility::trimExplode(',', $this->cleanList($blockElementsOrder), true), $addItems);
-            // Add div element if indent is configured in the toolbar
-            if (in_array('indent', $this->toolbar) || in_array('outdent', $this->toolbar)) {
-                $blockElementsOrder = array_merge($blockElementsOrder, ['div']);
-            }
-            // Add blockquote element if blockquote is configured in the toolbar
-            if (in_array('blockquote', $this->toolbar)) {
-                $blockElementsOrder = array_merge($blockElementsOrder, ['blockquote']);
-            }
-            // Remove items
-            $blockElementsOrder = array_diff($blockElementsOrder, $hideItems);
-            // Applying User TSConfig restriction
-            if (!in_array('*', $restrictTo)) {
-                $blockElementsOrder = array_intersect($blockElementsOrder, $restrictTo);
-            }
-            // Localizing the options
-            $blockElementsOptions = [];
-            $labels = [];
-            if (is_array($this->configuration['thisConfig']['buttons.']) && is_array($this->configuration['thisConfig']['buttons.']['formatblock.']) && is_array($this->configuration['thisConfig']['buttons.']['formatblock.']['items.'])) {
-                $labels = $this->configuration['thisConfig']['buttons.']['formatblock.']['items.'];
-            }
-            foreach ($blockElementsOrder as $item) {
-                $blockElementsOptions[$item] = $this->getLanguageService()->sL(
-                    'LLL:EXT:rtehtmlarea/Resources/Private/Language/Plugins/BlockElements/locallang.xlf:' . $this->defaultBlockElements[$item]
-                );
-                // Getting custom labels
-                if (is_array($labels[$item . '.']) && $labels[$item . '.']['label']) {
-                    $blockElementsOptions[$item] = $this->getPageConfigLabel($labels[$item . '.']['label']);
-                }
-                $blockElementsOptions[$item] = ($prefixLabelWithTag && $item !== 'none' ? $item . ' - ' : '') . $blockElementsOptions[$item] . ($postfixLabelWithTag && $item !== 'none' ? ' - ' . $item : '');
-            }
-            $first = array_shift($blockElementsOptions);
-            // Sorting the options
-            if (!is_array($this->configuration['thisConfig']['buttons.']) || !is_array($this->configuration['thisConfig']['buttons.']['formatblock.']) || !$this->configuration['thisConfig']['buttons.']['formatblock.']['orderItems']) {
-                asort($blockElementsOptions);
-            }
-            // Generating the javascript options
-            $JSBlockElements = [];
-            $JSBlockElements[] = [$first, 'none'];
-            foreach ($blockElementsOptions as $item => $label) {
-                $JSBlockElements[] = [$label, $item];
-            }
-            $jsArray[] = 'RTEarea[editornumber].buttons.formatblock.options = ' . json_encode($JSBlockElements) . ';';
-        }
-        return implode(LF, $jsArray);
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/BlockStyle.php b/typo3/sysext/rtehtmlarea/Classes/Extension/BlockStyle.php
deleted file mode 100644 (file)
index bfee0fc..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * Block Style extension for htmlArea RTE
- */
-class BlockStyle extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'BlockStyle';
-
-    /**
-     * The comma-separated list of button names that the extension id adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'blockstyle';
-
-    /**
-     * The comma-separated list of label names that the extension id adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginLabels = 'blockstylelabel';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'blockstylelabel' => 'I[Block style label]',
-        'blockstyle' => 'BlockStyle'
-    ];
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/CharacterMap.php b/typo3/sysext/rtehtmlarea/Classes/Extension/CharacterMap.php
deleted file mode 100644 (file)
index 40e6857..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * CharacterMap plugin for htmlArea RTE
- */
-class CharacterMap extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'CharacterMap';
-
-    /**
-     * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'insertcharacter,insertsofthyphen';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'insertcharacter' => 'InsertCharacter',
-        'insertsofthyphen' => 'InsertSoftHyphen'
-    ];
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins
-     */
-    public function buildJavascriptConfiguration()
-    {
-        return '';
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/ContextMenu.php b/typo3/sysext/rtehtmlarea/Classes/Extension/ContextMenu.php
deleted file mode 100644 (file)
index b088747..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * Context Menu plugin for htmlArea RTE
- */
-class ContextMenu extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'ContextMenu';
-
-    /**
-     * Returns TRUE if the plugin is available and correctly initialized
-     *
-     * @param array $configuration Configuration array given from calling object down to the single plugins
-     * @return bool TRUE if this plugin object should be made available in the current environment and is correctly initialized
-     */
-    public function main(array $configuration)
-    {
-        return parent::main($configuration)
-            && !($this->configuration['client']['browser'] === 'opera' || $this->configuration['thisConfig']['contextMenu.']['disabled']);
-    }
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins
-     */
-    public function buildJavascriptConfiguration()
-    {
-        $jsArray = [];
-        if (is_array($this->configuration['thisConfig']['contextMenu.'])) {
-            $jsArray[] = 'RTEarea[editornumber].contextMenu =  ' . $this->buildNestedJSArray($this->configuration['thisConfig']['contextMenu.']) . ';';
-            if ($this->configuration['thisConfig']['contextMenu.']['showButtons']) {
-                $jsArray[] = 'RTEarea[editornumber].contextMenu.showButtons = ' . json_encode(GeneralUtility::trimExplode(',', $this->cleanList(strtolower($this->configuration['thisConfig']['contextMenu.']['showButtons'])), true)) . ';';
-            }
-            if ($this->configuration['thisConfig']['contextMenu.']['hideButtons']) {
-                $jsArray[] = 'RTEarea[editornumber].contextMenu.hideButtons = ' . json_encode(GeneralUtility::trimExplode(',', $this->cleanList(strtolower($this->configuration['thisConfig']['contextMenu.']['hideButtons'])), true)) . ';';
-            }
-        }
-        return implode(LF, $jsArray);
-    }
-
-    /**
-     * Translate Page TS Config array in JS nested array definition
-     * Replace 0 values with false
-     * Unquote regular expression values
-     * Replace empty arrays with empty objects
-     *
-     * @param array $conf: Page TSConfig configuration array
-     * @return string nested JS array definition
-     */
-    protected function buildNestedJSArray($conf)
-    {
-        $convertedConf = GeneralUtility::removeDotsFromTS($conf);
-        return str_replace([':"0"', ':"\\/^(', ')$\\/i"', ':"\\/^(', ')$\\/"', '[]'], [':false', ':/^(', ')$/i', ':/^(', ')$/', '{}'], json_encode($convertedConf));
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/CopyPaste.php b/typo3/sysext/rtehtmlarea/Classes/Extension/CopyPaste.php
deleted file mode 100644 (file)
index b46c3f5..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * Copy Paste plugin for htmlArea RTE
- */
-class CopyPaste extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'CopyPaste';
-
-    /**
-     * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'copy, cut, paste';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'copy' => 'Copy',
-        'cut' => 'Cut',
-        'paste' => 'Paste'
-    ];
-
-    /**
-     * Hide buttons not implemented in client browsers
-     *
-     * @var array
-     */
-    protected $hideButtonsFromClient = [
-        'gecko' => ['copy', 'cut', 'paste'],
-        'webkit' => ['copy', 'cut', 'paste'],
-        'opera' => ['copy', 'cut', 'paste']
-    ];
-
-    /**
-     * Returns TRUE if the plugin is available and correctly initialized
-     *
-     * @param array $configuration Configuration array given from calling object down to the single plugins
-     * @return bool TRUE if this plugin object should be made available in the current environment and is correctly initialized
-     */
-    public function main(array $configuration)
-    {
-        $enabled = parent::main($configuration);
-        // Hiding some buttons
-        if ($enabled && is_array($this->hideButtonsFromClient[$this->configuration['client']['browser']])) {
-            $this->pluginButtons = implode(',', array_diff(GeneralUtility::trimExplode(',', $this->pluginButtons, true), $this->hideButtonsFromClient[$this->configuration['client']['browser']]));
-        }
-        // Force enabling the plugin even if no button remains in the tool bar, so that hot keys still are enabled
-        $this->pluginAddsButtons = false;
-        return $enabled;
-    }
-
-    /**
-     * Return an updated array of toolbar enabled buttons
-     *
-     * @param array $show: array of toolbar elements that will be enabled, unless modified here
-     * @return array toolbar button array, possibly updated
-     */
-    public function applyToolbarConstraints($show)
-    {
-        // Remove some buttons
-        if (is_array($this->hideButtonsFromClient[$this->configuration['client']['browser']])) {
-            return array_diff($show, $this->hideButtonsFromClient[$this->configuration['client']['browser']]);
-        } else {
-            return $show;
-        }
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/DefaultClean.php b/typo3/sysext/rtehtmlarea/Classes/Extension/DefaultClean.php
deleted file mode 100644 (file)
index a5989a0..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * Default Clean extension for htmlArea RTE
- */
-class DefaultClean extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'DefaultClean';
-
-    /**
-     * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'cleanword';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'cleanword' => 'CleanWord'
-    ];
-
-    /**
-     * Returns TRUE if the plugin is available and correctly initialized
-     *
-     * @param array $configuration Configuration array given from calling object down to the single plugins
-     * @return bool TRUE if this plugin object should be made available in the current environment and is correctly initialized
-     */
-    public function main(array $configuration)
-    {
-        return parent::main($configuration)
-            && $this->configuration['thisConfig']['enableWordClean']
-            && !is_array($this->configuration['thisConfig']['enableWordClean.']['HTMLparser.']);
-    }
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins, in this case, JS configuration of block elements
-     */
-    public function buildJavascriptConfiguration()
-    {
-        $jsArray = [];
-        $button = 'cleanword';
-        if (in_array($button, $this->toolbar)) {
-            if (!is_array($this->configuration['thisConfig']['buttons.']) || !is_array($this->configuration['thisConfig']['buttons.'][$button . '.'])) {
-                $jsArray[] = 'RTEarea[editornumber].buttons.' . $button . ' = new Object();';
-            }
-            $jsArray[] = 'RTEarea[editornumber].buttons.' . $button . ' = {"hotKey" : "' . ($this->configuration['thisConfig']['enableWordClean.']['hotKey'] ? $this->configuration['thisConfig']['enableWordClean.']['hotKey'] : '0') . '"};';
-        }
-        return implode(LF, $jsArray);
-    }
-
-    /**
-     * Return an updated array of toolbar enabled buttons
-     * Force inclusion of hidden button cleanword
-     *
-     * @param array $show: array of toolbar elements that will be enabled, unless modified here
-     * @return array toolbar button array, possibly updated
-     */
-    public function applyToolbarConstraints($show)
-    {
-        return array_unique(array_merge($show, GeneralUtility::trimExplode(',', $this->pluginButtons)));
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/DefaultImage.php b/typo3/sysext/rtehtmlarea/Classes/Extension/DefaultImage.php
deleted file mode 100644 (file)
index 095077e..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * Image plugin for htmlArea RTE
- */
-class DefaultImage extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'DefaultImage';
-
-    /**
-     * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'image';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'image' => 'InsertImage'
-    ];
-
-    /**
-     * Returns TRUE if the plugin is available and correctly initialized
-     *
-     * @param array $configuration Configuration array given from calling object down to the single plugins
-     * @return bool TRUE if this plugin object should be made available in the current environment and is correctly initialized
-     */
-    public function main(array $configuration)
-    {
-        // Check if this should be enabled based on extension configuration and Page TSConfig
-        // The 'Minimal' and 'Typical' default configurations include Page TSConfig that removes images on the way to the database
-        return parent::main($configuration)
-            && !(
-                $this->configuration['thisConfig']['proc.']['entryHTMLparser_db.']['tags.']['img.']['allowedAttribs'] == '0'
-                && $this->configuration['thisConfig']['proc.']['entryHTMLparser_db.']['tags.']['img.']['rmTagIfNoAttrib'] == '1'
-            );
-    }
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins
-     */
-    public function buildJavascriptConfiguration()
-    {
-        return '';
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/DefaultInline.php b/typo3/sysext/rtehtmlarea/Classes/Extension/DefaultInline.php
deleted file mode 100644 (file)
index 2f9b161..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * DefaultInline plugin for htmlArea RTE
- */
-class DefaultInline extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'DefaultInline';
-
-    /**
-     * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'bold,italic,strikethrough,subscript,superscript,underline';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'bold' => 'Bold',
-        'italic' => 'Italic',
-        'underline' => 'Underline',
-        'strikethrough' => 'StrikeThrough',
-        'superscript' => 'Superscript',
-        'subscript' => 'Subscript'
-    ];
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins
-     */
-    public function buildJavascriptConfiguration()
-    {
-        return '';
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/DefaultLink.php b/typo3/sysext/rtehtmlarea/Classes/Extension/DefaultLink.php
deleted file mode 100644 (file)
index b7a9d66..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * Default Link extension for htmlArea RTE
- */
-class DefaultLink extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'DefaultLink';
-
-    /**
-     * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'link, unlink';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'link' => 'CreateLink',
-        'unlink' => 'UnLink'
-    ];
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins
-     */
-    public function buildJavascriptConfiguration()
-    {
-        return '';
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/DefinitionList.php b/typo3/sysext/rtehtmlarea/Classes/Extension/DefinitionList.php
deleted file mode 100644 (file)
index 3cf8e08..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * Definition List plugin for htmlArea RTE
- */
-class DefinitionList extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'DefinitionList';
-
-    /**
-     * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'definitionlist, definitionitem';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'definitionlist' => 'DefinitionList',
-        'definitionitem' => 'DefinitionItem'
-    ];
-
-    /**
-     * The comma-separated list of names of prerequisite plugins
-     *
-     * @var string
-     */
-    protected $requiredPlugins = 'BlockElements';
-
-    /**
-     * Returns TRUE if the plugin is available and correctly initialized
-     *
-     * @param array $configuration Configuration array given from calling object down to the single plugins
-     * @return bool TRUE if this plugin object should be made available in the current environment and is correctly initialized
-     */
-    public function main(array $configuration)
-    {
-        return parent::main($configuration)
-            && isset($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['rtehtmlarea']['plugins']['BlockElements']);
-    }
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins
-     */
-    public function buildJavascriptConfiguration()
-    {
-        return '';
-    }
-
-    /**
-     * Return an updated array of toolbar enabled buttons
-     *
-     * @param array $show: array of toolbar elements that will be enabled, unless modified here
-     * @return array toolbar button array, possibly updated
-     */
-    public function applyToolbarConstraints($show)
-    {
-        $blockElementsButtons = 'formatblock, indent, outdent, blockquote, insertparagraphbefore, insertparagraphafter, left, center, right, justifyfull, orderedlist, unorderedlist';
-        $notRemoved = array_intersect(\TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(',', $blockElementsButtons, true), $show);
-        // DefinitionList plugin requires BlockElements plugin
-        // We will not allow any definition lists operations if all block elements buttons were disabled
-        if (empty($notRemoved)) {
-            return array_diff($show, \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(',', $this->pluginButtons));
-        } else {
-            return $show;
-        }
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/EditElement.php b/typo3/sysext/rtehtmlarea/Classes/Extension/EditElement.php
deleted file mode 100644 (file)
index 88f1098..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * Edit Element extension for htmlArea RTE
- */
-class EditElement extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'EditElement';
-
-    /**
-     * The comma-separated list of names of prerequisite plugins
-     *
-     * @var string
-     */
-    protected $requiredPlugins = 'BlockStyle,TextStyle,Language,MicrodataSchema';
-
-    /**
-     * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'editelement';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'editelement' => 'EditElement'
-    ];
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins
-     */
-    public function buildJavascriptConfiguration()
-    {
-        return '';
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/EditorMode.php b/typo3/sysext/rtehtmlarea/Classes/Extension/EditorMode.php
deleted file mode 100644 (file)
index d5087f2..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * EditorMode plugin for htmlArea RTE
- */
-class EditorMode extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'EditorMode';
-
-    /**
-     * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'chMode';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'chMode' => 'TextMode'
-    ];
-
-    /**
-     * Requiring itself so that it is always loaded.
-     *
-     * @var string
-     */
-    protected $requiredPlugins = 'EditorMode';
-
-    /**
-     * Returns TRUE if the plugin is available and correctly initialized
-     *
-     * @param array $configuration Configuration array given from calling object down to the single plugins
-     * @return bool TRUE if this plugin object should be made available in the current environment and is correctly initialized
-     */
-    public function main(array $configuration)
-    {
-        parent::main($configuration);
-        // Do not disable this plugin even if the chMode button is disabled
-        $this->pluginAddsButtons = false;
-        return true;
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/FindReplace.php b/typo3/sysext/rtehtmlarea/Classes/Extension/FindReplace.php
deleted file mode 100644 (file)
index 9855ec9..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * Find Replace plugin for htmlArea RTE
- */
-class FindReplace extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'FindReplace';
-
-    /**
-     * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'findreplace';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'findreplace' => 'FindReplace'
-    ];
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins
-     */
-    public function buildJavascriptConfiguration()
-    {
-        return '';
-    }
-}
diff --git a/typo3/sysext/rtehtmlarea/Classes/Extension/InlineElements.php b/typo3/sysext/rtehtmlarea/Classes/Extension/InlineElements.php
deleted file mode 100644 (file)
index 027a2d7..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-<?php
-namespace TYPO3\CMS\Rtehtmlarea\Extension;
-
-/*
- * 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\Rtehtmlarea\RteHtmlAreaApi;
-
-/**
- * InlineElements plugin for htmlArea RTE
- */
-class InlineElements extends RteHtmlAreaApi
-{
-    /**
-     * The name of the plugin registered by the extension
-     *
-     * @var string
-     */
-    protected $pluginName = 'InlineElements';
-
-    /**
-     * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
-     *
-     * @var string
-     */
-    protected $pluginButtons = 'formattext, bidioverride, big, bold, citation, code, definition, deletedtext, emphasis, insertedtext, italic, keyboard, quotation, sample, small, span, strikethrough, strong, subscript, superscript, underline, variable';
-
-    /**
-     * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
-     *
-     * @var array
-     */
-    protected $convertToolbarForHtmlAreaArray = [
-        'formattext' => 'FormatText',
-        'bidioverride' => 'BiDiOverride',
-        'big' => 'Big',
-        'bold' => 'Bold',
-        'citation' => 'Citation',
-        'code' => 'Code',
-        'definition' => 'Definition',
-        'deletedtext' => 'DeletedText',
-        'emphasis' => 'Emphasis',
-        'insertedtext' => 'InsertedText',
-        'italic' => 'Italic',
-        'keyboard' => 'Keyboard',
-        'monospaced' => 'MonoSpaced',
-        'quotation' => 'Quotation',
-        'sample' => 'Sample',
-        'small' => 'Small',
-        'span' => 'Span',
-        'strikethrough' => 'StrikeThrough',
-        'strong' => 'Strong',
-        'subscript' => 'Subscript',
-        'superscript' => 'Superscript',
-        'underline' => 'Underline',
-        'variable' => 'Variable'
-    ];
-
-    /**
-     * Default list of inline elements
-     *
-     * @var array
-     */
-    protected $defaultInlineElements = [
-        'none' => 'No markup',
-        'b' => 'Bold',
-        'bdo' => 'BiDi override',
-        'big' => 'Large text',
-        'cite' => 'Citation',
-        'code' => 'Code',
-        'del' => 'Deleted text',
-        'dfn' => 'Definition',
-        'em' => 'Emphasis',
-        'i' => 'Italic',
-        'ins' => 'Inserted text',
-        'kbd' => 'Keyboard',
-        'q' => 'Quotation',
-        'samp' => 'Sample',
-        'small' => 'Small text',
-        'span' => 'Style container',
-        'strike' => 'Strike-through',
-        'strong' => 'Strong emphasis',
-        'sub' => 'Subscript',
-        'sup' => 'Superscript',
-        'tt' => 'Monospaced text',
-        'u' => 'Underline',
-        'var' => 'Variable'
-    ];
-
-    /**
-     * Default order of inline elements
-     *
-     * @var string
-     */
-    protected $defaultInlineElementsOrder = 'none, bidioverride, big, bold, citation, code, definition, deletedtext, emphasis, insertedtext, italic, keyboard,
-               monospaced, quotation, sample, small, span, strikethrough, strong, subscript, superscript, underline, variable';
-
-    /**
-     * Button names to inline elements
-     *
-     * @var array
-     */
-    protected $buttonToInlineElement = [
-        'none' => 'none',
-        'bidioverride' => 'bdo',
-        'big' => 'big',
-        'bold' => 'b',
-        'citation' => 'cite',
-        'code' => 'code',
-        'definition' => 'dfn',
-        'deletedtext' => 'del',
-        'emphasis' => 'em',
-        'insertedtext' => 'ins',
-        'italic' => 'i',
-        'keyboard' => 'kbd',
-        'monospaced' => 'tt',
-        'quotation' => 'q',
-        'sample' => 'samp',
-        'small' => 'small',
-        'span' => 'span',
-        'strikethrough' => 'strike',
-        'strong' => 'strong',
-        'subscript' => 'sub',
-        'superscript' => 'sup',
-        'underline' => 'u',
-        'variable' => 'var'
-    ];
-
-    /**
-     * Return JS configuration of the htmlArea plugins registered by the extension
-     *
-     * @return string JS configuration for registered plugins
-     */
-    public function buildJavascriptConfiguration()
-    {
-        $jsArray = [];
-        if (in_array('formattext', $this->toolbar)) {
-            if (!is_array($this->configuration['thisConfig']['buttons.']) || !is_array($this->configuration['thisConfig']['buttons.']['formattext.'])) {
-                $jsArray[] = 'RTEarea[editornumber].buttons.formattext = new Object();';
-            }
-            // Default inline elements
-            $hideItems = [];
-            $restrictTo = ['*'];
-            $inlineElementsOrder = $this->defaultInlineElementsOrder;
-            $prefixLabelWithTag = false;
-            $postfixLabelWithTag = false;
-            // Processing PageTSConfig
-            if (is_array($this->configuration['thisConfig']['buttons.']) && is_array($this->configuration['thisConfig']['buttons.']['formattext.'])) {
-                // Removing elements
-                if ($this->configuration['thisConfig']['buttons.']['formattext.']['removeItems']) {
-                    $hideItems = GeneralUtility::trimExplode(',', $this->cleanList($this->configuration['thisConfig']['buttons.']['formattext.']['removeItems']), true);
-                }
-                // Restriction clause
-                if ($this->configuration['thisConfig']['buttons.']['formattext.']['restrictTo']) {
-                    $restrictTo = GeneralUtility::trimExplode(',', $this->cleanList('none,' . $this->configuration['thisConfig']['buttons.']['formattext.']['restrictTo']), true);
-                } elseif ($this->configuration['thisConfig']['buttons.']['formattext.']['restrictToItems']) {
-                    $restrictTo = GeneralUtility::trimExplode(',', $this->cleanList('none,' . $this->configuration['thisConfig']['buttons.']['formattext.']['restrictToItems']), true);
-                }
-                // Elements order
-                if ($this->configuration['thisConfig']['buttons.']['formattext.']['orderItems']) {
-                    $inlineElementsOrder = 'none,' . $this->configuration['thisConfig']['buttons.']['formattext.']['orderItems'];
-                }
-                $prefixLabelWithTag = $this->configuration['thisConfig']['buttons.']['formattext.']['prefixLabelWithTag'] ? true : $prefixLabelWithTag;
-                $postfixLabelWithTag = $this->configuration['thisConfig']['buttons.']['formattext.']['postfixLabelWithTag'] ? true : $postfixLabelWithTag;
-            }
-            $inlineElementsOrder = array_diff(GeneralUtility::trimExplode(',', $this->cleanList($inlineElementsOrder), true), $hideItems);
-            if (!in_array('*', $restrictTo)) {
-                $inlineElementsOrder = array_intersect($inlineElementsOrder, $restrictTo);
-            }
-            // Localizing the options
-            $inlineElementsOptions = [];
-            foreach ($inlineElementsOrder as $item) {
-                $inlineElementsOptions[$this->buttonToInlineElement[$item]] = $this->getLanguageService()->sL(
-                    'LLL:EXT:rtehtmlarea/Resources/Private/Language/Plugins/InlineElements/locallang.xlf:' . $this->defaultInlineElements[$this->buttonToInlineElement[$item]]
-                );
-                $inlineElementsOptions[$this->buttonToInlineElement[$item]] = ($prefixLabelWithTag && $item !== 'none' ? $this->buttonToInlineElement[$item] . ' - ' : '') . $inlineElementsOptions[$this->buttonToInlineElement[$item]] . ($postfixLabelWithTag && $item !== 'none' ? ' - ' . $this->buttonToInlineElement[$item] : '');
-            }
-            $first = array_shift($inlineElementsOptions);
-            // Sorting the options
-            if (!is_array($this->configuration['thisConfig']['buttons.']) || !is_array($this->configuration['thisConfig']['buttons.']['formattext.']) || !$this->configuration['thisConfig']['buttons.']['formattext.']['orderItems']) {
-                asort($i