[!!!][TASK] Remove deprecated Extbase-related code 41/59241/6
authorBenni Mack <benni@typo3.org>
Thu, 20 Dec 2018 13:17:42 +0000 (14:17 +0100)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Thu, 20 Dec 2018 17:26:38 +0000 (18:26 +0100)
* Cli functionality
* annotations @cli @internal @flushesCaches
* config.tx_extbase.objects
* plugin.tx_%plugin%.objects

Resolves: #87246
Releases: master
Change-Id: Ic53699f5aa0219d418fe4e385157c90c2083dce8
Reviewed-on: https://review.typo3.org/59241
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Alexander Schnitzler <typo3@alexanderschnitzler.de>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
46 files changed:
typo3/sysext/core/Documentation/Changelog/master/Breaking-87193-DeprecatedFunctionalityRemoved.rst
typo3/sysext/extbase/Classes/Command/CoreCommand.php [deleted file]
typo3/sysext/extbase/Classes/Command/ExtbaseCommand.php [deleted file]
typo3/sysext/extbase/Classes/Command/HelpCommand.php [deleted file]
typo3/sysext/extbase/Classes/Command/HelpCommandController.php [deleted file]
typo3/sysext/extbase/Classes/Core/Bootstrap.php
typo3/sysext/extbase/Classes/Mvc/Cli/Command.php [deleted file]
typo3/sysext/extbase/Classes/Mvc/Cli/CommandArgumentDefinition.php [deleted file]
typo3/sysext/extbase/Classes/Mvc/Cli/CommandManager.php [deleted file]
typo3/sysext/extbase/Classes/Mvc/Cli/ConsoleOutput.php [deleted file]
typo3/sysext/extbase/Classes/Mvc/Cli/Request.php [deleted file]
typo3/sysext/extbase/Classes/Mvc/Cli/RequestBuilder.php [deleted file]
typo3/sysext/extbase/Classes/Mvc/Cli/RequestHandler.php [deleted file]
typo3/sysext/extbase/Classes/Mvc/Cli/Response.php [deleted file]
typo3/sysext/extbase/Classes/Mvc/Controller/CommandController.php [deleted file]
typo3/sysext/extbase/Classes/Mvc/Controller/CommandControllerInterface.php [deleted file]
typo3/sysext/extbase/Classes/Mvc/Exception/AmbiguousCommandIdentifierException.php [deleted file]
typo3/sysext/extbase/Classes/Mvc/Exception/CommandException.php [deleted file]
typo3/sysext/extbase/Classes/Reflection/ClassSchema.php
typo3/sysext/extbase/Classes/Scheduler/FieldProvider.php [deleted file]
typo3/sysext/extbase/Classes/Scheduler/Task.php [deleted file]
typo3/sysext/extbase/Classes/Scheduler/TaskExecutor.php [deleted file]
typo3/sysext/extbase/Classes/Service/EnvironmentService.php
typo3/sysext/extbase/Configuration/Commands.php [deleted file]
typo3/sysext/extbase/Resources/Private/Language/locallang_db.xlf
typo3/sysext/extbase/Tests/Unit/Scheduler/FieldProviderTest.php [deleted file]
typo3/sysext/extbase/Tests/Unit/Scheduler/Fixtures/MockACommandController.php [deleted file]
typo3/sysext/extbase/Tests/Unit/Scheduler/Fixtures/MockBCommandController.php [deleted file]
typo3/sysext/extbase/Tests/Unit/Scheduler/Fixtures/MockCCommandController.php [deleted file]
typo3/sysext/extbase/Tests/Unit/Scheduler/TaskTest.php [deleted file]
typo3/sysext/extbase/Tests/UnitDeprecated/Core/BootstrapTest.php [deleted file]
typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/CommandManagerTest.php [deleted file]
typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/CommandTest.php [deleted file]
typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/Fixture/Command/MockACommandController.php [deleted file]
typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/Fixture/Command/MockBCommandController.php [deleted file]
typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/Fixture/Command/MockCCommandController.php [deleted file]
typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/RequestBuilderTest.php [deleted file]
typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/RequestTest.php [deleted file]
typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Controller/CommandControllerTest.php [deleted file]
typo3/sysext/extbase/ext_localconf.php
typo3/sysext/extbase/ext_typoscript_setup.typoscript
typo3/sysext/extensionmanager/Classes/Command/ExtensionCommandController.php [deleted file]
typo3/sysext/fluid/Classes/Core/Widget/Bootstrap.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/ClassNameMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodAnnotationMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php

index e8ad6c2..0053285 100644 (file)
@@ -33,6 +33,25 @@ The following PHP classes that have been previously deprecated for v9 have been
 * :php:`TYPO3\CMS\Core\Resource\Utility\BackendUtility`
 * :php:`TYPO3\CMS\Core\Utility\ClientUtility`
 * :php:`TYPO3\CMS\Core\Utility\PhpOptionsUtility`
+* :php:`TYPO3\CMS\Extbase\Command\CoreCommand`
+* :php:`TYPO3\CMS\Extbase\Command\ExtbaseCommand`
+* :php:`TYPO3\CMS\Extbase\Command\HelpCommand`
+* :php:`TYPO3\CMS\Extbase\Command\HelpCommandController`
+* :php:`TYPO3\CMS\Extbase\Mvc\Cli\Command`
+* :php:`TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition`
+* :php:`TYPO3\CMS\Extbase\Mvc\Cli\CommandManager`
+* :php:`TYPO3\CMS\Extbase\Mvc\Cli\ConsoleOutput`
+* :php:`TYPO3\CMS\Extbase\Mvc\Cli\Request`
+* :php:`TYPO3\CMS\Extbase\Mvc\Cli\RequestBuilder`
+* :php:`TYPO3\CMS\Extbase\Mvc\Cli\RequestHandler`
+* :php:`TYPO3\CMS\Extbase\Mvc\Cli\Response`
+* :php:`TYPO3\CMS\Extbase\Mvc\Cli\Controller\CommandController`
+* :php:`TYPO3\CMS\Extbase\Mvc\Exception\AmbiguousCommandIdentifierException`
+* :php:`TYPO3\CMS\Extbase\Mvc\Exception\CommandException`
+* :php:`TYPO3\CMS\Extbase\Scheduler\FieldProvider`
+* :php:`TYPO3\CMS\Extbase\Scheduler\Task`
+* :php:`TYPO3\CMS\Extbase\Scheduler\TaskExecutor`
+* :php:`TYPO3\CMS\Extensionmanager\Command\ExtensionCommandController`
 * :php:`TYPO3\CMS\Frontend\Http\EidRequestHandler`
 * :php:`TYPO3\CMS\Frontend\Page\ExternalPageUrlHandler`
 * :php:`TYPO3\CMS\Frontend\Page\PageGenerator`
@@ -47,6 +66,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\Extbase\Mvc\Cli\Controller\CommandControllerInterface`
 * :php:`TYPO3\CMS\Core\Crypto\PasswordHashing\ComposedPasswordHashInterface`
 * :php:`TYPO3\CMS\Frontend\Http\UrlHandlerInterface`
 
@@ -253,6 +273,9 @@ The following PHP class methods that have been previously deprecated for v9 have
 * :php:`TYPO3\CMS\Core\Utility\GeneralUtility->logDeprecatedViewHelperAttribute()`
 * :php:`TYPO3\CMS\Core\Utility\GeneralUtility->sysLog()`
 * :php:`TYPO3\CMS\Core\Utility\GeneralUtility->unQuoteFilenames()`
+* :php:`TYPO3\CMS\Extbase\Core\Bootstrap->configureObjectManager()`
+* :php:`TYPO3\CMS\Extbase\Service\EnvironmentService->isEnvironmentInCliMode`
+* :php:`TYPO3\CMS\Fluid\Core\Widget\Bootstrap->configureObjectManager()`
 * :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->addParams()`
 * :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->calcIntExplode()`
 * :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->currentPageUrl()`
@@ -596,6 +619,7 @@ The following class properties have changed visibility:
 
 The following scheduler tasks have been removed:
 
+* EXT:extbase Task
 * EXT:workspaces CleanupPreviewLinkTask
 * EXT:workspaces AutoPublishTask
 
@@ -611,10 +635,12 @@ The following TypoScript options have been dropped:
 * `config.concatenateJsAndCss`
 * `config.titleTagFunction`
 * `config.typolinkCheckRootline`
+* `config.tx_extbase.objects`
 * `config.USERNAME_substToken`
 * `config.USERUID_substToken`
 * `page.javascriptLibs`
 * `page.javascriptLibs.jQuery`
+* `plugin.tx_%plugin%.objects`
 * `stdWrap.addParams`
 * `stdWrap.filelink`
 * `stdWrap.filelist`
@@ -699,9 +725,12 @@ The following database fields have been removed:
 
 The following php doc annotations have been removed:
 
-* `@inject`
 * `@cascade`
+* `@cli`
+* `@flushesCaches`
 * `@ignorevalidation`
+* `@inject`
+* `@internal`
 * `@lazy`
 
 Impact
diff --git a/typo3/sysext/extbase/Classes/Command/CoreCommand.php b/typo3/sysext/extbase/Classes/Command/CoreCommand.php
deleted file mode 100644 (file)
index 5a1a1bd..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Command;
-
-/*
- * 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 Symfony\Component\Console\Application;
-use Symfony\Component\Console\Command\Command;
-use TYPO3\CMS\Core\Package\FailsafePackageManager;
-use TYPO3\CMS\Core\Package\PackageManager;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Core\Bootstrap;
-use TYPO3\CMS\Extbase\Mvc\Cli\CommandManager;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
-
-/**
- * Main call to register any Extbase command from Extbase command controllers
- *
- * Fetches all registered Extbase commands and adds them to the application as custom Extbase commands
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class CoreCommand extends Command
-{
-    /**
-     * @var Bootstrap
-     */
-    protected $extbaseBootstrap;
-
-    /**
-     * Configure the command, since this is a command
-     */
-    protected function configure()
-    {
-        $this->setHidden(true);
-    }
-
-    /**
-     * Sets the application instance for this command.
-     * This is done in setApplication() because configure() is called too early to do it in that place.
-     * The method 'setApplication()' is done right afterwards but has the application object to call.
-     * Then registers additional commands that act as wrappers to the actual Extbase commands.
-     *
-     * @param Application $application An Application instance
-     */
-    public function setApplication(Application $application = null)
-    {
-        parent::setApplication($application);
-
-        // Extbase commands can not be initialized in failsafe mode
-        if (GeneralUtility::makeInstance(PackageManager::class) instanceof FailsafePackageManager) {
-            return;
-        }
-
-        // Find any registered Extbase commands
-        $this->extbaseBootstrap = GeneralUtility::makeInstance(Bootstrap::class);
-        $this->extbaseBootstrap->initialize([]);
-
-        $objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-
-        /** @var CommandManager $commandManager */
-        $commandManager = $objectManager->get(CommandManager::class);
-        $commands = $commandManager->getAvailableCommands();
-        foreach ($commands as $command) {
-            $commandName = $commandManager->getShortestIdentifierForCommand($command);
-            $fullCommandName = $command->getCommandIdentifier();
-            if ($fullCommandName === 'extbase:help:error' || $fullCommandName === 'extbase:help:helpstub') {
-                continue;
-            }
-            if ($commandName === 'help') {
-                $commandName = 'extbase:help';
-            }
-            $extbaseCommand = GeneralUtility::makeInstance(ExtbaseCommand::class, $fullCommandName);
-
-            if ($commandName !== $fullCommandName) {
-                $extbaseCommand->setAliases([$commandName]);
-            }
-
-            $extbaseCommand->setExtbaseCommand($command);
-            $this->getApplication()->add($extbaseCommand);
-        }
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Command/ExtbaseCommand.php b/typo3/sysext/extbase/Classes/Command/ExtbaseCommand.php
deleted file mode 100644 (file)
index 9c6aa29..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Command;
-
-/*
- * 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 Symfony\Component\Console\Application;
-use Symfony\Component\Console\Command\Command;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Core\Bootstrap;
-
-/**
- * Wrapper to wrap an Extbase command from a command controller into a Symfony Command
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class ExtbaseCommand extends Command
-{
-    /**
-     * Extbase's command
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\Command
-     */
-    protected $command;
-
-    /**
-     * Extbase has its own validation logic, so it is disabled in this place
-     */
-    protected function configure()
-    {
-        $this->ignoreValidationErrors();
-    }
-
-    /**
-     * Sets the extbase command to be used for fetching the description etc.
-     *
-     * @param \TYPO3\CMS\Extbase\Mvc\Cli\Command $command
-     */
-    public function setExtbaseCommand(\TYPO3\CMS\Extbase\Mvc\Cli\Command $command)
-    {
-        $this->command = $command;
-    }
-
-    /**
-     * Sets the application instance for this command.
-     * Also uses the setApplication call now, as $this->configure() is called
-     * too early
-     *
-     * @param Application $application An Application instance
-     */
-    public function setApplication(Application $application = null)
-    {
-        parent::setApplication($application);
-        $description = $this->command->getDescription();
-        $description = str_replace(LF, ' ', $description);
-        $this->setDescription($description);
-    }
-
-    /**
-     * Executes the command to find any Extbase command
-     *
-     * @param InputInterface $input
-     * @param OutputInterface $output
-     */
-    protected function execute(InputInterface $input, OutputInterface $output)
-    {
-        // ugly hack because extbase only knows "help" (hardcoded, but already defined by symfony)
-        // and "extbase:help:help"
-        if ($_SERVER['argv'][1] === 'extbase:help') {
-            $_SERVER['argv'][1] = 'extbase:help:help';
-        }
-        $bootstrap = GeneralUtility::makeInstance(Bootstrap::class);
-        $bootstrap->run('', []);
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Command/HelpCommand.php b/typo3/sysext/extbase/Classes/Command/HelpCommand.php
deleted file mode 100644 (file)
index b8a50ff..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Command;
-
-/*
- * 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 Symfony\Component\Console\Command\Command;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Core\Bootstrap;
-
-/**
- * Extends the help command of symfony to show the specific help for Extbase commands
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class HelpCommand extends \Symfony\Component\Console\Command\HelpCommand
-{
-    /**
-     * This needs to be re-set as the parent command has this property declared as "private" as well.
-     *
-     * @var Command
-     */
-    private $command;
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function configure()
-    {
-        parent::configure();
-        $this->setAliases([]);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function execute(InputInterface $input, OutputInterface $output)
-    {
-        if (null === $this->command) {
-            $this->command = $this->getApplication()->find($input->getArgument('command_name'));
-        }
-
-        // Extbase help was explicitly called
-        if ($input->getArgument('command') === 'extbase:help' || $input->getArgument('command') === 'extbase:help:help') {
-            $_SERVER['argv'][1] = 'extbase:help:help';
-            $bootstrap = GeneralUtility::makeInstance(Bootstrap::class);
-            $bootstrap->run('', []);
-        } elseif ($this->command instanceof ExtbaseCommand) {
-            // An extbase command was originally called, but is now required to show the help information
-            // Ugly hack to modify 'argv' so the help command for a specific command is shown
-            $args = [$_SERVER['argv'][0], 'help'];
-            foreach ($_SERVER['argv'] as $k => $value) {
-                if ($k === 0 || $value === '--help' || $value === '-h') {
-                    continue;
-                }
-                $args[] = $value;
-            }
-            $_SERVER['argv'] = $args;
-
-            // run Extbase bootstrap
-            $bootstrap = GeneralUtility::makeInstance(Bootstrap::class);
-            $bootstrap->run('', []);
-        } else {
-            // Any other symfony command should just show up the regular info
-            parent::execute($input, $output);
-        }
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Command/HelpCommandController.php b/typo3/sysext/extbase/Classes/Command/HelpCommandController.php
deleted file mode 100644 (file)
index e434e50..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Command;
-
-/*
- * 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!
- */
-
-/**
- * A Command Controller which provides help for available commands
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0.
- */
-class HelpCommandController extends \TYPO3\CMS\Extbase\Mvc\Controller\CommandController
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\CommandManager
-     */
-    protected $commandManager;
-
-    /**
-     * @var array
-     */
-    protected $commandsByExtensionsAndControllers = [];
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Mvc\Cli\CommandManager $commandManager
-     */
-    public function injectCommandManager(\TYPO3\CMS\Extbase\Mvc\Cli\CommandManager $commandManager)
-    {
-        $this->commandManager = $commandManager;
-    }
-
-    /**
-     * Displays a short, general help message
-     *
-     * This only outputs the Extbase version number, context and some hint about how to
-     * get more help about commands.
-     *
-     * @internal
-     */
-    public function helpStubCommand()
-    {
-        $this->outputLine('Extbase %s', [TYPO3_version]);
-        $this->outputLine('usage: ' . $this->request->getCallingScript() . ' <command identifier>');
-        $this->outputLine();
-        $this->outputLine('See \'' . $this->request->getCallingScript() . ' help\' for a list of all available commands.');
-        $this->outputLine();
-    }
-
-    /**
-     * Display help for a command
-     *
-     * The help command displays help for a given command:
-     * ./typo3/sysext/core/bin/typo3 extbase:help <command identifier>
-     *
-     * @param string $commandIdentifier Identifier of a command for more details
-     */
-    public function helpCommand($commandIdentifier = null)
-    {
-        if ($commandIdentifier === null) {
-            $this->displayHelpIndex();
-        } else {
-            try {
-                $command = $this->commandManager->getCommandByIdentifier($commandIdentifier);
-            } catch (\TYPO3\CMS\Extbase\Mvc\Exception\CommandException $exception) {
-                $this->outputLine($exception->getMessage());
-                return;
-            }
-            $this->displayHelpForCommand($command);
-        }
-    }
-
-    /**
-     * Builds an index of all commands that are available
-     */
-    protected function displayHelpIndex()
-    {
-        $this->buildCommandsIndex();
-        $this->outputLine('Extbase %s', [TYPO3_version]);
-        $this->outputLine('usage: ' . $this->request->getCallingScript() . ' <command identifier>');
-        $this->outputLine();
-        $this->outputLine('The following commands are currently available:');
-        foreach ($this->commandsByExtensionsAndControllers as $extensionKey => $commandControllers) {
-            $this->outputLine('');
-            $this->outputLine('EXTENSION "%s":', [strtoupper($extensionKey)]);
-            $this->outputLine(str_repeat('-', $this->output->getMaximumLineLength()));
-            foreach ($commandControllers as $commands) {
-                foreach ($commands as $command) {
-                    $description = wordwrap($command->getShortDescription(), $this->output->getMaximumLineLength() - 43, PHP_EOL . str_repeat(' ', 43), true);
-                    $shortCommandIdentifier = $this->commandManager->getShortestIdentifierForCommand($command);
-                    $this->outputLine('%-2s%-40s %s', [' ', $shortCommandIdentifier, $description]);
-                }
-                $this->outputLine();
-            }
-        }
-        $this->outputLine('See \'' . $this->request->getCallingScript() . ' help <command identifier>\' for more information about a specific command.');
-        $this->outputLine();
-    }
-
-    /**
-     * Render help text for a single command
-     *
-     * @param \TYPO3\CMS\Extbase\Mvc\Cli\Command $command
-     */
-    protected function displayHelpForCommand(\TYPO3\CMS\Extbase\Mvc\Cli\Command $command)
-    {
-        $this->outputLine();
-        $this->outputLine($command->getShortDescription());
-        $this->outputLine();
-        $this->outputLine('COMMAND:');
-        $this->outputLine('%-2s%s', [' ', $command->getCommandIdentifier()]);
-        $commandArgumentDefinitions = $command->getArgumentDefinitions();
-        $usage = '';
-        $hasOptions = false;
-        foreach ($commandArgumentDefinitions as $commandArgumentDefinition) {
-            if (!$commandArgumentDefinition->isRequired()) {
-                $hasOptions = true;
-            } else {
-                $usage .= sprintf(' <%s>', strtolower(preg_replace('/([A-Z])/', ' $1', $commandArgumentDefinition->getName())));
-            }
-        }
-        $usage = $this->request->getCallingScript() . ' ' . $this->commandManager->getShortestIdentifierForCommand($command) . ($hasOptions ? ' [<options>]' : '') . $usage;
-        $this->outputLine();
-        $this->outputLine('USAGE:');
-        $this->outputLine('  ' . $usage);
-        $argumentDescriptions = [];
-        $optionDescriptions = [];
-        if ($command->hasArguments()) {
-            foreach ($commandArgumentDefinitions as $commandArgumentDefinition) {
-                $argumentDescription = $commandArgumentDefinition->getDescription();
-                $argumentDescription = wordwrap($argumentDescription, $this->output->getMaximumLineLength() - 23, PHP_EOL . str_repeat(' ', 23), true);
-                if ($commandArgumentDefinition->isRequired()) {
-                    $argumentDescriptions[] = vsprintf('  %-20s %s', [$commandArgumentDefinition->getDashedName(), $argumentDescription]);
-                } else {
-                    $optionDescriptions[] = vsprintf('  %-20s %s', [$commandArgumentDefinition->getDashedName(), $argumentDescription]);
-                }
-            }
-        }
-        if (!empty($argumentDescriptions)) {
-            $this->outputLine();
-            $this->outputLine('ARGUMENTS:');
-            foreach ($argumentDescriptions as $argumentDescription) {
-                $this->outputLine($argumentDescription);
-            }
-        }
-        if (!empty($optionDescriptions)) {
-            $this->outputLine();
-            $this->outputLine('OPTIONS:');
-            foreach ($optionDescriptions as $optionDescription) {
-                $this->outputLine($optionDescription);
-            }
-        }
-        if ($command->getDescription() !== '') {
-            $this->outputLine();
-            $this->outputLine('DESCRIPTION:');
-            $descriptionLines = explode(LF, $command->getDescription());
-            foreach ($descriptionLines as $descriptionLine) {
-                $this->outputLine('%-2s%s', [' ', $descriptionLine]);
-            }
-        }
-        $relatedCommandIdentifiers = $command->getRelatedCommandIdentifiers();
-        if ($relatedCommandIdentifiers !== []) {
-            $this->outputLine();
-            $this->outputLine('SEE ALSO:');
-            foreach ($relatedCommandIdentifiers as $commandIdentifier) {
-                $command = $this->commandManager->getCommandByIdentifier($commandIdentifier);
-                $this->outputLine('%-2s%s (%s)', [' ', $commandIdentifier, $command->getShortDescription()]);
-            }
-        }
-        $this->outputLine();
-    }
-
-    /**
-     * Displays an error message
-     *
-     * @internal
-     * @param \TYPO3\CMS\Extbase\Mvc\Exception\CommandException $exception
-     */
-    public function errorCommand(\TYPO3\CMS\Extbase\Mvc\Exception\CommandException $exception)
-    {
-        $this->outputLine($exception->getMessage());
-        if ($exception instanceof \TYPO3\CMS\Extbase\Mvc\Exception\AmbiguousCommandIdentifierException) {
-            $this->outputLine('Please specify the complete command identifier. Matched commands:');
-            foreach ($exception->getMatchingCommands() as $matchingCommand) {
-                $this->outputLine('    %s', [$matchingCommand->getCommandIdentifier()]);
-            }
-        }
-        $this->outputLine('');
-        $this->outputLine('Enter "' . $this->request->getCallingScript() . ' help" for an overview of all available commands');
-        $this->outputLine('or "' . $this->request->getCallingScript() . ' help <command identifier>" for a detailed description of the corresponding command.');
-    }
-
-    /**
-     * Builds an index of available commands. For each of them a Command object is
-     * added to the commands array of this class.
-     */
-    protected function buildCommandsIndex()
-    {
-        $availableCommands = $this->commandManager->getAvailableCommands();
-        foreach ($availableCommands as $command) {
-            if ($command->isInternal()) {
-                continue;
-            }
-            $commandIdentifier = $command->getCommandIdentifier();
-            $extensionKey = strstr($commandIdentifier, ':', true);
-            $commandControllerClassName = $command->getControllerClassName();
-            $commandName = $command->getControllerCommandName();
-            $this->commandsByExtensionsAndControllers[$extensionKey][$commandControllerClassName][$commandName] = $command;
-        }
-    }
-}
index 9be2f84..b30f71c 100644 (file)
@@ -18,8 +18,7 @@ use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\ServerRequestInterface;
 use TYPO3\CMS\Backend\Routing\Route;
 use TYPO3\CMS\Core\Core\Environment;
-use TYPO3\CMS\Extbase\Mvc\Cli\Response as CliResponse;
-use TYPO3\CMS\Extbase\Mvc\Web\Response as WebResponse;
+use TYPO3\CMS\Extbase\Mvc\Web\Response as ExtbaseResponse;
 
 /**
  * Creates a request an dispatches it to the controller which was specified
@@ -77,7 +76,6 @@ class Bootstrap implements \TYPO3\CMS\Extbase\Core\BootstrapInterface
         }
         $this->initializeObjectManager();
         $this->initializeConfiguration($configuration);
-        $this->configureObjectManager(true);
         $this->initializePersistence();
     }
 
@@ -108,33 +106,6 @@ class Bootstrap implements \TYPO3\CMS\Extbase\Core\BootstrapInterface
     }
 
     /**
-     * Configures the object manager object configuration from
-     * config.tx_extbase.objects and plugin.tx_foo.objects
-     *
-     * @param bool $isInternalCall Set to true by Bootstrap, not by extensions
-     * @see initialize()
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0
-     */
-    public function configureObjectManager($isInternalCall = false)
-    {
-        if (!$isInternalCall) {
-            trigger_error(self::class . '::configureObjectManager() will be removed in TYPO3 v10.0.', E_USER_DEPRECATED);
-        }
-        $frameworkSetup = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
-        if (!isset($frameworkSetup['objects']) || !is_array($frameworkSetup['objects'])) {
-            return;
-        }
-        trigger_error('Overriding object implementations via TypoScript settings config.tx_extbase.objects and plugin.tx_%plugin%.objects will be removed in TYPO3 v10.0.', E_USER_DEPRECATED);
-        $objectContainer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class);
-        foreach ($frameworkSetup['objects'] as $classNameWithDot => $classConfiguration) {
-            if (isset($classConfiguration['className'])) {
-                $originalClassName = rtrim($classNameWithDot, '.');
-                $objectContainer->registerImplementation($originalClassName, $classConfiguration['className']);
-            }
-        }
-    }
-
-    /**
      * Initializes the persistence framework
      *
      * @see initialize()
@@ -160,7 +131,6 @@ class Bootstrap implements \TYPO3\CMS\Extbase\Core\BootstrapInterface
     }
 
     /**
-     * @throws \TYPO3\CMS\Extbase\Mvc\Exception\CommandException Is thrown if the response object defined an exit code > 0
      * @return string
      */
     protected function handleRequest()
@@ -179,9 +149,6 @@ class Bootstrap implements \TYPO3\CMS\Extbase\Core\BootstrapInterface
             $content = $response->shutdown();
             $this->resetSingletons();
             $this->objectManager->get(\TYPO3\CMS\Extbase\Service\CacheService::class)->clearCachesOfRegisteredPageIds();
-            if ($response instanceof CliResponse && $response->getExitCode()) {
-                throw new \TYPO3\CMS\Extbase\Mvc\Exception\CommandException('The request has been terminated as the response defined an exit code.', $response->getExitCode());
-            }
         }
 
         return $content;
@@ -213,7 +180,7 @@ class Bootstrap implements \TYPO3\CMS\Extbase\Core\BootstrapInterface
         /** @var \TYPO3\CMS\Extbase\Mvc\RequestHandlerResolver $requestHandlerResolver */
         $requestHandlerResolver = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\RequestHandlerResolver::class);
         $requestHandler = $requestHandlerResolver->resolveRequestHandler();
