Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
 /**
  * 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);
 }