[!!!][TASK] Remove deprecated adminpanel/feedit code 05/59205/4
authorBenni Mack <benni@typo3.org>
Wed, 19 Dec 2018 08:59:28 +0000 (09:59 +0100)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Wed, 19 Dec 2018 22:41:07 +0000 (23:41 +0100)
The following previously deprecated classes/interfaces have been removed:

* TYPO3\CMS\Adminpanel\View\AdminPanelView
* TYPO3\CMS\Adminpanel\View\AdminPanelViewHookInterface
* TYPO3\CMS\Core\FrontendEditing\FrontendEditingController

The following methods have been removed:
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->initializeAdminPanel()
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->initializeFrontendEdit()
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->isFrontendEditingActive()
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->displayAdminPanel()
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->isAdminPanelVisible()
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->checkBackendAccessSettingsFromInitPhp()
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extPageReadAccess()
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extGetTreeList()
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extGetLL()

The following public properties have been removed
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extAdmEnabled
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->adminPanel
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->frontendEdit
* TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extAdminConfig

The following PageTSconfig option has no effect anymore:
* TSFE.frontendEditingController

Resolves: #87231
Releases: master
Change-Id: I88cc3ac18077f054cc8895f5ccfb65291e94defa
Reviewed-on: https://review.typo3.org/59205
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
17 files changed:
composer.json
composer.lock
typo3/sysext/adminpanel/Classes/Controller/MainController.php
typo3/sysext/adminpanel/Classes/Middleware/AdminPanelInitiator.php
typo3/sysext/adminpanel/Classes/Utility/StateUtility.php
typo3/sysext/adminpanel/Classes/View/AdminPanelView.php [deleted file]
typo3/sysext/adminpanel/Classes/View/AdminPanelViewHookInterface.php [deleted file]
typo3/sysext/adminpanel/Migrations/Code/ClassAliasMap.php [deleted file]
typo3/sysext/adminpanel/Migrations/Code/LegacyClassesForIde.php [deleted file]
typo3/sysext/adminpanel/composer.json
typo3/sysext/backend/Classes/FrontendBackendUserAuthentication.php
typo3/sysext/core/Classes/FrontendEditing/FrontendEditingController.php [deleted file]
typo3/sysext/core/Documentation/Changelog/master/Breaking-87193-DeprecatedFunctionalityRemoved.rst
typo3/sysext/feedit/Classes/DataHandling/FrontendEditDataHandler.php
typo3/sysext/feedit/Classes/Middleware/FrontendEditInitiator.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/PropertyProtectedMatcher.php

index 8605a2e..168ab64 100644 (file)
@@ -86,7 +86,6 @@
                "typo3/class-alias-loader": {
                        "always-add-alias-loader": true,
                        "class-alias-maps": [
-                               "typo3/sysext/adminpanel/Migrations/Code/ClassAliasMap.php",
                                "typo3/sysext/extbase/Migrations/Code/ClassAliasMap.php"
                        ]
                },
index 0875abe..a3aac63 100644 (file)
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "a2b364b4595fbcc3d807b94080bf390e",
+    "content-hash": "0c68eda38287d75a1f379330d9cbaf54",
     "packages": [
         {
             "name": "cogpowered/finediff",
index c22a08b..6b543b3 100644 (file)
@@ -29,7 +29,6 @@ use TYPO3\CMS\Adminpanel\Service\ConfigurationService;
 use TYPO3\CMS\Adminpanel\Service\ModuleLoader;
 use TYPO3\CMS\Adminpanel\Utility\ResourceUtility;
 use TYPO3\CMS\Adminpanel\Utility\StateUtility;
-use TYPO3\CMS\Adminpanel\View\AdminPanelView;
 use TYPO3\CMS\Backend\Routing\UriBuilder;
 use TYPO3\CMS\Core\Cache\CacheManager;
 use TYPO3\CMS\Core\SingletonInterface;
@@ -111,11 +110,6 @@ class MainController implements SingletonInterface
      */
     public function render(ServerRequestInterface $request): string
     {
-        // legacy handling, deprecated, will be removed in TYPO3 v10.0.
-        $adminPanelView = GeneralUtility::makeInstance(AdminPanelView::class);
-        $hookObjectContent = $adminPanelView->callDeprecatedHookObject();
-        // end legacy handling
-
         $resources = ResourceUtility::getResources();
 
         $view = GeneralUtility::makeInstance(StandaloneView::class);
@@ -150,7 +144,6 @@ class MainController implements SingletonInterface
                     'modules' => $this->modules,
                     'settingsModules' => $settingsModules,
                     'parentModules' => $parentModules,
-                    'hookObjectContent' => $hookObjectContent,
                     'saveUrl' => $this->generateBackendUrl('ajax_adminPanel_saveForm'),
                     'moduleResources' => $moduleResources,
                     'requestId' => $requestId,
index d31bcbb..91c178e 100644 (file)
@@ -22,7 +22,6 @@ use Psr\Http\Server\MiddlewareInterface;
 use Psr\Http\Server\RequestHandlerInterface;
 use TYPO3\CMS\Adminpanel\Controller\MainController;
 use TYPO3\CMS\Adminpanel\Utility\StateUtility;
-use TYPO3\CMS\Adminpanel\View\AdminPanelView;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
@@ -50,10 +49,6 @@ class AdminPanelInitiator implements MiddlewareInterface
                 MainController::class
             );
             $adminPanelController->initialize($request);
-            // legacy handling
-            $beUser = $GLOBALS['BE_USER'];
-            $beUser->adminPanel = GeneralUtility::makeInstance(AdminPanelView::class);
-            $beUser->extAdmEnabled = true;
         }
         return $handler->handle($request);
     }
index b818416..b04a26e 100644 (file)
@@ -64,6 +64,7 @@ class StateUtility
 
     public static function isHiddenForUser(): bool
     {
-        return (bool)($GLOBALS['BE_USER']->extAdminConfig['hide'] ?? false);
+        $beUser = $GLOBALS['BE_USER'] ?? null;
+        return $beUser->getTSConfig()['admPanel.']['hide'] ?? false;
     }
 }