-        /** @var WebResponse $extbaseResponse */
+        /** @var ExtbaseResponse $extbaseResponse */
         $extbaseResponse = $requestHandler->handleRequest();
 
         // Convert to PSR-7 response and hand it back to TYPO3 Core
@@ -226,10 +193,10 @@ class Bootstrap implements \TYPO3\CMS\Extbase\Core\BootstrapInterface
     /**
      * Converts a Extbase response object into a PSR-7 Response
      *
-     * @param WebResponse $extbaseResponse
+     * @param ExtbaseResponse $extbaseResponse
      * @return ResponseInterface
      */
-    protected function convertExtbaseResponseToPsr7Response(WebResponse $extbaseResponse): ResponseInterface
+    protected function convertExtbaseResponseToPsr7Response(ExtbaseResponse $extbaseResponse): ResponseInterface
     {
         $response = new \TYPO3\CMS\Core\Http\Response(
             'php://temp',
diff --git a/typo3/sysext/extbase/Classes/Mvc/Cli/Command.php b/typo3/sysext/extbase/Classes/Mvc/Cli/Command.php
deleted file mode 100644 (file)
index 4d6d357..0000000
+++ /dev/null
@@ -1,289 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Mvc\Cli;
-
-/*
- * 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\Extbase\Reflection\ClassSchema;
-
-/**
- * Represents a Command
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class Command
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
-     */
-    protected $objectManager;
-
-    /**
-     * @var string
-     */
-    protected $controllerClassName;
-
-    /**
-     * @var string
-     */
-    protected $controllerCommandName;
-
-    /**
-     * @var string
-     */
-    protected $commandIdentifier;
-
-    /**
-     * Name of the extension to which this command belongs
-     *
-     * @var string
-     */
-    protected $extensionName;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Reflection\ReflectionService
-     */
-    protected $reflectionService;
-
-    /**
-     * @var ClassSchema
-     */
-    protected $classSchema;
-
-    /**
-     * @var string
-     */
-    protected $controllerCommandMethod;
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
-     */
-    public function injectObjectManager(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager)
-    {
-        $this->objectManager = $objectManager;
-    }
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Reflection\ReflectionService $reflectionService
-     */
-    public function injectReflectionService(\TYPO3\CMS\Extbase\Reflection\ReflectionService $reflectionService)
-    {
-        $this->reflectionService = $reflectionService;
-    }
-
-    /**
-     * Constructor
-     *
-     * @param string $controllerClassName Class name of the controller providing the command
-     * @param string $controllerCommandName Command name, i.e. the method name of the command, without the "Command" suffix
-     * @throws \InvalidArgumentException
-     */
-    public function __construct($controllerClassName, $controllerCommandName)
-    {
-        $this->controllerClassName = $controllerClassName;
-        $this->controllerCommandName = $controllerCommandName;
-        $this->controllerCommandMethod = $this->controllerCommandName . 'Command';
-        $classNameParts = explode('\\', $controllerClassName);
-        if (isset($classNameParts[0]) && $classNameParts[0] === 'TYPO3' && isset($classNameParts[1]) && $classNameParts[1] === 'CMS') {
-            $classNameParts[0] .= '\\' . $classNameParts[1];
-            unset($classNameParts[1]);
-            $classNameParts = array_values($classNameParts);
-        }
-        $numberOfClassNameParts = count($classNameParts);
-        if ($numberOfClassNameParts < 3) {
-            throw new \InvalidArgumentException(
-                'Controller class names must at least consist of three parts: vendor, extension name and path.',
-                1438782187
-            );
-        }
-        if (strpos($classNameParts[$numberOfClassNameParts - 1], 'CommandController') === false) {
-            throw new \InvalidArgumentException(
-                'Invalid controller class name "' . $controllerClassName . '". Class name must end with "CommandController".',
-                1305100019
-            );
-        }
-
-        $this->extensionName = $classNameParts[1];
-        $extensionKey = \TYPO3\CMS\Core\Utility\GeneralUtility::camelCaseToLowerCaseUnderscored($this->extensionName);
-        $this->commandIdentifier = strtolower($extensionKey . ':' . substr($classNameParts[$numberOfClassNameParts - 1], 0, -17) . ':' . $controllerCommandName);
-    }
-
-    public function initializeObject()
-    {
-        $this->classSchema = $this->reflectionService->getClassSchema($this->controllerClassName);
-    }
-
-    /**
-     * @return string
-     */
-    public function getControllerClassName()
-    {
-        return $this->controllerClassName;
-    }
-
-    /**
-     * @return string
-     */
-    public function getControllerCommandName()
-    {
-        return $this->controllerCommandName;
-    }
-
-    /**
-     * Returns the command identifier for this command
-     *
-     * @return string The command identifier for this command, following the pattern extensionname:controllername:commandname
-     */
-    public function getCommandIdentifier()
-    {
-        return $this->commandIdentifier;
-    }
-
-    /**
-     * Returns the name of the extension to which this command belongs
-     *
-     * @return string
-     */
-    public function getExtensionName()
-    {
-        return $this->extensionName;
-    }
-
-    /**
-     * Returns a short description of this command
-     *
-     * @return string A short description
-     */
-    public function getShortDescription()
-    {
-        $lines = explode(LF, $this->classSchema->getMethod($this->controllerCommandMethod)['description']);
-        return !empty($lines) ? trim($lines[0]) : '<no description available>';
-    }
-
-    /**
-     * Returns a longer description of this command
-     * This is the complete method description except for the first line which can be retrieved via getShortDescription()
-     * If The command description only consists of one line, an empty string is returned
-     *
-     * @return string A longer description of this command
-     */
-    public function getDescription()
-    {
-        $lines = explode(LF, $this->classSchema->getMethod($this->controllerCommandMethod)['description']);
-        array_shift($lines);
-        $descriptionLines = [];
-        foreach ($lines as $line) {
-            $trimmedLine = trim($line);
-            if ($descriptionLines !== [] || $trimmedLine !== '') {
-                $descriptionLines[] = $trimmedLine;
-            }
-        }
-        return implode(LF, $descriptionLines);
-    }
-
-    /**
-     * Returns TRUE if this command expects required and/or optional arguments, otherwise FALSE
-     *
-     * @return bool
-     */
-    public function hasArguments()
-    {
-        return !empty($this->classSchema->getMethod($this->controllerCommandMethod)['params']);
-    }
-
-    /**
-     * Returns an array of \TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition that contains
-     * information about required/optional arguments of this command.
-     * If the command does not expect any arguments, an empty array is returned
-     *
-     * @return array<\TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition>
-     */
-    public function getArgumentDefinitions()
-    {
-        if (!$this->hasArguments()) {
-            return [];
-        }
-        $commandArgumentDefinitions = [];
-        $commandParameters = $this->classSchema->getMethod($this->controllerCommandMethod)['params'];
-        $commandParameterTags = $this->classSchema->getMethod($this->controllerCommandMethod)['tags']['param'];
-        $i = 0;
-        foreach ($commandParameters as $commandParameterName => $commandParameterDefinition) {
-            $explodedAnnotation = preg_split('/\s+/', $commandParameterTags[$i], 3);
-            $description = !empty($explodedAnnotation[2]) ? $explodedAnnotation[2] : '';
-            $required = $commandParameterDefinition['optional'] !== true;
-            $commandArgumentDefinitions[] = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition::class, $commandParameterName, $required, $description);
-            $i++;
-        }
-        return $commandArgumentDefinitions;
-    }
-
-    /**
-     * Tells if this command is internal and thus should not be exposed through help texts, user documentation etc.
-     * Internall commands are still accessible through the regular command line interface, but should not be used
-     * by users.
-     *
-     * @return bool
-     */
-    public function isInternal()
-    {
-        return isset($this->classSchema->getMethod($this->controllerCommandMethod)['tags']['internal']);
-    }
-
-    /**
-     * Tells if this command is meant to be used on CLI only.
-     *
-     * @return bool
-     */
-    public function isCliOnly()
-    {
-        return isset($this->classSchema->getMethod($this->controllerCommandMethod)['tags']['cli']);
-    }
-
-    /**
-     * Tells if this command flushes all caches and thus needs special attention in the interactive shell.
-     *
-     * Note that neither this method nor the @flushesCaches annotation is currently part of the official API.
-     *
-     * @return bool
-     *
-     * @deprecated will be removed in TYPO3 v10.0.
-     */
-    public function isFlushingCaches()
-    {
-        trigger_error(
-            'Method isFlushingCaches() will be removed in TYPO3 v10.0. Do not call from other extension.',
-            E_USER_DEPRECATED
-        );
-        return isset($this->classSchema->getMethod($this->controllerCommandMethod)['tags']['flushesCaches']);
-    }
-
-    /**
-     * Returns an array of command identifiers which were specified in the "@see"
-     * annotation of a command method.
-     *
-     * @return array
-     */
-    public function getRelatedCommandIdentifiers()
-    {
-        if (!isset($this->classSchema->getMethod($this->controllerCommandMethod)['tags']['see'])) {
-            return [];
-        }
-        $relatedCommandIdentifiers = [];
-        foreach ($this->classSchema->getMethod($this->controllerCommandMethod)['tags']['see'] as $tagValue) {
-            if (preg_match('/^[\\w\\d\\.]+:[\\w\\d]+:[\\w\\d]+$/', $tagValue) === 1) {
-                $relatedCommandIdentifiers[] = $tagValue;
-            }
-        }
-        return $relatedCommandIdentifiers;
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Mvc/Cli/CommandArgumentDefinition.php b/typo3/sysext/extbase/Classes/Mvc/Cli/CommandArgumentDefinition.php
deleted file mode 100644 (file)
index 265320e..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Mvc\Cli;
-
-/*
- * 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!
- */
-
-/**
- * Represents a CommandArgumentDefinition
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class CommandArgumentDefinition
-{
-    /**
-     * @var string
-     */
-    protected $name = '';
-
-    /**
-     * @var bool
-     */
-    protected $required = false;
-
-    /**
-     * @var string
-     */
-    protected $description = '';
-
-    /**
-     * Constructor
-     *
-     * @param string $name name of the command argument (= parameter name)
-     * @param bool $required defines whether this argument is required or optional
-     * @param string $description description of the argument
-     */
-    public function __construct($name, $required, $description)
-    {
-        $this->name = $name;
-        $this->required = $required;
-        $this->description = $description;
-    }
-
-    /**
-     * @return string
-     */
-    public function getName()
-    {
-        return $this->name;
-    }
-
-    /**
-     * Returns the lowercased name with dashes as word separator
-     *
-     * @return string
-     */
-    public function getDashedName()
-    {
-        $dashedName = ucfirst($this->name);
-        $dashedName = preg_replace('/([A-Z][a-z0-9]+)/', '$1-', $dashedName);
-        return '--' . strtolower(substr($dashedName, 0, -1));
-    }
-
-    /**
-     * @return string
-     */
-    public function getDescription()
-    {
-        return $this->description;
-    }
-
-    /**
-     * @return string
-     */
-    public function isRequired()
-    {
-        return $this->required;
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Mvc/Cli/CommandManager.php b/typo3/sysext/extbase/Classes/Mvc/Cli/CommandManager.php
deleted file mode 100644 (file)
index c8b0414..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Mvc\Cli;
-
-/*
- * 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!
- */
-
-/**
- * A helper for CLI commands
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class CommandManager implements \TYPO3\CMS\Core\SingletonInterface
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
-     */
-    protected $objectManager;
-
-    /**
-     * @var array<\TYPO3\CMS\Extbase\Mvc\Cli\Command>
-     */
-    protected $availableCommands;
-
-    /**
-     * @var array
-     */
-    protected $shortCommandIdentifiers;
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
-     */
-    public function injectObjectManager(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager)
-    {
-        $this->objectManager = $objectManager;
-    }
-
-    /**
-     * Returns an array of all commands
-     *
-     * @return Command[]
-     */
-    public function getAvailableCommands()
-    {
-        if ($this->availableCommands === null) {
-            $this->availableCommands = [];
-            foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['extbase']['commandControllers'] ?? [] as $className) {
-                if (!class_exists($className)) {
-                    continue;
-                }
-                foreach (get_class_methods($className) as $methodName) {
-                    if (substr($methodName, -7, 7) === 'Command') {
-                        $this->availableCommands[] = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class, $className, substr($methodName, 0, -7));
-                    }
-                }
-            }
-        }
-        return $this->availableCommands;
-    }
-
-    /**
-     * Returns a Command that matches the given identifier.
-     * If no Command could be found a CommandNotFoundException is thrown
-     * If more than one Command matches an AmbiguousCommandIdentifierException is thrown that contains the matched Commands
-     *
-     * @param string $commandIdentifier command identifier in the format foo:bar:baz
-     * @return Command
-     * @throws \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchCommandException if no matching command is available
-     * @throws \TYPO3\CMS\Extbase\Mvc\Exception\AmbiguousCommandIdentifierException if more than one Command matches the identifier (the exception contains the matched commands)
-     */
-    public function getCommandByIdentifier($commandIdentifier)
-    {
-        $commandIdentifier = strtolower(trim($commandIdentifier));
-        if ($commandIdentifier === 'help') {
-            $commandIdentifier = 'extbase:help:help';
-        }
-        $matchedCommands = [];
-        $availableCommands = $this->getAvailableCommands();
-        foreach ($availableCommands as $command) {
-            if ($this->commandMatchesIdentifier($command, $commandIdentifier)) {
-                $matchedCommands[] = $command;
-            }
-        }
-        if (empty($matchedCommands)) {
-            throw new \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchCommandException('No command could be found that matches the command identifier "' . $commandIdentifier . '".', 1310556663);
-        }
-        if (count($matchedCommands) > 1) {
-            throw new \TYPO3\CMS\Extbase\Mvc\Exception\AmbiguousCommandIdentifierException('More than one command matches the command identifier "' . $commandIdentifier . '"', 1310557169, null, $matchedCommands);
-        }
-        return current($matchedCommands);
-    }
-
-    /**
-     * Returns the shortest, non-ambiguous command identifier for the given command
-     *
-     * @param Command $command The command
-     * @return string The shortest possible command identifier
-     */
-    public function getShortestIdentifierForCommand(Command $command)
-    {
-        if ($command->getCommandIdentifier() === 'extbase:help:help') {
-            return 'help';
-        }
-        $shortCommandIdentifiers = $this->getShortCommandIdentifiers();
-        if (!isset($shortCommandIdentifiers[$command->getCommandIdentifier()])) {
-            $command->getCommandIdentifier();
-        }
-        return $shortCommandIdentifiers[$command->getCommandIdentifier()];
-    }
-
-    /**
-     * Returns an array that contains all available command identifiers and their shortest non-ambiguous alias
-     *
-     * @return array in the format array('full.command:identifier1' => 'alias1', 'full.command:identifier2' => 'alias2')
-     */
-    protected function getShortCommandIdentifiers()
-    {
-        if ($this->shortCommandIdentifiers === null) {
-            $commandsByCommandName = [];
-            foreach ($this->getAvailableCommands() as $availableCommand) {
-                list($extensionKey, $controllerName, $commandName) = explode(':', $availableCommand->getCommandIdentifier());
-                if (!isset($commandsByCommandName[$commandName])) {
-                    $commandsByCommandName[$commandName] = [];
-                }
-                if (!isset($commandsByCommandName[$commandName][$controllerName])) {
-                    $commandsByCommandName[$commandName][$controllerName] = [];
-                }
-                $commandsByCommandName[$commandName][$controllerName][] = $extensionKey;
-            }
-            foreach ($this->getAvailableCommands() as $availableCommand) {
-                list($extensionKey, $controllerName, $commandName) = explode(':', $availableCommand->getCommandIdentifier());
-                if (count($commandsByCommandName[$commandName][$controllerName]) > 1) {
-                    $this->shortCommandIdentifiers[$availableCommand->getCommandIdentifier()] = sprintf('%s:%s:%s', $extensionKey, $controllerName, $commandName);
-                } else {
-                    $this->shortCommandIdentifiers[$availableCommand->getCommandIdentifier()] = sprintf('%s:%s', $controllerName, $commandName);
-                }
-            }
-        }
-        return $this->shortCommandIdentifiers;
-    }
-
-    /**
-     * Returns TRUE if the specified command identifier matches the identifier of the specified command.
-     * This is the case, if the identifiers are the same or if at least the last two command parts match (case sensitive).
-     *
-     * @param Command $command
-     * @param string $commandIdentifier command identifier in the format foo:bar:baz (all lower case)
-     * @return bool TRUE if the specified command identifier matches this commands identifier
-     */
-    protected function commandMatchesIdentifier(Command $command, $commandIdentifier)
-    {
-        $commandIdentifierParts = explode(':', $command->getCommandIdentifier());
-        $searchedCommandIdentifierParts = explode(':', $commandIdentifier);
-        $extensionKey = array_shift($commandIdentifierParts);
-        if (count($searchedCommandIdentifierParts) === 3) {
-            $searchedExtensionKey = array_shift($searchedCommandIdentifierParts);
-            if ($searchedExtensionKey !== $extensionKey) {
-                return false;
-            }
-        }
-        if (count($searchedCommandIdentifierParts) !== 2) {
-            return false;
-        }
-        return $searchedCommandIdentifierParts === $commandIdentifierParts;
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Mvc/Cli/ConsoleOutput.php b/typo3/sysext/extbase/Classes/Mvc/Cli/ConsoleOutput.php
deleted file mode 100644 (file)
index 8380fe1..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Mvc\Cli;
-
-/*
- * 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 Symfony\Component\Console\Formatter\OutputFormatterStyle;
-use Symfony\Component\Console\Helper\FormatterHelper;
-use Symfony\Component\Console\Helper\HelperSet;
-use Symfony\Component\Console\Helper\ProgressBar;
-use Symfony\Component\Console\Helper\QuestionHelper;
-use Symfony\Component\Console\Helper\Table;
-use Symfony\Component\Console\Input\ArgvInput;
-use Symfony\Component\Console\Output\ConsoleOutput as SymfonyConsoleOutput;
-use Symfony\Component\Console\Question\ChoiceQuestion;
-use Symfony\Component\Console\Question\ConfirmationQuestion;
-use Symfony\Component\Console\Question\Question;
-
-/**
- * A wrapper for Symfony ConsoleOutput and related helpers
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class ConsoleOutput
-{
-    /**
-     * @var ArgvInput
-     */
-    protected $input;
-
-    /**
-     * @var SymfonyConsoleOutput
-     */
-    protected $output;
-
-    /**
-     * @var QuestionHelper
-     */
-    protected $questionHelper;
-
-    /**
-     * @var ProgressBar
-     */
-    protected $progressBar;
-
-    /**
-     * @var Table
-     */
-    protected $table;
-
-    /**
-     * Creates and initializes the Symfony I/O instances
-     */
-    public function __construct()
-    {
-        $this->output = new SymfonyConsoleOutput();
-        $this->output->getFormatter()->setStyle('b', new OutputFormatterStyle(null, null, ['bold']));
-        $this->output->getFormatter()->setStyle('i', new OutputFormatterStyle('black', 'white'));
-        $this->output->getFormatter()->setStyle('u', new OutputFormatterStyle(null, null, ['underscore']));
-        $this->output->getFormatter()->setStyle('em', new OutputFormatterStyle(null, null, ['reverse']));
-        $this->output->getFormatter()->setStyle('strike', new OutputFormatterStyle(null, null, ['conceal']));
-    }
-
-    /**
-     * Returns the desired maximum line length for console output.
-     *
-     * @return int
-     */
-    public function getMaximumLineLength()
-    {
-        return 79;
-    }
-
-    /**
-     * Outputs specified text to the console window
-     * You can specify arguments that will be passed to the text via sprintf
-     * @see http://www.php.net/sprintf
-     *
-     * @param string $text Text to output
-     * @param array $arguments Optional arguments to use for sprintf
-     */
-    public function output($text, array $arguments = [])
-    {
-        if ($arguments !== []) {
-            $text = vsprintf($text, $arguments);
-        }
-        $this->output->write($text);
-    }
-
-    /**
-     * Outputs specified text to the console window and appends a line break
-     *
-     * @param string $text Text to output
-     * @param array $arguments Optional arguments to use for sprintf
-     * @see output()
-     * @see outputLines()
-     */
-    public function outputLine($text = '', array $arguments = [])
-    {
-        $this->output($text . PHP_EOL, $arguments);
-    }
-
-    /**
-     * Formats the given text to fit into the maximum line length and outputs it to the
-     * console window
-     *
-     * @param string $text Text to output
-     * @param array $arguments Optional arguments to use for sprintf
-     * @param int $leftPadding The number of spaces to use for indentation
-     * @see outputLine()
-     */
-    public function outputFormatted($text = '', array $arguments = [], $leftPadding = 0)
-    {
-        $lines = explode(PHP_EOL, $text);
-        foreach ($lines as $line) {
-            $formattedText = str_repeat(' ', $leftPadding) . wordwrap($line, $this->getMaximumLineLength() - $leftPadding, PHP_EOL . str_repeat(' ', $leftPadding), true);
-            $this->outputLine($formattedText, $arguments);
-        }
-    }
-
-    /**
-     * Renders a table like output of the given $rows
-     *
-     * @param array $rows
-     * @param array $headers
-     */
-    public function outputTable($rows, $headers = null)
-    {
-        $table = $this->getTable();
-        if ($headers !== null) {
-            $table->setHeaders($headers);
-        }
-        $table->setRows($rows);
-        $table->render();
-    }
-
-    /**
-     * Asks the user to select a value
-     *
-     * @param string|array $question The question to ask. If an array each array item is turned into one line of a multi-line question
-     * @param array $choices List of choices to pick from
-     * @param bool $default The default answer if the user enters nothing
-     * @param bool $multiSelect If TRUE the result will be an array with the selected options. Multiple options can be given separated by commas
-     * @param int|null $attempts Max number of times to ask before giving up (null by default, which means infinite)
-     * @return int|string|array The selected value or values (the key of the choices array)
-     * @throws \InvalidArgumentException
-     */
-    public function select($question, $choices, $default = null, $multiSelect = false, $attempts = null)
-    {
-        $question = (new ChoiceQuestion($question, $choices, $default))
-            ->setMultiselect($multiSelect)
-            ->setMaxAttempts($attempts)
-            ->setErrorMessage('Value "%s" is invalid');
-
-        return $this->getQuestionHelper()->ask($this->getInput(), $this->output, $question);
-    }
-
-    /**
-     * Asks a question to the user
-     *
-     * @param string|array $question The question to ask. If an array each array item is turned into one line of a multi-line question
-     * @param string $default The default answer if none is given by the user
-     * @param array $autocomplete List of values to autocomplete. This only works if "stty" is installed
-     * @return string The user answer
-     * @throws \RuntimeException If there is no data to read in the input stream
-     */
-    public function ask($question, $default = null, array $autocomplete = null)
-    {
-        $question = (new Question($question, $default))
-            ->setAutocompleterValues($autocomplete);
-
-        return $this->getQuestionHelper()->ask($this->getInput(), $this->output, $question);
-    }
-
-    /**
-     * Asks a confirmation to the user.
-     *
-     * The question will be asked until the user answers by nothing, yes, or no.
-     *
-     * @param string|array $question The question to ask. If an array each array item is turned into one line of a multi-line question
-     * @param bool $default The default answer if the user enters nothing
-     * @return bool true if the user has confirmed, false otherwise
-     */
-    public function askConfirmation($question, $default = true)
-    {
-        $question = new ConfirmationQuestion($question, $default);
-
-        return $this->getQuestionHelper()->ask($this->getInput(), $this->output, $question);
-    }
-
-    /**
-     * Asks a question to the user, the response is hidden
-     *
-     * @param string|array $question The question. If an array each array item is turned into one line of a multi-line question
-     * @param bool $fallback In case the response can not be hidden, whether to fallback on non-hidden question or not
-     * @return string The answer
-     * @throws \RuntimeException In case the fallback is deactivated and the response can not be hidden
-     */
-    public function askHiddenResponse($question, $fallback = true)
-    {
-        $question = (new Question($question))
-            ->setHidden(true)
-            ->setHiddenFallback($fallback);
-
-        return $this->getQuestionHelper()->ask($this->getInput(), $this->output, $question);
-    }
-
-    /**
-     * Asks for a value and validates the response
-     *
-     * The validator receives the data to validate. It must return the
-     * validated data when the data is valid and throw an exception
-     * otherwise.
-     *
-     * @param string|array $question The question to ask. If an array each array item is turned into one line of a multi-line question
-     * @param callable $validator A PHP callback that gets a value and is expected to return the (transformed) value or throw an exception if it wasn't valid
-     * @param int|null $attempts Max number of times to ask before giving up (null by default, which means infinite)
-     * @param string $default The default answer if none is given by the user
-     * @param array $autocomplete List of values to autocomplete. This only works if "stty" is installed
-     * @return mixed
-     * @throws \Exception When any of the validators return an error
-     */
-    public function askAndValidate($question, $validator, $attempts = null, $default = null, array $autocomplete = null)
-    {
-        $question = (new Question($question, $default))
-            ->setValidator($validator)
-            ->setMaxAttempts($attempts)
-            ->setAutocompleterValues($autocomplete);
-
-        return $this->getQuestionHelper()->ask($this->getInput(), $this->output, $question);
-    }
-
-    /**
-     * Asks for a value, hide and validates the response
-     *
-     * The validator receives the data to validate. It must return the
-     * validated data when the data is valid and throw an exception
-     * otherwise.
-     *
-     * @param string|array $question The question to ask. If an array each array item is turned into one line of a multi-line question
-     * @param callable $validator A PHP callback that gets a value and is expected to return the (transformed) value or throw an exception if it wasn't valid
-     * @param int|bool $attempts Max number of times to ask before giving up (false by default, which means infinite)
-     * @param bool $fallback In case the response can not be hidden, whether to fallback on non-hidden question or not
-     * @return string The response
-     * @throws \Exception When any of the validators return an error
-     * @throws \RuntimeException In case the fallback is deactivated and the response can not be hidden
-     */
-    public function askHiddenResponseAndValidate($question, $validator, $attempts = false, $fallback = true)
-    {
-        $question = (new Question($question))
-            ->setValidator($validator)
-            ->setMaxAttempts($attempts)
-            ->setHidden(true)
-            ->setHiddenFallback($fallback);
-
-        return $this->getQuestionHelper()->ask($this->getInput(), $this->output, $question);
-    }
-
-    /**
-     * Starts the progress output
-     *
-     * @param int $max Maximum steps. If NULL an indeterminate progress bar is rendered
-     */
-    public function progressStart($max = null)
-    {
-        $this->getProgressBar()->start($max);
-    }
-
-    /**
-     * Advances the progress output X steps
-     *
-     * @param int $step Number of steps to advance
-     * @throws \LogicException
-     */
-    public function progressAdvance($step = 1)
-    {
-        $this->getProgressBar()->advance($step);
-    }
-
-    /**
-     * Sets the current progress
-     *
-     * @param int $current The current progress
-     * @throws \LogicException
-     */
-    public function progressSet($current)
-    {
-        $this->getProgressBar()->setProgress($current);
-    }
-
-    /**
-     * Finishes the progress output
-     */
-    public function progressFinish()
-    {
-        $this->getProgressBar()->finish();
-    }
-
-    /**
-     * @return ArgvInput
-     * @throws \RuntimeException
-     */
-    protected function getInput()
-    {
-        if ($this->input === null) {
-            if (!isset($_SERVER['argv'])) {
-                throw new \RuntimeException('Cannot initialize ArgvInput object without CLI context.', 1456914444);
-            }
-            $this->input = new ArgvInput();
-        }
-
-        return $this->input;
-    }
-
-    /**
-     * Returns or initializes the symfony/console QuestionHelper
-     *
-     * @return QuestionHelper
-     */
-    protected function getQuestionHelper()
-    {
-        if ($this->questionHelper === null) {
-            $this->questionHelper = new QuestionHelper();
-            $helperSet = new HelperSet([new FormatterHelper()]);
-            $this->questionHelper->setHelperSet($helperSet);
-        }
-        return $this->questionHelper;
-    }
-
-    /**
-     * Returns or initializes the symfony/console ProgressBar
-     *
-     * @return ProgressBar
-     */
-    protected function getProgressBar()
-    {
-        if ($this->progressBar === null) {
-            $this->progressBar = new ProgressBar($this->output);
-        }
-        return $this->progressBar;
-    }
-
-    /**
-     * Returns or initializes the symfony/console Table
-     *
-     * @return Table
-     */
-    protected function getTable()
-    {
-        if ($this->table === null) {
-            $this->table = new Table($this->output);
-        }
-        return $this->table;
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Mvc/Cli/Request.php b/typo3/sysext/extbase/Classes/Mvc/Cli/Request.php
deleted file mode 100644 (file)
index f0d2019..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Mvc\Cli;
-
-/*
- * 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!
- */
-
-/**
- * Represents a CLI request.
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class Request implements \TYPO3\CMS\Extbase\Mvc\RequestInterface
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
-     */
-    protected $objectManager;
-
-    /**
-     * @var string
-     */
-    protected $controllerObjectName;
-
-    /**
-     * @var string
-     */
-    protected $controllerCommandName = 'default';
-
-    /**
-     * @var string Name of the extension which is supposed to handle this request.
-     */
-    protected $controllerExtensionName;
-
-    /**
-     * The arguments for this request
-     *
-     * @var array
-     */
-    protected $arguments = [];
-
-    /**
-     * @var array
-     */
-    protected $exceedingArguments = [];
-
-    /**
-     * If this request has been changed and needs to be dispatched again
-     *
-     * @var bool
-     */
-    protected $dispatched = false;
-
-    /**
-     * @var array
-     */
-    protected $commandLineArguments;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\Command | NULL
-     */
-    protected $command;
-
-    /**
-     * @var string
-     */
-    protected $callingScript;
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
-     */
-    public function injectObjectManager(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager)
-    {
-        $this->objectManager = $objectManager;
-    }
-
-    /**
-     * @param string $callingScript
-     */
-    public function setCallingScript($callingScript)
-    {
-        $this->callingScript = $callingScript;
-    }
-
-    /**
-     * @return string
-     */
-    public function getCallingScript()
-    {
-        return $this->callingScript;
-    }
-
-    /**
-     * Sets the dispatched flag
-     *
-     * @param bool $flag If this request has been dispatched
-     */
-    public function setDispatched($flag)
-    {
-        $this->dispatched = (bool)$flag;
-    }
-
-    /**
-     * If this request has been dispatched and addressed by the responsible
-     * controller and the response is ready to be sent.
-     *
-     * The dispatcher will try to dispatch the request again if it has not been
-     * addressed yet.
-     *
-     * @return bool TRUE if this request has been disptached successfully
-     */
-    public function isDispatched()
-    {
-        return $this->dispatched;
-    }
-
-    /**
-     * Sets the object name of the controller
-     *
-     * @param string $controllerObjectName The fully qualified controller object name
-     */
-    public function setControllerObjectName($controllerObjectName)
-    {
-        $nameParts = \TYPO3\CMS\Core\Utility\ClassNamingUtility::explodeObjectControllerName($controllerObjectName);
-
-        $this->controllerExtensionName = $nameParts['extensionName'];
-        $this->controllerObjectName = $controllerObjectName;
-        $this->command = null;
-    }
-
-    /**
-     * Returns the object name of the controller
-     *
-     * @return string The controller's object name
-     */
-    public function getControllerObjectName()
-    {
-        return $this->controllerObjectName;
-    }
-
-    /**
-     * Returns the extension name of the specified controller.
-     *
-     * @return string The extension name
-     */
-    public function getControllerExtensionName()
-    {
-        return $this->controllerExtensionName;
-    }
-
-    /**
-     * Sets the name of the command contained in this request.
-     *
-     * Note that the command name must start with a lower case letter and is case sensitive.
-     *
-     * @param string $commandName Name of the command to execute by the controller
-     */
-    public function setControllerCommandName($commandName)
-    {
-        $this->controllerCommandName = $commandName;
-        $this->command = null;
-    }
-
-    /**
-     * Returns the name of the command the controller is supposed to execute.
-     *
-     * @return string Command name
-     */
-    public function getControllerCommandName()
-    {
-        return $this->controllerCommandName;
-    }
-
-    /**
-     * Returns the command object for this request
-     *
-     * @return \TYPO3\CMS\Extbase\Mvc\Cli\Command
-     */
-    public function getCommand()
-    {
-        if ($this->command === null) {
-            $this->command = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class, $this->controllerObjectName, $this->controllerCommandName);
-        }
-        return $this->command;
-    }
-
-    /**
-     * Sets the value of the specified argument
-     *
-     * @param string $argumentName Name of the argument to set
-     * @param mixed $value The new value
-     * @throws \TYPO3\CMS\Extbase\Mvc\Exception\InvalidArgumentNameException
-     */
-    public function setArgument($argumentName, $value)
-    {
-        if (!is_string($argumentName) || $argumentName === '') {
-            throw new \TYPO3\CMS\Extbase\Mvc\Exception\InvalidArgumentNameException('Invalid argument name.', 1300893885);
-        }
-        $this->arguments[$argumentName] = $value;
-    }
-
-    /**
-     * Sets the whole arguments ArrayObject and therefore replaces any arguments
-     * which existed before.
-     *
-     * @param array $arguments An array of argument names and their values
-     */
-    public function setArguments(array $arguments)
-    {
-        $this->arguments = $arguments;
-    }
-
-    /**
-     * Returns the value of the specified argument
-     *
-     * @param string $argumentName Name of the argument
-     * @return string Value of the argument
-     * @throws \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchArgumentException if such an argument does not exist
-     */
-    public function getArgument($argumentName)
-    {
-        if (!isset($this->arguments[$argumentName])) {
-            throw new \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchArgumentException('An argument "' . $argumentName . '" does not exist for this request.', 1300893886);
-        }
-        return $this->arguments[$argumentName];
-    }
-
-    /**
-     * Checks if an argument of the given name exists (is set)
-     *
-     * @param string $argumentName Name of the argument to check
-     * @return bool TRUE if the argument is set, otherwise FALSE
-     */
-    public function hasArgument($argumentName)
-    {
-        return isset($this->arguments[$argumentName]);
-    }
-
-    /**
-     * Returns an ArrayObject of arguments and their values
-     *
-     * @return array Array of arguments and their values (which may be arguments and values as well)
-     */
-    public function getArguments()
-    {
-        return $this->arguments;
-    }
-
-    /**
-     * Sets the exceeding arguments
-     *
-     * @param array $exceedingArguments Numeric array of exceeding arguments
-     */
-    public function setExceedingArguments(array $exceedingArguments)
-    {
-        $this->exceedingArguments = $exceedingArguments;
-    }
-
-    /**
-     * Returns additional unnamed arguments (if any) which have been passed through the command line after all
-     * required arguments (if any) have been specified.
-     *
-     * For a command method with the signature ($argument1, $argument2) and for the command line
-     * typo3/sysext/core/bin/typo3 acme:foo --argument1 Foo --argument2 Bar baz quux
-     * this method would return array(0 => 'baz', 1 => 'quux')
-     *
-     * @return array Numeric array of exceeding argument values
-     */
-    public function getExceedingArguments()
-    {
-        return $this->exceedingArguments;
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Mvc/Cli/RequestBuilder.php b/typo3/sysext/extbase/Classes/Mvc/Cli/RequestBuilder.php
deleted file mode 100644 (file)
index d376572..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Mvc\Cli;
-
-/*
- * 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!
- */
-
-/**
- * Builds a CLI request object from the raw command call
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class RequestBuilder implements \TYPO3\CMS\Core\SingletonInterface
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
-     */
-    protected $objectManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Reflection\ReflectionService
-     */
-    protected $reflectionService;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\CommandManager
-     */
-    protected $commandManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface
-     */
-    protected $configurationManager;
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
-     */
-    public function injectObjectManager(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager)
-    {
-        $this->objectManager = $objectManager;
-    }
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Reflection\ReflectionService $reflectionService
-     */
-    public function injectReflectionService(\TYPO3\CMS\Extbase\Reflection\ReflectionService $reflectionService)
-    {
-        $this->reflectionService = $reflectionService;
-    }
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Mvc\Cli\CommandManager $commandManager
-     */
-    public function injectCommandManager(\TYPO3\CMS\Extbase\Mvc\Cli\CommandManager $commandManager)
-    {
-        $this->commandManager = $commandManager;
-    }
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager
-     */
-    public function injectConfigurationManager(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager)
-    {
-        $this->configurationManager = $configurationManager;
-    }
-
-    /**
-     * Builds a CLI request object from a command line.
-     *
-     * The given command line may be a string (e.g. "myextension:foo do-that-thing --force") or
-     * an array consisting of the individual parts. The array must not include the script
-     * name (like in $argv) but start with command right away.
-     *
-     * @param mixed $commandLine The command line, either as a string or as an array
-     * @param string $callingScript The calling script (usually ./typo3/sysext/core/bin/typo3)
-     * @return \TYPO3\CMS\Extbase\Mvc\Cli\Request The CLI request as an object
-     */
-    public function build($commandLine = '', $callingScript = './typo3/sysext/core/bin/typo3')
-    {
-        $request = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Cli\Request::class);
-        $request->setCallingScript($callingScript);
-        $request->setControllerObjectName(\TYPO3\CMS\Extbase\Command\HelpCommandController::class);
-        $rawCommandLineArguments = is_array($commandLine) ? $commandLine : explode(' ', $commandLine);
-        if (empty($rawCommandLineArguments)) {
-            $request->setControllerCommandName('helpStub');
-            return $request;
-        }
-        $commandIdentifier = trim(array_shift($rawCommandLineArguments));
-        try {
-            $command = $this->commandManager->getCommandByIdentifier($commandIdentifier);
-            $this->configurationManager->setConfiguration(['extensionName' => $command->getExtensionName()]);
-        } catch (\TYPO3\CMS\Extbase\Mvc\Exception\CommandException $exception) {
-            $request->setArgument('exception', $exception);
-            $request->setControllerCommandName('error');
-            return $request;
-        }
-        $controllerObjectName = $command->getControllerClassName();
-        $controllerCommandName = $command->getControllerCommandName();
-        $request->setControllerObjectName($controllerObjectName);
-        $request->setControllerCommandName($controllerCommandName);
-        list($commandLineArguments, $exceedingCommandLineArguments) = $this->parseRawCommandLineArguments($rawCommandLineArguments, $controllerObjectName, $controllerCommandName);
-        $request->setArguments($commandLineArguments);
-        $request->setExceedingArguments($exceedingCommandLineArguments);
-        return $request;
-    }
-
-    /**
-     * Takes an array of unparsed command line arguments and options and converts it separated
-     * by named arguments, options and unnamed arguments.
-     *
-     * @param array $rawCommandLineArguments The unparsed command parts (such as "--foo") as an array
-     * @param string $controllerObjectName Object name of the designated command controller
-     * @param string $controllerCommandName Command name of the recognized command (ie. method name without "Command" suffix)
-     * @throws \TYPO3\CMS\Extbase\Mvc\Exception\InvalidArgumentMixingException
-     * @return array All and exceeding command line arguments
-     */
-    protected function parseRawCommandLineArguments(array $rawCommandLineArguments, $controllerObjectName, $controllerCommandName)
-    {
-        $commandLineArguments = [];
-        $exceedingArguments = [];
-        $commandMethodName = $controllerCommandName . 'Command';
-        $commandMethodParameters = $this->reflectionService
-            ->getClassSchema($controllerObjectName)
-            ->getMethod($commandMethodName)['params'] ?? [];
-        $requiredArguments = [];
-        $optionalArguments = [];
-        $argumentNames = [];
-        foreach ($commandMethodParameters as $parameterName => $parameterInfo) {
-            $argumentNames[] = $parameterName;
-            if ($parameterInfo['optional'] === false) {
-                $requiredArguments[strtolower($parameterName)] = ['parameterName' => $parameterName, 'type' => $parameterInfo['type']];
-            } else {
-                $optionalArguments[strtolower($parameterName)] = ['parameterName' => $parameterName, 'type' => $parameterInfo['type']];
-            }
-        }
-        $decidedToUseNamedArguments = false;
-        $decidedToUseUnnamedArguments = false;
-        $argumentIndex = 0;
-        while (!empty($rawCommandLineArguments)) {
-            $rawArgument = array_shift($rawCommandLineArguments);
-            if ($rawArgument[0] === '-') {
-                if ($rawArgument[1] === '-') {
-                    $rawArgument = substr($rawArgument, 2);
-                } else {
-                    $rawArgument = substr($rawArgument, 1);
-                }
-                $argumentName = $this->extractArgumentNameFromCommandLinePart($rawArgument);
-                if (isset($optionalArguments[$argumentName])) {
-                    $argumentValue = $this->getValueOfCurrentCommandLineOption($rawArgument, $rawCommandLineArguments, $optionalArguments[$argumentName]['type']);
-                    $commandLineArguments[$optionalArguments[$argumentName]['parameterName']] = $argumentValue;
-                } elseif (isset($requiredArguments[$argumentName])) {
-                    if ($decidedToUseUnnamedArguments) {
-                        throw new \TYPO3\CMS\Extbase\Mvc\Exception\InvalidArgumentMixingException(sprintf('Unexpected named argument "%s". If you use unnamed arguments, all required arguments must be passed without a name.', $argumentName), 1309971821);
-                    }
-                    $decidedToUseNamedArguments = true;
-                    $argumentValue = $this->getValueOfCurrentCommandLineOption($rawArgument, $rawCommandLineArguments, $requiredArguments[$argumentName]['type']);
-                    $commandLineArguments[$requiredArguments[$argumentName]['parameterName']] = $argumentValue;
-                    unset($requiredArguments[$argumentName]);
-                }
-            } else {
-                if (!empty($requiredArguments)) {
-                    if ($decidedToUseNamedArguments) {
-                        throw new \TYPO3\CMS\Extbase\Mvc\Exception\InvalidArgumentMixingException(sprintf('Unexpected unnamed argument "%s". If you use named arguments, all required arguments must be passed named.', $rawArgument), 1309971820);
-                    }
-                    $argument = array_shift($requiredArguments);
-                    $commandLineArguments[$argument['parameterName']] = $rawArgument;
-                    $decidedToUseUnnamedArguments = true;
-                } else {
-                    if ($argumentIndex < count($argumentNames)) {
-                        $commandLineArguments[$argumentNames[$argumentIndex]] = $rawArgument;
-                    } else {
-                        $exceedingArguments[] = $rawArgument;
-                    }
-                }
-            }
-            $argumentIndex++;
-        }
-        return [$commandLineArguments, $exceedingArguments];
-    }
-
-    /**
-     * Extracts the option or argument name from the name / value pair of a command line.
-     *
-     * @param string $commandLinePart Part of the command line, e.g. "my-important-option=SomeInterestingValue
-     * @return string The lowercased argument name, e.g. "myimportantoption
-     */
-    protected function extractArgumentNameFromCommandLinePart($commandLinePart)
-    {
-        $nameAndValue = explode('=', $commandLinePart, 2);
-        return strtolower(str_replace('-', '', $nameAndValue[0]));
-    }
-
-    /**
-     * Returns the value of the first argument of the given input array. Shifts the parsed argument off the array.
-     *
-     * @param string $currentArgument The current argument
-     * @param array &$rawCommandLineArguments Array of the remaining command line arguments
-     * @param string $expectedArgumentType The expected type of the current argument, because booleans get special attention
-     * @return string The value of the first argument
-     */
-    protected function getValueOfCurrentCommandLineOption($currentArgument, array &$rawCommandLineArguments, $expectedArgumentType)
-    {
-        if (!isset($rawCommandLineArguments[0]) && strpos($currentArgument, '=') === false || isset($rawCommandLineArguments[0]) && $rawCommandLineArguments[0][0] === '-' && strpos($currentArgument, '=') === false) {
-            return true;
-        }
-        if (strpos($currentArgument, '=') === false) {
-            $possibleValue = trim(array_shift($rawCommandLineArguments));
-            if (strpos($possibleValue, '=') === false) {
-                if ($expectedArgumentType !== 'boolean') {
-                    return $possibleValue;
-                }
-                if (in_array($possibleValue, ['on', '1', 'y', 'yes', 'true', 'TRUE'], true)) {
-                    return true;
-                }
-                if (in_array($possibleValue, ['off', '0', 'n', 'no', 'false', 'FALSE'], true)) {
-                    return false;
-                }
-                array_unshift($rawCommandLineArguments, $possibleValue);
-                return true;
-            }
-            $currentArgument .= $possibleValue;
-        }
-        $splitArgument = explode('=', $currentArgument, 2);
-        while ((!isset($splitArgument[1]) || trim($splitArgument[1]) === '') && !empty($rawCommandLineArguments)) {
-            $currentArgument .= array_shift($rawCommandLineArguments);
-            $splitArgument = explode('=', $currentArgument);
-        }
-        $value = $splitArgument[1] ?? '';
-        return $value;
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Mvc/Cli/RequestHandler.php b/typo3/sysext/extbase/Classes/Mvc/Cli/RequestHandler.php
deleted file mode 100644 (file)
index e9f07b8..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Mvc\Cli;
-
-/*
- * 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\Core\Environment;
-
-/**
- * The generic command line interface request handler for the MVC framework.
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class RequestHandler implements \TYPO3\CMS\Extbase\Mvc\RequestHandlerInterface
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
-     */
-    protected $objectManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Dispatcher
-     */
-    protected $dispatcher;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\RequestBuilder
-     */
-    protected $requestBuilder;
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
-     */
-    public function injectObjectManager(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager)
-    {
-        $this->objectManager = $objectManager;
-    }
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Mvc\Dispatcher $dispatcher
-     */
-    public function injectDispatcher(\TYPO3\CMS\Extbase\Mvc\Dispatcher $dispatcher)
-    {
-        $this->dispatcher = $dispatcher;
-    }
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Mvc\Cli\RequestBuilder $requestBuilder
-     */
-    public function injectRequestBuilder(\TYPO3\CMS\Extbase\Mvc\Cli\RequestBuilder $requestBuilder)
-    {
-        $this->requestBuilder = $requestBuilder;
-    }
-
-    /**
-     * Handles the request
-     *
-     * @return \TYPO3\CMS\Extbase\Mvc\ResponseInterface
-     */
-    public function handleRequest()
-    {
-        $commandLine = $_SERVER['argv'] ?? [];
-        $callingScript = array_shift($commandLine);
-        if ($callingScript !== $_SERVER['_']) {
-            $callingScript = $_SERVER['_'] . ' ' . $callingScript;
-        }
-
-        $request = $this->requestBuilder->build($commandLine, $callingScript);
-        /** @var \TYPO3\CMS\Extbase\Mvc\Cli\Response $response */
-        $response = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Cli\Response::class);
-        $this->dispatcher->dispatch($request, $response);
-        $response->send();
-        return $response;
-    }
-
-    /**
-     * This request handler can handle any command line request.
-     *
-     * @return bool If the request is a command line request, TRUE otherwise FALSE
-     */
-    public function canHandleRequest()
-    {
-        return Environment::isCli();
-    }
-
-    /**
-     * Returns the priority - how eager the handler is to actually handle the
-     * request.
-     *
-     * @return int The priority of the request handler.
-     */
-    public function getPriority()
-    {
-        return 100;
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Mvc/Cli/Response.php b/typo3/sysext/extbase/Classes/Mvc/Cli/Response.php
deleted file mode 100644 (file)
index c1c3d8b..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Mvc\Cli;
-
-/*
- * 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!
- */
-
-/**
- * A CLI specific response implementation
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class Response extends \TYPO3\CMS\Extbase\Mvc\Response
-{
-    /**
-     * @var int
-     */
-    private $exitCode = 0;
-
-    /**
-     * Sets the numerical exit code which should be returned when exiting this application.
-     *
-     * @param int $exitCode
-     * @throws \InvalidArgumentException
-     */
-    public function setExitCode($exitCode)
-    {
-        if (!is_int($exitCode)) {
-            throw new \InvalidArgumentException(sprintf('Tried to set invalid exit code. The value must be integer, %s given.', gettype($exitCode)), 1312222064);
-        }
-        $this->exitCode = $exitCode;
-    }
-
-    /**
-     * Rets the numerical exit code which should be returned when exiting this application.
-     *
-     * @return int
-     */
-    public function getExitCode()
-    {
-        return $this->exitCode;
-    }
-
-    /**
-     * Renders and sends the whole web response
-     */
-    public function send()
-    {
-        if ($this->content !== null) {
-            echo $this->shutdown();
-        }
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Mvc/Controller/CommandController.php b/typo3/sysext/extbase/Classes/Mvc/Controller/CommandController.php
deleted file mode 100644 (file)
index 01cdc13..0000000
+++ /dev/null
@@ -1,341 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Mvc\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\Authentication\BackendUserAuthentication;
-use TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition;
-use TYPO3\CMS\Extbase\Mvc\Cli\ConsoleOutput;
-use TYPO3\CMS\Extbase\Mvc\Cli\Request;
-use TYPO3\CMS\Extbase\Mvc\Cli\Response;
-use TYPO3\CMS\Extbase\Mvc\Exception\InvalidArgumentTypeException;
-use TYPO3\CMS\Extbase\Mvc\Exception\NoSuchCommandException;
-use TYPO3\CMS\Extbase\Mvc\Exception\StopActionException;
-use TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException;
-use TYPO3\CMS\Extbase\Mvc\RequestInterface;
-use TYPO3\CMS\Extbase\Mvc\ResponseInterface;
-use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
-use TYPO3\CMS\Extbase\Reflection\ReflectionService;
-
-/**
- * A controller which processes requests from the command line
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class CommandController implements CommandControllerInterface
-{
-    /**
-     * @var Request
-     */
-    protected $request;
-
-    /**
-     * @var Response
-     */
-    protected $response;
-
-    /**
-     * @var Arguments
-     */
-    protected $arguments;
-
-    /**
-     * Name of the command method
-     *
-     * @var string
-     */
-    protected $commandMethodName = '';
-
-    /**
-     * Whether the command needs admin access to perform its job
-     *
-     * @var bool
-     */
-    protected $requestAdminPermissions = false;
-
-    /**
-     * @var ReflectionService
-     */
-    protected $reflectionService;
-
-    /**
-     * @var ObjectManagerInterface
-     */
-    protected $objectManager;
-
-    /**
-     * @var ConsoleOutput
-     */
-    protected $output;
-
-    public function __construct()
-    {
-        trigger_error('Extbase Command Controllers will be removed in TYPO3 v10.0. Migrate to symfony/console commands instead.', E_USER_DEPRECATED);
-    }
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
-     */
-    public function injectObjectManager(ObjectManagerInterface $objectManager)
-    {
-        $this->objectManager = $objectManager;
-    }
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Reflection\ReflectionService $reflectionService
-     */
-    public function injectReflectionService(ReflectionService $reflectionService)
-    {
-        $this->reflectionService = $reflectionService;
-    }
-
-    /**
-     * Checks if the current request type is supported by the controller.
-     *
-     * @param \TYPO3\CMS\Extbase\Mvc\RequestInterface $request The current request
-     * @return bool TRUE if this request type is supported, otherwise FALSE
-     */
-    public function canProcessRequest(\TYPO3\CMS\Extbase\Mvc\RequestInterface $request)
-    {
-        return $request instanceof Request;
-    }
-
-    /**
-     * Processes a command line request.
-     *
-     * @param RequestInterface $request The request object
-     * @param ResponseInterface $response The response, modified by this handler
-     * @throws UnsupportedRequestTypeException if the controller doesn't support the current request type
-     */
-    public function processRequest(RequestInterface $request, ResponseInterface $response)
-    {
-        if (!$this->canProcessRequest($request)) {
-            throw new UnsupportedRequestTypeException(sprintf('%s only supports command line requests – requests of type "%s" given.', static::class, get_class($request)), 1300787096);
-        }
-
-        $this->request = $request;
-        $this->request->setDispatched(true);
-        $this->response = $response;
-
-        $this->commandMethodName = $this->resolveCommandMethodName();
-        $this->output = $this->objectManager->get(ConsoleOutput::class);
-        $this->arguments = $this->objectManager->get(Arguments::class);
-        $this->initializeCommandMethodArguments();
-        $this->mapRequestArgumentsToControllerArguments();
-        $this->initializeBackendAuthentication();
-        $this->callCommandMethod();
-    }
-
-    /**
-     * Resolves and checks the current command method name
-     *
-     * Note: The resulting command method name might not have the correct case, which isn't a problem because PHP is
-     * case insensitive regarding method names.
-     *
-     * @throws \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchCommandException
-     * @return string Method name of the current command
-     * @throws NoSuchCommandException
-     */
-    protected function resolveCommandMethodName()
-    {
-        $commandMethodName = $this->request->getControllerCommandName() . 'Command';
-        if (!is_callable([$this, $commandMethodName])) {
-            throw new NoSuchCommandException(sprintf('A command method "%s()" does not exist in controller "%s".', $commandMethodName, static::class), 1300902143);
-        }
-        return $commandMethodName;
-    }
-
-    /**
-     * Initializes the arguments array of this controller by creating an empty argument object for each of the
-     * method arguments found in the designated command method.
-     *
-     * @throws \TYPO3\CMS\Extbase\Mvc\Exception\InvalidArgumentTypeException
-     * @throws InvalidArgumentTypeException
-     */
-    protected function initializeCommandMethodArguments()
-    {
-        $methodParameters = $this->reflectionService
-            ->getClassSchema(static::class)
-            ->getMethod($this->commandMethodName)['params'] ?? [];
-
-        foreach ($methodParameters as $parameterName => $parameterInfo) {
-            $dataType = null;
-            if (isset($parameterInfo['type'])) {
-                $dataType = $parameterInfo['type'];
-            } elseif ($parameterInfo['array']) {
-                $dataType = 'array';
-            }
-            if ($dataType === null) {
-                throw new InvalidArgumentTypeException(sprintf('The argument type for parameter $%s of method %s->%s() could not be detected.', $parameterName, static::class, $this->commandMethodName), 1306755296);
-            }
-            $defaultValue = ($parameterInfo['defaultValue'] ?? null);
-            $this->arguments->addNewArgument($parameterName, $dataType, $parameterInfo['optional'] === false, $defaultValue);
-        }
-    }
-
-    /**
-     * Maps arguments delivered by the request object to the local controller arguments.
-     */
-    protected function mapRequestArgumentsToControllerArguments()
-    {
-        /** @var Argument $argument */
-        foreach ($this->arguments as $argument) {
-            $argumentName = $argument->getName();
-            if ($this->request->hasArgument($argumentName)) {
-                $argument->setValue($this->request->getArgument($argumentName));
-                continue;
-            }
-            if (!$argument->isRequired()) {
-                continue;
-            }
-            $argumentValue = null;
-            $commandArgumentDefinition = $this->objectManager->get(CommandArgumentDefinition::class, $argumentName, true, null);
-            while ($argumentValue === null) {
-                $argumentValue = $this->output->ask(sprintf('<comment>Please specify the required argument "%s":</comment> ', $commandArgumentDefinition->getDashedName()));
-            }
-            $argument->setValue($argumentValue);
-        }
-    }
-
-    /**
-     * Initializes and ensures authenticated backend access
-     */
-    protected function initializeBackendAuthentication()
-    {
-        $backendUserAuthentication = $this->getBackendUserAuthentication();
-        if ($backendUserAuthentication !== null) {
-            $backendUserAuthentication->backendCheckLogin();
-        }
-    }
-
-    /**
-     * Forwards the request to another command and / or CommandController.
-     *
-     * Request is directly transferred to the other command / controller
-     * without the need for a new request.
-     *
-     * @param string $commandName
-     * @param string $controllerObjectName
-     * @param array $arguments
-     * @throws StopActionException
-     */
-    protected function forward($commandName, $controllerObjectName = null, array $arguments = [])
-    {
-        $this->request->setDispatched(false);
-        $this->request->setControllerCommandName($commandName);
-        if ($controllerObjectName !== null) {
-            $this->request->setControllerObjectName($controllerObjectName);
-        }
-        $this->request->setArguments($arguments);
-
-        $this->arguments->removeAll();
-        throw new StopActionException('forward', 1476107661);
-    }
-
-    /**
-     * Calls the specified command method and passes the arguments.
-     *
-     * If the command returns a string, it is appended to the content in the
-     * response object. If the command doesn't return anything and a valid
-     * view exists, the view is rendered automatically.
-     */
-    protected function callCommandMethod()
-    {
-        $preparedArguments = [];
-        /** @var Argument $argument */
-        foreach ($this->arguments as $argument) {
-            $preparedArguments[] = $argument->getValue();
-        }
-        $commandResult = call_user_func_array([$this, $this->commandMethodName], $preparedArguments);
-        if (is_string($commandResult) && $commandResult !== '') {
-            $this->response->appendContent($commandResult);
-        } elseif (is_object($commandResult) && method_exists($commandResult, '__toString')) {
-            $this->response->appendContent((string)$commandResult);
-        }
-    }
-
-    /**
-     * Outputs specified text to the console window
-     * You can specify arguments that will be passed to the text via sprintf
-     *
-     * @see http://www.php.net/sprintf
-     * @param string $text Text to output
-     * @param array $arguments Optional arguments to use for sprintf
-     */
-    protected function output($text, array $arguments = [])
-    {
-        $this->output->output($text, $arguments);
-    }
-
-    /**
-     * Outputs specified text to the console window and appends a line break
-     *
-     * @param string $text Text to output
-     * @param array $arguments Optional arguments to use for sprintf
-     * @see output()
-     */
-    protected function outputLine($text = '', array $arguments = [])
-    {
-        $this->output->outputLine($text, $arguments);
-    }
-
-    /**
-     * Formats the given text to fit into MAXIMUM_LINE_LENGTH and outputs it to the
-     * console window
-     *
-     * @param string $text Text to output
-     * @param array $arguments Optional arguments to use for sprintf
-     * @param int $leftPadding The number of spaces to use for indentation
-     * @see outputLine()
-     */
-    protected function outputFormatted($text = '', array $arguments = [], $leftPadding = 0)
-    {
-        $this->output->outputFormatted($text, $arguments, $leftPadding);
-    }
-
-    /**
-     * Exits the CLI through the dispatcher
-     * An exit status code can be specified @see http://www.php.net/exit
-     *
-     * @param int $exitCode Exit code to return on exit
-     * @throws StopActionException
-     */
-    protected function quit($exitCode = 0)
-    {
-        $this->response->setExitCode($exitCode);
-        throw new StopActionException('quit', 1476107681);
-    }
-
-    /**
-     * Sends the response and exits the CLI without any further code execution
-     * Should be used for commands that flush code caches.
-     *
-     * @param int $exitCode Exit code to return on exit
-     */
-    protected function sendAndExit($exitCode = 0)
-    {
-        $this->response->send();
-        exit($exitCode);
-    }
-
-    /**
-     * Returns the global BackendUserAuthentication object.
-     *
-     * @return BackendUserAuthentication|null
-     */
-    protected function getBackendUserAuthentication()
-    {
-        return $GLOBALS['BE_USER'] ?? null;
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Mvc/Controller/CommandControllerInterface.php b/typo3/sysext/extbase/Classes/Mvc/Controller/CommandControllerInterface.php
deleted file mode 100644 (file)
index 39e43ba..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Mvc\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!
- */
-
-/**
- * Interface for command controllers
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-interface CommandControllerInterface extends \TYPO3\CMS\Extbase\Mvc\Controller\ControllerInterface
-{
-}
diff --git a/typo3/sysext/extbase/Classes/Mvc/Exception/AmbiguousCommandIdentifierException.php b/typo3/sysext/extbase/Classes/Mvc/Exception/AmbiguousCommandIdentifierException.php
deleted file mode 100644 (file)
index e94ec4f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Mvc\Exception;
-
-/*
- * 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!
- */
-
-/**
- * An "Ambiguous command identifier" exception
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class AmbiguousCommandIdentifierException extends \TYPO3\CMS\Extbase\Mvc\Exception\CommandException
-{
-    /**
-     * @var array<\TYPO3\CMS\Extbase\Mvc\Cli\Command>
-     */
-    protected $matchingCommands = [];
-
-    /**
-     * Overwrites parent constructor to be able to inject matching commands.
-     *
-     * @param string $message
-     * @param int $code
-     * @param \Exception|null $previousException
-     * @param array $matchingCommands <\TYPO3\CMS\Extbase\Mvc\Cli\Command> $matchingCommands Commands that matched the command identifier
-     * @see Exception
-     */
-    public function __construct($message = '', $code = 0, \Exception $previousException = null, array $matchingCommands)
-    {
-        $this->matchingCommands = $matchingCommands;
-        parent::__construct($message, $code, $previousException);
-    }
-
-    /**
-     * @return array<\TYPO3\CMS\Extbase\Mvc\Cli\Command>
-     */
-    public function getMatchingCommands()
-    {
-        return $this->matchingCommands;
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Mvc/Exception/CommandException.php b/typo3/sysext/extbase/Classes/Mvc/Exception/CommandException.php
deleted file mode 100644 (file)
index 8470217..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Mvc\Exception;
-
-/*
- * 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!
- */
-
-/**
- * Base command exception
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class CommandException extends \TYPO3\CMS\Extbase\Mvc\Exception
-{
-}
index 42ebb1a..169d80a 100644 (file)
@@ -353,36 +353,6 @@ class ClassSchema
             }
 
             foreach ($docCommentParser->getTagsValues() as $tag => $values) {
-                if ($tag === 'cli') {
-                    trigger_error(
-                        sprintf(
-                            'Method %s::%s is tagged with @cli which is deprecated and will be removed in TYPO3 v10.0.',
-                            $reflectionClass->getName(),
-                            $reflectionMethod->getName()
-                        ),
-                        E_USER_DEPRECATED
-                    );
-                }
-                if ($tag === 'internal' && $reflectionClass->isSubclassOf(\TYPO3\CMS\Extbase\Mvc\Controller\CommandController::class)) {
-                    trigger_error(
-                        sprintf(
-                            'Command method %s::%s is tagged with @internal which is deprecated and will be removed in TYPO3 v10.0.',
-                            $reflectionClass->getName(),
-                            $reflectionMethod->getName()
-                        ),
-                        E_USER_DEPRECATED
-                    );
-                }
-                if ($tag === 'flushesCaches') {
-                    trigger_error(
-                        sprintf(
-                            'Method %s::%s is tagged with @flushesCaches which is deprecated and will be removed in TYPO3 v10.0.',
-                            $reflectionClass->getName(),
-                            $reflectionMethod->getName()
-                        ),
-                        E_USER_DEPRECATED
-                    );
-                }
                 if ($tag === 'validate' && $this->isController && $this->methods[$methodName]['isAction']) {
                     trigger_error(
                         sprintf(
diff --git a/typo3/sysext/extbase/Classes/Scheduler/FieldProvider.php b/typo3/sysext/extbase/Classes/Scheduler/FieldProvider.php
deleted file mode 100644 (file)
index e8fcd54..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Scheduler;
-
-/*
- * 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\Extbase\Utility\TypeHandlingUtility;
-use TYPO3\CMS\Scheduler\AdditionalFieldProviderInterface;
-use TYPO3\CMS\Scheduler\Controller\SchedulerModuleController;
-use TYPO3\CMS\Scheduler\Task\AbstractTask;
-
-/**
- * Field provider for Extbase CommandController Scheduler task
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class FieldProvider implements AdditionalFieldProviderInterface
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\CommandManager
-     */
-    protected $commandManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
-     */
-    protected $objectManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Reflection\ReflectionService
-     */
-    protected $reflectionService;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Scheduler\Task
-     */
-    protected $task;
-
-    /**
-     * Constructor
-     *
-     * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
-     * @param \TYPO3\CMS\Extbase\Mvc\Cli\CommandManager $commandManager
-     * @param \TYPO3\CMS\Extbase\Reflection\ReflectionService $reflectionService
-     */
-    public function __construct(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager = null, \TYPO3\CMS\Extbase\Mvc\Cli\CommandManager $commandManager = null, \TYPO3\CMS\Extbase\Reflection\ReflectionService $reflectionService = null)
-    {
-        $this->objectManager = $objectManager ?? \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\ObjectManager::class);
-        $this->commandManager = $commandManager ?? $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Cli\CommandManager::class);
-        $this->reflectionService = $reflectionService ?? $this->objectManager->get(\TYPO3\CMS\Extbase\Reflection\ReflectionService::class);
-    }
-
-    /**
-     * Render additional information fields within the scheduler backend.
-     *
-     * @param array &$taskInfo Array information of task to return
-     * @param AbstractTask|null $task When editing, reference to the current task. NULL when adding.
-     * @param SchedulerModuleController $schedulerModule Reference to the calling object (BE module of the Scheduler)
-     * @return array Additional fields
-     * @see \TYPO3\CMS\Scheduler\AdditionalFieldProvider#getAdditionalFields($taskInfo, $task, $schedulerModule)
-     */
-    public function getAdditionalFields(array &$taskInfo, $task, SchedulerModuleController $schedulerModule)
-    {
-        $this->task = $task;
-        if ($this->task !== null) {
-            $this->task->setScheduler();
-        }
-        $fields = [];
-        $fields['action'] = $this->getCommandControllerActionField();
-        if ($this->task !== null && $this->task->getCommandIdentifier()) {
-            $command = $this->commandManager->getCommandByIdentifier($this->task->getCommandIdentifier());
-            $fields['description'] = $this->getCommandControllerActionDescriptionField();
-            $argumentFields = $this->getCommandControllerActionArgumentFields($command->getArgumentDefinitions());
-            $fields = array_merge($fields, $argumentFields);
-            $this->task->save();
-        }
-        return $fields;
-    }
-
-    /**
-     * Validates additional selected fields
-     *
-     * @param array &$submittedData
-     * @param SchedulerModuleController $schedulerModule
-     * @return bool
-     */
-    public function validateAdditionalFields(array &$submittedData, SchedulerModuleController $schedulerModule)
-    {
-        return true;
-    }
-
-    /**
-     * Saves additional field values
-     *
-     * @param array $submittedData
-     * @param AbstractTask $task
-     * @return bool
-     */
-    public function saveAdditionalFields(array $submittedData, AbstractTask $task)
-    {
-        $task->setCommandIdentifier($submittedData['task_extbase']['action']);
-        $task->setArguments((array)$submittedData['task_extbase']['arguments']);
-        return true;
-    }
-
-    /**
-     * Get description of selected command
-     *
-     * @return array
-     */
-    protected function getCommandControllerActionDescriptionField()
-    {
-        $command = $this->commandManager->getCommandByIdentifier($this->task->getCommandIdentifier());
-        return [
-            'code' => '',
-            'label' => '<strong>' . $command->getDescription() . '</strong>'
-        ];
-    }
-
-    /**
-     * Gets a select field containing all possible CommandController actions
-     *
-     * @return array
-     */
-    protected function getCommandControllerActionField()
-    {
-        $commands = $this->commandManager->getAvailableCommands();
-        $options = [];
-        foreach ($commands as $command) {
-            if ($command->isInternal() === true || $command->isCliOnly() === true) {
-                continue;
-            }
-            $className = $command->getControllerClassName();
-            $classNameParts = explode('\\', $className);
-            // Skip vendor and product name for core classes
-            if (strpos($className, 'TYPO3\\CMS\\') === 0) {
-                $classPartsToSkip = 2;
-            } else {
-                $classPartsToSkip = 1;
-            }
-            $classNameParts = array_slice($classNameParts, $classPartsToSkip);
-            $extensionName = $classNameParts[0];
-            $controllerName = $classNameParts[2];
-            $identifier = $command->getCommandIdentifier();
-            $options[$identifier] = $extensionName . ' ' . str_replace('CommandController', '', $controllerName) . ': ' . $command->getControllerCommandName();
-        }
-        $name = 'action';
-        $currentlySelectedCommand = $this->task !== null ? $this->task->getCommandIdentifier() : null;
-        return [
-            'code' => $this->renderSelectField($name, $options, $currentlySelectedCommand),
-            'label' => $this->getActionLabel()
-        ];
-    }
-
-    /**
-     * Gets a set of fields covering arguments which must be sent to $currentControllerAction.
-     * Also registers the default values of those fields with the Task, allowing
-     * them to be read upon execution.
-     *
-     * @param array $argumentDefinitions
-     * @return array
-     */
-    protected function getCommandControllerActionArgumentFields(array $argumentDefinitions)
-    {
-        $fields = [];
-        $argumentValues = $this->task->getArguments();
-        foreach ($argumentDefinitions as $argument) {
-            $name = $argument->getName();
-            $defaultValue = $this->getDefaultArgumentValue($argument);
-            $this->task->addDefaultValue($name, $defaultValue);
-            $value = $argumentValues[$name] ?? $defaultValue;
-            $fields[$name] = [
-                'code' => $this->renderField($argument, $value),
-                'label' => $this->getArgumentLabel($argument)
-            ];
-        }
-        return $fields;
-    }
-
-    /**
-     * Gets a label for $key based on either provided extension or currently
-     * selected CommandController extension,´
-     *
-     * @param string $localLanguageKey
-     * @param string $extensionName
-     * @return string
-     */
-    protected function getLanguageLabel($localLanguageKey, $extensionName = null)
-    {
-        if (!$extensionName) {
-            list($extensionName, $commandControllerName, $commandName) = explode(':', $this->task->getCommandIdentifier());
-        }
-        $label = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate($localLanguageKey, $extensionName);
-        return $label;
-    }
-
-    /**
-     * Gets the data type required for the argument value
-     *
-     * @param \TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition $argument
-     * @return string the argument type
-     */
-    protected function getArgumentType(\TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition $argument)
-    {
-        $command = $this->commandManager->getCommandByIdentifier($this->task->getCommandIdentifier());
-        $controllerClassName = $command->getControllerClassName();
-        $methodName = $command->getControllerCommandName() . 'Command';
-
-        $tags = $this->reflectionService
-                ->getClassSchema($controllerClassName)
-                ->getMethod($methodName)['tags']['param'] ?? [];
-        foreach ($tags as $tag) {
-            list($argumentType, $argumentVariableName) = explode(' ', $tag);
-            if (substr($argumentVariableName, 1) === $argument->getName()) {
-                return $argumentType;
-            }
-        }
-        return '';
-    }
-
-    /**
-     * Get a human-readable label for a command argument
-     *
-     * @param \TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition $argument
-     * @return string
-     */
-    protected function getArgumentLabel(\TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition $argument)
-    {
-        $argumentName = $argument->getName();
-        list($extensionName, $commandControllerName, $commandName) = explode(':', $this->task->getCommandIdentifier());
-        $path = ['command', $commandControllerName, $commandName, 'arguments', $argumentName];
-        $labelNameIndex = implode('.', $path);
-        $label = $this->getLanguageLabel($labelNameIndex);
-        if (!$label) {
-            $label = 'Argument: ' . $argumentName;
-        }
-        $descriptionIndex = $labelNameIndex . '.description';
-        $description = $this->getLanguageLabel($descriptionIndex);
-        if ((string)$description === '') {
-            $description = $argument->getDescription();
-        }
-        if ((string)$description !== '') {
-            $label .= '. <em>' . htmlspecialchars($description) . '</em>';
-        }
-        return $label;
-    }
-
-    /**
-     * Gets the default value of argument
-     *
-     * @param \TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition $argument
-     * @return mixed
-     */
-    protected function getDefaultArgumentValue(\TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition $argument)
-    {
-        $type = $this->getArgumentType($argument);
-        $argumentName = $argument->getName();
-        $command = $this->commandManager->getCommandByIdentifier($this->task->getCommandIdentifier());
-
-        $argumentReflection = $this->reflectionService
-            ->getClassSchema($command->getControllerClassName())
-            ->getMethod($command->getControllerCommandName() . 'Command')['params'] ?? [];
-
-        $defaultValue = $argumentReflection[$argumentName]['defaultValue'];
-        if (TypeHandlingUtility::normalizeType($type) === 'boolean') {
-            $defaultValue = (bool)$defaultValue ? 1 : 0;
-        }
-        return $defaultValue;
-    }
-
-    /**
-     * Get a human-readable label for the action field
-     *
-     * @return string
-     */
-    protected function getActionLabel()
-    {
-        $index = 'task.action';
-        $label = $this->getLanguageLabel($index, 'extbase');
-        if (!$label) {
-            $label = 'CommandController Command. <em>Save and reopen to define command arguments</em>';
-        }
-        return $label;
-    }
-
-    /**
-     * Render a select field with name $name and options $options
-     *
-     * @param string $name
-     * @param array $options
-     * @param string $selectedOptionValue
-     * @return string
-     */
-    protected function renderSelectField($name, array $options, $selectedOptionValue)
-    {
-        $html = [
-            '<select class="form-control" name="tx_scheduler[task_extbase][' . htmlspecialchars($name) . ']">'
-        ];
-        foreach ($options as $optionValue => $optionLabel) {
-            $selected = $optionValue === $selectedOptionValue ? ' selected="selected"' : '';
-            $html[] = '<option title="test" value="' . htmlspecialchars($optionValue) . '"' . $selected . '>' . htmlspecialchars($optionLabel) . '</option>';
-        }
-        $html[] = '</select>';
-        return implode(LF, $html);
-    }
-
-    /**
-     * Renders a field for defining an argument's value
-     *
-     * @param \TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition $argument
-     * @param mixed $currentValue
-     * @return string
-     */
-    protected function renderField(\TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition $argument, $currentValue)
-    {
-        $type = $this->getArgumentType($argument);
-        $name = $argument->getName();
-        $fieldName = 'tx_scheduler[task_extbase][arguments][' . htmlspecialchars($name) . ']';
-        if (TypeHandlingUtility::normalizeType($type) === 'boolean') {
-            // checkbox field for boolean values.
-            $html = '<input type="hidden" name="' . $fieldName . '" value="0">';
-            $html .= '<div class="checkbox"><label><input type="checkbox" name="' . $fieldName . '" value="1" ' . ((bool)$currentValue ? ' checked="checked"' : '') . '></label></div>';
-        } else {
-            // regular string, also the default field type
-            $html = '<input class="form-control" type="text" name="' . $fieldName . '" value="' . htmlspecialchars($currentValue) . '"> ';
-        }
-        return $html;
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Scheduler/Task.php b/typo3/sysext/extbase/Classes/Scheduler/Task.php
deleted file mode 100644 (file)
index 3461fe6..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Scheduler;
-
-/*
- * 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\Extbase\Mvc\Cli\CommandManager;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
-use TYPO3\CMS\Scheduler\Task\AbstractTask;
-
-/**
- * Scheduler task to execute CommandController commands
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class Task extends AbstractTask
-{
-    /**
-     * @var string
-     */
-    protected $commandIdentifier;
-
-    /**
-     * @var array
-     */
-    protected $arguments = [];
-
-    /**
-     * @var array
-     */
-    protected $defaults = [];
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
-     */
-    protected $objectManager;
-
-    /**
-     * @var CommandManager
-     */
-    protected $commandManager;
-
-    /**
-     * @var TaskExecutor
-     */
-    protected $taskExecutor;
-
-    /**
-     * Instantiates the Object Manager
-     */
-    public function __construct()
-    {
-        parent::__construct();
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->commandManager = $this->objectManager->get(CommandManager::class);
-        $this->taskExecutor = $this->objectManager->get(TaskExecutor::class);
-    }
-
-    /**
-     * Sleep
-     *
-     * @return array Properties to serialize
-     */
-    public function __sleep()
-    {
-        $properties = get_object_vars($this);
-        unset($properties['commandManager']);
-        unset($properties['objectManager']);
-        unset($properties['taskExecutor']);
-        return array_keys($properties);
-    }
-
-    /**
-     * Wakeup
-     */
-    public function __wakeup()
-    {
-        $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
-        $this->commandManager = $this->objectManager->get(CommandManager::class);
-        $this->taskExecutor = $this->objectManager->get(TaskExecutor::class);
-    }
-
-    /**
-     * Function execute from the Scheduler
-     *
-     * @return bool TRUE on successful execution
-     * @throws \Exception If an error occurs
-     */
-    public function execute()
-    {
-        try {
-            $this->taskExecutor->execute($this);
-        } catch (\Exception $e) {
-            $this->logException($e);
-            // Make sure the Scheduler gets exception details
-            throw $e;
-        }
-        return true;
-    }
-
-    /**
-     * @param string $commandIdentifier
-     */
-    public function setCommandIdentifier($commandIdentifier)
-    {
-        $this->commandIdentifier = $commandIdentifier;
-    }
-
-    /**
-     * @return string
-     */
-    public function getCommandIdentifier()
-    {
-        return $this->commandIdentifier;
-    }
-
-    /**
-     * @param array $arguments
-     */
-    public function setArguments($arguments)
-    {
-        $this->arguments = $arguments;
-    }
-
-    /**
-     * @return array
-     */
-    public function getArguments()
-    {
-        return $this->arguments;
-    }
-
-    /**
-     * @param array $defaults
-     */
-    public function setDefaults(array $defaults)
-    {
-        $this->defaults = $defaults;
-    }
-
-    /**
-     * @return array
-     */
-    public function getDefaults()
-    {
-        return $this->defaults;
-    }
-
-    /**
-     * @param string $argumentName
-     * @param mixed $argumentValue
-     */
-    public function addDefaultValue($argumentName, $argumentValue)
-    {
-        if (is_bool($argumentValue)) {
-            $argumentValue = (int)$argumentValue;
-        }
-        $this->defaults[$argumentName] = $argumentValue;
-    }
-
-    /**
-     * Return a text representation of the selected command and arguments
-     *
-     * @return string Information to display
-     */
-    public function getAdditionalInformation()
-    {
-        $label = $this->commandIdentifier;
-        if (!empty($this->arguments)) {
-            $arguments = [];
-            foreach ($this->arguments as $argumentName => $argumentValue) {
-                if (!isset($this->defaults[$argumentName]) || $argumentValue != $this->defaults[$argumentName]) {
-                    $arguments[] = $argumentName . '=' . $argumentValue;
-                }
-            }
-            $label .= ' ' . implode(', ', $arguments);
-        }
-        return $label;
-    }
-
-    /**
-     * @param \Exception $e
-     */
-    protected function logException(\Exception $e)
-    {
-        $this->logger->error('A Task (' . $this->commandIdentifier . ') Exception was captured: ' . $e->getMessage() . ' (' . $e->getCode() . ')', ['exception' => $e]);
-    }
-}
diff --git a/typo3/sysext/extbase/Classes/Scheduler/TaskExecutor.php b/typo3/sysext/extbase/Classes/Scheduler/TaskExecutor.php
deleted file mode 100644 (file)
index 90f2416..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Scheduler;
-
-/*
- * 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!
- */
-
-/**
- * Task Executor
- *
- * Takes a \TYPO3\CMS\Extbase\Scheduler\Task and executes the CommandController command
- * defined therein.
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-class TaskExecutor implements \TYPO3\CMS\Core\SingletonInterface
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\Request
-     */
-    protected $request;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\Response
-     */
-    protected $response;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Dispatcher
-     */
-    protected $dispatcher;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
-     */
-    protected $objectManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\CommandManager
-     */
-    protected $commandManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface
-     */
-    protected $configurationManager;
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
-     */
-    public function injectObjectManager(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager)
-    {
-        $this->objectManager = $objectManager;
-    }
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Mvc\Cli\CommandManager $commandManager
-     */
-    public function injectCommandManager(\TYPO3\CMS\Extbase\Mvc\Cli\CommandManager $commandManager)
-    {
-        $this->commandManager = $commandManager;
-    }
-
-    /**
-     * @param \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager
-     */
-    public function injectConfigurationManager(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager)
-    {
-        $this->configurationManager = $configurationManager;
-    }
-
-    /**
-     * Initialize Dispatcher
-     */
-    public function initializeObject()
-    {
-        $this->dispatcher = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Dispatcher::class);
-    }
-
-    /**
-     * Initializes configuration manager, object container and reflection service
-     *
-     * @param array $configuration
-     */
-    protected function initialize(array $configuration)
-    {
-        // initialize unconsumed Request and Response
-        $this->request = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Cli\Request::class);
-        $this->response = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Cli\Response::class);
-        // initialize configuration
-        $this->configurationManager->setContentObject(\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::class));
-        $this->configurationManager->setConfiguration($configuration);
-        // configure object container
-        $frameworkConfiguration = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
-        if (isset($frameworkConfiguration['objects'])) {
-            $objectContainer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class);
-            foreach ($frameworkConfiguration['objects'] as $classNameWithDot => $classConfiguration) {
-                if (isset($classConfiguration['className'])) {
-                    $originalClassName = rtrim($classNameWithDot, '.');
-                    $objectContainer->registerImplementation($originalClassName, $classConfiguration['className']);
-                }
-            }
-        }
-    }
-
-    /**
-     * Execute Task
-     *
-     * If errors occur during Task execution they are thrown as Exceptions which
-     * must be caught manually if you manually execute Tasks through your code.
-     *
-     * @param \TYPO3\CMS\Extbase\Scheduler\Task $task the task to execute
-     */
-    public function execute(\TYPO3\CMS\Extbase\Scheduler\Task $task)
-    {
-        $commandIdentifier = $task->getCommandIdentifier();
-        list($extensionKey, $controllerName, $commandName) = explode(':', $commandIdentifier);
-        $extensionName = \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToUpperCamelCase($extensionKey);
-        $this->initialize(['extensionName' => $extensionName]);
-        // execute command
-        $command = $this->commandManager->getCommandByIdentifier($commandIdentifier);
-        $this->request->setControllerObjectName($command->getControllerClassName());
-        $this->request->setControllerCommandName($command->getControllerCommandName());
-        $this->request->setArguments($task->getArguments());
-        $this->dispatcher->dispatch($this->request, $this->response);
-        $this->shutdown();
-    }
-
-    /**
-     * Resets framework singletons
-     */
-    protected function shutdown()
-    {
-        $persistenceManager = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager::class);
-        $persistenceManager->persistAll();
-    }
-}
index cc52036..37f0ba9 100644 (file)
@@ -14,8 +14,6 @@ namespace TYPO3\CMS\Extbase\Service;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\CMS\Core\Core\Environment;
-
 /**
  * Service for determining environment params
  * @internal only to be used within Extbase, not part of TYPO3 Core API.
@@ -43,19 +41,6 @@ class EnvironmentService implements \TYPO3\CMS\Core\SingletonInterface
     }
 
     /**
-     * Detects if we are running a script from the command line.
-     *
-     * @return bool
-     * @deprecated since TYPO3 v9.4 and will be removed in TYPO3 v10.0
-     * @see Environment::isCli()
-     */
-    public function isEnvironmentInCliMode()
-    {
-        trigger_error('EnvironmentService::isEnvironmentInCliMode will be removed in TYPO3 v10.0. Use Environment::isCli() instead.', E_USER_DEPRECATED);
-        return Environment::isCli();
-    }
-
-    /**
      * @return string
      */
     public function getServerRequestMethod()
