From a5b6f6fa0dfeed127fbc08600a1e839966eb8b1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 1 Sep 2017 23:25:26 +0200 Subject: [PATCH] FEATURE #2520: add commands for creating new migration and running migrations in modules --- app/CMS/Modules/Stubs/Migrations/new.stub | 14 +++ .../Stubs/{ => NewModule}/Config/config.stub | 0 .../NewModule/Database/Migrations/.gitkeep | 0 .../{ => NewModule}/Entities/$Entity$.stub | 0 .../Handlers/$Module$ContentHandler.stub | 0 .../Handlers/$Module$Handler.stub | 0 .../Http/Controllers/Admin/$Module$.stub | 0 .../Http/Requests/Create$Entity$.stub | 0 .../Http/Requests/Update$Entity$.stub | 0 .../Stubs/{ => NewModule}/Http/routes.stub | 0 .../Providers/$Module$ServiceProvider.stub | 0 .../Repositories/$Module$Repository.stub | 0 .../Resources/lang/cs/$module$.stub | 0 .../Resources/views/admin/create.blade.stub | 0 .../Resources/views/admin/edit.blade.stub | 0 .../Resources/views/admin/form.blade.stub | 0 .../Resources/views/admin/index.blade.stub | 0 .../Commands/Modules/CreateMigration.php | 103 ++++++++++++++++++ app/Console/Commands/Modules/CreateNew.php | 2 +- .../Commands/Modules/RunMigrations.php | 48 ++++++++ app/Console/Kernel.php | 6 +- config/modules.php | 3 +- 22 files changed, 173 insertions(+), 3 deletions(-) create mode 100644 app/CMS/Modules/Stubs/Migrations/new.stub rename app/CMS/Modules/Stubs/{ => NewModule}/Config/config.stub (100%) create mode 100644 app/CMS/Modules/Stubs/NewModule/Database/Migrations/.gitkeep rename app/CMS/Modules/Stubs/{ => NewModule}/Entities/$Entity$.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Handlers/$Module$ContentHandler.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Handlers/$Module$Handler.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Http/Controllers/Admin/$Module$.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Http/Requests/Create$Entity$.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Http/Requests/Update$Entity$.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Http/routes.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Providers/$Module$ServiceProvider.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Repositories/$Module$Repository.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Resources/lang/cs/$module$.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Resources/views/admin/create.blade.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Resources/views/admin/edit.blade.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Resources/views/admin/form.blade.stub (100%) rename app/CMS/Modules/Stubs/{ => NewModule}/Resources/views/admin/index.blade.stub (100%) create mode 100644 app/Console/Commands/Modules/CreateMigration.php create mode 100644 app/Console/Commands/Modules/RunMigrations.php diff --git a/app/CMS/Modules/Stubs/Migrations/new.stub b/app/CMS/Modules/Stubs/Migrations/new.stub new file mode 100644 index 00000000..e1873063 --- /dev/null +++ b/app/CMS/Modules/Stubs/Migrations/new.stub @@ -0,0 +1,14 @@ +argument('module'); + $this->migrationName = $name = $this->argument('name'); + $this->tableName = $this->option('table'); + + $modules = Module::where('enabled', true) + ->get() + ->pluck('static_name', 'id') + ->toArray(); + + while (is_null($module) || !in_array($module, $modules)) { + $module = $this->anticipate('Input valid module name', $modules); + } + + $selectedModule = Module::where('static_name', $module) + ->first(); + + $basePath = $selectedModule->is_template ? config('modules.path.template') : config('modules.paths.modules'); + $path = $basePath . '/' . $module . '/Database/Migrations/'; + if (!is_dir($path)) { + mkdir($path, 0777, true); + } + + while (is_null($name)) { + $name = $this->ask('Input migration name'); + } + + $content = file_get_contents(config('modules.paths.stubs') . '/Migrations/new.stub'); + $content = $this->replacePlaceholders($content); + + $migrationName = $path . $this->getMigrationName($name); + + file_put_contents($migrationName, $content); + + $this->line('Migration successfully created.', 'info'); + } + + /** + * Find and replace all placeholders in given content + * + * @param $content + * + * @return mixed + */ + private function replacePlaceholders($content) + { + $replace = [ + '$MigrationName$' => studly_case($this->migrationName), + '$TableName$' => $this->tableName + ]; + + foreach ($replace as $what => $for) { + $content = str_replace($what, $for, $content); + } + + return $content; + } + + /** + * Get prefix for created migration + * @return false|string + */ + protected function getDatePrefix() + { + return date('Y_m_d_His'); + } + + /** + * @param $name + * + * @return string + */ + private function getMigrationName($name) + { + return $this->getDatePrefix() . '_' . snake_case($name) . '.php'; + } +} diff --git a/app/Console/Commands/Modules/CreateNew.php b/app/Console/Commands/Modules/CreateNew.php index 7b70e365..7a86e653 100644 --- a/app/Console/Commands/Modules/CreateNew.php +++ b/app/Console/Commands/Modules/CreateNew.php @@ -42,7 +42,7 @@ class CreateNew extends Command mkdir($path); // copy stub files - \File::copyDirectory(config('modules.paths.stubs'), $path); + \File::copyDirectory(config('modules.paths.stubs').'/NewModule', $path); $files = \File::allFiles($path); foreach ($files as $file) { diff --git a/app/Console/Commands/Modules/RunMigrations.php b/app/Console/Commands/Modules/RunMigrations.php new file mode 100644 index 00000000..54fe6d16 --- /dev/null +++ b/app/Console/Commands/Modules/RunMigrations.php @@ -0,0 +1,48 @@ +argument('module'))) { + $modules = $modules->where('static_name', $module); + } + $modules = $modules->get(); + + if ($modules->isEmpty()) { + $this->error('No valid modules.'); + return; + } + + $command = $this->option('rollback') ? 'migrate:rollback' : 'migrate'; + foreach ($modules as $module) { + $this->info('Migrating '.$module->static_name); + + $basePath = $module->is_template ? config('modules.path.template') : config('modules.paths.modules'); + $path = $basePath . '/' . $module->static_name . '/Database/Migrations/'; + + $this->call($command, ['--path' => $path]); + } + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 5428b10e..a39e7fc0 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -3,6 +3,8 @@ namespace App\Console; use App\Console\Commands\InstallCMS; +use App\Console\Commands\Modules\CreateMigration; +use App\Console\Commands\Modules\RunMigrations; use App\Console\Commands\Modules\CreateNew; use App\Console\Commands\Modules\DisableModule; use App\Console\Commands\Modules\EnableModule; @@ -34,7 +36,9 @@ class Kernel extends ConsoleKernel Commands\AddLanguage::class, PublishTemplateResources::class, TemplateInfo::class, - InstallCMS::class + InstallCMS::class, + CreateMigration::class, + RunMigrations::class ]; /** diff --git a/config/modules.php b/config/modules.php index 529abbaf..038f14dc 100644 --- a/config/modules.php +++ b/config/modules.php @@ -4,7 +4,8 @@ return [ 'namespace' => 'Modules', 'paths' => [ 'modules' => base_path('modules'), + 'templates' => base_path('templates'), 'assets' => public_path('modules'), - 'stubs' => base_path('app/CMS/Modules/Stubs'), + 'stubs' => base_path('app/CMS/Modules/Stubs'), ] ];