diff --git a/typo3/sysext/adminpanel/Classes/View/AdminPanelView.php b/typo3/sysext/adminpanel/Classes/View/AdminPanelView.php
deleted file mode 100644 (file)
index 6b6957b..0000000
+++ /dev/null
@@ -1,480 +0,0 @@
-<?php
-
-namespace TYPO3\CMS\Adminpanel\View;
-
-/*
- * 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\Adminpanel\ModuleApi\ConfigurableInterface;
-use TYPO3\CMS\Adminpanel\ModuleApi\DataProviderInterface;
-use TYPO3\CMS\Adminpanel\ModuleApi\ModuleInterface;
-use TYPO3\CMS\Adminpanel\Service\EditToolbarService;
-use TYPO3\CMS\Adminpanel\Utility\StateUtility;
-use TYPO3\CMS\Backend\FrontendBackendUserAuthentication;
-use TYPO3\CMS\Core\Cache\CacheManager;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\PathUtility;
-
-/**
- * View class for the admin panel in frontend editing.
- *
- * @internal
- */
-class AdminPanelView
-{
-    /**
-     * Force preview
-     *
-     * @var bool
-     */
-    protected $ext_forcePreview = false;
-
-    /**
-     * Array of adminPanel modules
-     *
-     * @var \TYPO3\CMS\Adminpanel\ModuleApi\ModuleInterface[]
-     */
-    protected $modules = [];
-
-    /**
-     * @var array
-     */
-    protected $configuration;
-
-    /**
-     * Setter for injecting new-style modules
-     *
-     * @see \TYPO3\CMS\Adminpanel\Controller\MainController::render()
-     * @param array $modules
-     * @internal
-     */
-    public function setModules(array $modules): void
-    {
-        $this->modules = $modules;
-    }
-
-    /**
-     * Returns LanguageService
-     *
-     * @return \TYPO3\CMS\Core\Localization\LanguageService
-     */
-    protected function getLanguageService()
-    {
-        return $GLOBALS['LANG'];
-    }
-
-    /**
-     * Returns the current BE user.
-     *
-     * @return FrontendBackendUserAuthentication
-     */
-    protected function getBackendUser()
-    {
-        return $GLOBALS['BE_USER'];
-    }
-
-    /*****************************************************
-     * Admin Panel: Deprecated API
-     ****************************************************/
-
-    /**
-     * Backwards compatibility method ensuring hook still gets the same content as before
-     *
-     * @deprecated since TYPO3 v9 - remove when hook can be removed
-     * @internal
-     * @return string
-     * @throws \UnexpectedValueException
-     */
-    public function callDeprecatedHookObject(): string
-    {
-        $moduleContent = '';
-        if (StateUtility::isOpen()) {
-            foreach ($this->modules as $module) {
-                $moduleContent .= $this->getModule($module);
-            }
-
-            foreach (
-                $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_adminpanel.php']['extendAdminPanel']
-                ??
-                [] as $className
-            ) {
-                trigger_error(
-                    'The hook $GLOBALS[TYPO3_CONF_VARS][SC_OPTIONS][tslib/class.tslib_adminpanel.php][extendAdminPanel] will be removed in TYPO3 v10.0, register an AdminPanelModule instead.',
-                    E_USER_DEPRECATED
-                );
-                $hookObject = GeneralUtility::makeInstance($className);
-                if (!$hookObject instanceof AdminPanelViewHookInterface) {
-                    throw new \UnexpectedValueException(
-                        $className . ' must implement interface ' . AdminPanelViewHookInterface::class,
-                        1311942539
-                    );
-                }
-                $content = $hookObject->extendAdminPanel($moduleContent, $this);
-                if ($content) {
-                    $moduleContent .= '<div class="typo3-adminPanel-section typo3-adminPanel-section-open">';
-                    $moduleContent .= '  <div class="typo3-adminPanel-section-body">';
-                    $moduleContent .= '    ' . $content;
-                    $moduleContent .= '  </div>';
-                    $moduleContent .= '</div>';
-                }
-            }
-        }
-        return $moduleContent;
-    }
-
-    /**
-     * Render a single module with header panel
-     *
-     * @deprecated since TYPO3 v9 - only used in deprecated hook call (which triggers the corresponding deprecation error)
-     * @param ModuleInterface $module
-     * @return string
-     */
-    protected function getModule(ModuleInterface $module): string
-    {
-        $output = [];
-
-        if ($module instanceof ConfigurableInterface && $module->isEnabled()) {
-            $output[] = '<div class="typo3-adminPanel-section typo3-adminPanel-section-open">';
-            $output[] = '  <div class="typo3-adminPanel-section-title">';
-            $output[] = '    ' . $this->getSectionOpenerLink($module);
-            $output[] = '  </div>';
-            $output[] = '<div class="typo3-adminPanel-section-body">';
-            $output[] = '  ' . $module->getContent();
-            $output[] = '</div>';
-            $output[] = '</div>';
-        }
-
-        if ($module instanceof DataProviderInterface) {
-            foreach ($module->getJavaScriptFiles() as $javaScriptFile) {
-                $output[] =
-                    '<script src="' .
-                    PathUtility::getAbsoluteWebPath(GeneralUtility::getFileAbsFileName($javaScriptFile)) .
-                    '"></script>';
-            }
-        }
-
-        return implode('', $output);
-    }
-
-    /*****************************************************
-     * Admin Panel Layout Helper functions
-     ****************************************************/
-
-    /**
-     * Wraps a string in a link which will open/close a certain part of the Admin Panel
-     *
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Only used in deprecated hook call (which triggers the corresponding deprecation error)
-     * @param ModuleInterface $module
-     * @return string
-     */
-    protected function getSectionOpenerLink(ModuleInterface $module): string
-    {
-        $identifier = $module->getIdentifier();
-        $onclick = 'document.TSFE_ADMIN_PANEL_FORM[' .
-                   GeneralUtility::quoteJSvalue('TSFE_ADMIN_PANEL[display_' . $identifier . ']') .
-                   '].value=' .
-                   ($this->getBackendUser()->uc['AdminPanel']['display_' . $identifier] ? '0' : '1') .
-                   ';document.TSFE_ADMIN_PANEL_FORM.submit();return false;';
-
-        $output = [];
-        $output[] = '<span class="typo3-adminPanel-section-title-identifier"></span>';
-        $output[] = '<a href="javascript:void(0)" onclick="' . htmlspecialchars($onclick) . '">';
-        $output[] = '  ' . htmlspecialchars($module->getLabel());
-        $output[] = '</a>';
-        $output[] = '<input type="hidden" name="TSFE_ADMIN_PANEL[display_' .
-                    $identifier .
-                    ']" value="' .
-                    1 .
-                    '" />';
-
-        return implode('', $output);
-    }
-
-    /**
-     * Creates the tool bar links for the "edit" section of the Admin Panel.
-     *
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use EditToolbarService instead or create buttons via fluid
-     * @return string A string containing images wrapped in <a>-tags linking them to proper functions.
-     */
-    public function ext_makeToolBar(): string
-    {
-        trigger_error(
-            'AdminPanelView::ext_makeToolBar() will be removed in TYPO3 v10.0, use fluid and backend uri builder to create a toolbar.',
-            E_USER_DEPRECATED
-        );
-        $editToolbarService = GeneralUtility::makeInstance(EditToolbarService::class);
-        return $editToolbarService->createToolbar();
-    }
-
-    /**
-     * Translate given key
-     *
-     * @param string $key Key for a label in the $LOCAL_LANG array of "EXT:core/Resources/Private/Language/locallang_tsfe.xlf
-     * @param bool $convertWithHtmlspecialchars If TRUE the language-label will be sent through htmlspecialchars
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - only used in deprecated methods
-     * @return string The value for the $key
-     */
-    protected function extGetLL($key, $convertWithHtmlspecialchars = true)
-    {
-        $labelStr = $this->getLanguageService()->getLL($key);
-        if ($convertWithHtmlspecialchars) {
-            $labelStr = htmlspecialchars($labelStr);
-        }
-        return $labelStr;
-    }
-
-    /**
-     * Add an additional stylesheet
-     *
-     * @return string
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - implement AdminPanelModules via the new API (see AdminPanelModuleInterface)
-     */
-    public function getAdminPanelHeaderData()
-    {
-        trigger_error(
-            'AdminPanelView->getAdminPanelHeaderData() will be removed in TYPO3 v10.0. Implement AdminPanelModules via the new API (see AdminPanelModuleInterface).',
-            E_USER_DEPRECATED
-        );
-        $result = '';
-        if (!empty($GLOBALS['TBE_STYLES']['stylesheets']['admPanel'])) {
-            $stylesheet = GeneralUtility::locationHeaderUrl($GLOBALS['TBE_STYLES']['stylesheets']['admPanel']);
-            $result = '<link rel="stylesheet" type="text/css" href="' .
-                      htmlspecialchars($stylesheet, ENT_QUOTES | ENT_HTML5) . '" />';
-        }
-        return $result;
-    }
-
-    /**
-     * Checks if an Admin Panel section ("module") is available for the user. If so, TRUE is returned.
-     *
-     * @param string $key The module key, eg. "edit", "preview", "info" etc.
-     * @return bool
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - implement AdminPanelModules via the new API (see AdminPanelModuleInterface)
-     */
-    public function isAdminModuleEnabled($key)
-    {
-        trigger_error(
-            'AdminPanelView->isAdminModuleEnabled() will be removed in TYPO3 v10.0. Implement AdminPanelModules via the new API (see AdminPanelModuleInterface).',
-            E_USER_DEPRECATED
-        );
-        $result = false;
-        // Returns TRUE if the module checked is "preview" and the forcePreview flag is set.
-        if ($key === 'preview' && $this->ext_forcePreview) {
-            $result = true;
-        } elseif (!empty($this->configuration['enable.']['all'])) {
-            $result = true;
-        } elseif (!empty($this->configuration['enable.'][$key])) {
-            $result = true;
-        }
-        return $result;
-    }
-
-    /**
-     * Saves any change in settings made in the Admin Panel.
-     *
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - implement AdminPanelModules via the new API (see AdminPanelModuleInterface)
-     */
-    public function saveConfigOptions()
-    {
-        trigger_error(
-            'AdminPanelView->saveConfigOptions() will be removed in TYPO3 v10.0. Implement AdminPanelModules via the new API (see AdminPanelModuleInterface).',
-            E_USER_DEPRECATED
-        );
-        $input = GeneralUtility::_GP('TSFE_ADMIN_PANEL');
-        $beUser = $this->getBackendUser();
-        if (is_array($input)) {
-            // Setting
-            $beUser->uc['AdminPanel'] = array_merge(
-                !is_array($beUser->uc['AdminPanel']) ? [] : $beUser->uc['AdminPanel'],
-                $input
-            );
-            unset($beUser->uc['AdminPanel']['action']);
-
-            foreach ($this->modules as $module) {
-                if ($module->isEnabled()) {
-                    // We use TYPO3_REQUEST for compatibility reasons. The object and this method are deprecated anyway, this should be fine.
-                    $module->onSubmit($input, $GLOBALS['TYPO3_REQUEST']);
-                }
-            }
-            // Saving
-            $beUser->writeUC();
-            // Flush fluid template cache
-            $cacheManager = new CacheManager();
-            $cacheManager->setCacheConfigurations($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']);
-            $cacheManager->getCache('fluid_template')->flush();
-        }
-    }
-
-    /**
-     * Returns the value for an Admin Panel setting.
-     *
-     * @param string $sectionName Module key
-     * @param string $val Setting key
-     * @return mixed The setting value
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - implement AdminPanelModules via the new API (see AdminPanelModuleInterface)
-     */
-    public function extGetFeAdminValue($sectionName, $val = '')
-    {
-        trigger_error(
-            'AdminPanelView->extGetFeAdminValue() will be removed in TYPO3 v10.0. Implement AdminPanelModules via the new API (see AdminPanelModuleInterface).',
-            E_USER_DEPRECATED
-        );
-        if (!$this->isAdminModuleEnabled($sectionName)) {
-            return null;
-        }
-
-        $beUser = $this->getBackendUser();
-        // Exceptions where the values can be overridden (forced) from backend:
-        // deprecated
-        if (
-            $sectionName === 'edit' && (
-                $val === 'displayIcons' && $this->configuration['module.']['edit.']['forceDisplayIcons'] ||
-                $val === 'displayFieldIcons' && $this->configuration['module.']['edit.']['forceDisplayFieldIcons'] ||
-                $val === 'editNoPopup' && $this->configuration['module.']['edit.']['forceNoPopup']
-            )
-        ) {
-            return true;
-        }
-
-        // Override all settings with user TSconfig
-        if ($val && isset($this->configuration['override.'][$sectionName . '.'][$val])) {
-            return $this->configuration['override.'][$sectionName . '.'][$val];
-        }
-        if (!$val && isset($this->configuration['override.'][$sectionName])) {
-            return $this->configuration['override.'][$sectionName];
-        }
-
-        $returnValue = $val ? $beUser->uc['AdminPanel'][$sectionName . '_' . $val] : 1;
-
-        // Exception for preview
-        if ($sectionName === 'preview' && $this->ext_forcePreview) {
-            return !$val ? true : $returnValue;
-        }
-
-        // See if the menu is expanded!
-        return $this->isAdminModuleOpen($sectionName) ? $returnValue : null;
-    }
-
-    /**
-     * Enables the force preview option.
-     *
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - see AdminPanelModule: Preview
-     */
-    public function forcePreview()
-    {
-        trigger_error(
-            'AdminPanelView->forcePreview() will be removed in TYPO3 v10.0. Use new AdminPanel Preview Module instead.',
-            E_USER_DEPRECATED
-        );
-        $this->ext_forcePreview = true;
-    }
-
-    /**
-     * Returns TRUE if admin panel module is open
-     *
-     * @param string $key Module key
-     * @return bool TRUE, if the admin panel is open for the specified admin panel module key.
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - use new AdminPanel API instead
-     */
-    public function isAdminModuleOpen($key)
-    {
-        trigger_error(
-            'AdminPanelView->isAdminModuleOpen() will be removed in TYPO3 v10.0. Use new AdminPanel API instead.',
-            E_USER_DEPRECATED
-        );
-        return $this->getBackendUser()->uc['AdminPanel']['display_top'] &&
-               $this->getBackendUser()->uc['AdminPanel']['display_' . $key];
-    }
-
-    /**
-     * Returns a row (with 4 columns) for content in a section of the Admin Panel.
-     * It will take $pre as a key to a label to display and $element as the content to put into the forth cell.
-     *
-     * @param string $title Key to label
-     * @param string $content The HTML content for the forth table cell.
-     * @param string $checkbox The HTML for a checkbox or hidden fields.
-     * @param string $innerDivClass The Class attribute for the td element.
-     * @param string $outerDivClass The Class attribute for the tr element.
-     * @return string HTML table row.
-     * @see extGetHead()
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - use new AdminPanel API instead
-     */
-    public function extGetItem($title, $content = '', $checkbox = '', $outerDivClass = null, $innerDivClass = null)
-    {
-        trigger_error(
-            'AdminPanelView->extGetItem() will be removed in TYPO3 v10.0. Use new AdminPanel API instead.',
-            E_USER_DEPRECATED
-        );
-        $title = $title ? '<label for="' . htmlspecialchars($title) . '">' . $this->extGetLL($title) . '</label>' : '';
-        $out = '';
-        $out .= (string)$outerDivClass ? '<div class="' . htmlspecialchars($outerDivClass) . '">' : '<div>';
-        $out .= (string)$innerDivClass ? '<div class="' . htmlspecialchars($innerDivClass) . '">' : '<div>';
-        $out .= $checkbox . $title . $content . '</div></div>';
-        return $out;
-    }
-
-    /**
-     * Returns a row (with colspan=4) which is a header for a section in the Admin Panel.
-     * It will have a plus/minus icon and a label which is linked so that it submits the form which surrounds the whole Admin Panel when clicked, alterting the TSFE_ADMIN_PANEL[display_' . $pre . '] value
-     * See the functions get*Module
-     *
-     * @param string $sectionSuffix The suffix to the display_ label. Also selects the label from the LOCAL_LANG array.
-     * @return string HTML table row.
-     * @see extGetItem()
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - use new AdminPanel API instead
-     */
-    public function extGetHead($sectionSuffix)
-    {
-        trigger_error(
-            'AdminPanelView->extGetHead() will be removed in TYPO3 v10.0. Use new AdminPanel API instead.',
-            E_USER_DEPRECATED
-        );
-        return $this->linkSectionHeader($sectionSuffix, $this->extGetLL($sectionSuffix));
-    }
-
-    /**
-     * Wraps a string in a link which will open/close a certain part of the Admin Panel
-     *
-     * @param string $sectionSuffix The code for the display_ label/key
-     * @param string $sectionTitle Title (HTML-escaped)
-     * @param string $className The classname for the <a> tag
-     * @return string $className Linked input string
-     * @see extGetHead()
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - use new AdminPanel API instead
-     */
-    public function linkSectionHeader($sectionSuffix, $sectionTitle, $className = '')
-    {
-        trigger_error(
-            'AdminPanelView->linkSectionHeader() will be removed in TYPO3 v10.0. Use new AdminPanel API instead.',
-            E_USER_DEPRECATED
-        );
-        $onclick = 'document.TSFE_ADMIN_PANEL_FORM[' .
-                   GeneralUtility::quoteJSvalue('TSFE_ADMIN_PANEL[display_' . $sectionSuffix . ']') .
-                   '].value=' .
-                   ($this->getBackendUser()->uc['AdminPanel']['display_' . $sectionSuffix] ? '0' : '1') .
-                   ';document.TSFE_ADMIN_PANEL_FORM.submit();return false;';
-
-        $output = [];
-        $output[] = '<span class="typo3-adminPanel-section-title-identifier"></span>';
-        $output[] = '<a href="javascript:void(0)" onclick="' . htmlspecialchars($onclick) . '">';
-        $output[] = '  ' . $sectionTitle;
-        $output[] = '</a>';
-        $output[] = '<input type="hidden" name="TSFE_ADMIN_PANEL[display_' .
-                    $sectionSuffix .
-                    ']" value="' .
-                    (int)$this->isAdminModuleOpen($sectionSuffix) .
-                    '" />';
-
-        return implode('', $output);
-    }
-}
diff --git a/typo3/sysext/adminpanel/Classes/View/AdminPanelViewHookInterface.php b/typo3/sysext/adminpanel/Classes/View/AdminPanelViewHookInterface.php
deleted file mode 100644 (file)
index de3cac3..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-namespace TYPO3\CMS\Adminpanel\View;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * Interface for classes which hook into AdminPanelView
- *
- * @deprecated since TYPO3 v9 will be removed in TYPO3 v10.0 - see AdminPanelModuleInterface
- */
-interface AdminPanelViewHookInterface
-{
-    /**
-     * Extend the adminPanel
-     *
-     * @param string $moduleContent Content of the admin panel
-     * @param \TYPO3\CMS\Adminpanel\View\AdminPanelView $obj The adminPanel object
-     * @return string Returns content of admin panel
-     */
-    public function extendAdminPanel($moduleContent, AdminPanelView $obj);
-}
diff --git a/typo3/sysext/adminpanel/Migrations/Code/ClassAliasMap.php b/typo3/sysext/adminpanel/Migrations/Code/ClassAliasMap.php
deleted file mode 100644 (file)
index ef992c1..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-return [
-    'TYPO3\\CMS\\Frontend\\View\\AdminPanelView' => \TYPO3\CMS\Adminpanel\View\AdminPanelView::class,
-    'TYPO3\\CMS\\Frontend\\View\\AdminPanelViewHookInterface' => \TYPO3\CMS\Adminpanel\View\AdminPanelViewHookInterface::class
-];
diff --git a/typo3/sysext/adminpanel/Migrations/Code/LegacyClassesForIde.php b/typo3/sysext/adminpanel/Migrations/Code/LegacyClassesForIde.php
deleted file mode 100644 (file)
index c067ba5..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-namespace {
-    die('Access denied');
-}
-
-namespace TYPO3\CMS\Frontend\View {
-    class AdminPanelView extends \TYPO3\CMS\Adminpanel\View\AdminPanelView
-    {
-    }
-    interface AdminPanelViewHookInterface extends \TYPO3\CMS\Adminpanel\View\AdminPanelViewHookInterface
-    {
-    }
-}
index 5890b88..f3a6b77 100644 (file)
                                "partOfFactoryDefault": true
                        },
                        "extension-key": "adminpanel"