diff --git a/typo3/sysext/extbase/Configuration/Commands.php b/typo3/sysext/extbase/Configuration/Commands.php
deleted file mode 100644 (file)
index a11aeda..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-/**
- * Commands to be executed by typo3, where the key of the array
- * is the name of the command (to be called as the first argument after typo3).
- * Required parameter is the "class" of the command which needs to be a subclass
- * of Symfony/Console/Command.
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
- */
-return [
-    '_core_command' => [
-        'class' => \TYPO3\CMS\Extbase\Command\CoreCommand::class,
-        'schedulable' => false,
-    ],
-    // Overriding Symfony Help command to use Extbase-specific output
-    '_extbase_help' => [
-        'class' => \TYPO3\CMS\Extbase\Command\HelpCommand::class,
-        'schedulable' => false,
-    ]
-];
index c90f6c9..290a713 100644 (file)
                        <trans-unit id="fe_groups.tx_extbase_type.Tx_Extbase_Domain_Model_FrontendUserGroup">
                                <source>Tx_Extbase_Domain_Model_FrontendUserGroup</source>
                        </trans-unit>
-                       <trans-unit id="task.action">
-                               <source>CommandController Command</source>
-                       </trans-unit>
-                       <trans-unit id="task.name">
-                               <source>Extbase CommandController Task</source>
-                       </trans-unit>
-                       <trans-unit id="task.description">
-                               <source>Allows Extbase CommandController commands to be configured and executed through the scheduler framework.</source>
-                       </trans-unit>
                </body>
        </file>
 </xliff>
