_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 'Module ' . $name . ' already exists' . PHP_EOL; return; } // create folder mkdir($path); // git clone chdir($path); shell_exec('git clone https://gitlab.com/zertex/zxcms-' . $name . '.git .'); // get module manifest $manifest = require \Yii::getAlias('@common/modules/' . $name . '/manifest.php'); // migration if (file_exists($path . '/migrations')) { shell_exec('php ' . __DIR__ . '/yii migrate --migrationPath=' . $path . '/migrations --interactive=0'); } // 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 if (isset($manifest['permissions']) && is_array($manifest['permissions'])) { $this->assignPermissions($manifest['permissions']); } // regenerate cp global search SearchPerformance::init(); echo 'Module ' . $name . ' successfully installed' . 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); } } } }