diff --git a/composer.json b/composer.json index 5eaa6be0171f9..bfaed80bb3f63 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,6 @@ "guzzlehttp/guzzle": "^6.3.3", "laminas/laminas-captcha": "^2.7.1", "laminas/laminas-code": "^3.5.1", - "laminas/laminas-console": "^2.6.0", "laminas/laminas-crypt": "^3.4.0", "laminas/laminas-db": "^2.12.0", "laminas/laminas-dependency-plugin": "^2.1.0", @@ -53,7 +52,6 @@ "laminas/laminas-mime": "^2.8.0", "laminas/laminas-modulemanager": "^2.7", "laminas/laminas-mvc": "^3.2.0", - "laminas/laminas-mvc-console": "^1.3.0", "laminas/laminas-serializer": "^2.7.2", "laminas/laminas-server": "^2.6.1", "laminas/laminas-servicemanager": "^3.6.0", diff --git a/composer.lock b/composer.lock index 14db21efb9d30..4c99befabb417 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6c911b25d0dfce77e210dc1af68a85ef", + "content-hash": "46e484be0807fa3d8d501695e66b7bec", "packages": [ { "name": "aws/aws-sdk-php", @@ -1287,64 +1287,6 @@ ], "time": "2021-02-11T15:06:51+00:00" }, - { - "name": "laminas/laminas-console", - "version": "2.8.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-console.git", - "reference": "478a6ceac3e31fb38d6314088abda8b239ee23a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-console/zipball/478a6ceac3e31fb38d6314088abda8b239ee23a5", - "reference": "478a6ceac3e31fb38d6314088abda8b239ee23a5", - "shasum": "" - }, - "require": { - "laminas/laminas-stdlib": "^3.2.1", - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^5.6 || ^7.0" - }, - "replace": { - "zendframework/zend-console": "self.version" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~1.0.0", - "laminas/laminas-filter": "^2.7.2", - "laminas/laminas-json": "^2.6 || ^3.0", - "laminas/laminas-validator": "^2.10.1", - "phpunit/phpunit": "^5.7.23 || ^6.4.3" - }, - "suggest": { - "laminas/laminas-filter": "To support DefaultRouteMatcher usage", - "laminas/laminas-validator": "To support DefaultRouteMatcher usage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8.x-dev", - "dev-develop": "2.9.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laminas\\Console\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Build console applications using getopt syntax or routing, complete with prompts", - "homepage": "https://laminas.dev", - "keywords": [ - "console", - "laminas" - ], - "abandoned": "laminas/laminas-cli", - "time": "2019-12-31T16:31:45+00:00" - }, { "name": "laminas/laminas-crypt", "version": "3.4.0", @@ -2695,85 +2637,6 @@ ], "time": "2020-12-14T21:54:40+00:00" }, - { - "name": "laminas/laminas-mvc-console", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-mvc-console.git", - "reference": "90338c7b61a5fa8445c0a41925a4ae351459fa79" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-mvc-console/zipball/90338c7b61a5fa8445c0a41925a4ae351459fa79", - "reference": "90338c7b61a5fa8445c0a41925a4ae351459fa79", - "shasum": "" - }, - "require": { - "container-interop/container-interop": "^1.1", - "laminas/laminas-console": "^2.6", - "laminas/laminas-eventmanager": "^3.3", - "laminas/laminas-modulemanager": "^2.7.1", - "laminas/laminas-mvc": "^3.0.3", - "laminas/laminas-router": "^3.0", - "laminas/laminas-servicemanager": "^3.3", - "laminas/laminas-stdlib": "^3.3", - "laminas/laminas-text": "^2.6", - "laminas/laminas-view": "^2.11.3", - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^7.3 || ~8.0.0" - }, - "conflict": { - "laminas/laminas-mvc": "<3.0.0" - }, - "replace": { - "zendframework/zend-mvc-console": "^1.2.0" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~1.0.0", - "laminas/laminas-filter": "^2.6.1", - "phpspec/prophecy": "^1.12.0", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "laminas/laminas-filter": "^2.6.1, to filter rendered results" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev", - "dev-develop": "1.3.x-dev" - }, - "laminas": { - "component": "Laminas\\Mvc\\Console" - } - }, - "autoload": { - "psr-4": { - "Laminas\\Mvc\\Console\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Integration between laminas-mvc and laminas-console", - "homepage": "https://laminas.dev", - "keywords": [ - "console", - "laminas", - "mvc" - ], - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "abandoned": "laminas/laminas-cli", - "time": "2020-12-28T09:19:48+00:00" - }, { "name": "laminas/laminas-router", "version": "3.4.4", @@ -4858,11 +4721,6 @@ "MIT" ], "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - }, { "name": "Marijn Huizendveld", "email": "marijn.huizendveld@gmail.com" @@ -4870,6 +4728,11 @@ { "name": "Thibaud Fabre", "email": "thibaud@aztech.io" + }, + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" } ], "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", diff --git a/setup/config/modules.config.php b/setup/config/modules.config.php index 610fa29083125..a856e967dcbb1 100644 --- a/setup/config/modules.config.php +++ b/setup/config/modules.config.php @@ -22,6 +22,5 @@ 'Laminas\Router', 'Laminas\Serializer', 'Laminas\Session', - 'Laminas\Validator', - 'Laminas\Mvc\Console' + 'Laminas\Validator' ]; diff --git a/setup/src/Magento/Setup/Mvc/Bootstrap/InitParamListener.php b/setup/src/Magento/Setup/Mvc/Bootstrap/InitParamListener.php index 218743b6de2d7..6bd801742f134 100644 --- a/setup/src/Magento/Setup/Mvc/Bootstrap/InitParamListener.php +++ b/setup/src/Magento/Setup/Mvc/Bootstrap/InitParamListener.php @@ -11,14 +11,12 @@ use Magento\Framework\App\State; use Magento\Framework\Filesystem; use Magento\Framework\Shell\ComplexParameter; -use Laminas\Console\Request; use Laminas\EventManager\EventManagerInterface; use Laminas\EventManager\ListenerAggregateInterface; use Laminas\Mvc\Application; use Laminas\Mvc\MvcEvent; use Laminas\ServiceManager\Factory\FactoryInterface; use Laminas\ServiceManager\ServiceLocatorInterface; -use Laminas\Stdlib\RequestInterface; /** * A listener that injects relevant Magento initialization parameters and initializes filesystem @@ -138,8 +136,12 @@ private function extractInitParameters(Application $application) $result[$initKey] = $_SERVER[$initKey]; } } - $result = array_replace_recursive($result, $this->extractFromCli($application->getRequest())); - return $result; + + if (!isset($result['argv']) || !is_array($result['argv'])) { + return $result; + } + + return array_replace_recursive($result, $this->extractFromCli($result['argv'])); } /** @@ -147,16 +149,13 @@ private function extractInitParameters(Application $application) * * Uses format of a URL query * - * @param RequestInterface $request + * @param array $argv * @return array */ - private function extractFromCli(RequestInterface $request) + private function extractFromCli(array $argv): array { - if (!($request instanceof Request)) { - return []; - } $bootstrapParam = new ComplexParameter(self::BOOTSTRAP_PARAM); - foreach ($request->getContent() as $paramStr) { + foreach ($argv as $paramStr) { $result = $bootstrapParam->getFromString($paramStr); if (!empty($result)) { return $result; diff --git a/setup/src/Magento/Setup/Test/Unit/Mvc/Bootstrap/InitParamListenerTest.php b/setup/src/Magento/Setup/Test/Unit/Mvc/Bootstrap/InitParamListenerTest.php index a766a3ef51e5f..e8bf006c3427b 100644 --- a/setup/src/Magento/Setup/Test/Unit/Mvc/Bootstrap/InitParamListenerTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Mvc/Bootstrap/InitParamListenerTest.php @@ -7,31 +7,16 @@ namespace Magento\Setup\Test\Unit\Mvc\Bootstrap; -use Laminas\Console\Request; use Laminas\EventManager\EventManagerInterface; use Laminas\EventManager\SharedEventManager; -use Laminas\Http\Headers; -use Laminas\Http\Response; use Laminas\Mvc\Application; use Laminas\Mvc\MvcEvent; -use Laminas\Mvc\Router\Http\RouteMatch; use Laminas\ServiceManager\ServiceLocatorInterface; use Laminas\ServiceManager\ServiceManager; use Laminas\Stdlib\RequestInterface; -use Magento\Backend\App\BackendApp; -use Magento\Backend\App\BackendAppList; -use Magento\Backend\Model\Auth; -use Magento\Backend\Model\Auth\Session; -use Magento\Backend\Model\Session\AdminConfig; -use Magento\Backend\Model\Url; -use Magento\Framework\App\Area; use Magento\Framework\App\Bootstrap as AppBootstrap; -use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\App\State; use Magento\Framework\Filesystem; -use Magento\Framework\ObjectManagerInterface; -use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Mvc\Bootstrap\InitParamListener; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; @@ -118,31 +103,15 @@ public function testCreateDirectoryListException() $this->listener->createDirectoryList([]); } - public function testCreateServiceNotConsole() - { - /** - * @var ServiceLocatorInterface|MockObject $container - */ - $container = $this->getMockForAbstractClass(ServiceLocatorInterface::class); - $mvcApplication = $this->getMockBuilder(Application::class) - ->disableOriginalConstructor() - ->getMock(); - $request = $this->getMockForAbstractClass(RequestInterface::class); - $mvcApplication->expects($this->any())->method('getRequest')->willReturn($request); - $container->expects($this->once())->method('get')->with('Application') - ->willReturn($mvcApplication); - $this->assertEquals([], $this->listener->createService($container)); - } - /** * @param array $zfAppConfig Data that comes from Laminas Framework Application config * @param array $env Config that comes from SetEnv - * @param string $cliParam Parameter string + * @param array|string|null $argv Argv * @param array $expectedArray Expected result array * * @dataProvider createServiceDataProvider */ - public function testCreateService($zfAppConfig, $env, $cliParam, $expectedArray) + public function testCreateService($zfAppConfig, $env, $argv, $expectedArray) { foreach ($env as $envKey => $envValue) { $_SERVER[$envKey] = $envValue; @@ -155,19 +124,16 @@ public function testCreateService($zfAppConfig, $env, $cliParam, $expectedArray) $mvcApplication = $this->getMockBuilder(Application::class) ->disableOriginalConstructor() ->getMock(); - $request = $this->getMockBuilder(Request::class) - ->disableOriginalConstructor() - ->getMock(); - $request->expects($this->any()) - ->method('getContent') - ->willReturn( - $cliParam ? ['install', '--magento-init-params=' . $cliParam] : ['install'] - ); + + if ($argv !== null) { + $zfAppConfig['argv'] = $argv; + $expectedArray['argv'] = $argv; + } + $mvcApplication->expects($this->any())->method('getConfig')->willReturn( $zfAppConfig ? [InitParamListener::BOOTSTRAP_PARAM => $zfAppConfig] : [] ); - $mvcApplication->expects($this->any())->method('getRequest')->willReturn($request); $serviceLocator->expects($this->once())->method('get')->with('Application') ->willReturn($mvcApplication); @@ -180,36 +146,61 @@ public function testCreateService($zfAppConfig, $env, $cliParam, $expectedArray) public function createServiceDataProvider() { return [ - 'none' => [[], [], '', []], - 'mage_mode App' => [['MAGE_MODE' => 'developer'], [], '', ['MAGE_MODE' => 'developer']], - 'mage_mode Env' => [[], ['MAGE_MODE' => 'developer'], '', ['MAGE_MODE' => 'developer']], - 'mage_mode CLI' => [[], [], 'MAGE_MODE=developer', ['MAGE_MODE' => 'developer']], + 'none' => [ + [], //zfAppConfig + [], //env + null, //argv + [] //expectedArray + ], + 'mage_mode App' => [ + ['MAGE_MODE' => 'developer'], + [], + '', //test non array value + ['MAGE_MODE' => 'developer'] + ], + 'mage_mode Env' => [ + [], + ['MAGE_MODE' => 'developer'], + null, + ['MAGE_MODE' => 'developer'] + ], + 'mage_mode CLI' => [ + [], + [], + ['bin/magento', 'setup:install', '--magento-init-params=MAGE_MODE=developer'], + ['MAGE_MODE' => 'developer'] + ], 'one MAGE_DIRS CLI' => [ [], [], - 'MAGE_MODE=developer&MAGE_DIRS[base][path]=/var/www/magento2', + ['bin/magento', 'setup:install', '--magento-init-params=MAGE_MODE=developer&MAGE_DIRS[base][path]=/var/www/magento2'], ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2']], 'MAGE_MODE' => 'developer'], ], 'two MAGE_DIRS CLI' => [ [], [], - 'MAGE_MODE=developer&MAGE_DIRS[base][path]=/var/www/magento2&MAGE_DIRS[cache][path]=/tmp/cache', + ['bin/magento', 'setup:install', '--magento-init-params=MAGE_MODE=developer&MAGE_DIRS[base][path]=/var/www/magento2&MAGE_DIRS[cache][path]=/tmp/cache'], [ 'MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2'], 'cache' => ['path' => '/tmp/cache']], 'MAGE_MODE' => 'developer', ], ], - 'mage_mode only' => [[], [], 'MAGE_MODE=developer', ['MAGE_MODE' => 'developer']], + 'mage_mode only' => [ + [], + [], + ['bin/magento', 'setup:install', '--magento-init-params=MAGE_MODE=developer'], + ['MAGE_MODE' => 'developer'] + ], 'MAGE_DIRS Env' => [ [], ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2']], 'MAGE_MODE' => 'developer'], - '', + null, ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2']], 'MAGE_MODE' => 'developer'], ], 'two MAGE_DIRS' => [ [], [], - 'MAGE_MODE=developer&MAGE_DIRS[base][path]=/var/www/magento2&MAGE_DIRS[cache][path]=/tmp/cache', + ['bin/magento', 'setup:install', '--magento-init-params=MAGE_MODE=developer&MAGE_DIRS[base][path]=/var/www/magento2&MAGE_DIRS[cache][path]=/tmp/cache'], [ 'MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2'], 'cache' => ['path' => '/tmp/cache']], 'MAGE_MODE' => 'developer', @@ -218,19 +209,19 @@ public function createServiceDataProvider() 'Env overwrites App' => [ ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/App']], 'MAGE_MODE' => 'developer'], ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/Env']], 'MAGE_MODE' => 'developer'], - '', + ['bin/magento', 'setup:install'], ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/Env']], 'MAGE_MODE' => 'developer'], ], 'CLI overwrites Env' => [ ['MAGE_MODE' => 'developer'], ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/Env']]], - 'MAGE_DIRS[base][path]=/var/www/magento2/CLI', + ['bin/magento', 'setup:install', '--magento-init-params=MAGE_DIRS[base][path]=/var/www/magento2/CLI'], ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/CLI']], 'MAGE_MODE' => 'developer'], ], 'CLI overwrites All' => [ ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/App']], 'MAGE_MODE' => 'production'], ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/Env']]], - 'MAGE_DIRS[base][path]=/var/www/magento2/CLI', + ['bin/magento', 'setup:install', '--magento-init-params=MAGE_DIRS[base][path]=/var/www/magento2/CLI'], ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/CLI']], 'MAGE_MODE' => 'developer'], ], ]; diff --git a/setup/src/Zend/Mvc/Controller/LazyControllerAbstractFactory.php b/setup/src/Zend/Mvc/Controller/LazyControllerAbstractFactory.php index b37fd41cf6e52..ac76499078de0 100644 --- a/setup/src/Zend/Mvc/Controller/LazyControllerAbstractFactory.php +++ b/setup/src/Zend/Mvc/Controller/LazyControllerAbstractFactory.php @@ -11,7 +11,6 @@ namespace Zend\Mvc\Controller; use Interop\Container\ContainerInterface; -use Laminas\Console\Adapter\AdapterInterface as ConsoleAdapterInterface; use Laminas\Filter\FilterPluginManager; use Laminas\Hydrator\HydratorPluginManager; use Laminas\InputFilter\InputFilterPluginManager; @@ -88,7 +87,6 @@ class LazyControllerAbstractFactory implements AbstractFactoryInterface * @var string[] */ protected $aliases = [ - ConsoleAdapterInterface::class => 'ConsoleAdapter', FilterPluginManager::class => 'FilterManager', HydratorPluginManager::class => 'HydratorManager', InputFilterPluginManager::class => 'InputFilterManager',