diff --git a/typo3/sysext/extbase/Tests/Unit/Scheduler/FieldProviderTest.php b/typo3/sysext/extbase/Tests/Unit/Scheduler/FieldProviderTest.php
deleted file mode 100644 (file)
index 404bd97..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Tests\Unit\Scheduler;
-
-/*
- * 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\Extbase\Mvc\Cli\Command;
-use TYPO3\CMS\Extbase\Mvc\Cli\CommandManager;
-use TYPO3\CMS\Extbase\Scheduler\FieldProvider;
-use TYPO3\CMS\Extbase\Scheduler\Task;
-use TYPO3\CMS\Extbase\Tests\Fixture\DummyController;
-use TYPO3\CMS\Extbase\Tests\MockACommandController;
-use TYPO3\CMS\Scheduler\Controller\SchedulerModuleController;
-use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class FieldProviderTest extends UnitTestCase
-{
-    /**
-     * @test
-     */
-    public function getCommandControllerActionFieldFetchesCorrectClassNames()
-    {
-
-        /** @var Command|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $command1 */
-        $command1 = $this->getAccessibleMock(Command::class, [], [], '', false);
-        $command1->expects($this->once())->method('isInternal')->will($this->returnValue(false));
-        $command1->expects($this->once())->method('isCliOnly')->will($this->returnValue(false));
-        $command1->expects($this->once())->method('getControllerClassName')->will($this->returnValue(MockACommandController::class));
-        $command1->expects($this->once())->method('getControllerCommandName')->will($this->returnValue('FuncA'));
-        $command1->expects($this->once())->method('getCommandIdentifier')->will($this->returnValue('extbase:mocka:funca'));
-
-        /** @var Command|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $command2 */
-        $command2 = $this->getAccessibleMock(Command::class, [], [], '', false);
-        $command2->expects($this->once())->method('isInternal')->will($this->returnValue(false));
-        $command2->expects($this->once())->method('isCliOnly')->will($this->returnValue(false));
-        $command2->expects($this->once())->method('getControllerClassName')->will($this->returnValue('Acme\\Mypkg\\Command\\MockBCommandController'));
-        $command2->expects($this->once())->method('getControllerCommandName')->will($this->returnValue('FuncB'));
-        $command2->expects($this->once())->method('getCommandIdentifier')->will($this->returnValue('mypkg:mockb:funcb'));
-
-        /** @var CommandManager|\PHPUnit_Framework_MockObject_MockObject $commandManager */
-        $commandManager = $this->getMockBuilder(CommandManager::class)
-            ->setMethods(['getAvailableCommands'])
-            ->getMock();
-        $commandManager->expects($this->any())->method('getAvailableCommands')->will($this->returnValue([$command1, $command2]));
-
-        /** @var FieldProvider|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $fieldProvider */
-        $fieldProvider = $this->getAccessibleMock(
-            FieldProvider::class,
-            ['getActionLabel'],
-            [],
-            '',
-            false
-        );
-        $fieldProvider->_set('commandManager', $commandManager);
-        $fieldProvider->expects($this->once())->method('getActionLabel')->will($this->returnValue('some label'));
-        $actualResult = $fieldProvider->_call('getCommandControllerActionField', []);
-        $this->assertContains('<option title="test" value="extbase:mocka:funca">Extbase MockA: FuncA</option>', $actualResult['code']);
-        $this->assertContains('<option title="test" value="mypkg:mockb:funcb">Mypkg MockB: FuncB</option>', $actualResult['code']);
-    }
-
-    /**
-     * @test
-     */
-    public function getCommandControllerActionFieldSkipsInternalCommands()
-    {
-        /** @var Command|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $command1 */
-        $command = $this->getAccessibleMock(Command::class, [], [], '', false);
-        $command->method('isInternal')->will($this->returnValue(true));
-        $command->method('isCliOnly')->will($this->returnValue(false));
-        $command->method('getControllerClassName')->will($this->returnValue(MockACommandController::class));
-        $command->method('getControllerCommandName')->will($this->returnValue('FuncA'));
-        $command->method('getCommandIdentifier')->will($this->returnValue('extbase:mocka:funca'));
-
-        /** @var CommandManager|\PHPUnit_Framework_MockObject_MockObject $commandManager */
-        $commandManager = $this->getMockBuilder(CommandManager::class)
-            ->setMethods(['getAvailableCommands'])
-            ->getMock();
-        $commandManager->expects($this->any())->method('getAvailableCommands')->will($this->returnValue([$command]));
-
-        /** @var FieldProvider|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $fieldProvider */
-        $fieldProvider = $this->getAccessibleMock(
-            FieldProvider::class,
-            ['getActionLabel'],
-            [],
-            '',
-            false
-        );
-        $fieldProvider->_set('commandManager', $commandManager);
-        $fieldProvider->expects($this->once())->method('getActionLabel')->will($this->returnValue('some label'));
-        $actualResult = $fieldProvider->_call('getCommandControllerActionField', []);
-        $this->assertNotContains('<option title="test" value="extbase:mocka:funca">Extbase MockA: FuncA</option>', $actualResult['code']);
-    }
-
-    /**
-     * @test
-     */
-    public function getCommandControllerActionFieldSkipsCliOnlyCommands()
-    {
-        /** @var Command|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $command1 */
-        $command = $this->getAccessibleMock(Command::class, [], [], '', false);
-        $command->method('isInternal')->will($this->returnValue(false));
-        $command->method('isCliOnly')->will($this->returnValue(true));
-        $command->method('getControllerClassName')->will($this->returnValue(MockACommandController::class));
-        $command->method('getControllerCommandName')->will($this->returnValue('FuncA'));
-        $command->method('getCommandIdentifier')->will($this->returnValue('extbase:mocka:funca'));
-
-        /** @var CommandManager|\PHPUnit_Framework_MockObject_MockObject $commandManager */
-        $commandManager = $this->getMockBuilder(CommandManager::class)
-            ->setMethods(['getAvailableCommands'])
-            ->getMock();
-        $commandManager->expects($this->any())->method('getAvailableCommands')->will($this->returnValue([$command]));
-
-        /** @var FieldProvider|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $fieldProvider */
-        $fieldProvider = $this->getAccessibleMock(
-            FieldProvider::class,
-            ['getActionLabel'],
-            [],
-            '',
-            false
-        );
-        $fieldProvider->_set('commandManager', $commandManager);
-        $fieldProvider->expects($this->once())->method('getActionLabel')->will($this->returnValue('some label'));
-        $actualResult = $fieldProvider->_call('getCommandControllerActionField', []);
-        $this->assertNotContains('<option title="test" value="extbase:mocka:funca">Extbase MockA: FuncA</option>', $actualResult['code']);
-    }
-
-    /**
-     * @test
-     */
-    public function constructResolvesExtensionNameFromNamespaced()
-    {
-        $mockController = new DummyController();
-        $expectedResult = 'Extbase';
-        $actualResult = $mockController->getExtensionName();
-        $this->assertSame($expectedResult, $actualResult);
-    }
-
-    /**
-     * @test
-     */
-    public function validateAdditionalFieldsReturnsTrue()
-    {
-        /** @var FieldProvider|\PHPUnit_Framework_MockObject_MockObject|\|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $fieldProvider */
-        $fieldProvider = $this->getAccessibleMock(
-            FieldProvider::class,
-            ['dummy'],
-            [],
-            '',
-            false
-        );
-        $submittedData = [];
-        /** @var SchedulerModuleController $schedulerModule */
-        $schedulerModule = $this->createMock(SchedulerModuleController::class);
-        $this->assertTrue($fieldProvider->validateAdditionalFields($submittedData, $schedulerModule));
-    }
-
-    /**
-     * @test
-     */
-    public function getAdditionalFieldsRendersRightHtml()
-    {
-        $this->markTestSkipped('Incomplete mocking in a complex scenario. This should be a functional test');
-
-        /** @var Command|\PHPUnit_Framework_MockObject_MockObject $command1 */
-        $command1 = $this->getAccessibleMock(Command::class, [], [], '', false);
-        $command1->expects($this->once())->method('isInternal')->will($this->returnValue(false));
-        $command1->expects($this->once())->method('getControllerClassName')->will($this->returnValue(MockACommandController::class));
-        $command1->expects($this->once())->method('getControllerCommandName')->will($this->returnValue('FuncA'));
-        $command1->expects($this->any())->method('getCommandIdentifier')->will($this->returnValue('extbase:mocka:funca'));
-        $command1->expects($this->once())->method('getArgumentDefinitions')->will($this->returnValue([]));
-
-        /** @var Command|\PHPUnit_Framework_MockObject_MockObject $command2 */
-        $command2 = $this->getAccessibleMock(Command::class, [], [], '', false);
-        $command2->expects($this->once())->method('isInternal')->will($this->returnValue(false));
-        $command2->expects($this->once())->method('getControllerClassName')->will($this->returnValue('Acme\\Mypkg\\Command\\MockBCommandController'));
-        $command2->expects($this->once())->method('getControllerCommandName')->will($this->returnValue('FuncB'));
-        $command2->expects($this->any())->method('getCommandIdentifier')->will($this->returnValue('mypkg:mockb:funcb'));
-
-        /** @var Command|\PHPUnit_Framework_MockObject_MockObject $command3 */
-        $command3 = $this->getAccessibleMock(Command::class, [], [], '', false);
-        $command3->expects($this->once())->method('isInternal')->will($this->returnValue(false));
-        $command3->expects($this->once())->method('getControllerClassName')->will($this->returnValue('Tx_Extbase_Command_MockCCommandController'));
-        $command3->expects($this->once())->method('getControllerCommandName')->will($this->returnValue('FuncC'));
-        $command3->expects($this->any())->method('getCommandIdentifier')->will($this->returnValue('extbase:mockc:funcc'));
-
-        /** @var CommandManager|\PHPUnit_Framework_MockObject_MockObject $commandManager */
-        $commandManager = $this->getMockBuilder(CommandManager::class)
-            ->setMethods(['getAvailableCommands'])
-            ->getMock();
-        $commandManager->expects($this->any())->method('getAvailableCommands')->will($this->returnValue([$command1, $command2, $command3]));
-
-        /** @var FieldProvider|\PHPUnit_Framework_MockObject_MockObject|\|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $fieldProvider */
-        $fieldProvider = $this->getAccessibleMock(
-            FieldProvider::class,
-            ['getActionLabel', 'getArgumentLabel', 'getCommandControllerActionArgumentFields'],
-            [],
-            '',
-            false
-        );
-        $fieldProvider->_set('commandManager', $commandManager);
-        $actionLabel = 'action label string';
-        $argumentLabel = 'argument label string';
-        $fieldProvider->expects($this->any())->method('getActionLabel')->will($this->returnValue($actionLabel));
-        $fieldProvider->expects($this->any())->method('getArgumentLabel')->will($this->returnValue($argumentLabel));
-        $argArray['arg'] = [
-                'code' => '<input type="text" name="tx_scheduler[task_extbase][arguments][arg]" value="1" /> ',
-                'label' => $argumentLabel
-        ];
-        $fieldProvider->expects($this->any())->method('getCommandControllerActionArgumentFields')->will($this->returnValue($argArray));
-        $expectedAdditionalFields = [
-            'action' => [
-                'code' => '<select name="tx_scheduler[task_extbase][action]">' . LF
-                    . '<option title="test" value="extbase:mocka:funca" selected="selected">Extbase MockA: FuncA</option>' . LF
-                    . '<option title="test" value="mypkg:mockb:funcb">Mypkg MockB: FuncB</option>' . LF
-                    . '<option title="test" value="extbase:mockc:funcc">Extbase MockC: FuncC</option>' . LF
-                    . '</select>',
-                'label' => $actionLabel
-            ],
-            'description' => [
-                'code' => '',
-                'label' => '<strong></strong>'
-            ],
-            'arg' => [
-                'code' => '<input type="text" name="tx_scheduler[task_extbase][arguments][arg]" value="1" /> ',
-                'label' => $argumentLabel
-            ]
-        ];
-
-        $taskInfo = [];
-        /** @var Task $task */
-        $task = new Task();
-        $task->setCommandIdentifier($command1->getCommandIdentifier());
-        /** @var SchedulerModuleController $schedulerModule */
-        $schedulerModule = $this->createMock(SchedulerModuleController::class);
-
-        $this->assertEquals($expectedAdditionalFields, $fieldProvider->getAdditionalFields($taskInfo, $task, $schedulerModule));
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/Unit/Scheduler/Fixtures/MockACommandController.php b/typo3/sysext/extbase/Tests/Unit/Scheduler/Fixtures/MockACommandController.php
deleted file mode 100644 (file)
index c9ead4a..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Tests;
-
-/*
- * 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!
- */
-
-/**
- * MockACommandController Fixture
- */
-class MockACommandController extends \TYPO3\CMS\Extbase\Mvc\Controller\CommandController
-{
-    /**
-     * funcACommand
-     *
-     * @param int $arg A not required argument
-     * @return string
-     */
-    public function funcACommand($arg = 1)
-    {
-        return 'Foo';
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/Unit/Scheduler/Fixtures/MockBCommandController.php b/typo3/sysext/extbase/Tests/Unit/Scheduler/Fixtures/MockBCommandController.php
deleted file mode 100644 (file)
index 43503c2..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-namespace Acme\Mypkg\Command;
-
-/*
- * 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!
- */
-
-/**
- * MockBCommandController Fixture
- */
-class MockBCommandController extends \TYPO3\CMS\Extbase\Mvc\Controller\CommandController
-{
-    /**
-     * funcBCommand
-     */
-    public function funcBCommand()
-    {
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/Unit/Scheduler/Fixtures/MockCCommandController.php b/typo3/sysext/extbase/Tests/Unit/Scheduler/Fixtures/MockCCommandController.php
deleted file mode 100644 (file)
index 54719dd..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * 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!
- */
-
-/**
- * MockCCommandController Fixture
- */
-class Tx_Extbase_Command_MockCCommandController extends \TYPO3\CMS\Extbase\Mvc\Controller\CommandController
-{
-    /**
-     * funcCCommand
-     */
-    public function funcCCommand()
-    {
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/Unit/Scheduler/TaskTest.php b/typo3/sysext/extbase/Tests/Unit/Scheduler/TaskTest.php
deleted file mode 100644 (file)
index baec05c..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-<?php
-declare(strict_types = 1);
-namespace TYPO3\CMS\Extbase\Tests\Unit\Scheduler;
-
-/*
- * 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\Extbase\Scheduler\Task;
-use TYPO3\CMS\Extbase\Scheduler\TaskExecutor;
-use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class TaskTest extends UnitTestCase
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\Scheduler\Task|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface
-     */
-    protected $task;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Scheduler\TaskExecutor|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $taskExecutor;
-
-    protected function setUp()
-    {
-        $this->taskExecutor = $this->getMockBuilder(TaskExecutor::class)
-            ->setMethods(['execute'])
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->task = $this->getAccessibleMock(Task::class, ['logException', '__wakeup'], [], '', false);
-    }
-
-    /**
-     * @test
-     */
-    public function executeCallsLogExceptionOnCaughtExceptionAndRethrowsException()
-    {
-        $this->expectException(\Exception::class);
-        // @TODO expectExceptionCode is 0
-        $this->taskExecutor->expects($this->once())->method('execute')->will($this->throwException(new \Exception('testing', 1476107518)));
-        $this->task->_set('taskExecutor', $this->taskExecutor);
-        $this->task->expects($this->once())->method('logException');
-        $this->task->execute();
-    }
-
-    /**
-     * @test
-     */
-    public function executeReturnsTrueIfNoExceptionIsCaught()
-    {
-        $this->task->_set('taskExecutor', $this->taskExecutor);
-        $this->assertTrue($this->task->execute());
-    }
-
-    /**
-     * @test
-     */
-    public function setCommandIdentifierSetsCommandIdentifierCorrectly()
-    {
-        $this->task->setCommandIdentifier('Foo');
-        $this->assertSame('Foo', $this->task->_get('commandIdentifier'));
-    }
-
-    /**
-     * @test
-     */
-    public function getCommandIdentifierReturnsCorrectCommandIdentifier()
-    {
-        $this->task->_set('commandIdentifier', 'Foo');
-        $this->assertSame('Foo', $this->task->getCommandIdentifier());
-    }
-
-    /**
-     * @test
-     */
-    public function setArgumentsSetsArgumentsCorrectly()
-    {
-        $this->task->setArguments(['Foo']);
-        $this->assertSame(['Foo'], $this->task->_get('arguments'));
-    }
-
-    /**
-     * @test
-     */
-    public function getArgumentsReturnsCorrectArguments()
-    {
-        $this->task->_set('arguments', ['Foo']);
-        $this->assertSame(['Foo'], $this->task->getArguments());
-    }
-
-    /**
-     * @test
-     */
-    public function setDefaultsSetsDefaultsCorrectly()
-    {
-        $this->task->setDefaults(['Foo']);
-        $this->assertSame(['Foo'], $this->task->_get('defaults'));
-    }
-
-    /**
-     * @test
-     */
-    public function getDefaultsReturnsCorrectDefaults()
-    {
-        $this->task->_set('defaults', ['Foo']);
-        $this->assertSame(['Foo'], $this->task->getDefaults());
-    }
-
-    /**
-     * @test
-     */
-    public function addDefaultValueAddsDefaultToDefaults()
-    {
-        $defaults = ['foo' => 'bar'];
-        $this->task->_set('defaults', $defaults);
-
-        $defaults['baz'] = 'qux';
-        $this->task->addDefaultValue('baz', 'qux');
-
-        $this->assertSame($defaults, $this->task->getDefaults());
-    }
-
-    /**
-     * @test
-     */
-    public function addDefaultValueConvertsBooleanValuesToInteger()
-    {
-        $defaults = ['foo' => 'bar'];
-        $this->task->_set('defaults', $defaults);
-
-        $defaults['baz'] = 1;
-        $this->task->addDefaultValue('baz', true);
-
-        $this->assertSame($defaults, $this->task->getDefaults());
-    }
-
-    /**
-     * @test
-     */
-    public function getAdditionalInformationRespectsArguments()
-    {
-        $this->task->_set('commandIdentifier', 'foo');
-        $this->task->_set('defaults', ['bar' => 'baz']);
-        $this->task->_set('arguments', ['qux' => 'quux']);
-
-        $this->assertSame('foo qux=quux', $this->task->getAdditionalInformation());
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/UnitDeprecated/Core/BootstrapTest.php b/typo3/sysext/extbase/Tests/UnitDeprecated/Core/BootstrapTest.php
deleted file mode 100644 (file)
index 2e5c5f9..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Tests\UnitDeprecated\Core;
-
-/*
- * 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\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class BootstrapTest extends UnitTestCase
-{
-    /**
-     * @var bool Reset singletons created by subject
-     */
-    protected $resetSingletonInstances = true;
-
-    /**
-     * @test
-     */
-    public function configureObjectManagerRespectsOverridingOfAlternativeObjectRegistrationViaPluginConfiguration()
-    {
-        /** @var $objectContainer \TYPO3\CMS\Extbase\Object\Container\Container|\PHPUnit_Framework_MockObject_MockObject */
-        $objectContainer = $this->getMockBuilder(\TYPO3\CMS\Extbase\Object\Container\Container::class)
-            ->setMethods(['registerImplementation'])
-            ->getMock();
-        $objectContainer->expects($this->once())->method('registerImplementation')->with(\TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface::class, 'TYPO3\CMS\Extbase\Persistence\Reddis\PersistenceManager');
-        \TYPO3\CMS\Core\Utility\GeneralUtility::setSingletonInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class, $objectContainer);
-
-        $frameworkSettings['objects'] = [
-            'TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface.' => [
-                'className' => 'TYPO3\CMS\Extbase\Persistence\Reddis\PersistenceManager'
-            ]
-        ];
-
-        /** @var $configurationManagerMock \TYPO3\CMS\Extbase\Configuration\ConfigurationManager|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface */
-        $configurationManagerMock = $this->getAccessibleMock(\TYPO3\CMS\Extbase\Configuration\ConfigurationManager::class, ['getConfiguration']);
-        $configurationManagerMock->expects($this->any())->method('getConfiguration')->with('Framework')->will($this->returnValue($frameworkSettings));
-
-        /** @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject  $objectManager */
-        $objectManager = $this->createMock(\TYPO3\CMS\Extbase\Object\ObjectManager::class);
-
-        /** @var $bootstrapMock \TYPO3\CMS\Extbase\Core\Bootstrap|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface */
-        $bootstrapMock = $this->getAccessibleMock(\TYPO3\CMS\Extbase\Core\Bootstrap::class, ['inject']);
-        $bootstrapMock->_set('objectManager', $objectManager);
-        $bootstrapMock->_set('configurationManager', $configurationManagerMock);
-        $bootstrapMock->configureObjectManager();
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/CommandManagerTest.php b/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/CommandManagerTest.php
deleted file mode 100644 (file)
index a48c607..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli;
-
-/*
- * 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\Extbase\Mvc\Exception\AmbiguousCommandIdentifierException;
-use TYPO3\CMS\Extbase\Mvc\Exception\NoSuchCommandException;
-use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class CommandManagerTest extends UnitTestCase
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
-     */
-    protected $mockObjectManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\CommandManager
-     */
-    protected $commandManager;
-
-    protected function setUp()
-    {
-        $this->commandManager = $this->getAccessibleMock(\TYPO3\CMS\Extbase\Mvc\Cli\CommandManager::class, ['getAvailableCommands']);
-        $this->mockObjectManager = $this->createMock(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface::class);
-        $this->commandManager->_set('objectManager', $this->mockObjectManager);
-    }
-
-    /**
-     * @test
-     */
-    public function getAvailableCommandsReturnsAllAvailableCommands()
-    {
-        /** @var \TYPO3\TestingFramework\Core\AccessibleObjectInterface $commandManager */
-        $commandManager = $this->getAccessibleMock(\TYPO3\CMS\Extbase\Mvc\Cli\CommandManager::class, ['dummy']);
-        $commandManager->_set('objectManager', $this->mockObjectManager);
-        $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['extbase']['commandControllers'] = [
-            \TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli\Fixture\Command\MockACommandController::class,
-            \TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli\Fixture\Command\MockBCommandController::class
-        ];
-        $mockCommand1 = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class);
-        $mockCommand2 = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class);
-        $mockCommand3 = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class);
-        $this->mockObjectManager->expects($this->at(0))->method('get')->with(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class, \TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli\Fixture\Command\MockACommandController::class, 'foo')->will($this->returnValue($mockCommand1));
-        $this->mockObjectManager->expects($this->at(1))->method('get')->with(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class, \TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli\Fixture\Command\MockACommandController::class, 'bar')->will($this->returnValue($mockCommand2));
-        $this->mockObjectManager->expects($this->at(2))->method('get')->with(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class, \TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli\Fixture\Command\MockBCommandController::class, 'baz')->will($this->returnValue($mockCommand3));
-        $commands = $commandManager->getAvailableCommands();
-        $this->assertEquals(3, count($commands));
-        $this->assertSame($mockCommand1, $commands[0]);
-        $this->assertSame($mockCommand2, $commands[1]);
-        $this->assertSame($mockCommand3, $commands[2]);
-    }
-
-    /**
-     * @test
-     */
-    public function getCommandByIdentifierReturnsCommandIfIdentifierIsEqual()
-    {
-        $mockCommand = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class);
-        $mockCommand->expects($this->once())->method('getCommandIdentifier')->will($this->returnValue('extensionkey:controller:command'));
-        $mockCommands = [$mockCommand];
-        $this->commandManager->expects($this->once())->method('getAvailableCommands')->will($this->returnValue($mockCommands));
-        $this->assertSame($mockCommand, $this->commandManager->getCommandByIdentifier('extensionkey:controller:command'));
-    }
-
-    /**
-     * @test
-     */
-    public function getCommandByIdentifierWorksCaseInsensitive()
-    {
-        $mockCommand = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class);
-        $mockCommand->expects($this->once())->method('getCommandIdentifier')->will($this->returnValue('extensionkey:controller:command'));
-        $mockCommands = [$mockCommand];
-        $this->commandManager->expects($this->once())->method('getAvailableCommands')->will($this->returnValue($mockCommands));
-        $this->assertSame($mockCommand, $this->commandManager->getCommandByIdentifier('   ExtensionKey:conTroLler:Command  '));
-    }
-
-    /**
-     * @test
-     */
-    public function getCommandByIdentifierThrowsExceptionIfNoMatchingCommandWasFound()
-    {
-        $this->expectException(NoSuchCommandException::class);
-        $this->expectExceptionCode(1310556663);
-        $mockCommand = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class);
-        $mockCommand->expects($this->once())->method('getCommandIdentifier')->will($this->returnValue('extensionkey:controller:command'));
-        $mockCommands = [$mockCommand];
-        $this->commandManager->expects($this->once())->method('getAvailableCommands')->will($this->returnValue($mockCommands));
-        $this->commandManager->getCommandByIdentifier('extensionkey:controller:someothercommand');
-    }
-
-    /**
-     * @test
-     */
-    public function getCommandByIdentifierThrowsExceptionIfMoreThanOneMatchingCommandWasFound()
-    {
-        $this->expectException(AmbiguousCommandIdentifierException::class);
-        $this->expectExceptionCode(1310557169);
-        $mockCommand1 = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class);
-        $mockCommand1->expects($this->once())->method('getCommandIdentifier')->will($this->returnValue('extensionkey:controller:command'));
-        $mockCommand2 = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class);
-        $mockCommand2->expects($this->once())->method('getCommandIdentifier')->will($this->returnValue('otherextensionkey:controller:command'));
-        $mockCommands = [$mockCommand1, $mockCommand2];
-        $this->commandManager->expects($this->once())->method('getAvailableCommands')->will($this->returnValue($mockCommands));
-        $this->commandManager->getCommandByIdentifier('controller:command');
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/CommandTest.php b/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/CommandTest.php
deleted file mode 100644 (file)
index 3a2e4cf..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-<?php
-declare(strict_types = 1);
-
-namespace TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli;
-
-/*
- * 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\Extbase\Mvc\Cli\Command;
-use TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition;
-use TYPO3\CMS\Extbase\Object\ObjectManager;
-use TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli\Fixture\Command\MockCCommandController;
-use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class CommandTest extends UnitTestCase
-{
-    /**
-     * @var bool Reset singletons created by subject
-     */
-    protected $resetSingletonInstances = true;
-
-    public function testIsCliOnly()
-    {
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'empty'
-        );
-
-        static::assertFalse($commandController->isCliOnly());
-
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'cliOnly'
-        );
-
-        static::assertTrue($commandController->isCliOnly());
-    }
-
-    /**
-     * @return array
-     */
-    public function commandIdentifiers()
-    {
-        return [
-
-            ['Tx\ExtensionKey\Command\CacheCommandController', 'flush', 'extension_key:cache:flush'],
-            ['Tx\Ext\Command\CookieCommandController', 'bake', 'ext:cookie:bake'],
-            ['Tx\OtherExtensionKey\Foo\Faa\Fuuum\Command\CoffeeCommandController', 'brew', 'other_extension_key:coffee:brew'],
-        ];
-    }
-
-    /**
-     * @test
-     * @dataProvider commandIdentifiers
-     * @param string $controllerClassName
-     * @param string $commandName
-     * @param string $expectedCommandIdentifier
-     */
-    public function constructRendersACommandIdentifierByTheGivenControllerAndCommandName($controllerClassName, $commandName, $expectedCommandIdentifier)
-    {
-        $command = new \TYPO3\CMS\Extbase\Mvc\Cli\Command($controllerClassName, $commandName);
-        $this->assertEquals($expectedCommandIdentifier, $command->getCommandIdentifier());
-    }
-
-    /**
-     * @return array
-     */
-    public function invalidCommandClassNames()
-    {
-        return [
-            [''],
-            // CommandClassName must not be empty
-            ['Foo']
-        ];
-    }
-
-    /**
-     * @test
-     * @dataProvider invalidCommandClassNames
-     * @param string $controllerClassName
-     */
-    public function constructThrowsExceptionIfCommandClassNameIsInvalid($controllerClassName)
-    {
-        $this->expectException(\InvalidArgumentException::class);
-        $this->expectExceptionCode(1438782187);
-        new \TYPO3\CMS\Extbase\Mvc\Cli\Command($controllerClassName, 'foo');
-    }
-
-    public function testIsInternal()
-    {
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'empty'
-        );
-
-        static::assertFalse($commandController->isInternal());
-
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'internal'
-        );
-
-        static::assertTrue($commandController->isInternal());
-    }
-
-    public function testIsFlushinCaches()
-    {
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'empty'
-        );
-
-        static::assertFalse($commandController->isFlushingCaches());
-
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'flushingCaches'
-        );
-
-        static::assertTrue($commandController->isFlushingCaches());
-    }
-
-    public function testHasArguments()
-    {
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'empty'
-        );
-
-        static::assertFalse($commandController->hasArguments());
-
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'withArguments'
-        );
-
-        static::assertTrue($commandController->hasArguments());
-    }
-
-    public function testGetArgumentDefinitions()
-    {
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'empty'
-        );
-
-        static::assertSame([], $commandController->getArgumentDefinitions());
-
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'withArguments'
-        );
-
-        $expected = [
-            new CommandArgumentDefinition('foo', true, 'FooParamDescription'),
-            new CommandArgumentDefinition('bar', false, 'BarParamDescription'),
-        ];
-
-        static::assertEquals($expected, $commandController->getArgumentDefinitions());
-    }
-
-    public function testGetDescription()
-    {
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'empty'
-        );
-
-        static::assertSame('', $commandController->getDescription());
-
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'withDescription'
-        );
-
-        $expected = 'Longer Description' . LF .
-            'Multine' . LF . LF .
-            'Much Multiline';
-
-        static::assertEquals($expected, $commandController->getDescription());
-    }
-
-    public function testGetShortDescription()
-    {
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'empty'
-        );
-
-        static::assertSame('', $commandController->getShortDescription());
-
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'withDescription'
-        );
-
-        $expected = 'Short Description';
-
-        static::assertEquals($expected, $commandController->getShortDescription());
-    }
-
-    public function testGetRelatedCommandIdentifiers()
-    {
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'empty'
-        );
-
-        static::assertSame([], $commandController->getRelatedCommandIdentifiers());
-
-        $commandController = GeneralUtility::makeInstance(ObjectManager::class)->get(
-            Command::class,
-            MockCCommandController::class,
-            'relatedCommandIdentifiers'
-        );
-
-        $expected = ['Foo:Bar:Baz'];
-        static::assertEquals($expected, $commandController->getRelatedCommandIdentifiers());
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/Fixture/Command/MockACommandController.php b/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/Fixture/Command/MockACommandController.php
deleted file mode 100644 (file)
index 7e9dc5e..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli\Fixture\Command;
-
-/*
- * 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!
- */
-
-/**
- * A mock CLI Command
- */
-class MockACommandController extends \TYPO3\CMS\Extbase\Mvc\Cli\Command
-{
-    public function fooCommand()
-    {
-    }
-
-    /**
-     * @param mixed $someArgument
-     */
-    public function barCommand($someArgument)
-    {
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/Fixture/Command/MockBCommandController.php b/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/Fixture/Command/MockBCommandController.php
deleted file mode 100644 (file)
index 43aee27..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli\Fixture\Command;
-
-/**
- * Another mock CLI Command
- */
-class MockBCommandController extends \TYPO3\CMS\Extbase\Mvc\Cli\Command
-{
-    public function bazCommand()
-    {
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/Fixture/Command/MockCCommandController.php b/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/Fixture/Command/MockCCommandController.php
deleted file mode 100644 (file)
index e49eb9c..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-declare(strict_types = 1);
-
-namespace TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli\Fixture\Command;
-
-/*
- * 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!
- */
-
-/**
- * Another mock CLI Command
- */
-class MockCCommandController extends \TYPO3\CMS\Extbase\Mvc\Cli\Command
-{
-    /**
-     * @cli
-     */
-    public function cliOnlyCommand()
-    {
-    }
-
-    public function emptyCommand()
-    {
-    }
-
-    /**
-     * @internal
-     */
-    public function internalCommand()
-    {
-    }
-
-    /**
-     * @flushesCaches
-     */
-    public function flushingCachesCommand()
-    {
-    }
-
-    /**
-     * @param string $foo FooParamDescription
-     * @param string $bar BarParamDescription
-     */
-    public function withArgumentsCommand($foo, $bar = 'baz')
-    {
-    }
-
-    /**
-     * Short Description
-     *
-     * Longer Description
-     * Multine
-     *
-     * Much Multiline
-     */
-    public function withDescriptionCommand()
-    {
-    }
-
-    /**
-     * @see Foo:Bar:Baz
-     */
-    public function relatedCommandIdentifiersCommand()
-    {
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/RequestBuilderTest.php b/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/RequestBuilderTest.php
deleted file mode 100644 (file)
index 6640b00..0000000
+++ /dev/null
@@ -1,451 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli;
-
-/*
- * 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\Extbase\Mvc\Exception\InvalidArgumentMixingException;
-use TYPO3\CMS\Extbase\Reflection\ClassSchema;
-use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class RequestBuilderTest extends UnitTestCase
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\RequestBuilder|\TYPO3\TestingFramework\Core\AccessibleObjectInterface|\PHPUnit_Framework_Comparator_MockObject
-     */
-    protected $requestBuilder;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\Request|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface
-     */
-    protected $request;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
-     */
-    protected $mockObjectManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\Command
-     */
-    protected $mockCommand;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Cli\CommandManager
-     */
-    protected $mockCommandManager;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Reflection\ReflectionService|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $mockReflectionService;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $mockConfigurationManager;
-
-    /**
-     * Sets up this test case
-     */
-    protected function setUp()
-    {
-        $this->request = $this->getAccessibleMock(\TYPO3\CMS\Extbase\Mvc\Cli\Request::class, ['dummy']);
-        $this->mockObjectManager = $this->createMock(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface::class);
-        $this->mockObjectManager->expects($this->any())->method('get')->with(\TYPO3\CMS\Extbase\Mvc\Cli\Request::class)->will($this->returnValue($this->request));
-        $this->mockCommand = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class);
-        $this->mockCommand->expects($this->any())->method('getControllerClassName')->will($this->returnValue('Tx\\SomeExtensionName\\Command\\DefaultCommandController'));
-        $this->mockCommand->expects($this->any())->method('getControllerCommandName')->will($this->returnValue('list'));
-        $this->mockCommandManager = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\CommandManager::class);
-        $this->mockCommandManager->expects($this->any())->method('getCommandByIdentifier')->with('some_extension_name:default:list')->will($this->returnValue($this->mockCommand));
-        $this->mockReflectionService = $this->createMock(\TYPO3\CMS\Extbase\Reflection\ReflectionService::class);
-        $this->mockConfigurationManager = $this->createMock(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::class);
-        $this->requestBuilder = $this->getAccessibleMock(\TYPO3\CMS\Extbase\Mvc\Cli\RequestBuilder::class, ['dummy']);
-        $this->requestBuilder->_set('objectManager', $this->mockObjectManager);
-        $this->requestBuilder->_set('reflectionService', $this->mockReflectionService);
-        $this->requestBuilder->_set('commandManager', $this->mockCommandManager);
-        $this->requestBuilder->_set('configurationManager', $this->mockConfigurationManager);
-    }
-
-    /**
-     * Checks if a CLI request specifying a package, controller and action name results in the expected request object
-     *
-     * @test
-     */
-    public function cliAccessWithExtensionControllerAndActionNameBuildsCorrectRequest(): void
-    {
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => []
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-        $request = $this->requestBuilder->build('some_extension_name:default:list');
-        $this->assertSame('Tx\\SomeExtensionName\\Command\\DefaultCommandController', $request->getControllerObjectName());
-        $this->assertSame('list', $request->getControllerCommandName(), 'The CLI request specifying a package, controller and action name did not return a request object pointing to the expected action.');
-    }
-
-    /**
-     * @test
-     */
-    public function ifCommandCantBeResolvedTheHelpScreenIsShown()
-    {
-        // The following call is only made to satisfy PHPUnit. For some weird reason PHPUnit complains that the
-        // mocked method ("getObjectNameByClassName") does not exist _if the mock object is not used_.
-        $this->mockCommandManager->getCommandByIdentifier('some_extension_name:default:list');
-        $mockCommandManager = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\CommandManager::class);
-        $mockCommandManager
-            ->expects($this->any())
-            ->method('getCommandByIdentifier')
-            ->with('test:default:list')
-            ->will(
-                $this->throwException(
-                new \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchCommandException('testing', 1476050312)
-            )
-            );
-        $this->requestBuilder->_set('commandManager', $mockCommandManager);
-        $request = $this->requestBuilder->build('test:default:list');
-        $this->assertSame(\TYPO3\CMS\Extbase\Command\HelpCommandController::class, $request->getControllerObjectName());
-    }
-
-    /**
-     * @test
-     */
-    public function argumentWithValueSeparatedByEqualSignBuildsCorrectRequest(): void
-    {
-        $methodParameters = [
-            'testArgument' => ['optional' => false, 'type' => 'string']
-        ];
-
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => $methodParameters
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-        $request = $this->requestBuilder->build('some_extension_name:default:list --test-argument=value');
-        $this->assertTrue($request->hasArgument('testArgument'), 'The given "testArgument" was not found in the built request.');
-        $this->assertSame($request->getArgument('testArgument'), 'value', 'The "testArgument" had not the given value.');
-    }
-
-    /**
-     * Checks if a CLI request specifying some "console style" (--my-argument=value) arguments results in the expected request object
-     *
-     * @test
-     */
-    public function cliAccessWithExtensionControllerActionAndArgumentsBuildsCorrectRequest(): void
-    {
-        $methodParameters = [
-            'testArgument' => ['optional' => false, 'type' => 'string'],
-            'testArgument2' => ['optional' => false, 'type' => 'string']
-        ];
-
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => $methodParameters
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-        $request = $this->requestBuilder->build('some_extension_name:default:list --test-argument=value --test-argument2=value2');
-        $this->assertTrue($request->hasArgument('testArgument'), 'The given "testArgument" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('testArgument2'), 'The given "testArgument2" was not found in the built request.');
-        $this->assertEquals($request->getArgument('testArgument'), 'value', 'The "testArgument" had not the given value.');
-        $this->assertEquals($request->getArgument('testArgument2'), 'value2', 'The "testArgument2" had not the given value.');
-    }
-
-    /**
-     * Checks if a CLI request specifying some "console style" (--my-argument =value) arguments with spaces between name and value results in the expected request object
-     *
-     * @test
-     */
-    public function checkIfCLIAccesWithPackageControllerActionAndArgumentsToleratesSpaces(): void
-    {
-        $methodParameters = [
-            'testArgument' => ['optional' => false, 'type' => 'string'],
-            'testArgument2' => ['optional' => false, 'type' => 'string'],
-            'testArgument3' => ['optional' => false, 'type' => 'string'],
-            'testArgument4' => ['optional' => false, 'type' => 'string']
-        ];
-
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => $methodParameters
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-        $request = $this->requestBuilder->build('some_extension_name:default:list --test-argument= value --test-argument2 =value2 --test-argument3 = value3 --test-argument4=value4');
-        $this->assertTrue($request->hasArgument('testArgument'), 'The given "testArgument" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('testArgument2'), 'The given "testArgument2" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('testArgument3'), 'The given "testArgument3" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('testArgument4'), 'The given "testArgument4" was not found in the built request.');
-        $this->assertSame($request->getArgument('testArgument'), 'value', 'The "testArgument" had not the given value.');
-        $this->assertSame($request->getArgument('testArgument2'), 'value2', 'The "testArgument2" had not the given value.');
-        $this->assertSame($request->getArgument('testArgument3'), 'value3', 'The "testArgument3" had not the given value.');
-        $this->assertSame($request->getArgument('testArgument4'), 'value4', 'The "testArgument4" had not the given value.');
-    }
-
-    /**
-     * Checks if a CLI request specifying some short "console style" (-c value or -c=value or -c = value) arguments results in the expected request object
-     *
-     * @test
-     */
-    public function CLIAccesWithShortArgumentsBuildsCorrectRequest(): void
-    {
-        $methodParameters = [
-            'a' => ['optional' => false, 'type' => 'string'],
-            'd' => ['optional' => false, 'type' => 'string'],
-            'f' => ['optional' => false, 'type' => 'string']
-        ];
-
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => $methodParameters
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-
-        $request = $this->requestBuilder->build('some_extension_name:default:list -d valued -f=valuef -a = valuea');
-        $this->assertTrue($request->hasArgument('d'), 'The given "d" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('f'), 'The given "f" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('a'), 'The given "a" was not found in the built request.');
-        $this->assertSame($request->getArgument('d'), 'valued', 'The "d" had not the given value.');
-        $this->assertSame($request->getArgument('f'), 'valuef', 'The "f" had not the given value.');
-        $this->assertSame($request->getArgument('a'), 'valuea', 'The "a" had not the given value.');
-    }
-
-    /**
-     * Checks if a CLI request specifying some mixed "console style" (-c or --my-argument -f=value) arguments with and
-     * without values results in the expected request object
-     *
-     * @test
-     */
-    public function CLIAccesWithArgumentsWithAndWithoutValuesBuildsCorrectRequest(): void
-    {
-        $methodParameters = [
-            'testArgument' => ['optional' => false, 'type' => 'string'],
-            'testArgument2' => ['optional' => false, 'type' => 'string'],
-            'testArgument3' => ['optional' => false, 'type' => 'string'],
-            'testArgument4' => ['optional' => false, 'type' => 'string'],
-            'testArgument5' => ['optional' => false, 'type' => 'string'],
-            'testArgument6' => ['optional' => false, 'type' => 'string'],
-            'testArgument7' => ['optional' => false, 'type' => 'string'],
-            'f' => ['optional' => false, 'type' => 'string'],
-            'd' => ['optional' => false, 'type' => 'string'],
-            'a' => ['optional' => false, 'type' => 'string'],
-            'c' => ['optional' => false, 'type' => 'string'],
-            'j' => ['optional' => false, 'type' => 'string'],
-            'k' => ['optional' => false, 'type' => 'string'],
-            'm' => ['optional' => false, 'type' => 'string']
-        ];
-
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => $methodParameters
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-
-        $request = $this->requestBuilder->build('some_extension_name:default:list --test-argument=value --test-argument2= value2 -k --test-argument-3 = value3 --test-argument4=value4 -f valuef -d=valued -a = valuea -c --testArgument7 --test-argument5 = 5 --test-argument6 -j kjk -m');
-        $this->assertTrue($request->hasArgument('testArgument'), 'The given "testArgument" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('testArgument2'), 'The given "testArgument2" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('k'), 'The given "k" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('testArgument3'), 'The given "testArgument3" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('testArgument4'), 'The given "testArgument4" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('f'), 'The given "f" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('d'), 'The given "d" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('a'), 'The given "a" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('c'), 'The given "d" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('testArgument7'), 'The given "testArgument7" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('testArgument5'), 'The given "testArgument5" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('testArgument6'), 'The given "testArgument6" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('j'), 'The given "j" was not found in the built request.');
-        $this->assertTrue($request->hasArgument('m'), 'The given "m" was not found in the built request.');
-        $this->assertSame($request->getArgument('testArgument'), 'value', 'The "testArgument" had not the given value.');
-        $this->assertSame($request->getArgument('testArgument2'), 'value2', 'The "testArgument2" had not the given value.');
-        $this->assertSame($request->getArgument('testArgument3'), 'value3', 'The "testArgument3" had not the given value.');
-        $this->assertSame($request->getArgument('testArgument4'), 'value4', 'The "testArgument4" had not the given value.');
-        $this->assertSame($request->getArgument('f'), 'valuef', 'The "f" had not the given value.');
-        $this->assertSame($request->getArgument('d'), 'valued', 'The "d" had not the given value.');
-        $this->assertSame($request->getArgument('a'), 'valuea', 'The "a" had not the given value.');
-        $this->assertSame($request->getArgument('testArgument5'), '5', 'The "testArgument4" had not the given value.');
-        $this->assertSame($request->getArgument('j'), 'kjk', 'The "j" had not the given value.');
-    }
-
-    /**
-     * @test
-     */
-    public function insteadOfNamedArgumentsTheArgumentsCanBePassedUnnamedInTheCorrectOrder(): void
-    {
-        $methodParameters = [
-            'testArgument1' => ['optional' => false, 'type' => 'string'],
-            'testArgument2' => ['optional' => false, 'type' => 'string']
-        ];
-
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => $methodParameters
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-        $request = $this->requestBuilder->build('some_extension_name:default:list --test-argument1 firstArgumentValue --test-argument2 secondArgumentValue');
-        $this->assertSame('firstArgumentValue', $request->getArgument('testArgument1'));
-        $this->assertSame('secondArgumentValue', $request->getArgument('testArgument2'));
-        $request = $this->requestBuilder->build('some_extension_name:default:list firstArgumentValue secondArgumentValue');
-        $this->assertSame('firstArgumentValue', $request->getArgument('testArgument1'));
-        $this->assertSame('secondArgumentValue', $request->getArgument('testArgument2'));
-    }
-
-    /**
-     * @test
-     */
-    public function argumentsAreDetectedAfterOptions(): void
-    {
-        $methodParameters = [
-            'some' => ['optional' => true, 'type' => 'boolean'],
-            'option' => ['optional' => true, 'type' => 'string'],
-            'argument1' => ['optional' => false, 'type' => 'string'],
-            'argument2' => ['optional' => false, 'type' => 'string']
-        ];
-
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => $methodParameters
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-        $request = $this->requestBuilder->build('some_extension_name:default:list --some -option=value file1 file2');
-        $this->assertSame('list', $request->getControllerCommandName());
-        $this->assertTrue($request->getArgument('some'));
-        $this->assertSame('file1', $request->getArgument('argument1'));
-        $this->assertSame('file2', $request->getArgument('argument2'));
-    }
-
-    /**
-     * @test
-     */
-    public function exceedingArgumentsMayBeSpecified(): void
-    {
-        $methodParameters = [
-            'testArgument1' => ['optional' => false, 'type' => 'string'],
-            'testArgument2' => ['optional' => false, 'type' => 'string']
-        ];
-
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => $methodParameters
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-
-        $expectedArguments = ['testArgument1' => 'firstArgumentValue', 'testArgument2' => 'secondArgumentValue'];
-        $request = $this->requestBuilder->build('some_extension_name:default:list --test-argument1=firstArgumentValue --test-argument2 secondArgumentValue exceedingArgument1');
-        $this->assertEquals($expectedArguments, $request->getArguments());
-        $this->assertEquals(['exceedingArgument1'], $request->getExceedingArguments());
-    }
-
-    /**
-     * @test
-     */
-    public function ifNamedArgumentsAreUsedAllRequiredArgumentsMustBeNamed(): void
-    {
-        $this->expectException(InvalidArgumentMixingException::class);
-        $this->expectExceptionCode(1309971820);
-        $methodParameters = [
-            'testArgument1' => ['optional' => false, 'type' => 'string'],
-            'testArgument2' => ['optional' => false, 'type' => 'string']
-        ];
-
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => $methodParameters
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-
-        $this->requestBuilder->build('some_extension_name:default:list --test-argument1 firstArgumentValue secondArgumentValue');
-    }
-
-    /**
-     * @test
-     */
-    public function ifUnnamedArgumentsAreUsedAllRequiredArgumentsMustBeUnnamed(): void
-    {
-        $this->expectException(InvalidArgumentMixingException::class);
-        $this->expectExceptionCode(1309971821);
-        $methodParameters = [
-            'requiredArgument1' => ['optional' => false, 'type' => 'string'],
-            'requiredArgument2' => ['optional' => false, 'type' => 'string']
-        ];
-
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => $methodParameters
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-
-        $this->requestBuilder->build('some_extension_name:default:list firstArgumentValue --required-argument2 secondArgumentValue');
-    }
-
-    /**
-     * @test
-     */
-    public function booleanOptionsAreConsideredEvenIfAnUnnamedArgumentFollows(): void
-    {
-        $methodParameters = [
-            'requiredArgument1' => ['optional' => false, 'type' => 'string'],
-            'requiredArgument2' => ['optional' => false, 'type' => 'string'],
-            'booleanOption' => ['optional' => true, 'type' => 'boolean']
-        ];
-
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => $methodParameters
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-
-        $expectedArguments = ['requiredArgument1' => 'firstArgumentValue', 'requiredArgument2' => 'secondArgumentValue', 'booleanOption' => true];
-        $request = $this->requestBuilder->build('some_extension_name:default:list --booleanOption firstArgumentValue secondArgumentValue');
-        $this->assertEquals($expectedArguments, $request->getArguments());
-    }
-
-    /**
-     * @test
-     */
-    public function booleanOptionsCanHaveOnlyCertainValuesIfTheValueIsAssignedWithoutEqualSign(): void
-    {
-        $methodParameters = [
-            'b1' => ['optional' => true, 'type' => 'boolean'],
-            'b2' => ['optional' => true, 'type' => 'boolean'],
-            'b3' => ['optional' => true, 'type' => 'boolean'],
-            'b4' => ['optional' => true, 'type' => 'boolean'],
-            'b5' => ['optional' => true, 'type' => 'boolean'],
-            'b6' => ['optional' => true, 'type' => 'boolean']
-        ];
-
-        $classSchemaMock = $this->createMock(ClassSchema::class);
-        $classSchemaMock->expects($this->any())->method('getMethod')->with('listCommand')->willReturn([
-            'params' => $methodParameters
-        ]);
-
-        $this->mockReflectionService->expects($this->any())->method('getClassSchema')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController')->willReturn($classSchemaMock);
-
-        $expectedArguments = ['b1' => true, 'b2' => true, 'b3' => true, 'b4' => false, 'b5' => false, 'b6' => false];
-        $request = $this->requestBuilder->build('some_extension_name:default:list --b2 y --b1 1 --b3 true --b4 false --b5 n --b6 0');
-        $this->assertEquals($expectedArguments, $request->getArguments());
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/RequestTest.php b/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Cli/RequestTest.php
deleted file mode 100644 (file)
index ad71efa..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\Cli;
-
-/*
- * 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\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class RequestTest extends UnitTestCase
-{
-    /**
-     * @test
-     */
-    public function setControllerObjectNameProperlyResolvesExtensionNameWithNamespaces()
-    {
-        $mockCliRequest = new \TYPO3\CMS\Extbase\Mvc\Cli\Request;
-        $mockCliRequest->setControllerObjectName('TYPO3\CMS\Extbase\Command\NamespacedMockCommandController');
-
-        $this->assertSame('Extbase', $mockCliRequest->getControllerExtensionName());
-    }
-}
diff --git a/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Controller/CommandControllerTest.php b/typo3/sysext/extbase/Tests/UnitDeprecated/Mvc/Controller/CommandControllerTest.php
deleted file mode 100644 (file)
index 70acd15..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Tests\UnitDeprecated\Mvc\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\Extbase\Mvc\Exception\StopActionException;
-use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
-
-/**
- * Test case
- */
-class CommandControllerTest extends UnitTestCase
-{
-    /**
-     * @var \TYPO3\CMS\Extbase\Mvc\Controller\CommandController|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface
-     */
-    protected $commandController;
-
-    /**
-     * \Symfony\Component\Console\Output\ConsoleOutput|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $mockConsoleOutput;
-
-    protected function setUp()
-    {
-        $this->commandController = $this->getAccessibleMock(\TYPO3\CMS\Extbase\Mvc\Controller\CommandController::class, ['dummyCommand']);
-        $this->mockConsoleOutput = $this->getMockBuilder(\TYPO3\CMS\Extbase\Mvc\Cli\ConsoleOutput::class)->disableOriginalConstructor()->getMock();
-        $this->commandController->_set('output', $this->mockConsoleOutput);
-    }
-
-    /**
-     * @test
-     */
-    public function outputAppendsGivenStringToTheResponseContent()
-    {
-        $this->mockConsoleOutput->expects($this->once())->method('output')->with('some text');
-        $this->commandController->_call('output', 'some text');
-    }
-
-    /**
-     * @test
-     */
-    public function outputReplacesArgumentsInGivenString()
-    {
-        $this->mockConsoleOutput->expects($this->once())->method('output')->with('%2$s %1$s', ['text', 'some']);
-        $this->commandController->_call('output', '%2$s %1$s', ['text', 'some']);
-    }
-
-    /**
-     * @test
-     */
-    public function quitThrowsStopActionException()
-    {
-        $this->expectException(StopActionException::class);
-        // @TODO expectExceptionCode is 0
-        $mockResponse = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\Response::class);
-        $this->commandController->_set('response', $mockResponse);
-        $this->commandController->_call('quit');
-    }
-
-    /**
-     * @test
-     */
-    public function quitSetsResponseExitCode()
-    {
-        $this->expectException(StopActionException::class);
-        // @TODO expectExceptionCode is 0
-        $mockResponse = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\Response::class);
-        $mockResponse->expects($this->once())->method('setExitCode')->with(123);
-        $this->commandController->_set('response', $mockResponse);
-        $this->commandController->_call('quit', 123);
-    }
-}
index 1349fd8..73d746a 100644 (file)
@@ -31,16 +31,4 @@ unset($extbaseObjectContainer);
 \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerTypeConverter(\TYPO3\CMS\Extbase\Property\TypeConverter\StaticFileCollectionConverter::class);
 \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerTypeConverter(\TYPO3\CMS\Extbase\Property\TypeConverter\FolderConverter::class);
 
-// register help command
-// @deprecated will be removed in TYPO3 v10.0. Use symfony/console commands instead
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['extbase']['commandControllers'][] = \TYPO3\CMS\Extbase\Command\HelpCommandController::class;
-
-// @deprecated will be removed in TYPO3 v10.0. Use symfony/console commands instead
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks'][\TYPO3\CMS\Extbase\Scheduler\Task::class] = [
-    'extension' => 'extbase',
-    'title' => 'LLL:EXT:extbase/Resources/Private/Language/locallang_db.xlf:task.name',
-    'description' => 'LLL:EXT:extbase/Resources/Private/Language/locallang_db.xlf:task.description',
-    'additionalFields' => \TYPO3\CMS\Extbase\Scheduler\FieldProvider::class
-];
-
 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['checkFlexFormValue'][] = \TYPO3\CMS\Extbase\Hook\DataHandler\CheckFlexFormValue::class;
index 6887bf4..914329e 100644 (file)
@@ -3,8 +3,6 @@ config.tx_extbase {
                requestHandlers {
                        TYPO3\CMS\Extbase\Mvc\Web\FrontendRequestHandler = TYPO3\CMS\Extbase\Mvc\Web\FrontendRequestHandler
                        TYPO3\CMS\Extbase\Mvc\Web\BackendRequestHandler = TYPO3\CMS\Extbase\Mvc\Web\BackendRequestHandler
-      // @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use symfony/console commands instead.
-                       TYPO3\CMS\Extbase\Mvc\Cli\RequestHandler = TYPO3\CMS\Extbase\Mvc\Cli\RequestHandler
                }
                throwPageNotFoundExceptionIfActionCantBeResolved = 0
        }
diff --git a/typo3/sysext/extensionmanager/Classes/Command/ExtensionCommandController.php b/typo3/sysext/extensionmanager/Classes/Command/ExtensionCommandController.php
deleted file mode 100644 (file)
index de8fd9e..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extensionmanager\Command;
-
-/*
- * 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\Core\ClassLoadingInformation;
-use TYPO3\CMS\Core\Core\Environment;
-use TYPO3\CMS\Extbase\Mvc\Controller\CommandController;
-
-/**
- * CommandController for working with extension management through CLI/scheduler
- *
- * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use Symfony Command alternatives instead.
- */
-class ExtensionCommandController extends CommandController
-{
-    /**
-     * @var bool
-     */
-    protected $requestAdminPermissions = true;
-
-    /**
-     * @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher
-     */
-    protected $signalSlotDispatcher;
-
-    /**
-     * @param \TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher
-     */
-    public function injectSignalSlotDispatcher(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher)
-    {
-        $this->signalSlotDispatcher = $signalSlotDispatcher;
-    }
-
-    /**
-     * Installs an extension by key
-     *
-     * The extension files must be present in one of the
-     * recognised extension folder paths in TYPO3.
-     *
-     * @param string $extensionKey
-     * @cli
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use the equivalent Symfony Command instead.
-     */
-    public function installCommand($extensionKey)
-    {
-        trigger_error('Calling ExtensionCommandController->installCommand() will be removed in TYPO3 v10.0. Use the Symfony command "extension:activate" instead, to be called via the "typo3" CLI entrypoint.', E_USER_DEPRECATED);
-        $this->emitPackagesMayHaveChangedSignal();
-
-        /** @var \TYPO3\CMS\Extensionmanager\Utility\InstallUtility $service */
-        $service = $this->objectManager->get(\TYPO3\CMS\Extensionmanager\Utility\InstallUtility::class);
-        $service->install($extensionKey);
-    }
-
-    /**
-     * Uninstalls an extension by key
-     *
-     * The extension files must be present in one of the
-     * recognised extension folder paths in TYPO3.
-     *
-     * @param string $extensionKey
-     * @cli
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use the equivalent Symfony Command instead.
-     */
-    public function uninstallCommand($extensionKey)
-    {
-        trigger_error('Calling ExtensionCommandController->uninstallCommand() will be removed in TYPO3 v10.0. Use the Symfony command "extension:deactivate" instead, to be called via the "typo3" CLI entrypoint.', E_USER_DEPRECATED);
-        /** @var \TYPO3\CMS\Extensionmanager\Utility\InstallUtility $service */
-        $service = $this->objectManager->get(\TYPO3\CMS\Extensionmanager\Utility\InstallUtility::class);
-        $service->uninstall($extensionKey);
-    }
-
-    /**
-     * Updates class loading information.
-     *
-     * This command is only needed during development. The extension manager takes care
-     * creating or updating this info properly during extension (de-)activation.
-     *
-     * @cli
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use the equivalent Symfony Command instead.
-     */
-    public function dumpClassLoadingInformationCommand()
-    {
-        trigger_error('Calling ExtensionCommandController->dumpClassLoadingInformationCommand() will be removed in TYPO3 v10.0. Use the Symfony command "dumpautoload" instead, to be called via the "typo3" CLI entrypoint.', E_USER_DEPRECATED);
-        if (Environment::isComposerMode()) {
-            $this->output->outputLine('<error>Class loading information is managed by composer. Use "composer dump-autoload" command to update the information.</error>');
-            $this->quit(1);
-        } else {
-            ClassLoadingInformation::dumpClassLoadingInformation();
-            $this->output->outputLine('Class Loading information has been updated.');
-        }
-    }
-
-    /**
-     * Emits packages may have changed signal
-     */
-    protected function emitPackagesMayHaveChangedSignal()
-    {
-        $this->signalSlotDispatcher->dispatch('PackageManagement', 'packagesMayHaveChanged');
-    }
-}
index af28296..d393572 100644 (file)
@@ -48,7 +48,6 @@ class Bootstrap
     {
         $this->objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\ObjectManager::class);
         $this->initializeConfiguration($configuration);
-        $this->configureObjectManager(true);
         $ajaxWidgetContextHolder = $this->objectManager->get(\TYPO3\CMS\Fluid\Core\Widget\AjaxWidgetContextHolder::class);
         $widgetIdentifier = \TYPO3\CMS\Core\Utility\GeneralUtility::_GET('fluid-widget-id');
         $widgetContext = $ajaxWidgetContextHolder->get($widgetIdentifier);
@@ -73,31 +72,4 @@ class Bootstrap
         $this->configurationManager->setContentObject($contentObject);
         $this->configurationManager->setConfiguration($configuration);
     }
-
-    /**
-     * Configures the object manager object configuration from
-     * config.tx_extbase.objects
-     *
-     * @param $isInternalCall bool Set to true by Bootstrap, not by extensions
-     * @see initialize()
-     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0
-     */
-    public function configureObjectManager(bool $isInternalCall = false)
-    {
-        if (!$isInternalCall) {
-            trigger_error(self::class . '->configureObjectManager() will be removed in TYPO3 v10.0.', E_USER_DEPRECATED);
-        }
-        $typoScriptSetup = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT);
-        if (!is_array($typoScriptSetup['config.']['tx_extbase.']['objects.'])) {
-            return;
-        }
-        trigger_error('Overriding object implementations via TypoScript settings config.tx_extbase.objects and plugin.tx_%plugin%.objects will be removed in TYPO3 v10.0.', E_USER_DEPRECATED);
-        $objectContainer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class);
-        foreach ($typoScriptSetup['config.']['tx_extbase.']['objects.'] as $classNameWithDot => $classConfiguration) {
-            if (isset($classConfiguration['className'])) {
-                $originalClassName = rtrim($classNameWithDot, '.');
-                $objectContainer->registerImplementation($originalClassName, $classConfiguration['className']);
-            }
-        }
-    }
 }