-               },
-               "typo3/class-alias-loader": {
-                       "class-alias-maps": [
-                               "Migrations/Code/ClassAliasMap.php"
-                       ]
                }
        },
        "autoload": {
index 891a3a1..cbacd41 100644 (file)
@@ -18,22 +18,16 @@ use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
 use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Context\LanguageAspect;
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Database\Query\QueryBuilder;
-use TYPO3\CMS\Core\Database\Query\QueryHelper;
-use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
-use TYPO3\CMS\Core\Localization\LanguageService;
 use TYPO3\CMS\Core\Type\Bitmask\Permission;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
- * TYPO3 backend user authentication in the TSFE frontend.
- * This includes mainly functions related to the Admin Panel
+ * TYPO3 backend user authentication in the Frontend rendering.
+ *
  * @internal This class is a TYPO3 Backend implementation and is not considered part of the Public TYPO3 API.
  */
 class FrontendBackendUserAuthentication extends BackendUserAuthentication
 {
-
     /**
      * Form field with login name.
      *
@@ -71,129 +65,6 @@ class FrontendBackendUserAuthentication extends BackendUserAuthentication
     public $writeAttemptLog = false;
 
     /**
-     * General flag which is set if the adminpanel is enabled at all.
-     *
-     * @var bool
-     * @deprecated since TYPO3 v9, property will be removed in TYPO3 v10.0 - see extension "adminpanel" for new API
-     */
-    public $extAdmEnabled = false;
-
-    /**
-     * @var \TYPO3\CMS\Adminpanel\View\AdminPanelView Instance of admin panel
-     * @deprecated since TYPO3 v9, property will be removed in TYPO3 v10.0 - see extension "adminpanel" for new API
-     */
-    public $adminPanel;
-
-    /**
-     * @var \TYPO3\CMS\Core\FrontendEditing\FrontendEditingController
-     * @deprecated since TYPO3 v9, property will be removed in TYPO3 v10.0 - see extension "feedit" how the functionality could be used.
-     */
-    public $frontendEdit;
-
-    /**
-     * @var array
-     * @deprecated since TYPO3 v9, property will be removed in TYPO3 v10.0 - see extension "adminpanel" for new API
-     */
-    public $extAdminConfig = [];
-
-    /**
-     * Initializes the admin panel.
-     *
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - rewritten as middleware
-     */
-    public function initializeAdminPanel()
-    {
-        trigger_error('FrontendBackendUserAuthentication->initializeAdminPanel() will be removed in TYPO3 v10.0 - initialization is done via middleware.', E_USER_DEPRECATED);
-    }
-
-    /**
-     * Initializes frontend editing.
-     *
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - rewritten as middleware
-     */
-    public function initializeFrontendEdit()
-    {
-        trigger_error('FrontendBackendUserAuthentication->initializeFrontendEdit() will be removed in TYPO3 v10.0 - initialization is done via middleware.', E_USER_DEPRECATED);
-    }
-
-    /**
-     * Determines whether frontend editing is currently active.
-     *
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0 - see ext "feedit" for API
-     * @return bool Whether frontend editing is active
-     */
-    public function isFrontendEditingActive()
-    {
-        trigger_error('FrontendBackendUserAuthentication->isFrontendEditingActive() will be removed in TYPO3 v10.0 - use underlying TSFE directly.', E_USER_DEPRECATED);
-        return $this->extAdmEnabled && (
-            $this->adminPanel->isAdminModuleEnabled('edit') ||
-            (int)$GLOBALS['TSFE']->displayEditIcons === 1 ||
-            (int)$GLOBALS['TSFE']->displayFieldEditIcons === 1
-        );
-    }
-
-    /**
-     * Delegates to the appropriate view and renders the admin panel content.
-     *
-     * @deprecated since TYPO3 v9 - see ext "adminpanel" for new API
-     * @return string.
-     */
-    public function displayAdminPanel()
-    {
-        trigger_error('FrontendBackendUserAuthentication->displayAdminPanel() will be removed in TYPO3 v10.0 - use MainController of adminpanel extension.', E_USER_DEPRECATED);
-        return $this->adminPanel->display();
-    }
-
-    /**
-     * Determines whether the admin panel is enabled and visible.
-     *
-     * @deprecated since TYPO3 v9 - see ext "adminpanel" for new API
-     * @return bool true if the admin panel is enabled and visible
-     */
-    public function isAdminPanelVisible()
-    {
-        trigger_error('FrontendBackendUserAuthentication->isAdminPanelVisible() will be removed in TYPO3 v10.0 - use new adminpanel API instead.', E_USER_DEPRECATED);
-        return $this->extAdmEnabled && !$this->extAdminConfig['hide'] && $GLOBALS['TSFE']->config['config']['admPanel'];
-    }
-
-    /*****************************************************
-     *
-     * TSFE BE user Access Functions
-     *
-     ****************************************************/
-    /**
-     * Implementing the access checks that the TYPO3 CMS bootstrap script does before a user is ever logged in.
-     * Used in the frontend.
-     *
-     * @return bool Returns TRUE if access is OK
-     * @deprecated since TYPO3 v9.4, will be removed in TYPO3 v10.0.
-     */
-    public function checkBackendAccessSettingsFromInitPhp()
-    {
-        trigger_error('FrontendBackendUserAuthentication->checkBackendAccessSettingsFromInitPhp() will be removed in TYPO3 v10.0. Use a PSR-15 middleware and backendCheckLogin() instead.', E_USER_DEPRECATED);
-        // Check Hardcoded lock on BE
-        if ($GLOBALS['TYPO3_CONF_VARS']['BE']['adminOnly'] < 0) {
-            return false;
-        }
-        // Check IP
-        if (trim($GLOBALS['TYPO3_CONF_VARS']['BE']['IPmaskList'])) {
-            if (!GeneralUtility::cmpIP(GeneralUtility::getIndpEnv('REMOTE_ADDR'), $GLOBALS['TYPO3_CONF_VARS']['BE']['IPmaskList'])) {
-                return false;
-            }
-        }
-        // Check IP mask based on TSconfig
-        if (!$this->checkLockToIP()) {
-            return false;
-        }
-        // Check SSL (https)
-        if ((bool)$GLOBALS['TYPO3_CONF_VARS']['BE']['lockSSL'] && !GeneralUtility::getIndpEnv('TYPO3_SSL')) {
-            return false;
-        }
-        // Finally a check as in BackendUserAuthentication::backendCheckLogin()
-        return $this->isUserAllowedToLogin();
-    }
-
-    /**
      * Implementing the access checks that the TYPO3 CMS bootstrap script does before a user is ever logged in.
      * Used in the frontend.
      *
@@ -217,78 +88,6 @@ class FrontendBackendUserAuthentication extends BackendUserAuthentication
     }
 
     /**
-     * Evaluates if the Backend User has read access to the input page record.
-     * The evaluation is based on both read-permission and whether the page is found in one of the users webmounts.
-     * Only if both conditions match, will the function return TRUE.
-     *
-     * Read access means that previewing is allowed etc.
-     *
-     * Used in \TYPO3\CMS\Frontend\Http\RequestHandler
-     *
-     * @param array $pageRec The page record to evaluate for
-     * @return bool TRUE if read access
-     * @deprecated since TYPO3 v9.5, will be removed in TYPO3 v10.0. Use underlying calls directly.
-     */
-    public function extPageReadAccess($pageRec)
-    {
-        trigger_error('FrontendBackendUserAuthentication->extPageReadAccess() will be removed in TYPO3 v10.0.', E_USER_DEPRECATED);
-        return $this->isInWebMount($pageRec['uid']) && $this->doesUserHaveAccess($pageRec, Permission::PAGE_SHOW);
-    }
-
-    /*****************************************************
-     *
-     * TSFE BE user Access Functions
-     *
-     ****************************************************/
-    /**
-     * Generates a list of Page-uid's from $id. List does not include $id itself
-     * The only pages excluded from the list are deleted pages.
-     *
-     * @param int $id Start page id
-     * @param int $depth Depth to traverse down the page tree.
-     * @param int $begin Is an optional integer that determines at which level in the tree to start collecting uid's. Zero means 'start right away', 1 = 'next level and out'
-     * @param string $perms_clause Perms clause
-     * @return string Returns the list with a comma in the end (if any pages selected!)
-     * @deprecated since TYPO3 v9.5, will be removed in TYPO3 v10.0.
-     */
-    public function extGetTreeList($id, $depth, $begin = 0, $perms_clause)
-    {
-        trigger_error('FrontendBackendUserAuthentication->extGetTreeList() will be removed in TYPO3 v10.0.', E_USER_DEPRECATED);
-        /** @var QueryBuilder $queryBuilder */
-        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getQueryBuilderForTable('pages');
-
-        $queryBuilder->getRestrictions()
-            ->removeAll()
-            ->add(GeneralUtility::makeInstance(DeletedRestriction::class));
-
-        $depth = (int)$depth;
-        $begin = (int)$begin;
-        $id = (int)$id;
-        $theList = '';
-        if ($id && $depth > 0) {
-            $result = $queryBuilder
-                ->select('uid', 'title')
-                ->from('pages')
-                ->where(
-                    $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($id, \PDO::PARAM_INT)),
-                    $queryBuilder->expr()->eq('sys_language_uid', 0),
-                    QueryHelper::stripLogicalOperatorPrefix($perms_clause)
-                )
-                ->execute();
-            while ($row = $result->fetch()) {
-                if ($begin <= 0) {
-                    $theList .= $row['uid'] . ',';
-                }
-                if ($depth > 1) {
-                    $theList .= $this->extGetTreeList($row['uid'], $depth - 1, $begin - 1, $perms_clause);
-                }
-            }
-        }
-        return $theList;
-    }
-
-    /**
      * Edit Access
      */
 
@@ -403,40 +202,4 @@ class FrontendBackendUserAuthentication extends BackendUserAuthentication
         }
         return $allow;
     }
