����JFIF��x�x����'
Server IP : 78.140.185.180 / Your IP : 216.73.216.82 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/builderbox/public_html/app/Console/Commands/Legacy/ |
Upload File : |
<?php namespace App\Console\Commands\Legacy; use App\BuilderPage; use App\Project; use App\Services\ProjectRepository; use App\Services\TemplateLoader; use Illuminate\Console\Command; use Illuminate\Database\Eloquent\Collection; use Arr; use Str; class MigrateLegacyProjects extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'legacy:projects'; /** * The console command description. * * @var string */ protected $description = 'Migrate legacy projects to new version.'; /** * @var Project */ private $project; /** * @var ProjectRepository */ private $repository; /** * @var BuilderPage */ private $page; /** * @var TemplateLoader */ private $templateLoader; /** * Map for matching template css to template name. * @var array */ private $templateCssMap = [ 'capital-city' => 'move special fonts to html head for better performance', 'pratt' => '#features .ac a', 'storystrap' => 'h1,h2,h3,.highlight,.navbar a,#masthead h4', 'minimal-blog' => '#head a.logo,#head a.logo:hover', 'product-launch' => '.icon-home a, .icon-home a:hover, .icon-home a:focus', ]; /** * Create a new command instance. * * @param Project $project * @param BuilderPage $page * @param ProjectRepository $repository * @param TemplateLoader $templateLoader */ public function __construct(Project $project, BuilderPage $page, ProjectRepository $repository, TemplateLoader $templateLoader) { parent::__construct(); $this->page = $page; $this->project = $project; $this->repository = $repository; $this->templateLoader = $templateLoader; } /** * Execute the console command. */ public function handle() { //update model namespaces in database $this->page->where('pageable_type', 'Project')->update(['pageable_type' => Project::class]); $this->page->where('pageable_type', 'Template')->update(['pageable_type' => 'App\Template']); $this->project->with('pages', 'users')->orderBy('id')->chunk(100, function(Collection $projects) { $projects->each(function(Project $project) { if ($project->uuid) return; //add uuid to legacy projects $project->fill(['uuid' => Str::random(36), 'framework' => 'temp'])->save(); $templateNames = $this->templateLoader->loadAll()->pluck('name'); $data = $project->toArray(); $data['framework'] = 'bootstrap-3'; if ($project->pages->isNotEmpty()) { $data['theme'] = $project->pages->first()->theme; $css = strtolower($project->pages->first()->css); //extract template name from project css $data['template'] = $templateNames->first(function($name) use($project, $css) { if ($name === 'grayscale') $name = 'grayscale bootstrap theme'; if ($name === 'minimal-dark') $name = 'project name: minimal'; return Str::contains($css, str_replace('-', ' ', $name)); }); //match templates that don't have their name in css if ( ! Arr::get($data, 'template')) { foreach ($this->templateCssMap as $name => $cssPart) { if (Str::contains($css, $cssPart)) { $data['template'] = $name; break; } } } //remove "templates/name" references from html if (Arr::get($data, 'template')) { $data['pages'] = array_map(function($page) use($data) { $page['html'] = str_replace("templates/{$data['template']}/", '', $page['html']); return $page; }, $data['pages']); } //compile css of all pages into single string //that should be inserted into custom_css file $data['css'] = $project->pages->map(function($page) { return $page->css; })->implode("\n"); //remove "templates/name" references from css if (Arr::get($data, 'template')) { $data['css'] = str_replace("templates/{$data['template']}/", '../', $data['css']); } //compile js of all pages into single string //that should be inserted into custom_js file $data['js'] = $project->pages->map(function($page) { return $page->js; })->implode("\n"); //need to include css of all custom elements $files = \File::files(public_path('builder/elements')); $customElementsCss = array_map(function($path) { $contents = \File::get($path); preg_match('/<style.*?>(.+?)<\/style>/s', $contents, $css); return isset($css[1]) ? trim($css[1]) : ''; }, $files); $data['custom_element_css'] = implode("\n", $customElementsCss); } $this->repository->update($project, $data, false); //store default thumbnail, if needed $thumbnailPath = $this->repository->getProjectPath($project->fresh()) . '\thumbnail.png'; if ( ! \Storage::disk('public')->exists($thumbnailPath)) { \Storage::disk('public')->put($thumbnailPath, \File::get(public_path(TemplateLoader::DEFAULT_THUMBNAIL))); } }); }); $this->info('Migrated legacy projects.'); } }