_service = $service; $this->_permission_manager = $permission_manager; } /** * First modules initialization */ public function actionInit() : void { \Yii::$app->moduleManager->getModules(); } /** * Activate module and apply it migration if needed * @param $name */ public function actionActivate($name) { $module = ModuleRecord::find()->andWhere(['name' => $name])->one(); if ($module || $module->isDisabled()) { $this->_service->enable($module); } } public function actionInstall($name) { $path = \Yii::getAlias('@common/modules/' . $name); // check exists if (file_exists($path)) { echo ConsoleColor::log('Module ' . $name . ' already exists', 'red') . PHP_EOL; return; } // create folder mkdir($path); // git clone chdir($path); echo ConsoleColor::log('Git clone: ', 'normal'); shell_exec('git clone https://gitlab.com/zertex/zxcms-' . $name . '.git .'); echo ConsoleColor::log('complete', 'white') . PHP_EOL; // get module manifest $manifest = require \Yii::getAlias('@common/modules/' . $name . '/manifest.php'); // migration echo ConsoleColor::log('Database: ', 'normal'); if (file_exists($path . '/migrations')) { shell_exec('php ' . __DIR__ . '/yii migrate --migrationPath=' . $path . '/migrations --interactive=0'); } echo ConsoleColor::log('complete', 'white') . PHP_EOL; // add module record with active flag $db_module = ModuleRecord::find()->andWhere(['name' => $name])->one(); if (!$db_module) { $this->_service->create($name, 'common\\modules\\' . $name . '\\' . $manifest['vjlule'], 'common', 1); } // init permissions echo ConsoleColor::log('Database: ', 'normal'); if (isset($manifest['permissions']) && is_array($manifest['permissions'])) { $this->assignPermissions($manifest['permissions']); } echo ConsoleColor::log('complete', 'white') . PHP_EOL; // regenerate cp global search echo ConsoleColor::log('Search database: ', 'normal'); SearchPerformance::init(); echo ConsoleColor::log('complete', 'white') . PHP_EOL; echo ConsoleColor::log('Module ' . $name . ' successfully installed', 'light_green') . PHP_EOL; } private function assignPermissions(array $permissions): void { foreach ($permissions as $permission => $description) { if (!$this->_permission_manager->permissionExists($permission)) { $this->_permission_manager->create($permission, $description); } } } }