-
-    /*****************************************************
-     *
-     * Localization handling
-     *
-     ****************************************************/
-    /**
-     * Returns the label for key. If a translation for the language set in $this->uc['lang']
-     * is found that is returned, otherwise the default value.
-     * If the global variable $LOCAL_LANG is NOT an array (yet) then this function loads
-     * the global $LOCAL_LANG array with the content of "EXT:core/Resources/Private/Language/locallang_tsfe.xlf"
-     * such that the values therein can be used for labels in the Admin Panel
-     *
-     * @param string $key Key for a label in the $GLOBALS['LOCAL_LANG'] array of "EXT:core/Resources/Private/Language/locallang_tsfe.xlf
-     * @return string The value for the $key
-     * @deprecated since TYPO3 v9.5, will be removed in TYPO3 v10.0.
-     */
-    public function extGetLL($key)
-    {
-        trigger_error('FrontendBackendUserAuthentication->extGetLL() will be removed in TYPO3 v10.0.', E_USER_DEPRECATED);
-        if (!is_array($GLOBALS['LOCAL_LANG'])) {
-            $this->getLanguageService()->includeLLFile('EXT:core/Resources/Private/Language/locallang_tsfe.xlf');
-            if (!is_array($GLOBALS['LOCAL_LANG'])) {
-                $GLOBALS['LOCAL_LANG'] = [];
-            }
-        }
-        return htmlspecialchars($this->getLanguageService()->getLL($key));
-    }
-
-    /**
-     * @return LanguageService
-     */
-    protected function getLanguageService()
-    {
-        return $GLOBALS['LANG'];
-    }
 }
