File: /home/eslinced-103/brise-edu.or.kr/app/Commands/CreatePackageCommand.php
<?php
namespace App\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Str;
use Symfony\Component\Console\Input\InputArgument;
class CreatePackageCommand extends Command
{
use NovaPackageCommand;
protected string $vendor;
protected string $package;
protected string $frontend;
protected $name = "amuz-cms:create-package";
protected $description = "Create new Package";
public function handle()
{
$this->package = $this->ask('Enter Package Name');
$vendor = $this->anticipate('What is your name?', ['AmuzCorp']);
$this->vendor = Str::kebab($vendor);
$this->frontend = $this->choice(
'Choose Default Javascript Framework',
['Vue3', 'React', 'None'],
0
);
$this->generatePackageDirectories();
$this->generateRouteFile();
$this->generateAssets();
$this->generateComposer();
//make service provider
Artisan::call('amuz-cms:service-provider', [
'package' => $this->package,
'--main' => true
]);
//make nova mainmenu file
$template = str_replace([
'{{namespace}}',
'{{uriKey}}'
],[
$this->namespace($this->package),
], $this->stub('NovaMainMenu'));
file_put_contents($this->dir($this->studly($this->package))."/NovaMainMenu.php", $template);
}
/**
* Create package directories
* @return void
*/
protected function generatePackageDirectories()
{
if(!is_dir($this->dir())){
mkdir($this->dir());
}
mkdir($this->dir($this->studly($this->package)));
$directories = [
'Assets',
'Assets/js',
'Assets/js/Fields',
'Assets/js/Filters',
'Assets/js/Cards',
'Assets/js/ResourceTools',
'Assets/js/Tools',
'Assets/sass',
'Assets/views',
'config',
'Commands',
'Controllers',
'Database',
'Database/migrations',
'Database/migrations/Tenant',
'Database/Seeders',
'Middleware',
'Models',
'Models/Tenant',
'Resources',
'Routes',
];
foreach ($directories as $directory){
$this->createDirIfDoesntExists($directory, $this->studly($this->package));
file_put_contents($this->dir($this->studly($this->package))."/" . $directory . "/.gitkeep", $this->stub('GitKeep'));
}
$this->line('Directories have been created');
}
/**
* Generate api routes file
* @return void
*/
protected function generateRouteFile()
{
$uriKey = Str::kebab($this->package);
$template = str_replace([
'{{uriKey}}'
],[
$uriKey
], $this->stub('ApiRoutes'));
file_put_contents($this->dir($this->studly($this->package))."/Routes/api.php", $template);
$this->line("Api routes file has been created!");
}
/**
* Generate composer file
* @return void
*/
protected function generateComposer()
{
$name = Str::kebab($this->package);
$vendor = $this->vendor;
$template = str_replace([
'{{package}}',
'{{serviceProvider}}',
'{{vendor}}'
],[
$name,
"AmuzPackages\\\\{$this->studly($name)}\\\\{$this->studly($name)}ServiceProvider",
$vendor
], $this->stub('Composer'));
file_put_contents($this->dir($this->studly($name))."/composer.json", $template);
$this->line("Composer has been created!");
}
/**
* Generate assets files
* @return void
*/
protected function generateAssets(): void
{
$name = $this->package;
$vendor = $this->vendor;
$template = str_replace([
'{{uriKey}}'
], [
Str::kebab($name)
], $this->stub('Mix'));
$uriKey = Str::kebab($name);
file_put_contents($this->dir($this->studly($name))."/Assets/js/$uriKey.js", $this->stub('Js'));
file_put_contents($this->dir($this->studly($name))."/Assets/sass/$uriKey.scss", $this->stub('Css'));
file_put_contents($this->dir($this->studly($name)) . "/webpack.mix.js", $template);
file_put_contents($this->dir($this->studly($name)) . "/nova.mix.js", str_replace([
'{{vendor}}'
], [
"$vendor/$uriKey"
], $this->stub('NovaMix')));
if($this->frontend == "Vue3"){
file_put_contents($this->dir($this->studly($name)) . "/package.json", $this->stub('PackageVue3'));
}else if($this->frontend == "React"){
file_put_contents($this->dir($this->studly($name)) . "/package.json", $this->stub('PackageReact'));
}else{
file_put_contents($this->dir($this->studly($name)) . "/package.json", $this->stub('Package'));
}
file_put_contents($this->dir($this->studly($name))."/.gitignore", $this->stub('Git'));
$this->line("Assets have been created!");
}
}