You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
xshop/app/Console/Commands/makePart.php

98 lines
2.7 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Models\Area;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\File;
use Symfony\Component\Process\Process;
class makePart extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'make:part {part} {segment}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'make segment part';
/**
* Execute the console command.
*/
public function handle()
{
//
$part = $this->argument('part');
$segment = strtolower($this->argument('segment'));
// make detail
$detail = [
'name' => $part,
'version' => '1.0',
'author' => 'xStack',
'email' => 'xshop@xstack.ir',
'license' => 'GPL-3.0-or-later',
'url' => 'https://xstack.ir',
'author_url' => 'https://4xmen.ir',
'packages' => [],
];
// check section
if (!in_array($segment, Area::$allSegments)) {
$this->error(__('Invalid area segment'));
return -1;
}
$folderPath = resource_path() . '/views/segments/' . $segment . '/' . ucfirst($part);
// check is exists
if (File::exists($folderPath)) {
$this->warn(__('Command ignored, segment part exists!'));
return -1;
}
// create folder
File::makeDirectory($folderPath, 0755, true);
File::makeDirectory($folderPath.'/assets', 0755, true);
$this->info('Directory created as: /segments/' . $segment . '/' . ucfirst($part));
$handler = file_get_contents(__DIR__.'/data/handle.dat');
$handler = str_replace('Handle',ucfirst($part), $handler);
$scss = <<<DOC
#$part {
// scss
}
DOC;
file_put_contents($folderPath . '/' . $part . '.blade.php', "<div id='{$part}'></div>");
file_put_contents($folderPath . '/' . $part . '.js', '');
file_put_contents($folderPath . '/' . $part . '.json', json_encode($detail,JSON_PRETTY_PRINT));
file_put_contents($folderPath . '/' . ucfirst($part) . '.php', $handler);
file_put_contents($folderPath . '/' . $part . '.scss', $scss);
File::copy(__DIR__.'/data/screen.png',$folderPath .'/screenshot.png');
$process = new Process(['composer', 'dump-autoload']);
$process->setWorkingDirectory(base_path())->run();
$this->info(__("Theme part created successfully: [blade, js, json, scss, php, assets, screenshot]"));
return 0;
}
}