/** * Apply module resource install, upgrade and data scripts * * @return $this */ public function applyUpdates() { if (!$this->resourceName) { return $this; } $dbVer = $this->resource->getDbVersion($this->resourceName); $configVer = $this->moduleConfig['schema_version']; // Module is installed if ($dbVer !== false) { if (version_compare($configVer, $dbVer, '>')) { $this->applySchemaUpdates(self::TYPE_DB_UPGRADE, $dbVer, $configVer); $this->resource->setDbVersion($this->resourceName, $configVer); } } elseif ($configVer) { $oldVersion = $this->applySchemaUpdates(self::TYPE_DB_INSTALL, '', $configVer); $this->applySchemaUpdates(self::TYPE_DB_UPGRADE, $oldVersion, $configVer); $this->resource->setDbVersion($this->resourceName, $configVer); } return $this; }
/** * Generates list of ModuleContext * * @param \Magento\Framework\Module\Resource $resource * @param string $type * @return ModuleContext[] * @throws \Magento\Setup\Exception */ private function generateListOfModuleContext($resource, $type) { $moduleContextList = []; foreach ($this->moduleList->getNames() as $moduleName) { if ($type === 'schema-version') { $dbVer = $resource->getDbVersion($moduleName); } elseif ($type === 'data-version') { $dbVer = $resource->getDataVersion($moduleName); } else { throw new \Magento\Setup\Exception("Unsupported version type {$type} is requested"); } if ($dbVer !== false) { $moduleContextList[$moduleName] = new ModuleContext($dbVer); } else { $moduleContextList[$moduleName] = new ModuleContext(''); } } return $moduleContextList; }
/** * Invoke remove data routine in each specified module * * @param string[] $modules * @param OutputInterface $output * @param bool $dbBackupOption * @return void */ private function removeData(array $modules, OutputInterface $output, $dbBackupOption) { if (!$dbBackupOption) { $output->writeln('<error>You are removing data without a database backup.</error>'); } else { $output->writeln('<info>Removing data</info>'); } $uninstalls = $this->collector->collectUninstall(); $setupModel = $this->objectManager->get('Magento\Setup\Module\Setup'); foreach ($modules as $module) { if (isset($uninstalls[$module])) { $output->writeln("<info>Removing data of $module</info>"); $uninstalls[$module]->uninstall( $setupModel, new ModuleContext($this->moduleResource->getDbVersion($module) ?: '') ); } else { $output->writeln("<info>No data to clear in $module</info>"); } } }