service = $service; } public function appendToMigrationTable($name) { $time = time(); $connection = Yii::$app->getDb(); $command = $connection->createCommand("INSERT INTO migration (version, apply_time) VALUE ('$name', '$time')"); $command->execute(); } public function removeFromMigrationTable($name) { $connection = Yii::$app->getDb(); $command = $connection->createCommand("DELETE FROM migration WHERE version = '$name'"); $command->execute(); } public function getModules() { $modules = []; $localModules = $this->getLocalModules(); foreach ($localModules as $local_module) { if ($this->isTableExist('modules') && !$db_module = ModuleRecord::find()->andWhere(['name' => $local_module['name']])->one()) { $db_module = $this->service->create($local_module['name'], "common\\modules\\".$local_module['name']."\\" . $local_module['module']); $db_module->description = $local_module['description']; $modules[] = $db_module; } else { $db_module->description = $local_module['description']; $modules[] = $db_module; } } return $modules; } public function getLocalModules() { $this->_getLocalModulesNames(); if (empty($this->modules)) { foreach ( $this->moduleNames as $module_name ) { $manifest = Yii::getAlias( '@common/modules/' . $module_name . '/manifest.php' ); if ( file_exists( $manifest ) ) { $this->modules[] = require $manifest; } } } return $this->modules; } private function _getLocalModulesNames(): void { if (!empty($this->moduleNames)) { return; } $names = []; $modulePath = Yii::getAlias('@common/modules'); $modules = file_exists($modulePath) ? FileHelper::findDirectories($modulePath, [ 'recursive' => false, ]) : []; foreach ($modules as $module) { $module = basename($module); $names[] = $module; } $this->moduleNames = $names; } public function isTableExist($name): bool { return Yii::$app->db->schema->getTableSchema($name) !== null; } }