. */ declare(strict_types=1); namespace FireflyIII\TransactionRules\Actions; use FireflyIII\Events\Model\TransactionGroup\TransactionGroupRequestsAuditLogEntry; use FireflyIII\Models\RuleAction; use FireflyIII\Models\TransactionJournal; use FireflyIII\TransactionRules\Traits\RefreshNotesTrait; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; /** * Class SetDescription. */ class SetDescription implements ActionInterface { use RefreshNotesTrait; /** * TriggerInterface constructor. */ public function __construct( private RuleAction $action ) {} public function actOnArray(array $journal): bool { $this->refreshNotes($journal); /** @var TransactionJournal $object */ $object = TransactionJournal::where('user_id', $journal['user_id'])->find($journal['transaction_journal_id']); $before = $object->description; $after = $this->action->getValue($journal); // replace newlines. $after = trim(str_replace(["\r", "\n", "\t", "\036", "\025"], '', $after)); if ('' === $after) { Log::warning('Action resulted in an empty description, reset to default value.'); $after = '(no description)'; } DB::table('transaction_journals')->where('id', '=', $journal['transaction_journal_id'])->update(['description' => $after]); Log::debug(sprintf( 'RuleAction SetDescription changed the description of journal #%d from "%s" to "%s".', $journal['transaction_journal_id'], $journal['description'], $after )); $object->refresh(); event(new TransactionGroupRequestsAuditLogEntry($this->action->rule, $object, 'update_description', $before, $after)); return true; } }