diff --git a/app/Console/Commands/Modules/DisableModule.php b/app/Console/Commands/Modules/DisableModule.php new file mode 100644 index 00000000..823f52db --- /dev/null +++ b/app/Console/Commands/Modules/DisableModule.php @@ -0,0 +1,44 @@ +argument('module'); + $module = Module::where('static_name', $moduleName) + ->firstOrFail(); + + if ($module->has_submodules) { + $submodules = $module->submodules; + + foreach ($submodules as $submodule) { + $this->call('module:disable', ['module' => $submodule->static_name]); + } + } + + $module->enabled = false; + $module->save(); + + $this->line('Module ' . $module->static_name . ' disabled.'); + } +} diff --git a/app/Console/Commands/Modules/EnableModule.php b/app/Console/Commands/Modules/EnableModule.php new file mode 100644 index 00000000..092afa0d --- /dev/null +++ b/app/Console/Commands/Modules/EnableModule.php @@ -0,0 +1,48 @@ +argument('module'); + $module = Module::where('static_name', $moduleName) + ->firstOrFail(); + + if ($module->has_submodules) { + $submodules = $module->submodules; + + foreach ($submodules as $submodule) { + $this->call('module:enable', ['module' => $submodule->static_name]); + } + } + + if ($module->parent_id) { + $module->parent->update(['enabled' => true]); + } + + $module->enabled = true; + $module->save(); + + $this->line('Module ' . $module->static_name . ' enabled.'); + } +} diff --git a/app/Console/Commands/Modules/InstallModule.php b/app/Console/Commands/Modules/InstallModule.php index 79348f6d..c5eb64a4 100644 --- a/app/Console/Commands/Modules/InstallModule.php +++ b/app/Console/Commands/Modules/InstallModule.php @@ -155,13 +155,12 @@ class InstallModule extends Command if (is_null($module)) { // insert module into database $settings = [ - 'staticName' => $this->moduleName, 'providers' => $providers, 'order' => isset($config['order']) ? $config['order'] : 0, 'files' => isset($config['files']) ? $config['files'] : [] ]; - $module = Installer::install($name, $alias, $description, $handler, $this->parentModuleId, $settings); + $module = Installer::install($name, $alias, $this->moduleName, $description, $handler, $this->parentModuleId, $settings); } // try to install submodules diff --git a/app/Console/Commands/Modules/ModuleMigrate.php b/app/Console/Commands/Modules/ModuleMigrate.php new file mode 100644 index 00000000..8af774f9 --- /dev/null +++ b/app/Console/Commands/Modules/ModuleMigrate.php @@ -0,0 +1,42 @@ +argument('module'); + $module = Module::where('static_name', $moduleName) + ->firstOrFail(); + + if ($module->has_submodules) { + $submodules = $module->submodules; + + foreach ($submodules as $submodule) { + $this->call('module:migrate', ['module' => $submodule->static_name]); + } + } + + $this->line('Migrating ' . $module->static_name); + $this->call('migrate', ['--path' => config('modules.paths.modules').'/'.$moduleName.'/Database']); + } +} diff --git a/app/Console/Commands/SetTemplate.php b/app/Console/Commands/SetTemplate.php index 2b7cca26..4766f4c2 100644 --- a/app/Console/Commands/SetTemplate.php +++ b/app/Console/Commands/SetTemplate.php @@ -45,7 +45,7 @@ class SetTemplate extends Command $config['staticName'] = $template; if ($current) { - $this->line('Template is already installed. Currently using template ' . trans($current->name) . ' located in /templates/' . $current->module_settings['staticName'] . '.'); + $this->line('Template is already installed. Currently using template ' . trans($current->name) . ' located in /templates/' . $current->static_name . '.'); $confirm = $this->confirm('Uninstall it and install *' . trans($config['name']) . '*? All data associated with installed template will be lost!'); if ($confirm) { @@ -59,7 +59,7 @@ class SetTemplate extends Command } try { - Installer::install($config['name'], $config['alias'], $config['description'], $config['handler'], false, $config); + Installer::install($config['name'], $config['alias'], $current->static_name, $config['description'], $config['handler'], false, $config); } catch (\Exception $e) { $this->error('Cannot install template ' . $template . '. Message: ' . $e->getMessage()); return; diff --git a/app/Console/Commands/UninstallModule.php b/app/Console/Commands/UninstallModule.php new file mode 100644 index 00000000..6c79c84f --- /dev/null +++ b/app/Console/Commands/UninstallModule.php @@ -0,0 +1,42 @@ +hasMany(Module::class, 'parent_id'); + } + + public function parent() { + return $this->belongsTo(Module::class, 'parent_id'); } } \ No newline at end of file diff --git a/app/ModuleManager/Installer.php b/app/ModuleManager/Installer.php index 2d8f4add..d58b0898 100644 --- a/app/ModuleManager/Installer.php +++ b/app/ModuleManager/Installer.php @@ -1,4 +1,5 @@ $name, - 'description' => $description, - 'handler' => $handler, - 'manages_content' => $managesContent, - 'support_categories' => $supportCategories, - 'alias' => $alias, - 'module_settings' => $settings, - 'parent_id' => $parentModuleId ? $parentModuleId : null, - 'enabled' => 1, - 'is_template' => $isTemplate - ]); + 'name' => $name, + 'description' => $description, + 'handler' => $handler, + 'static_name' => $staticName, + 'manages_content' => $managesContent, + 'support_categories' => $supportCategories, + 'alias' => $alias, + 'module_settings' => $settings, + 'parent_id' => $parentModuleId ? $parentModuleId : null, + 'enabled' => 1, + 'is_template' => $isTemplate + ]); // install something module-specific if ($handler && is_callable([$handler, 'install'])) { diff --git a/app/ModuleManager/Providers/ModuleManager.php b/app/ModuleManager/Providers/ModuleManager.php index 199d0a83..c7c3ef47 100644 --- a/app/ModuleManager/Providers/ModuleManager.php +++ b/app/ModuleManager/Providers/ModuleManager.php @@ -32,7 +32,7 @@ class ModuleManager extends ServiceProvider // include files (if any) if (isset($module->module_settings['files']) && !empty($module->module_settings['files'])) { foreach ($module->module_settings['files'] as $file) { - include config('modules.paths.modules') . '/' . $module->module_settings['staticName'] . '/' . $file; + include config('modules.paths.modules') . '/' . $module->static_name . '/' . $file; } } } diff --git a/app/Providers/TemplateServiceProvider.php b/app/Providers/TemplateServiceProvider.php index 08f4a04a..55b4c42f 100644 --- a/app/Providers/TemplateServiceProvider.php +++ b/app/Providers/TemplateServiceProvider.php @@ -94,7 +94,7 @@ class TemplateServiceProvider extends ServiceProvider return; } - $templateDir = base_path('templates/' . $template->module_settings['staticName']. '/Resources'); + $templateDir = base_path('templates/' . $template->static_name. '/Resources'); $assetsDir = $templateDir . '/' . TemplateContract::ASSETS_DIRECTORY; $viewsDir = $templateDir . '/views'; diff --git a/database/migrations/2017_08_01_181056_add_static_name_to_modules_table.php b/database/migrations/2017_08_01_181056_add_static_name_to_modules_table.php new file mode 100644 index 00000000..4818ab62 --- /dev/null +++ b/database/migrations/2017_08_01_181056_add_static_name_to_modules_table.php @@ -0,0 +1,38 @@ +string('static_name')->after('description'); + }); + + $modules = \App\Models\Module::all(); + foreach ($modules as $module) { + $module->update(['static_name' => $module->static_name]); + } + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('modules', function (Blueprint $table) { + $table->dropColumn('static_name'); + }); + } +}