. */ declare(strict_types=1); namespace FireflyIII\Console\Commands\Correction; use FireflyIII\Console\Commands\ShowsFriendlyMessages; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use Illuminate\Console\Command; /** * Class FixLongDescriptions */ class FixLongDescriptions extends Command { use ShowsFriendlyMessages; private const int MAX_LENGTH = 1000; protected $description = 'Fixes long descriptions in journals and groups.'; protected $signature = 'firefly-iii:fix-long-descriptions'; /** * Execute the console command. */ public function handle(): int { $journals = TransactionJournal::get(['id', 'description']); $count = 0; /** @var TransactionJournal $journal */ foreach ($journals as $journal) { if (strlen($journal->description) > self::MAX_LENGTH) { $journal->description = substr($journal->description, 0, self::MAX_LENGTH); $journal->save(); $this->friendlyWarning(sprintf('Truncated description of transaction journal #%d', $journal->id)); ++$count; } } $groups = TransactionGroup::get(['id', 'title']); /** @var TransactionGroup $group */ foreach ($groups as $group) { if (strlen((string)$group->title) > self::MAX_LENGTH) { $group->title = substr($group->title, 0, self::MAX_LENGTH); $group->save(); $this->friendlyWarning(sprintf('Truncated description of transaction group #%d', $group->id)); ++$count; } } if (0 === $count) { $this->friendlyPositive('All transaction group and journal title lengths are within bounds.'); } return 0; } }