HEX
Server: nginx/1.28.3
System: Linux lightweb-s1 5.15.0-173-generic #183-Ubuntu SMP Fri Mar 6 13:29:34 UTC 2026 x86_64
User: drdrivek-71 (1047)
PHP: 8.3.30
Disabled: NONE
Upload Files
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!");
    }
}