![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/syn.corals.io/Corals/core/Theme/Commands/ |
<?php namespace Corals\Theme\Commands; use Illuminate\Console\Command; class createTheme extends baseCommand { protected $signature = 'theme:create {themeName?}'; protected $description = 'Create a new theme'; public function info($text, $newline = true) { $this->output->write("<info>$text</info>", $newline); } public function handle() { // Get theme name $themeName = $this->argument('themeName'); if (!$themeName) { $themeName = $this->ask('Give theme name'); } // Check that theme doesn't exist if ($this->theme_installed($themeName)) { $this->error("Error: Theme $themeName already exists"); return; } // Read theme paths $themeType = $parentTheme = $this->choice('What is theme type?', ['frontend', 'admin']); $themeCaption = $this->ask("add theme caption?"); $themeVersion = $this->ask("What is theme version?"); $viewsPath = $this->anticipate("Where will views be located [Default='$themeName']?", [], 'test'); $assetPath = $this->anticipate("Where will assets be located [Default='$themeName']?", [], 'assets/themes/' . $themeName); // Calculate Absolute paths $viewsPathFull = themes_path($viewsPath); $assetPathFull = public_path($assetPath); // Ask for parent theme $parentTheme = ""; if ($this->confirm('Extends an other theme?')) { $themes = array_map(function ($theme) { return $theme->name; }, \Theme::all()); $parentTheme = $this->choice('Which one', $themes); } $customConfiguration = $this->askCustomConfiguration(); // Display a summary $this->info("Summary:"); $this->info("- Theme type: " . $themeType); $this->info("- Theme name: " . $themeName); $this->info("- Theme caption: " . $themeCaption); $this->info("- Theme version: " . $themeVersion); $this->info("- Views Path: " . $viewsPathFull); $this->info("- Asset Path: " . $assetPathFull); $this->info("- Extends Theme: " . ($parentTheme ?: "No")); if (!empty($customConfiguration)) { $this->info("Custom Theme Configuration:"); foreach ($customConfiguration as $key => $value) { $this->info("- $key: " . print_r($value, true)); } } if ($this->confirm('Create Theme?', true)) { $themeJson = new \Corals\Theme\ThemeManifest(array_merge([ "type" => $themeType, "name" => $themeName, "caption" => $themeCaption, "extends" => $parentTheme, "assetPath" => $assetPath, "version" => $themeVersion, ], $customConfiguration)); // Create Paths + copy theme.json $this->files->makeDirectory($viewsPathFull); $this->files->makeDirectory($assetPathFull); $themeJson->saveToFile(themes_path("$viewsPath/theme.json")); // Rebuild Themes Cache \Theme::rebuildCache(); } } // You can add request more information during theme setup. Just override this class and implement // the following method. It should return an associative array which will be appended // into the 'theme.json' configuration file. You can retreive this values // with Theme::getSetting('key') at runtime. You may optionaly want to redifine the // command signature too. public function askCustomConfiguration() { return [ // 'key' => 'value', ]; } }