diff --git a/typo3/sysext/core/Classes/FrontendEditing/FrontendEditingController.php b/typo3/sysext/core/Classes/FrontendEditing/FrontendEditingController.php
deleted file mode 100644 (file)
index fd82c57..0000000
+++ /dev/null
@@ -1,633 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\FrontendEditing;
-
-/*
- * 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\Adminpanel\View\AdminPanelView;
-use TYPO3\CMS\Backend\FrontendBackendUserAuthentication;
-use TYPO3\CMS\Backend\Utility\BackendUtility;
-use TYPO3\CMS\Core\Context\Context;
-use TYPO3\CMS\Core\Context\LanguageAspect;
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Database\Query\Restriction\EndTimeRestriction;
-use TYPO3\CMS\Core\Database\Query\Restriction\FrontendGroupRestriction;
-use TYPO3\CMS\Core\Database\Query\Restriction\HiddenRestriction;
-use TYPO3\CMS\Core\Database\Query\Restriction\StartTimeRestriction;
-use TYPO3\CMS\Core\DataHandling\DataHandler;
-use TYPO3\CMS\Core\Type\Bitmask\Permission;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
-
-/**
- * Controller class for frontend editing.
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Functionality has been moved to EXT:feedit, FrontendBackendUserAuthentication and ContentObjectRenderer.
- */
-class FrontendEditingController
-{
-    /**
-     * GET/POST parameters for the FE editing.
-     * Accessed as $GLOBALS['BE_USER']->frontendEdit->TSFE_EDIT, thus public
-     *
-     * @var array
-     */
-    public $TSFE_EDIT;
-
-    public function __construct()
-    {
-        trigger_error(__CLASS__ . ' will be removed in TYPO3 v10.0. Functionality has been moved to EXT:feedit, FrontendBackendUserAuthentication and ContentObjectRenderer.', E_USER_DEPRECATED);
-    }
-
-    /**
-     * Initializes configuration options.
-     */
-    public function initConfigOptions()
-    {
-        $this->TSFE_EDIT = GeneralUtility::_GP('TSFE_EDIT');
-        // Include classes for editing IF editing module in Admin Panel is open
-        if (((int)$this->getTypoScriptFrontendController()->displayEditIcons === 1
-            || (int)$this->getTypoScriptFrontendController()->displayFieldEditIcons === 1)
-            && $this->isEditAction()
-        ) {
-            $this->editAction();
-        }
-    }
-
-    /**
-     * Generates the "edit panels" which can be shown for a page or records on a page when the Admin Panel is enabled for a backend users surfing the frontend.
-     * With the "edit panel" the user will see buttons with links to editing, moving, hiding, deleting the element
-     * This function is used for the cObject EDITPANEL and the stdWrap property ".editPanel"
-     *
-     * @param string $content A content string containing the content related to the edit panel. For cObject "EDITPANEL" this is empty but not so for the stdWrap property. The edit panel is appended to this string and returned.
-     * @param array $conf TypoScript configuration properties for the editPanel
-     * @param string $currentRecord The "table:uid" of the record being shown. If empty string then $this->currentRecord is used. For new records (set by $conf['newRecordFromTable']) it's auto-generated to "[tablename]:NEW
-     * @param array $dataArray Alternative data array to use. Default is $this->data
-     * @return string The input content string with the editPanel appended. This function returns only an edit panel appended to the content string if a backend user is logged in (and has the correct permissions). Otherwise the content string is directly returned.
-     */
-    public function displayEditPanel($content, array $conf, $currentRecord, array $dataArray)
-    {
-        if ($conf['newRecordFromTable']) {
-            $currentRecord = $conf['newRecordFromTable'] . ':NEW';
-            $conf['allow'] = 'new';
-            $checkEditAccessInternals = false;
-        } else {
-            $checkEditAccessInternals = true;
-        }
-        list($table, $uid) = explode(':', $currentRecord);
-        // Page ID for new records, 0 if not specified
-        $newRecordPid = (int)$conf['newRecordInPid'];
-        $newUid = null;
-        if (!$conf['onlyCurrentPid'] || $dataArray['pid'] == $this->getTypoScriptFrontendController()->id) {
-            if ($table === 'pages') {
-                $newUid = $uid;
-            } else {
-                if ($conf['newRecordFromTable']) {
-                    $newUid = $this->getTypoScriptFrontendController()->id;
-                    if ($newRecordPid) {
-                        $newUid = $newRecordPid;
-                    }
-                } else {
-                    $newUid = -1 * $uid;
-                }
-            }
-        }
-        if ($this->getTypoScriptFrontendController()->displayEditIcons && $table && $this->allowedToEdit($table, $dataArray, $conf, $checkEditAccessInternals) && $this->allowedToEditLanguage($table, $dataArray)) {
-            $editClass = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/classes/class.frontendedit.php']['edit'];
-            if ($editClass) {
-                $edit = GeneralUtility::makeInstance($editClass);
-                $allowedActions = $this->getAllowedEditActions($table, $conf, $dataArray['pid']);
-                $content = $edit->editPanel($content, $conf, $currentRecord, $dataArray, $table, $allowedActions, $newUid, $this->getHiddenFields($dataArray));
-            }
-        }
-        return $content;
-    }
-
-    /**
-     * Adds an edit icon to the content string. The edit icon links to FormEngine with proper parameters for editing the table/fields of the context.
-     * This implements TYPO3 context sensitive editing facilities. Only backend users will have access (if properly configured as well).
-     *
-     * @param string $content The content to which the edit icons should be appended
-     * @param string $params The parameters defining which table and fields to edit. Syntax is [tablename]:[fieldname],[fieldname],[fieldname],... OR [fieldname],[fieldname],[fieldname],... (basically "[tablename]:" is optional, default table is the one of the "current record" used in the function). The fieldlist is sent as "&columnsOnly=" parameter to FormEngine
-     * @param array $conf TypoScript properties for configuring the edit icons.
-     * @param string $currentRecord The "table:uid" of the record being shown. If empty string then $this->currentRecord is used. For new records (set by $conf['newRecordFromTable']) it's auto-generated to "[tablename]:NEW
-     * @param array $dataArray Alternative data array to use. Default is $this->data
-     * @param string $addUrlParamStr Additional URL parameters for the link pointing to FormEngine
-     * @return string The input content string, possibly with edit icons added (not necessarily in the end but just after the last string of normal content.
-     */
-    public function displayEditIcons($content, $params, array $conf = [], $currentRecord = '', array $dataArray = [], $addUrlParamStr = '')
-    {
-        // Check incoming params:
-        list($currentRecordTable, $currentRecordUID) = explode(':', $currentRecord);
-        list($fieldList, $table) = array_reverse(GeneralUtility::trimExplode(':', $params, true));
-        // Reverse the array because table is optional
-        if (!$table) {
-            $table = $currentRecordTable;
-        } elseif ($table != $currentRecordTable) {
-            // If the table is set as the first parameter, and does not match the table of the current record, then just return.
-            return $content;
-        }
-        $editUid = $dataArray['_LOCALIZED_UID'] ?: $currentRecordUID;
-        // Edit icons imply that the editing action is generally allowed, assuming page and content element permissions permit it.
-        if (!array_key_exists('allow', $conf)) {
-            $conf['allow'] = 'edit';
-        }
-        if ($this->getTypoScriptFrontendController()->displayFieldEditIcons && $table && $this->allowedToEdit($table, $dataArray, $conf) && $fieldList && $this->allowedToEditLanguage($table, $dataArray)) {
-            $editClass = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/classes/class.frontendedit.php']['edit'];
-            if ($editClass) {
-                $edit = GeneralUtility::makeInstance($editClass);
-                $content = $edit->editIcons($content, $params, $conf, $currentRecord, $dataArray, $addUrlParamStr, $table, $editUid, $fieldList);
-            }
-        }
-        return $content;
-    }
-
-    /*****************************************************
-     *
-     * Frontend Editing
-     *
-     ****************************************************/
-    /**
-     * Returns TRUE if an edit-action is sent from the Admin Panel
-     *
-     * @return bool
-     */
-    public function isEditAction()
-    {
-        if (is_array($this->TSFE_EDIT)) {
-            if ($this->TSFE_EDIT['cancel']) {
-                unset($this->TSFE_EDIT['cmd']);
-            } else {
-                $cmd = (string)$this->TSFE_EDIT['cmd'];
-                if (($cmd !== 'edit' || is_array($this->TSFE_EDIT['data']) && ($this->TSFE_EDIT['doSave'] || $this->TSFE_EDIT['update'] || $this->TSFE_EDIT['update_close'])) && $cmd !== 'new') {
-                    // $cmd can be a command like "hide" or "move". If $cmd is "edit" or "new" it's an indication to show the formfields. But if data is sent with update-flag then $cmd = edit is accepted because edit may be sent because of .keepGoing flag.
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns TRUE if an edit form is shown on the page.
-     *
-     * @return bool
-     */
-    public function isEditFormShown()
-    {
-        if (is_array($this->TSFE_EDIT)) {
-            $cmd = (string)$this->TSFE_EDIT['cmd'];
-            if ($cmd === 'edit' || $cmd === 'new') {
-                return true;
-            }
-        }
-    }
-
-    /**
-     * Management of the on-page frontend editing forms and edit panels.
-     * Basically taking in the data and commands and passes them on to the proper classes as they should be.
-     *
-     * @throws \UnexpectedValueException if TSFE_EDIT[cmd] is not a valid command
-     */
-    public function editAction()
-    {
-        // Commands
-        list($table, $uid) = explode(':', $this->TSFE_EDIT['record']);
-        $uid = (int)$uid;
-        $cmd = $this->TSFE_EDIT['cmd'];
-        // Look for some TSFE_EDIT data that indicates we should save.
-        if (($this->TSFE_EDIT['doSave'] || $this->TSFE_EDIT['update'] || $this->TSFE_EDIT['update_close']) && is_array($this->TSFE_EDIT['data'])) {
-            $cmd = 'save';
-        }
-        if ($cmd === 'save' || $cmd && $table && $uid && isset($GLOBALS['TCA'][$table])) {
-            // Hook for defining custom editing actions. Naming is incorrect, but preserves compatibility.
-            $_params = [];
-            foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['extEditAction'] ?? [] as $_funcRef) {
-                GeneralUtility::callUserFunction($_funcRef, $_params, $this);
-            }
-            // Perform the requested editing command.
-            $cmdAction = 'do' . ucwords($cmd);
-            if (is_callable([$this, $cmdAction])) {
-                $this->{$cmdAction}($table, $uid);
-            } else {
-                throw new \UnexpectedValueException('The specified frontend edit command (' . $cmd . ') is not valid.', 1225818120);
-            }
-        }
-    }
-
-    /**
-     * Hides a specific record.
-     *
-     * @param string $table The table name for the record to hide.
-     * @param int $uid The UID for the record to hide.
-     */
-    public function doHide($table, $uid)
-    {
-        $hideField = $GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled'];
-        if ($hideField) {
-            $recData = [];
-            $recData[$table][$uid][$hideField] = 1;
-            $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
-            $dataHandler->start($recData, []);
-            $dataHandler->process_datamap();
-        }
-    }
-
-    /**
-     * Unhides (shows) a specific record.
-     *
-     * @param string $table The table name for the record to unhide.
-     * @param int $uid The UID for the record to unhide.
-     */
-    public function doUnhide($table, $uid)
-    {
-        $hideField = $GLOBALS['TCA'][$table]['ctrl']['enablecolumns']['disabled'];
-        if ($hideField) {
-            $recData = [];
-            $recData[$table][$uid][$hideField] = 0;
-            $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
-            $dataHandler->start($recData, []);
-            $dataHandler->process_datamap();
-        }
-    }
-
-    /**
-     * Moves a record up.
-     *
-     * @param string $table The table name for the record to move.
-     * @param int $uid The UID for the record to hide.
-     */
-    public function doUp($table, $uid)
-    {
-        $this->move($table, $uid, 'up');
-    }
-
-    /**
-     * Moves a record down.
-     *
-     * @param string $table The table name for the record to move.
-     * @param int $uid The UID for the record to move.
-     */
-    public function doDown($table, $uid)
-    {
-        $this->move($table, $uid, 'down');
-    }
-
-    /**
-     * Moves a record after a given element. Used for drag.
-     *
-     * @param string $table The table name for the record to move.
-     * @param int $uid The UID for the record to move.
-     */
-    public function doMoveAfter($table, $uid)
-    {
-        $afterUID = $this->TSFE_EDIT['moveAfter'];
-        $this->move($table, $uid, '', $afterUID);
-    }
-
-    /**
-     * Moves a record
-     *
-     * @param string $table The table name for the record to move.
-     * @param int $uid The UID for the record to move.
-     * @param string $direction The direction to move, either 'up' or 'down'.
-     * @param int $afterUID The UID of record to move after. This is specified for dragging only.
-     */
-    protected function move($table, $uid, $direction = '', $afterUID = 0)
-    {
-        $dataHandlerCommands = [];
-        $sortField = $GLOBALS['TCA'][$table]['ctrl']['sortby'];
-        if ($sortField) {
-            // Get the current record
-            // Only fetch uid, pid and the fields that are necessary to detect the sorting factors
-            if (isset($GLOBALS['TCA'][$table]['ctrl']['copyAfterDuplFields'])) {
-                $copyAfterDuplicateFields = GeneralUtility::trimExplode(',', $GLOBALS['TCA'][$table]['ctrl']['copyAfterDuplFields'], true);
-            } else {
-                $copyAfterDuplicateFields = [];
-            }
-
-            $fields = $copyAfterDuplicateFields;
-            $fields[] = 'uid';
-            $fields[] = 'pid';
-            $fields[] = $sortField;
-            $fields = array_unique($fields);
-
-            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                ->getQueryBuilderForTable($table);
-            $queryBuilder->getRestrictions()->removeAll();
-
-            $currentRecord = $queryBuilder
-                ->select(...$fields)
-                ->from($table)
-                ->where($queryBuilder->expr()->eq(
-                    'uid',
-                    $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)
-                ))
-                ->execute()
-                ->fetch();
-
-            if (is_array($currentRecord)) {
-                // Fetch the record before or after the current one
-                // to define the data handler commands
-                $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                    ->getQueryBuilderForTable($table);
-
-                $queryBuilder
-                    ->select('uid', 'pid')
-                    ->from($table)
-                    ->where($queryBuilder->expr()->eq(
-                        'pid',
-                        $queryBuilder->createNamedParameter($currentRecord['pid'], \PDO::PARAM_INT)
-                    ))
-                    ->setMaxResults(2);
-
-                // Disable the default restrictions (but not all) if the admin panel is in preview mode
-                if ($this->getBackendUser()->adminPanel instanceof AdminPanelView && $this->getBackendUser()->adminPanel->extGetFeAdminValue('preview')) {
-                    $queryBuilder->getRestrictions()
-                        ->removeByType(StartTimeRestriction::class)
-                        ->removeByType(EndTimeRestriction::class)
-                        ->removeByType(HiddenRestriction::class)
-                        ->removeByType(FrontendGroupRestriction::class);
-                }
-
-                if (!empty($copyAfterDuplicateFields)) {
-                    foreach ($copyAfterDuplicateFields as $fieldName) {
-                        $queryBuilder->andWhere($queryBuilder->expr()->eq(
-                            $fieldName,
-                            $queryBuilder->createNamedParameter($currentRecord[$fieldName], \PDO::PARAM_STR)
-                        ));
-                    }
-                }
-                if (!empty($direction)) {
-                    if ($direction === 'up') {
-                        $queryBuilder->andWhere(
-                            $queryBuilder->expr()->lt(
-                                $sortField,
-                                $queryBuilder->createNamedParameter($currentRecord[$sortField], \PDO::PARAM_INT)
-                            )
-                        );
-                        $queryBuilder->orderBy($sortField, 'DESC');
-                    } else {
-                        $queryBuilder->andWhere(
-                            $queryBuilder->expr()->gt(
-                                $sortField,
-                                $queryBuilder->createNamedParameter($currentRecord[$sortField], \PDO::PARAM_INT)
-                            )
-                        );
-                        $queryBuilder->orderBy($sortField, 'ASC');
-                    }
-                }
-
-                $result = $queryBuilder->execute();
-                if ($recordBefore = $result->fetch()) {
-                    if ($afterUID) {
-                        $dataHandlerCommands[$table][$uid]['move'] = -$afterUID;
-                    } elseif ($direction === 'down') {
-                        $dataHandlerCommands[$table][$uid]['move'] = -$recordBefore['uid'];
-                    } elseif ($recordAfter = $result->fetch()) {
-                        // Must take the second record above...
-                        $dataHandlerCommands[$table][$uid]['move'] = -$recordAfter['uid'];
-                    } else {
-                        // ... and if that does not exist, use pid
-                        $dataHandlerCommands[$table][$uid]['move'] = $currentRecord['pid'];
-                    }
-                } elseif ($direction === 'up') {
-                    $dataHandlerCommands[$table][$uid]['move'] = $currentRecord['pid'];
-                }
-            }
-
-            // If any data handler commands were set, execute the data handler command
-            if (!empty($dataHandlerCommands)) {
-                $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
-                $dataHandler->start([], $dataHandlerCommands);
-                $dataHandler->process_cmdmap();
-            }
-        }
-    }
-
-    /**
-     * Deletes a specific record.
-     *
-     * @param string $table The table name for the record to delete.
-     * @param int $uid The UID for the record to delete.
-     */
-    public function doDelete($table, $uid)
-    {
-        $cmdData[$table][$uid]['delete'] = 1;
-        if (!empty($cmdData)) {
-            $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
-            $dataHandler->start([], $cmdData);
-            $dataHandler->process_cmdmap();
-        }
-    }
-
-    /**
-     * Saves a record based on its data array.
-     *
-     * @param string $table The table name for the record to save.
-     * @param int $uid The UID for the record to save.
-     */
-    public function doSave($table, $uid)
-    {
-        $data = $this->TSFE_EDIT['data'];
-        if (!empty($data)) {
-            $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
-            $dataHandler->start($data, []);
-            $dataHandler->process_uploads($_FILES);
-            $dataHandler->process_datamap();
-            // Save the new UID back into TSFE_EDIT
-            $newUID = $dataHandler->substNEWwithIDs['NEW'];
-            if ($newUID) {
-                $this->TSFE_EDIT['newUID'] = $newUID;
-            }
-        }
-    }
-
-    /**
-     * Saves a record based on its data array and closes it.
-     * Note: This method is only a wrapper for doSave() but is needed so
-     *
-     * @param string $table The table name for the record to save.
-     * @param int $uid The UID for the record to save.
-     */
-    public function doSaveAndClose($table, $uid)
-    {
-        $this->doSave($table, $uid);
-    }
-
-    /**
-     * Stub for closing a record. No real functionality needed since content
-     * element rendering will take care of everything.
-     *
-     * @param string $table The table name for the record to close.
-     * @param int $uid The UID for the record to close.
-     */
-    public function doClose($table, $uid)
-    {
-    }
-
-    /**
-     * Checks whether the user has access to edit the language for the
-     * requested record.
-     *
-     * @param string $table The name of the table.
-     * @param array $currentRecord The record.
-     * @return bool
-     */
-    protected function allowedToEditLanguage($table, array $currentRecord)
-    {
-        // If no access right to record languages, return immediately
-        /** @var LanguageAspect $languageAspect */
-        $languageAspect = GeneralUtility::makeInstance(Context::class)->getAspect('language');
-        if ($table === 'pages') {
-            $lang = $languageAspect->getId();
-        } elseif ($table === 'tt_content') {
-            $lang = $languageAspect->getContentId();
-        } elseif ($GLOBALS['TCA'][$table]['ctrl']['languageField']) {
-            $lang = $currentRecord[$GLOBALS['TCA'][$table]['ctrl']['languageField']];
-        } else {
-            $lang = -1;
-        }
-        return $this->getBackendUser()->checkLanguageAccess($lang);
-    }
-
-    /**
-     * Checks whether the user is allowed to edit the requested table.
-     *
-     * @param string $table The name of the table.
-     * @param array $dataArray The data array.
-     * @param array $conf The configuration array for the edit panel.
-     * @param bool $checkEditAccessInternals Boolean indicating whether recordEditAccessInternals should not be checked. Defaults
-     * @return bool
-     */
-    protected function allowedToEdit($table, array $dataArray, array $conf, $checkEditAccessInternals = true)
-    {
-        // Unless permissions specifically allow it, editing is not allowed.
-        $mayEdit = false;
-        if ($checkEditAccessInternals) {
-            $editAccessInternals = $this->getBackendUser()->recordEditAccessInternals($table, $dataArray, false, false);
-        } else {
-            $editAccessInternals = true;
-        }
-        if ($editAccessInternals) {
-            if ($table === 'pages') {
-                if ($this->getBackendUser()->isAdmin() || $this->getBackendUser()->doesUserHaveAccess($dataArray, Permission::PAGE_EDIT)) {
-                    $mayEdit = true;
-                }
-            } else {
-                if ($this->getBackendUser()->isAdmin() || $this->getBackendUser()->doesUserHaveAccess(BackendUtility::getRecord('pages', $dataArray['pid']), Permission::CONTENT_EDIT)) {
-                    $mayEdit = true;
-                }
-            }
-            if (!$conf['onlyCurrentPid'] || $dataArray['pid'] == $this->getTypoScriptFrontendController()->id) {
-                // Permissions:
-                $types = GeneralUtility::trimExplode(',', strtolower($conf['allow']), true);
-                $allow = array_flip($types);
-                $perms = $this->getBackendUser()->calcPerms($this->getTypoScriptFrontendController()->page);
-                if ($table === 'pages') {
-                    $allow = $this->getAllowedEditActions($table, $conf, $dataArray['pid'], $allow);
-                    // Can only display editbox if there are options in the menu
-                    if (!empty($allow)) {
-                        $mayEdit = true;
-                    }
-                } else {
-                    $mayEdit = !empty($allow) && $perms & Permission::CONTENT_EDIT;
-                }
-            }
-        }
-        return $mayEdit;
-    }
-
-    /**
-     * Takes an array of generally allowed actions and filters that list based on page and content permissions.
-     *
-     * @param string $table The name of the table.
-     * @param array $conf The configuration array.
-     * @param int $pid The PID where editing will occur.
-     * @param string $allow Comma-separated list of actions that are allowed in general.
-     * @return array
-     */
-    protected function getAllowedEditActions($table, array $conf, $pid, $allow = '')
-    {
-        if (!$allow) {
-            $types = GeneralUtility::trimExplode(',', strtolower($conf['allow']), true);
-            $allow = array_flip($types);
-        }
-        if (!$conf['onlyCurrentPid'] || $pid == $this->getTypoScriptFrontendController()->id) {
-            // Permissions
-            $types = GeneralUtility::trimExplode(',', strtolower($conf['allow']), true);
-            $allow = array_flip($types);
-            $perms = $this->getBackendUser()->calcPerms($this->getTypoScriptFrontendController()->page);
-            if ($table === 'pages') {
-                // Rootpage
-                if (count($this->getTypoScriptFrontendController()->config['rootLine']) === 1) {
-                    unset($allow['move']);
-                    unset($allow['hide']);
-                    unset($allow['delete']);
-                }
-                if (!($perms & Permission::PAGE_EDIT) || !$this->getBackendUser()->checkLanguageAccess(0)) {
-                    unset($allow['edit']);
-                    unset($allow['move']);
-                    unset($allow['hide']);
-                }
-                if (!($perms & Permission::PAGE_DELETE)) {
-                    unset($allow['delete']);
-                }
-                if (!($perms & Permission::PAGE_NEW)) {
-                    unset($allow['new']);
-                }
-            }
-        }
-        return $allow;
-    }
-
-    /**
-     * Adds any extra Javascript includes needed for Front-end editing
-     *
-     * @return string
-     */
-    public function getJavascriptIncludes()
-    {
-        // No extra JS includes needed
-        return '';
-    }
-
-    /**
-     * Gets the hidden fields (array key=field name, value=field value) to be used in the edit panel for a particular content element.
-     * In the normal case, no hidden fields are needed but special controllers such as TemplaVoila need to track flexform pointers, etc.
-     *
-     * @param array $dataArray The data array for a specific content element.
-     * @return array
-     */
-    public function getHiddenFields(array $dataArray)
-    {
-        // No special hidden fields needed.
-        return [];
-    }
-
-    /**
-     * @return FrontendBackendUserAuthentication|null
-     */
-    protected function getBackendUser(): ?FrontendBackendUserAuthentication
-    {
-        return $GLOBALS['BE_USER'] instanceof FrontendBackendUserAuthentication ? $GLOBALS['BE_USER'] : null;
-    }
-
-    /**
-     * @return TypoScriptFrontendController
-     */
-    protected function getTypoScriptFrontendController(): TypoScriptFrontendController
-    {
-        return $GLOBALS['TSFE'];
-    }
-}
index 9d8ed65..a00d146 100644 (file)
@@ -11,6 +11,7 @@ Description
 
 The following PHP classes that have been previously deprecated for v9 have been removed:
 
+* :php:`TYPO3\CMS\Adminpanel\View\AdminPanelView`
 * :php:`TYPO3\CMS\Backend\Controller\LoginFramesetController`
 * :php:`TYPO3\CMS\Backend\Module\AbstractFunctionModule`
 * :php:`TYPO3\CMS\Backend\Module\AbstractModule`
@@ -22,6 +23,7 @@ The following PHP classes that have been previously deprecated for v9 have been
 * :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\SaltedPasswordService`
 * :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\SaltedPasswordsUtility`
 * :php:`TYPO3\CMS\Core\Encoder\JavaScriptEncoder`
+* :php:`TYPO3\CMS\Core\FrontendEditing\FrontendEditingController`
 * :php:`TYPO3\CMS\Core\Integrity\DatabaseIntegrityCheck`
 * :php:`TYPO3\CMS\Core\Log\Writer\RuntimeCacheWriter`
 * :php:`TYPO3\CMS\Core\Package\DependencyResolver`
@@ -39,6 +41,7 @@ The following PHP classes that have been previously deprecated for v9 have been
 
 The following PHP interfaces that have been previously deprecated for v9 have been removed:
 
+* :php:`TYPO3\CMS\Adminpanel\View\AdminPanelViewHookInterface`
 * :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\ComposedPasswordHashInterface`
 
 
@@ -55,6 +58,8 @@ The following PHP class aliases that have been previously deprecated for v9 have
 * :php:`TYPO3\CMS\Extbase\Mvc\Exception\InvalidTemplateResourceException`
 * :php:`TYPO3\CMS\Frontend\Controller\PageInformationController`
 * :php:`TYPO3\CMS\Frontend\Controller\TranslationStatusController`
+* :php:`TYPO3\CMS\Frontend\View\AdminPanelView`
+* :php:`TYPO3\CMS\Frontend\View\AdminPanelViewHookInterface`
 * :php:`TYPO3\CMS\Fluid\Core\Compiler\TemplateCompiler`
 * :php:`TYPO3\CMS\Fluid\Core\Exception`
 * :php:`TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\AbstractNode`
@@ -119,6 +124,15 @@ The following PHP class aliases that have been previously deprecated for v9 have
 
 The following PHP class methods that have been previously deprecated for v9 have been removed:
 
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->initializeAdminPanel()`
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->initializeFrontendEdit()`
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->isFrontendEditingActive()`
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->displayAdminPanel()`
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->isAdminPanelVisible()`
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->checkBackendAccessSettingsFromInitPhp()`
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extPageReadAccess()`
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extGetTreeList()`
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extGetLL()`
 * :php:`TYPO3\CMS\Core\Charset\CharsetConverter->convArray()`
 * :php:`TYPO3\CMS\Core\Charset\CharsetConverter->convCaseFirst()`
 * :php:`TYPO3\CMS\Core\Charset\CharsetConverter->crop()`
@@ -236,6 +250,10 @@ The following methods changed signature according to previous deprecations in v9
 
 The following public class properties have been dropped:
 
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extAdmEnabled`
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->adminPanel`
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->frontendEdit`
+* :php:`TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extAdminConfig`
 * :php:`TYPO3\CMS\Core\Charset\CharsetConverter->synonyms`
 * :php:`TYPO3\CMS\Core\TypoScript\TemplateService->allowedPaths`
 * :php:`TYPO3\CMS\Core\TypoScript\TemplateService->debug`
@@ -296,6 +314,7 @@ The following scheduler tasks have been removed:
 The following user TSconfig options have been dropped:
 
 * Prefix `mod.` to override page TSconfig is ignored
+* `TSFE.frontendEditingController` to override the frontend editing controller in EXT:feedit
 
 
 The following TypoScript options have been dropped:
index f40a8d1..0529cf2 100644 (file)
@@ -16,7 +16,9 @@ namespace TYPO3\CMS\Feedit\DataHandling;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Adminpanel\Utility\StateUtility;
 use TYPO3\CMS\Backend\FrontendBackendUserAuthentication;
+use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\Query\Restriction\EndTimeRestriction;
 use TYPO3\CMS\Core\Database\Query\Restriction\FrontendGroupRestriction;
@@ -24,7 +26,6 @@ use TYPO3\CMS\Core\Database\Query\Restriction\HiddenRestriction;
 use TYPO3\CMS\Core\Database\Query\Restriction\StartTimeRestriction;
 use TYPO3\CMS\Core\DataHandling\DataHandler;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Frontend\View\AdminPanelView;
 
 /**
  * Calls DataHandler and stores data
@@ -208,7 +209,7 @@ class FrontendEditDataHandler
                     ->setMaxResults(2);
 
                 // Disable the default restrictions (but not all) if the admin panel is in preview mode
-                if ($this->user->adminPanel instanceof AdminPanelView && $this->user->adminPanel->extGetFeAdminValue('preview')) {
+                if (StateUtility::isActivatedForUser() && GeneralUtility::makeInstance(Context::class)->getPropertyFromAspect('visibility', 'includeHiddenContent')) {
                     $queryBuilder->getRestrictions()
                         ->removeByType(StartTimeRestriction::class)
                         ->removeByType(EndTimeRestriction::class)
index e450c43..c50fef6 100644 (file)
@@ -23,7 +23,6 @@ use Psr\Http\Server\RequestHandlerInterface;
 use TYPO3\CMS\Backend\FrontendBackendUserAuthentication;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Feedit\DataHandling\FrontendEditDataHandler;
-use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
 
 /**
  * PSR-15 middleware initializing frontend editing
@@ -51,24 +50,7 @@ class FrontendEditInitiator implements MiddlewareInterface
                 foreach ($config['enable.'] as $value) {
                     if ($value) {
                         $parameters = $request->getParsedBody()['TSFE_EDIT'] ?? $request->getQueryParams()['TSFE_EDIT'] ?? null;
-                        $isValidEditAction = $this->isValidEditAction($parameters);
-                        if ($GLOBALS['TSFE'] instanceof TypoScriptFrontendController) {
-                            // Grab the Page TSConfig property that determines which controller to use.
-                            $pageTSConfig = $GLOBALS['TSFE']->getPagesTSconfig();
-                            $controllerKey = $pageTSConfig['TSFE.']['frontendEditingController'] ?? 'default';
-                        } else {
-                            $controllerKey = 'default';
-                        }
-                        /** @deprecated will be removed in TYPO3 v10.0. */
-                        $controllerClassName = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php']['frontendEditingController'][$controllerKey] ?? \TYPO3\CMS\Core\FrontendEditing\FrontendEditingController::class;
-                        if (!empty($controllerClassName)) {
-                            /** @deprecated will be removed in TYPO3 v10.0. */
-                            $GLOBALS['BE_USER']->frontendEdit = GeneralUtility::makeInstance(
-                                $controllerClassName,
-                                $parameters
-                            );
-                        }
-                        if ($isValidEditAction) {
+                        if ($this->isValidEditAction($parameters)) {
                             GeneralUtility::makeInstance(FrontendEditDataHandler::class, $parameters)->editAction();
                         }
                         break;
index ad2a15b..26b205c 100644 (file)
@@ -1934,6 +1934,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-84118-VariousPublicMethodsOfAdminPanelViewDeprecated.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\View\AdminPanelView->isAdminModuleEnabled' => [
@@ -1941,6 +1942,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-84118-VariousPublicMethodsOfAdminPanelViewDeprecated.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\View\AdminPanelView->saveConfigOptions' => [
@@ -1948,6 +1950,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-84118-VariousPublicMethodsOfAdminPanelViewDeprecated.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\View\AdminPanelView->extGetFeAdminValue' => [
@@ -1955,6 +1958,7 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-84118-VariousPublicMethodsOfAdminPanelViewDeprecated.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\View\AdminPanelView->forcePreview' => [
@@ -1962,6 +1966,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-84118-VariousPublicMethodsOfAdminPanelViewDeprecated.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\View\AdminPanelView->isAdminModuleOpen' => [
@@ -1969,6 +1974,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-84118-VariousPublicMethodsOfAdminPanelViewDeprecated.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\View\AdminPanelView->extGetHead' => [
@@ -1976,6 +1982,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-84118-VariousPublicMethodsOfAdminPanelViewDeprecated.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\View\AdminPanelView->linkSectionHeader' => [
@@ -1983,6 +1990,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-84118-VariousPublicMethodsOfAdminPanelViewDeprecated.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\View\AdminPanelView->extGetItem' => [
@@ -1990,6 +1998,7 @@ return [
         'maximumNumberOfArguments' => 5,
         'restFiles' => [
             'Deprecation-84118-VariousPublicMethodsOfAdminPanelViewDeprecated.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Tree\View\ElementBrowserFolderTreeView->ext_isLinkable' => [
@@ -2302,6 +2311,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-84641-DeprecatedAdminPanelRelatedMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->initializeFrontendEdit' => [
@@ -2309,6 +2319,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-84641-DeprecatedAdminPanelRelatedMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->isFrontendEditingActive' => [
@@ -2316,6 +2327,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-84641-DeprecatedAdminPanelRelatedMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->displayAdminPanel' => [
@@ -2323,6 +2335,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-84641-DeprecatedAdminPanelRelatedMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->isAdminPanelVisible' => [
@@ -2330,6 +2343,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-84641-DeprecatedAdminPanelRelatedMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->findDomainRecord' => [
@@ -2729,6 +2743,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-84584-AdminPanelViewIsAdminModuleEnabledAndExt_makeToolbarDeprecated.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Adminpanel\View\AdminPanelView->ext_makeToolBar' => [
@@ -2736,6 +2751,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-84584-AdminPanelViewIsAdminModuleEnabledAndExt_makeToolbarDeprecated.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ]
     ],
     'TYPO3\CMS\Frontend\Page\PageRepository->getRecordsByField' => [
@@ -3464,28 +3480,32 @@ return [
         'numberOfMandatoryArguments' => 0,
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
-            'Deprecation-86288-FrontendBackendUserAuthenticationMethods.rst'
+            'Deprecation-86288-FrontendBackendUserAuthenticationMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extPageReadAccess' => [
         'numberOfMandatoryArguments' => 1,
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
-            'Deprecation-86288-FrontendBackendUserAuthenticationMethods.rst'
+            'Deprecation-86288-FrontendBackendUserAuthenticationMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extGetTreeList' => [
         'numberOfMandatoryArguments' => 3,
         'maximumNumberOfArguments' => 4,
         'restFiles' => [
-            'Deprecation-86288-FrontendBackendUserAuthenticationMethods.rst'
+            'Deprecation-86288-FrontendBackendUserAuthenticationMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extGetLL' => [
         'numberOfMandatoryArguments' => 1,
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
-            'Deprecation-86288-FrontendBackendUserAuthenticationMethods.rst'
+            'Deprecation-86288-FrontendBackendUserAuthenticationMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Cli\Command->isFlushingCaches' => [
index e5a1128..37f59a3 100644 (file)
@@ -835,21 +835,25 @@ return [
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->adminPanel' => [
         'restFiles' => [
             'Deprecation-84641-DeprecatedAdminPanelRelatedMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extAdminConfig' => [
         'restFiles' => [
             'Deprecation-84641-DeprecatedAdminPanelRelatedMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->extAdmEnabled' => [
         'restFiles' => [
             'Deprecation-84641-DeprecatedAdminPanelRelatedMethods.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->frontendEdit' => [
         'restFiles' => [
             'Deprecation-86110-FrontendEditingController.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->ADMCMD_preview_BEUSER_uid' => [