. */ declare(strict_types=1); namespace FireflyIII\Factory; use FireflyIII\Models\Account; use FireflyIII\Models\AccountMeta; use Log; /** * Class AccountMetaFactory */ class AccountMetaFactory { /** * Create update or delete meta data. * * @param Account $account * @param string $field * @param string $value * * @return AccountMeta|null */ public function crud(Account $account, string $field, string $value): ?AccountMeta { /** @var AccountMeta|null $entry */ $entry = $account->accountMeta()->where('name', $field)->first(); // must not be an empty string: if ('' !== $value) { // if $data has field and $entry is null, create new one: if (null === $entry) { Log::debug(sprintf('Created meta-field "%s":"%s" for account #%d ("%s") ', $field, $value, $account->id, $account->name)); return $this->create(['account_id' => $account->id, 'name' => $field, 'data' => $value]); } // if $data has field and $entry is not null, update $entry: $entry->data = $value; $entry->save(); Log::debug(sprintf('Updated meta-field "%s":"%s" for #%d ("%s") ', $field, $value, $account->id, $account->name)); } if ('' === $value && null !== $entry) { $entry->delete(); return null; } return $entry; } /** * @param array $data * * @return AccountMeta|null */ public function create(array $data): ?AccountMeta { return AccountMeta::create($data); } }