<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Cron\Helper; use Magento\Framework\Module\PackageInfoFactory; use Magento\Setup\Model\ModuleRegistryUninstaller; use Magento\Setup\Model\ModuleUninstaller; use Symfony\Component\Console\Output\OutputInterface; /** * Helper class for JobComponentUninstall to uninstall a module component */ class ModuleUninstall { /** * @var ModuleUninstaller */ private $moduleUninstaller; /** * @var ModuleRegistryUninstaller */ private $moduleRegistryUninstaller; /** * @var PackageInfoFactory */ private $packageInfoFactory; /** * Constructor * * @param ModuleUninstaller $moduleUninstaller * @param ModuleRegistryUninstaller $moduleRegistryUninstaller * @param PackageInfoFactory $packageInfoFactory */ public function __construct( ModuleUninstaller $moduleUninstaller, ModuleRegistryUninstaller $moduleRegistryUninstaller, PackageInfoFactory $packageInfoFactory ) { $this->moduleUninstaller = $moduleUninstaller; $this->moduleRegistryUninstaller = $moduleRegistryUninstaller; $this->packageInfoFactory = $packageInfoFactory; } /** * Perform setup side uninstall * * @param OutputInterface $output * @param string $componentName * @param bool $dataOption * @return void */ public function uninstall(OutputInterface $output, $componentName, $dataOption) { $packageInfo = $this->packageInfoFactory->create(); // convert to module name $moduleName = $packageInfo->getModuleName($componentName); if ($dataOption) { $this->moduleUninstaller->uninstallData($output, [$moduleName]); } $this->moduleRegistryUninstaller->removeModulesFromDb($output, [$moduleName]); $this->moduleRegistryUninstaller->removeModulesFromDeploymentConfig($output, [$moduleName]); } }