. */ declare(strict_types=1); namespace FireflyIII\Console\Commands; use FireflyIII\Support\System\GeneratesInstallationId; use Illuminate\Console\Command; /** * Class UpgradeFireflyInstructions. * * @codeCoverageIgnore */ class UpgradeFireflyInstructions extends Command { use GeneratesInstallationId; /** * The console command description. * * @var string */ protected $description = 'Instructions in case of upgrade trouble.'; /** * The name and signature of the console command. * * @var string */ protected $signature = 'firefly:instructions {task}'; /** * Execute the console command. */ public function handle(): int { $this->generateInstallationId(); if ('update' === (string)$this->argument('task')) { $this->updateInstructions(); } if ('install' === (string)$this->argument('task')) { $this->installInstructions(); } return 0; } /** * Render upgrade instructions. */ private function updateInstructions(): void { /** @var string $version */ $version = config('firefly.version'); $config = config('upgrade.text.upgrade'); $text = ''; foreach (array_keys($config) as $compare) { // if string starts with: if (str_starts_with($version, $compare)) { $text = $config[$compare]; } } $this->showLine(); $this->boxed(''); if (null === $text) { $this->boxed(sprintf('Thank you for updating to Firefly III, v%s', $version)); $this->boxedInfo('There are no extra upgrade instructions.'); $this->boxed('Firefly III should be ready for use.'); $this->boxed(''); $this->showLine(); return; } $this->boxed(sprintf('Thank you for updating to Firefly III, v%s!', $version)); $this->boxedInfo($text); $this->boxed(''); $this->showLine(); } /** * Show a line. */ private function showLine(): void { $line = '+'; $line .= str_repeat('-', 78); $line .= '+'; $this->line($line); } /** * Show a nice box. * * @param string $text */ private function boxed(string $text): void { $parts = explode("\n", wordwrap($text)); foreach ($parts as $string) { $this->line('| ' . sprintf('%-77s', $string) . '|'); } } /** * Show a nice info box. * * @param string $text */ private function boxedInfo(string $text): void { $parts = explode("\n", wordwrap($text)); foreach ($parts as $string) { $this->info('| ' . sprintf('%-77s', $string) . '|'); } } /** * Render instructions. */ private function installInstructions(): void { /** @var string $version */ $version = config('firefly.version'); $config = config('upgrade.text.install'); $text = ''; foreach (array_keys($config) as $compare) { // if string starts with: if (str_starts_with($version, $compare)) { $text = $config[$compare]; } } $this->showLine(); $this->boxed(''); if (null === $text) { $this->boxed(sprintf('Thank you for installing Firefly III, v%s!', $version)); $this->boxedInfo('There are no extra installation instructions.'); $this->boxed('Firefly III should be ready for use.'); $this->boxed(''); $this->showLine(); return; } $this->boxed(sprintf('Thank you for installing Firefly III, v%s!', $version)); $this->boxedInfo($text); $this->boxed(''); $this->showLine(); } }