diff --git a/app/Console/Commands/InstallAllModules.php b/app/Console/Commands/InstallAllModules.php index 1cb87c4b..50f53ac7 100644 --- a/app/Console/Commands/InstallAllModules.php +++ b/app/Console/Commands/InstallAllModules.php @@ -3,7 +3,6 @@ namespace App\Console\Commands; use Illuminate\Console\Command; -use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\File; class InstallAllModules extends Command @@ -38,11 +37,13 @@ class InstallAllModules extends Command */ public function handle() { + // crawl all subdirectories in modules path $modules = File::directories(config('modules.paths.modules')); foreach ($modules as $module) { $moduleName = basename($module); + // try to install each module try { $this->call('install-module', ['name' => $moduleName]); } catch (\Exception $e) { diff --git a/app/Console/Commands/InstallModule.php b/app/Console/Commands/InstallModule.php index f45a5620..04d0e205 100644 --- a/app/Console/Commands/InstallModule.php +++ b/app/Console/Commands/InstallModule.php @@ -42,23 +42,32 @@ class InstallModule extends Command */ public function handle() { - $name = $this->argument('name'); - $this->moduleName = $name; + $this->moduleName = $name = $this->argument('name'); + // invalid module name provided if (!is_dir($this->modulesPath . DIRECTORY_SEPARATOR . $name)) { throw new InvalidArgumentException('Invalid module ' . $name . '. No directory under ' . $this->modulesPath . DIRECTORY_SEPARATOR . $name . ' found!'); } + // get config $config = $this->loadConfig(); + // check if it is valid $this->checkMandatoryFields($config); // all mandatory fields are present, we can write it into database and create modules.json $this->installModule($config); + // inform user $this->line('Module ' . $name . ' successfuly installed'); } + /** + * Load config from Config/config.php in module files. We cannot use config() because the file have not published + * yet. + * + * @return array + */ private function loadConfig() { // we cannot rely on config() helper, because this module does not have to be published @@ -67,6 +76,11 @@ class InstallModule extends Command return $config; } + /** + * Checks if config contains all mandatory entries. + * + * @param $config + */ private function checkMandatoryFields($config) { $fields = ['providers', 'handler', 'name', 'files', 'alias']; @@ -77,6 +91,18 @@ class InstallModule extends Command } } + /** + * Installs module into database. + * + * This method calls Module::install, which handles specific installation of module. In this way we should be able + * to install any module even with some other database structures. + * + * @param $config + * + * @return Module + * @throws \ErrorException + * @throws \Exception + */ private function installModule($config) { $name = isset($config['translatedName']) ? $config['translatedName'] : $config['name'];