diff --git a/lib/internal/Magento/Framework/Console/Cli.php b/lib/internal/Magento/Framework/Console/Cli.php index 299c42eb00639d82f8bc19f626f65e801d54ee94..df9b59bad9048a1c7edf6a427d932d6519eeeaeb 100644 --- a/lib/internal/Magento/Framework/Console/Cli.php +++ b/lib/internal/Magento/Framework/Console/Cli.php @@ -13,6 +13,7 @@ use Magento\Framework\Shell\ComplexParameter; use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Magento\Framework\Setup\FilePermissions; /** * Magento2 CLI Application. This is the hood for all command line tools supported by Magento. @@ -46,6 +47,22 @@ class Cli extends SymfonyApplication */ public function doRun(InputInterface $input, OutputInterface $output) { + // Check to make sure var/generation/Magento folder dir have read/execute permission for the current user + /** @var \Magento\Setup\Model\ObjectManagerProvider $omProvider */ + $omProvider = $this->serviceManager->get('Magento\Setup\Model\ObjectManagerProvider'); + /** @var \Magento\Framework\ObjectManagerInterface $objectManager */ + $objectManager = $omProvider->get(); + /** @var \Magento\Framework\Setup\Filepermissions $filePermissions */ + $filePermissions = $objectManager->get('Magento\Framework\Setup\FilePermissions'); + if ($filePermissions->checkDirectoryPermissionForCLIUser() === false) { + $output->writeln( + "<error>Command line user (" + . get_current_user() + . ") does not have proper permissions for var/generation/Magento directory. " + . "Please address this issue before using Magento command line." + ); + } + $exitCode = parent::doRun($input, $output); if ($this->initException) { $output->writeln( diff --git a/setup/src/Magento/Setup/Model/FilePermissions.php b/lib/internal/Magento/Framework/Setup/FilePermissions.php similarity index 91% rename from setup/src/Magento/Setup/Model/FilePermissions.php rename to lib/internal/Magento/Framework/Setup/FilePermissions.php index f187859907872c2e90e693ec276a8f8618da7db6..1e26f9e136d694c9d5ea3112d222e424bfdac2f1 100644 --- a/setup/src/Magento/Setup/Model/FilePermissions.php +++ b/lib/internal/Magento/Framework/Setup/FilePermissions.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Setup\Model; +namespace Magento\Framework\Setup; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Backup\Filesystem\Iterator\Filter; @@ -203,6 +203,25 @@ class FilePermissions return $this->isReadableDirectory($directory) && !$directory->isWritable(); } + /** + * Checks if var/generation/Magento has + * @return bool + */ + public function checkDirectoryPermissionForCLIUser() + { + $varGenerationMagentoPath = $this->directoryList->getPath(DirectoryList::VAR_DIR) + . '/' + . DirectoryList::GENERATION + . '/' + . 'Magento'; + if (is_dir($varGenerationMagentoPath) + && is_readable($varGenerationMagentoPath) + && is_executable($varGenerationMagentoPath)) { + return true; + } + return false; + } + /** * Checks if directory exists and is readable * @@ -211,7 +230,9 @@ class FilePermissions */ protected function isReadableDirectory($directory) { - if (!$directory->isExist() || !$directory->isDirectory() || !$directory->isReadable()) { + if (!$directory->isExist() + || !$directory->isDirectory() + || !$directory->isReadable()) { return false; } return true; diff --git a/setup/src/Magento/Setup/Test/Unit/Model/FilePermissionsTest.php b/lib/internal/Magento/Framework/Setup/Test/Unit/FilePermissionsTest.php similarity index 96% rename from setup/src/Magento/Setup/Test/Unit/Model/FilePermissionsTest.php rename to lib/internal/Magento/Framework/Setup/Test/Unit/FilePermissionsTest.php index 4d803be8ff57ca2467d77fc03b1a08bc740c78f5..ed4692e7895e053418610465ed64edc0e281ae6b 100644 --- a/setup/src/Magento/Setup/Test/Unit/Model/FilePermissionsTest.php +++ b/lib/internal/Magento/Framework/Setup/Test/Unit/FilePermissionsTest.php @@ -4,9 +4,9 @@ * See COPYING.txt for license details. */ -namespace Magento\Setup\Test\Unit\Model; +namespace Magento\Framework\Setup\Test\Unit; -use \Magento\Setup\Model\FilePermissions; +use \Magento\Framework\Setup\FilePermissions; use Magento\Framework\App\Filesystem\DirectoryList; @@ -132,8 +132,8 @@ class FilePermissionsTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Setup\Model\FilePermissions::getMissingWritableDirectoriesForInstallation - * @covers \Magento\Setup\Model\FilePermissions::getMissingWritablePathsForInstallation + * @covers \Magento\Framework\FilePermissions::getMissingWritableDirectoriesForInstallation + * @covers \Magento\Framework\FilePermissions::getMissingWritablePathsForInstallation */ public function testGetMissingWritableDirectoriesAndPathsForInstallation() { diff --git a/setup/src/Magento/Setup/Controller/Environment.php b/setup/src/Magento/Setup/Controller/Environment.php index 939d2c459ba721f904f3fb70efc800aa9c52b2cb..ee521072459527379b3dc08649b66462e7bc5d96 100644 --- a/setup/src/Magento/Setup/Controller/Environment.php +++ b/setup/src/Magento/Setup/Controller/Environment.php @@ -47,13 +47,13 @@ class Environment extends AbstractActionController /** * Constructor * - * @param \Magento\Setup\Model\FilePermissions $permissions + * @param \Magento\Framework\Setup\FilePermissions $permissions * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Setup\Model\CronScriptReadinessCheck $cronScriptReadinessCheck * @param \Magento\Setup\Model\PhpReadinessCheck $phpReadinessCheck */ public function __construct( - \Magento\Setup\Model\FilePermissions $permissions, + \Magento\Framework\Setup\FilePermissions $permissions, \Magento\Framework\Filesystem $filesystem, \Magento\Setup\Model\CronScriptReadinessCheck $cronScriptReadinessCheck, \Magento\Setup\Model\PhpReadinessCheck $phpReadinessCheck diff --git a/setup/src/Magento/Setup/Model/ConfigModel.php b/setup/src/Magento/Setup/Model/ConfigModel.php index 51aefaa354e7d5c104c107c5dba14c6d4fa465a0..f17e2d42d839c21ddf5ba2e79e72538f3225c23c 100644 --- a/setup/src/Magento/Setup/Model/ConfigModel.php +++ b/setup/src/Magento/Setup/Model/ConfigModel.php @@ -10,6 +10,7 @@ use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\App\DeploymentConfig\Writer; use Magento\Framework\Setup\Option\AbstractConfigOption; +use Magento\Framework\Setup\FilePermissions; class ConfigModel { diff --git a/setup/src/Magento/Setup/Model/Installer.php b/setup/src/Magento/Setup/Model/Installer.php index 63606fdc811fa3930cee1c1b4ff60b96f70d301b..56d80fbf4c9d669cf2a0a1faf949862613fd3c41 100644 --- a/setup/src/Magento/Setup/Model/Installer.php +++ b/setup/src/Magento/Setup/Model/Installer.php @@ -38,6 +38,7 @@ use Magento\Setup\Console\Command\InstallCommand; use Magento\Setup\Validator\DbValidator; use \Magento\Backend\Setup\ConfigOptionsList as BackendConfigOptionsList; use Magento\SampleData; +use Magento\Framework\Setup\FilePermissions; /** * Class Installer contains the logic to install Magento application. diff --git a/setup/src/Magento/Setup/Model/InstallerFactory.php b/setup/src/Magento/Setup/Model/InstallerFactory.php index 253c62ef626be25e58e0031690024a329ae1cb9f..05d5783c7850616564701dde1baaeeabb835ec91 100644 --- a/setup/src/Magento/Setup/Model/InstallerFactory.php +++ b/setup/src/Magento/Setup/Model/InstallerFactory.php @@ -50,7 +50,7 @@ class InstallerFactory public function create(LoggerInterface $log) { return new Installer( - $this->serviceLocator->get('Magento\Setup\Model\FilePermissions'), + $this->serviceLocator->get('Magento\Framework\Setup\FilePermissions'), $this->serviceLocator->get('Magento\Framework\App\DeploymentConfig\Writer'), $this->serviceLocator->get('Magento\Framework\App\DeploymentConfig\Reader'), $this->serviceLocator->get('Magento\Framework\App\DeploymentConfig'), diff --git a/setup/src/Magento/Setup/Test/Unit/Controller/EnvironmentTest.php b/setup/src/Magento/Setup/Test/Unit/Controller/EnvironmentTest.php index 205ec1b268244195fedaa8281a7b6c1a7c433f21..e92656404bacd55af3945a3377bfbda659710df0 100644 --- a/setup/src/Magento/Setup/Test/Unit/Controller/EnvironmentTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Controller/EnvironmentTest.php @@ -14,7 +14,7 @@ use Zend\View\Model\JsonModel; class EnvironmentTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Setup\Model\FilePermissions|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Setup\FilePermissions|\PHPUnit_Framework_MockObject_MockObject */ private $permissions; @@ -41,7 +41,7 @@ class EnvironmentTest extends \PHPUnit_Framework_TestCase public function setUp() { $this->filesystem = $this->getMock('Magento\Framework\Filesystem', [], [], '', false); - $this->permissions = $this->getMock('Magento\Setup\Model\FilePermissions', [], [], '', false); + $this->permissions = $this->getMock('Magento\Framework\Setup\FilePermissions', [], [], '', false); $this->cronScriptReadinessCheck = $this->getMock( 'Magento\Setup\Model\CronScriptReadinessCheck', [], diff --git a/setup/src/Magento/Setup/Test/Unit/Model/ConfigModelTest.php b/setup/src/Magento/Setup/Test/Unit/Model/ConfigModelTest.php index bd162eb1f60c8b340f9d3c698d118b1647712512..3954da210a705a89946df4a329d38d70e728656f 100644 --- a/setup/src/Magento/Setup/Test/Unit/Model/ConfigModelTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Model/ConfigModelTest.php @@ -37,7 +37,7 @@ class ConfigModelTest extends \PHPUnit_Framework_TestCase private $configData; /** - * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Setup\Model\FilePermissions + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Setup\FilePermissions */ private $filePermissions; @@ -53,7 +53,7 @@ class ConfigModelTest extends \PHPUnit_Framework_TestCase $this->deploymentConfig = $this->getMock('Magento\Framework\App\DeploymentConfig', [], [], '', false); $this->configOptionsList = $this->getMock('Magento\Backend\Setup\ConfigOptionsList', [], [], '', false); $this->configData = $this->getMock('Magento\Framework\Config\Data\ConfigData', [], [], '', false); - $this->filePermissions = $this->getMock('\Magento\Setup\Model\FilePermissions', [], [], '', false); + $this->filePermissions = $this->getMock('\Magento\Framework\Setup\FilePermissions', [], [], '', false); $this->deploymentConfig->expects($this->any())->method('get'); diff --git a/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php b/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php index c2927df015d0b61317ade92a94160cecda9f0cd7..aeb5d00f3bd80100beffbf09e81be02dc289ff66 100644 --- a/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php @@ -14,8 +14,8 @@ class InstallerFactoryTest extends \PHPUnit_Framework_TestCase { $returnValueMap = [ [ - 'Magento\Setup\Model\FilePermissions', - $this->getMock('Magento\Setup\Model\FilePermissions', [], [], '', false), + 'Magento\Framework\Setup\FilePermissions', + $this->getMock('Magento\Framework\Setup\FilePermissions', [], [], '', false), ], [ 'Magento\Framework\App\DeploymentConfig\Writer', diff --git a/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php b/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php index f415c5c19dbddc462a2efdeacb2c4bf6aa19a3ab..ebd999a84d634e0f0e504e220ecce19e2f07bd37 100644 --- a/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php @@ -27,7 +27,7 @@ class InstallerTest extends \PHPUnit_Framework_TestCase private $object; /** - * @var \Magento\Setup\Model\FilePermissions|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Setup\FilePermissions|\PHPUnit_Framework_MockObject_MockObject */ private $filePermissions; @@ -150,7 +150,7 @@ class InstallerTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->filePermissions = $this->getMock('Magento\Setup\Model\FilePermissions', [], [], '', false); + $this->filePermissions = $this->getMock('Magento\Framework\Setup\FilePermissions', [], [], '', false); $this->configWriter = $this->getMock('Magento\Framework\App\DeploymentConfig\Writer', [], [], '', false); $this->configReader = $this->getMock('Magento\Framework\App\DeploymentConfig\Reader', [], [], '', false); $this->config = $this->getMock('Magento\Framework\App\DeploymentConfig', [], [], '', false);