|
|
|
<?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', str_replace('THEME_PART_NAME',$part,'<section class="THEME_PART_NAME live-setting" data-live="{{$data->area_name.\'_\'.$data->part}}" ></section>'));
|
|
|
|
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;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|