index 4ff1d95..97e3778 100644 (file)
@@ -911,7 +911,8 @@ return [
     ],
     'TYPO3\CMS\Extensionmanager\Command\ExtensionCommandController' => [
         'restFiles' => [
-            'Deprecation-85996-ExtensionManagerCommandController.rst'
+            'Deprecation-85996-ExtensionManagerCommandController.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject' => [
@@ -927,86 +928,103 @@ return [
     'TYPO3\CMS\Extbase\Command\CoreCommand' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Command\ExtbaseCommand' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Command\HelpCommand' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Command\HelpCommandController' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Cli\Command' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Cli\CommandArgumentDefinition' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Cli\CommandManager' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Cli\ConsoleOutput' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Cli\Request' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Cli\RequestBuilder' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Cli\RequestHandler' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Controller\CommandController' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Exception\AmbiguousCommandIdentifierException' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Mvc\Exception\CommandException' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Scheduler\FieldProvider' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Scheduler\Task' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Scheduler\TaskExecutor' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Core\Resource\Service\UserStorageCapabilityService' => [
index 5c0801f..0f76b67 100644 (file)
@@ -10,6 +10,7 @@ return [
     '@cli' => [
         'restFiles' => [
             'Deprecation-85977-ExtbaseCommandControllersAndCliAnnotation.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
 ];
index bd38824..a1d4f9f 100644 (file)
@@ -2847,6 +2847,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85807-EnvironmentServiceisEnvironmentInCliMode.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Saltedpasswords\Salt\Argon2iSalt->getOptions' => [
@@ -3523,6 +3524,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-86270-ExtbaseXclassViaTypoScriptSettings.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Fluid\Core\Widget\Bootstrap->configureObjectManager' => [
@@ -3530,6 +3532,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-86270-ExtbaseXclassViaTypoScriptSettings.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->checkBackendAccessSettingsFromInitPhp' => [