/** * Handles database schema and data (install/upgrade/backup/uninstall etc) * * @param SchemaSetupInterface | ModuleDataSetupInterface $setup * @param string $type * @return void * @throws \Exception * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ private function handleDBSchemaData($setup, $type) { if (!($type === 'schema' || $type === 'data')) { throw new \Magento\Setup\Exception("Unsupported operation type {$type} is requested"); } $this->assertDeploymentConfigExists(); $this->assertDbAccessible(); $resource = new \Magento\Framework\Module\Resource($this->context); $verType = $type . '-version'; $installType = $type . '-install'; $upgradeType = $type . '-upgrade'; $moduleNames = $this->moduleList->getNames(); $moduleContextList = $this->generateListOfModuleContext($resource, $verType); foreach ($moduleNames as $moduleName) { $this->log->log("Module '{$moduleName}':"); $configVer = $this->moduleList->getOne($moduleName)['setup_version']; $currentVersion = $moduleContextList[$moduleName]->getVersion(); // Schema/Data is installed if ($currentVersion !== '') { $status = version_compare($configVer, $currentVersion); if ($status == \Magento\Framework\Setup\ModuleDataSetupInterface::VERSION_COMPARE_GREATER) { $upgrader = $this->getSchemaDataHandler($moduleName, $upgradeType); if ($upgrader) { $this->log->logInline("Upgrading {$type}.. "); $upgrader->upgrade($setup, $moduleContextList[$moduleName]); } if ($type === 'schema') { $resource->setDbVersion($moduleName, $configVer); } elseif ($type === 'data') { $resource->setDataVersion($moduleName, $configVer); } } } elseif ($configVer) { $installer = $this->getSchemaDataHandler($moduleName, $installType); if ($installer) { $this->log->logInline("Installing {$type}.. "); $installer->install($setup, $moduleContextList[$moduleName]); } $upgrader = $this->getSchemaDataHandler($moduleName, $upgradeType); if ($upgrader) { $this->log->logInline("Upgrading {$type}.. "); $upgrader->upgrade($setup, $moduleContextList[$moduleName]); } if ($type === 'schema') { $resource->setDbVersion($moduleName, $configVer); } elseif ($type === 'data') { $resource->setDataVersion($moduleName, $configVer); } } $this->logProgress(); } if ($type === 'schema') { $this->log->log('Schema post-updates:'); foreach ($moduleNames as $moduleName) { $this->log->log("Module '{$moduleName}':"); $modulePostUpdater = $this->getSchemaDataHandler($moduleName, 'schema-recurring'); if ($modulePostUpdater) { $this->log->logInline("Running recurring.. "); $modulePostUpdater->install($setup, $moduleContextList[$moduleName]); } $this->logProgress(); } } }
/** * {@inheritdoc} */ public function logInline($message) { return $this->subject->logInline($message); }