public function migrateUp() { $dataVersion = $this->getDataVersion(); if ($dataVersion && $dataVersion == $this->version) { return; } //get migration files $migrationFileDir = $this->getBasePath() . '/migrations'; if (!is_dir($migrationFileDir)) { return; } $migrationFiles = DirHelper::getFiles($migrationFileDir); if (!$migrationFiles) { return; } $migrationVersions = array_map(function ($fileName) { $fileName = explode('.', $fileName); unset($fileName[count($fileName) - 1]); return implode('.', $fileName); }, $migrationFiles); $installVersion = ''; $upgradeVersions = []; //get version list foreach ($migrationVersions as $migrationVersion) { if (strpos($migrationVersion, '_') === false) { $installVersion = $migrationVersion; } else { $migrationVersion = explode('_', $migrationVersion); $upgradeVersions[$migrationVersion[0]] = $migrationVersion[1]; } } //if not install, find install file and run if (!$dataVersion && $installVersion) { include $migrationFileDir . '/' . $installVersion . '.php'; $class = $this->getModuleNameSpace() . '\\migrations\\' . str_replace('.', '_', $installVersion); /** @var \kiwi\db\Migration $migration */ $migration = new $class(['module' => $this->id]); $migration->up(); $dataVersion = $installVersion; \Yii::getLogger()->log("Module {$this->id} version {$dataVersion} installed", Logger::LEVEL_INFO); } //if has upgrade version, run upgrade while (isset($upgradeVersions[$dataVersion])) { include $migrationFileDir . '/' . $dataVersion . '_' . $upgradeVersions[$dataVersion] . '.php'; $class = $this->getModuleNameSpace() . '\\migrations\\' . str_replace('.', '_', $dataVersion . '_' . $upgradeVersions[$dataVersion]); /** @var \kiwi\db\Migration $migration */ $migration = new $class(['module' => $this->id]); $migration->up(); $dataVersion = $upgradeVersions[$dataVersion]; \Yii::getLogger()->log("Module {$this->id} version {$dataVersion} upgraded", Logger::LEVEL_INFO); } }
/** * load module config file for add to yii */ public function loadModuleConfig() { $moduleClasses = []; $configFiles = []; foreach ($this->codePools as $codePoolDir) { $namespaceDirs = DirHelper::getDirs($codePoolDir); foreach ($namespaceDirs as $namespaceDir) { $moduleDirs = DirHelper::getDirs($codePoolDir . '/' . $namespaceDir); foreach ($moduleDirs as $moduleDir) { $moduleName = $namespaceDir . '_' . $moduleDir; /** @var \kiwi\base\Module $moduleClass */ $moduleClass = $namespaceDir . '\\' . $moduleDir . '\\Module'; if (class_exists($moduleClass) && $moduleClass::$active) { $moduleClasses[$moduleName] = $moduleClass; $configFiles = ArrayHelper::merge($configFiles, $moduleClass::$config); } } } } uasort($moduleClasses, function ($a, $b) { /** @var \kiwi\base\Module $a */ /** @var \kiwi\base\Module $b */ if (strpos($a, 'core') === 0 && strpos($b, 'core') !== 0) { return -1; } if (strpos($a, 'core') !== 0 && strpos($b, 'core') === 0) { return 1; } return 0; }); $modules = []; foreach ($moduleClasses as $moduleName => $moduleClass) { if ($moduleClass::$depends) { foreach ($moduleClass::$depends as $depend) { if (!isset($modules[$depend])) { if (!isset($moduleClasses[$depend])) { throw new InvalidConfigException(\Yii::t('kiwi', "Module {module} class is not defined, but it is depended by other module.", ['module' => $depend])); } $modules[$depend] = $moduleClasses[$depend]; } } } if (!isset($modules[$moduleName])) { $modules[$moduleName] = $moduleClass; } } \Yii::$app->params['KiwiModules'] = $modules; \Yii::$app->params['KiwiConfigFiles'] = $configFiles; \Yii::$app->setModules($modules); // $moduleConfigs = []; // foreach ($this->configDirs as $dir) { // $moduleConfigDir = \Yii::getAlias($dir); // if (is_dir($moduleConfigDir)) { // $files = DirHelper::getFiles($moduleConfigDir); // foreach ($files as $file) { // $moduleConfigs = ArrayHelper::merge($moduleConfigs, include($moduleConfigDir . '/' . $file)); // } // } // } // $modules = []; // if (!isset(\Yii::$app->params['KiwiConfigFiles'])) { // \Yii::$app->params['KiwiConfigFiles'] = []; // } // // foreach ($moduleConfigs as $name => $config) { // $modules = ArrayHelper::merge($modules, $this->getModuleConfig($moduleConfigs, $name)); // // if (isset($config['config'])) { // $config['config'] = is_array($config['config']) ? $config['config'] : [$config['config']]; // \Yii::$app->params['KiwiConfigFiles'] = ArrayHelper::merge(\Yii::$app->params['KiwiConfigFiles'], $config['config']); // } // } // // \Yii::$app->params['KiwiModules'] = $modules; // \Yii::$app->setModules($modules); }