Auto commit for release 'branch-v6.2' on 2024-12-22

This commit is contained in:
github-actions
2024-12-22 07:05:15 +01:00
parent 303548a5fe
commit a500de8ab1
67 changed files with 256 additions and 220 deletions

View File

@@ -35,8 +35,8 @@ use Illuminate\Pagination\LengthAwarePaginator;
*/ */
class IndexController extends Controller class IndexController extends Controller
{ {
public const string RESOURCE_KEY = 'exchange-rates';
use ValidatesUserGroupTrait; use ValidatesUserGroupTrait;
public const string RESOURCE_KEY = 'exchange-rates';
private ExchangeRateRepositoryInterface $repository; private ExchangeRateRepositoryInterface $repository;
@@ -55,11 +55,11 @@ class IndexController extends Controller
public function index(): JsonResponse public function index(): JsonResponse
{ {
$piggies = $this->repository->getAll(); $piggies = $this->repository->getAll();
$pageSize = $this->parameters->get('limit'); $pageSize = $this->parameters->get('limit');
$count = $piggies->count(); $count = $piggies->count();
$piggies = $piggies->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $piggies = $piggies->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
$paginator = new LengthAwarePaginator($piggies, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($piggies, $count, $pageSize, $this->parameters->get('page'));
var_dump('here we are'); var_dump('here we are');
@@ -68,6 +68,7 @@ class IndexController extends Controller
return response() return response()
->json($this->jsonApiList(self::RESOURCE_KEY, $paginator, $transformer)) ->json($this->jsonApiList(self::RESOURCE_KEY, $paginator, $transformer))
->header('Content-Type', self::CONTENT_TYPE); ->header('Content-Type', self::CONTENT_TYPE)
;
} }
} }

View File

@@ -37,8 +37,8 @@ use Illuminate\Pagination\LengthAwarePaginator;
*/ */
class ShowController extends Controller class ShowController extends Controller
{ {
public const string RESOURCE_KEY = 'exchange-rates';
use ValidatesUserGroupTrait; use ValidatesUserGroupTrait;
public const string RESOURCE_KEY = 'exchange-rates';
private ExchangeRateRepositoryInterface $repository; private ExchangeRateRepositoryInterface $repository;
@@ -57,19 +57,20 @@ class ShowController extends Controller
public function show(TransactionCurrency $from, TransactionCurrency $to): JsonResponse public function show(TransactionCurrency $from, TransactionCurrency $to): JsonResponse
{ {
// $piggies = $this->repository->getAll(); // $piggies = $this->repository->getAll();
// //
$pageSize = $this->parameters->get('limit'); $pageSize = $this->parameters->get('limit');
$rates = $this->repository->getRates($from, $to); $rates = $this->repository->getRates($from, $to);
$count = $rates->count(); $count = $rates->count();
$rates = $rates->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $rates = $rates->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
$paginator = new LengthAwarePaginator($rates, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($rates, $count, $pageSize, $this->parameters->get('page'));
$transformer = new ExchangeRateTransformer(); $transformer = new ExchangeRateTransformer();
$transformer->setParameters($this->parameters); // give params to transformer $transformer->setParameters($this->parameters); // give params to transformer
return response() return response()
->json($this->jsonApiList(self::RESOURCE_KEY, $paginator, $transformer)) ->json($this->jsonApiList(self::RESOURCE_KEY, $paginator, $transformer))
->header('Content-Type', self::CONTENT_TYPE); ->header('Content-Type', self::CONTENT_TYPE)
;
} }
} }

View File

@@ -34,7 +34,7 @@ use Illuminate\Pagination\LengthAwarePaginator;
class IndexController extends Controller class IndexController extends Controller
{ {
public const string RESOURCE_KEY = 'transaction-currencies'; public const string RESOURCE_KEY = 'transaction-currencies';
private CurrencyRepositoryInterface $repository; private CurrencyRepositoryInterface $repository;
protected array $acceptedRoles = [UserRoleEnum::READ_ONLY]; protected array $acceptedRoles = [UserRoleEnum::READ_ONLY];
@@ -46,7 +46,7 @@ class IndexController extends Controller
function ($request, $next) { function ($request, $next) {
$this->repository = app(CurrencyRepositoryInterface::class); $this->repository = app(CurrencyRepositoryInterface::class);
// new way of user group validation // new way of user group validation
$userGroup = $this->validateUserGroup($request); $userGroup = $this->validateUserGroup($request);
$this->repository->setUserGroup($userGroup); $this->repository->setUserGroup($userGroup);
return $next($request); return $next($request);
@@ -56,20 +56,20 @@ class IndexController extends Controller
public function index(IndexRequest $request): JsonResponse public function index(IndexRequest $request): JsonResponse
{ {
$settings = $request->getAll(); $settings = $request->getAll();
if(true === $settings['enabled']) { if (true === $settings['enabled']) {
$currencies = $this->repository->get(); $currencies = $this->repository->get();
} }
if(true !== $settings['enabled']) { if (true !== $settings['enabled']) {
$currencies = $this->repository->getAll(); $currencies = $this->repository->getAll();
} }
$pageSize = $this->parameters->get('limit'); $pageSize = $this->parameters->get('limit');
$count = $currencies->count(); $count = $currencies->count();
// depending on the sort parameters, this list must not be split, because the // depending on the sort parameters, this list must not be split, because the
// order is calculated in the account transformer and by that time it's too late. // order is calculated in the account transformer and by that time it's too late.
$accounts = $currencies->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $accounts = $currencies->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
$paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page'));
$transformer = new CurrencyTransformer(); $transformer = new CurrencyTransformer();
@@ -78,6 +78,7 @@ class IndexController extends Controller
return response() return response()
->json($this->jsonApiList(self::RESOURCE_KEY, $paginator, $transformer)) ->json($this->jsonApiList(self::RESOURCE_KEY, $paginator, $transformer))
->header('Content-Type', self::CONTENT_TYPE); ->header('Content-Type', self::CONTENT_TYPE)
;
} }
} }

View File

@@ -47,7 +47,7 @@ class ShowController extends Controller
function ($request, $next) { function ($request, $next) {
$this->repository = app(CurrencyRepositoryInterface::class); $this->repository = app(CurrencyRepositoryInterface::class);
// new way of user group validation // new way of user group validation
$userGroup = $this->validateUserGroup($request); $userGroup = $this->validateUserGroup($request);
$this->repository->setUserGroup($userGroup); $this->repository->setUserGroup($userGroup);
return $next($request); return $next($request);
@@ -57,9 +57,10 @@ class ShowController extends Controller
public function show(TransactionCurrency $currency): JsonResponse public function show(TransactionCurrency $currency): JsonResponse
{ {
$groups = $currency->userGroups()->where('user_groups.id', $this->repository->getUserGroup()->id)->get(); $groups = $currency->userGroups()->where('user_groups.id', $this->repository->getUserGroup()->id)->get();
$enabled = $groups->count() > 0; $enabled = $groups->count() > 0;
$default = false; $default = false;
/** @var UserGroup $group */ /** @var UserGroup $group */
foreach ($groups as $group) { foreach ($groups as $group) {
$default = 1 === $group->pivot->group_default; $default = 1 === $group->pivot->group_default;
@@ -68,11 +69,12 @@ class ShowController extends Controller
$currency->userGroupDefault = $default; $currency->userGroupDefault = $default;
$transformer = new CurrencyTransformer(); $transformer = new CurrencyTransformer();
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
return response() return response()
->api($this->jsonApiObject(self::RESOURCE_KEY, $currency, $transformer)) ->api($this->jsonApiObject(self::RESOURCE_KEY, $currency, $transformer))
->header('Content-Type', self::CONTENT_TYPE); ->header('Content-Type', self::CONTENT_TYPE)
;
} }
} }

View File

@@ -24,7 +24,6 @@ declare(strict_types=1);
namespace FireflyIII\Api\V2\Request\Model\TransactionCurrency; namespace FireflyIII\Api\V2\Request\Model\TransactionCurrency;
use Carbon\Carbon;
use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\AccountFilter;
use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\ConvertsDataTypes;

View File

@@ -151,7 +151,6 @@ class CorrectAmounts extends Command
/** /**
* Foreach loop is unavoidable here. * Foreach loop is unavoidable here.
* @return void
*/ */
private function fixRuleTriggers(): void private function fixRuleTriggers(): void
{ {
@@ -162,7 +161,7 @@ class CorrectAmounts extends Command
foreach ($set as $item) { foreach ($set as $item) {
$result = $this->fixRuleTrigger($item); $result = $this->fixRuleTrigger($item);
if (true === $result) { if (true === $result) {
$fixed++; ++$fixed;
} }
} }
if (0 === $fixed) { if (0 === $fixed) {
@@ -182,13 +181,16 @@ class CorrectAmounts extends Command
$item->rule->active = false; $item->rule->active = false;
$item->rule->save(); $item->rule->save();
$item->forceDelete(); $item->forceDelete();
return false; return false;
} }
if (-1 === $check) { if (-1 === $check) {
$item->trigger_value = app('steam')->positive($item->trigger_value); $item->trigger_value = app('steam')->positive($item->trigger_value);
$item->save(); $item->save();
return true; return true;
} }
return false; return false;
} }
} }

View File

@@ -69,7 +69,7 @@ class CorrectDatabase extends Command
'firefly-iii:fix-long-descriptions', 'firefly-iii:fix-long-descriptions',
'firefly-iii:fix-recurring-transactions', 'firefly-iii:fix-recurring-transactions',
'firefly-iii:upgrade-group-information', 'firefly-iii:upgrade-group-information',
//'firefly-iii:fix-transaction-types', // very resource heavy. // 'firefly-iii:fix-transaction-types', // very resource heavy.
'firefly-iii:fix-frontpage-accounts', 'firefly-iii:fix-frontpage-accounts',
// new! // new!
'firefly-iii:unify-group-accounts', 'firefly-iii:unify-group-accounts',

View File

@@ -52,6 +52,7 @@ class FixTransactionTypes extends Command
$count = 0; $count = 0;
$journals = $this->collectJournals(); $journals = $this->collectJournals();
Log::debug(sprintf('In FixTransactionTypes, found %d journals.', $journals->count())); Log::debug(sprintf('In FixTransactionTypes, found %d journals.', $journals->count()));
/** @var TransactionJournal $journal */ /** @var TransactionJournal $journal */
foreach ($journals as $journal) { foreach ($journals as $journal) {
$fixed = $this->fixJournal($journal); $fixed = $this->fixJournal($journal);

View File

@@ -41,6 +41,6 @@ class DetectedNewIPAddress extends Event
*/ */
public function __construct(User $user) public function __construct(User $user)
{ {
$this->user = $user; $this->user = $user;
} }
} }

View File

@@ -187,13 +187,13 @@ class UserEventHandler
*/ */
public function notifyNewIPAddress(DetectedNewIPAddress $event): void public function notifyNewIPAddress(DetectedNewIPAddress $event): void
{ {
$user = $event->user; $user = $event->user;
if ($user->hasRole('demo')) { if ($user->hasRole('demo')) {
return; // do not email demo user. return; // do not email demo user.
} }
$list = app('preferences')->getForUser($user, 'login_ip_history', [])->data; $list = app('preferences')->getForUser($user, 'login_ip_history', [])->data;
if (!is_array($list)) { if (!is_array($list)) {
$list = []; $list = [];
} }

View File

@@ -1,4 +1,5 @@
<?php <?php
/* /*
* IndexController.php * IndexController.php
* Copyright (c) 2024 james@firefly-iii.org. * Copyright (c) 2024 james@firefly-iii.org.
@@ -25,7 +26,6 @@ namespace FireflyIII\Http\Controllers\ExchangeRates;
use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionCurrency;
use Illuminate\View\Factory;
use Illuminate\View\View; use Illuminate\View\View;
class IndexController extends Controller class IndexController extends Controller
@@ -42,6 +42,7 @@ class IndexController extends Controller
function ($request, $next) { function ($request, $next) {
app('view')->share('mainTitleIcon', 'fa-exchange'); app('view')->share('mainTitleIcon', 'fa-exchange');
app('view')->share('title', (string) trans('firefly.header_exchange_rates')); app('view')->share('title', (string) trans('firefly.header_exchange_rates'));
return $next($request); return $next($request);
} }
); );
@@ -56,5 +57,4 @@ class IndexController extends Controller
{ {
return view('exchange-rates.rates', compact('from', 'to')); return view('exchange-rates.rates', compact('from', 'to'));
} }
} }

View File

@@ -43,7 +43,7 @@ class TransactionCurrency extends Model
public ?bool $userGroupDefault = null; public ?bool $userGroupDefault = null;
public ?bool $userGroupEnabled = null; public ?bool $userGroupEnabled = null;
protected $casts protected $casts
= [ = [
'created_at' => 'datetime', 'created_at' => 'datetime',
'updated_at' => 'datetime', 'updated_at' => 'datetime',
'deleted_at' => 'datetime', 'deleted_at' => 'datetime',
@@ -51,7 +51,7 @@ class TransactionCurrency extends Model
'enabled' => 'bool', 'enabled' => 'bool',
]; ];
protected $fillable = ['name', 'code', 'symbol', 'decimal_places', 'enabled']; protected $fillable = ['name', 'code', 'symbol', 'decimal_places', 'enabled'];
/** /**
* Route binder. Converts the key in the URL to the specified object (or throw 404). * Route binder. Converts the key in the URL to the specified object (or throw 404).

View File

@@ -68,7 +68,8 @@ class UnknownUserLoginAttempt extends Notification
return new MailMessage() return new MailMessage()
->markdown('emails.owner.unknown-user', ['address' => $this->address, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time]) ->markdown('emails.owner.unknown-user', ['address' => $this->address, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time])
->subject((string) trans('email.unknown_user_subject')); ->subject((string) trans('email.unknown_user_subject'))
;
} }
/** /**
@@ -91,7 +92,8 @@ class UnknownUserLoginAttempt extends Notification
public function toPushover(OwnerNotifiable $notifiable): PushoverMessage public function toPushover(OwnerNotifiable $notifiable): PushoverMessage
{ {
return PushoverMessage::create((string) trans('email.unknown_user_message', ['address' => $this->address])) return PushoverMessage::create((string) trans('email.unknown_user_message', ['address' => $this->address]))
->title((string) trans('email.unknown_user_subject')); ->title((string) trans('email.unknown_user_subject'))
;
} }
/** /**

View File

@@ -61,7 +61,7 @@ class DisabledMFANotification extends Notification
*/ */
public function toMail(User $notifiable) public function toMail(User $notifiable)
{ {
$subject = (string) trans('email.disabled_mfa_subject'); $subject = (string) trans('email.disabled_mfa_subject');
$ip = Request::ip(); $ip = Request::ip();
$host = Steam::getHostName($ip); $host = Steam::getHostName($ip);
$userAgent = Request::userAgent(); $userAgent = Request::userAgent();

View File

@@ -61,7 +61,7 @@ class EnabledMFANotification extends Notification
*/ */
public function toMail(User $notifiable) public function toMail(User $notifiable)
{ {
$subject = (string) trans('email.enabled_mfa_subject'); $subject = (string) trans('email.enabled_mfa_subject');
$ip = Request::ip(); $ip = Request::ip();
$host = Steam::getHostName($ip); $host = Steam::getHostName($ip);
$userAgent = Request::userAgent(); $userAgent = Request::userAgent();

View File

@@ -63,7 +63,7 @@ class MFABackupFewLeftNotification extends Notification
*/ */
public function toMail(User $notifiable) public function toMail(User $notifiable)
{ {
$subject = (string) trans('email.mfa_few_backups_left_subject', ['count' => $this->count]); $subject = (string) trans('email.mfa_few_backups_left_subject', ['count' => $this->count]);
$ip = Request::ip(); $ip = Request::ip();
$host = Steam::getHostName($ip); $host = Steam::getHostName($ip);
$userAgent = Request::userAgent(); $userAgent = Request::userAgent();

View File

@@ -61,7 +61,7 @@ class MFABackupNoLeftNotification extends Notification
*/ */
public function toMail(User $notifiable) public function toMail(User $notifiable)
{ {
$subject = (string) trans('email.mfa_no_backups_left_subject'); $subject = (string) trans('email.mfa_no_backups_left_subject');
$ip = Request::ip(); $ip = Request::ip();
$host = Steam::getHostName($ip); $host = Steam::getHostName($ip);
$userAgent = Request::userAgent(); $userAgent = Request::userAgent();

View File

@@ -60,7 +60,7 @@ class MFAManyFailedAttemptsNotification extends Notification
*/ */
public function toMail(User $notifiable) public function toMail(User $notifiable)
{ {
$subject = (string) trans('email.mfa_many_failed_subject', ['count' => $this->count]); $subject = (string) trans('email.mfa_many_failed_subject', ['count' => $this->count]);
$ip = Request::ip(); $ip = Request::ip();
$host = Steam::getHostName($ip); $host = Steam::getHostName($ip);
$userAgent = Request::userAgent(); $userAgent = Request::userAgent();

View File

@@ -61,7 +61,7 @@ class MFAUsedBackupCodeNotification extends Notification
*/ */
public function toMail(User $notifiable) public function toMail(User $notifiable)
{ {
$subject = (string) trans('email.used_backup_code_subject'); $subject = (string) trans('email.used_backup_code_subject');
$ip = Request::ip(); $ip = Request::ip();
$host = Steam::getHostName($ip); $host = Steam::getHostName($ip);
$userAgent = Request::userAgent(); $userAgent = Request::userAgent();

View File

@@ -61,7 +61,7 @@ class NewBackupCodesNotification extends Notification
*/ */
public function toMail(User $notifiable) public function toMail(User $notifiable)
{ {
$subject = (string) trans('email.new_backup_codes_subject'); $subject = (string) trans('email.new_backup_codes_subject');
$ip = Request::ip(); $ip = Request::ip();
$host = Steam::getHostName($ip); $host = Steam::getHostName($ip);
$userAgent = Request::userAgent(); $userAgent = Request::userAgent();

View File

@@ -58,7 +58,7 @@ class UserFailedLoginAttempt extends Notification
*/ */
public function toMail(User $notifiable) public function toMail(User $notifiable)
{ {
$subject = (string) trans('email.failed_login_subject'); $subject = (string) trans('email.failed_login_subject');
$ip = Request::ip(); $ip = Request::ip();
$host = Steam::getHostName($ip); $host = Steam::getHostName($ip);
$userAgent = Request::userAgent(); $userAgent = Request::userAgent();

View File

@@ -24,7 +24,6 @@ declare(strict_types=1);
namespace FireflyIII\Notifications\User; namespace FireflyIII\Notifications\User;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsAvailableChannels;
use FireflyIII\Notifications\ReturnsSettings; use FireflyIII\Notifications\ReturnsSettings;
use FireflyIII\Support\Facades\Steam; use FireflyIII\Support\Facades\Steam;
@@ -68,13 +67,13 @@ class UserLogin extends Notification
public function toNtfy(User $notifiable): Message public function toNtfy(User $notifiable): Message
{ {
$ip = Request::ip(); $ip = Request::ip();
$host = Steam::getHostName($ip); $host = Steam::getHostName($ip);
$settings = ReturnsSettings::getSettings('ntfy', 'user', $notifiable); $settings = ReturnsSettings::getSettings('ntfy', 'user', $notifiable);
$message = new Message(); $message = new Message();
$message->topic($settings['ntfy_topic']); $message->topic($settings['ntfy_topic']);
$message->title((string) trans('email.login_from_new_ip')); $message->title((string) trans('email.login_from_new_ip'));
$message->body((string) trans('email.slack_login_from_new_ip', ['ip' => $ip, 'host' => $host, ])); $message->body((string) trans('email.slack_login_from_new_ip', ['ip' => $ip, 'host' => $host]));
return $message; return $message;
} }
@@ -84,9 +83,10 @@ class UserLogin extends Notification
*/ */
public function toPushover(User $notifiable): PushoverMessage public function toPushover(User $notifiable): PushoverMessage
{ {
$ip = Request::ip(); $ip = Request::ip();
$host = Steam::getHostName($ip); $host = Steam::getHostName($ip);
return PushoverMessage::create((string) trans('email.slack_login_from_new_ip', ['ip' => $ip, 'host' => $host, ]))
return PushoverMessage::create((string) trans('email.slack_login_from_new_ip', ['ip' => $ip, 'host' => $host]))
->title((string) trans('email.login_from_new_ip')) ->title((string) trans('email.login_from_new_ip'))
; ;
} }
@@ -96,9 +96,10 @@ class UserLogin extends Notification
*/ */
public function toSlack(User $notifiable) public function toSlack(User $notifiable)
{ {
$ip = Request::ip(); $ip = Request::ip();
$host = Steam::getHostName($ip); $host = Steam::getHostName($ip);
return new SlackMessage()->content((string) trans('email.slack_login_from_new_ip', ['ip' => $ip, 'host' => $host, ]));
return new SlackMessage()->content((string) trans('email.slack_login_from_new_ip', ['ip' => $ip, 'host' => $host]));
} }
/** /**
@@ -108,6 +109,4 @@ class UserLogin extends Notification
{ {
return ReturnsAvailableChannels::returnChannels('user', $notifiable); return ReturnsAvailableChannels::returnChannels('user', $notifiable);
} }
} }

View File

@@ -77,7 +77,7 @@ class CurrencyServiceProvider extends ServiceProvider
$this->app->bind( $this->app->bind(
ExchangeRateRepositoryInterface::class, ExchangeRateRepositoryInterface::class,
static function (Application $app) { static function (Application $app) {
/** @var ExchangeRateRepository $repository */ // @var ExchangeRateRepository $repository
return app(ExchangeRateRepository::class); return app(ExchangeRateRepository::class);
} }
); );

View File

@@ -1,4 +1,5 @@
<?php <?php
/* /*
* ExchangeRateRepository.php * ExchangeRateRepository.php
* Copyright (c) 2024 james@firefly-iii.org. * Copyright (c) 2024 james@firefly-iii.org.
@@ -32,20 +33,23 @@ class ExchangeRateRepository implements ExchangeRateRepositoryInterface
{ {
use UserGroupTrait; use UserGroupTrait;
#[\Override]
#[\Override] public function getRates(TransactionCurrency $from, TransactionCurrency $to): Collection public function getRates(TransactionCurrency $from, TransactionCurrency $to): Collection
{ {
return return
$this->userGroup->currencyExchangeRates() $this->userGroup->currencyExchangeRates()
->where(function (Builder $q) use ($from, $to) { ->where(function (Builder $q) use ($from, $to): void {
$q->where('from_currency_id', $from->id) $q->where('from_currency_id', $from->id)
->orWhere('to_currency_id', $to->id); ->orWhere('to_currency_id', $to->id)
}) ;
->orWhere(function (Builder $q) use ($from, $to) { })
$q->where('from_currency_id', $to->id) ->orWhere(function (Builder $q) use ($from, $to): void {
->orWhere('to_currency_id', $from->id); $q->where('from_currency_id', $to->id)
}) ->orWhere('to_currency_id', $from->id)
->orderBy('date', 'DESC')->get(); ;
})
->orderBy('date', 'DESC')->get()
;
} }
} }

View File

@@ -1,4 +1,5 @@
<?php <?php
/* /*
* ExchangeRateRepositoryInterface.php * ExchangeRateRepositoryInterface.php
* Copyright (c) 2024 james@firefly-iii.org. * Copyright (c) 2024 james@firefly-iii.org.
@@ -28,7 +29,5 @@ use Illuminate\Support\Collection;
interface ExchangeRateRepositoryInterface interface ExchangeRateRepositoryInterface
{ {
public function getRates(TransactionCurrency $from, TransactionCurrency $to): Collection; public function getRates(TransactionCurrency $from, TransactionCurrency $to): Collection;
} }

View File

@@ -32,8 +32,6 @@ use Illuminate\Support\Collection;
*/ */
class ExchangeRateTransformer extends AbstractTransformer class ExchangeRateTransformer extends AbstractTransformer
{ {
/** /**
* This method collects meta-data for one or all accounts in the transformer's collection. * This method collects meta-data for one or all accounts in the transformer's collection.
*/ */
@@ -48,23 +46,23 @@ class ExchangeRateTransformer extends AbstractTransformer
public function transform(CurrencyExchangeRate $rate): array public function transform(CurrencyExchangeRate $rate): array
{ {
return [ return [
'id' => (string) $rate->id, 'id' => (string) $rate->id,
'created_at' => $rate->created_at->toAtomString(), 'created_at' => $rate->created_at->toAtomString(),
'updated_at' => $rate->updated_at->toAtomString(), 'updated_at' => $rate->updated_at->toAtomString(),
'from_currency_id' => (string) $rate->fromCurrency->id, 'from_currency_id' => (string) $rate->fromCurrency->id,
'from_currency_code' => $rate->fromCurrency->code, 'from_currency_code' => $rate->fromCurrency->code,
'from_currency_symbol' => $rate->fromCurrency->symbol, 'from_currency_symbol' => $rate->fromCurrency->symbol,
'from_currency_decimal_places' => $rate->fromCurrency->decimal_places, 'from_currency_decimal_places' => $rate->fromCurrency->decimal_places,
'to_currency_id' => (string) $rate->toCurrency->id, 'to_currency_id' => (string) $rate->toCurrency->id,
'to_currency_code' => $rate->toCurrency->code, 'to_currency_code' => $rate->toCurrency->code,
'to_currency_symbol' => $rate->toCurrency->symbol, 'to_currency_symbol' => $rate->toCurrency->symbol,
'to_currency_decimal_places' => $rate->toCurrency->decimal_places, 'to_currency_decimal_places' => $rate->toCurrency->decimal_places,
'rate' => $rate->rate, 'rate' => $rate->rate,
'date' => $rate->date->toAtomString(), 'date' => $rate->date->toAtomString(),
'links' => [ 'links' => [
[ [
'rel' => 'self', 'rel' => 'self',
'uri' => sprintf('/exchange-rates/%s', $rate->id), 'uri' => sprintf('/exchange-rates/%s', $rate->id),

32
composer.lock generated
View File

@@ -4439,16 +4439,16 @@
}, },
{ {
"name": "nesbot/carbon", "name": "nesbot/carbon",
"version": "3.8.2", "version": "3.8.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/briannesbitt/Carbon.git", "url": "https://github.com/briannesbitt/Carbon.git",
"reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" "reference": "f01cfa96468f4c38325f507ab81a4f1d2cd93cfe"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f01cfa96468f4c38325f507ab81a4f1d2cd93cfe",
"reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", "reference": "f01cfa96468f4c38325f507ab81a4f1d2cd93cfe",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -4541,7 +4541,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-11-07T17:46:48+00:00" "time": "2024-12-21T18:03:19+00:00"
}, },
{ {
"name": "nette/schema", "name": "nette/schema",
@@ -10363,31 +10363,33 @@
}, },
{ {
"name": "tijsverkoyen/css-to-inline-styles", "name": "tijsverkoyen/css-to-inline-styles",
"version": "v2.2.7", "version": "v2.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
"reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" "reference": "0d72ac1c00084279c1816675284073c5a337c20d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d",
"reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", "reference": "0d72ac1c00084279c1816675284073c5a337c20d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-dom": "*", "ext-dom": "*",
"ext-libxml": "*", "ext-libxml": "*",
"php": "^5.5 || ^7.0 || ^8.0", "php": "^7.4 || ^8.0",
"symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" "symfony/css-selector": "^5.4 || ^6.0 || ^7.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" "phpstan/phpstan": "^2.0",
"phpstan/phpstan-phpunit": "^2.0",
"phpunit/phpunit": "^8.5.21 || ^9.5.10"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.2.x-dev" "dev-master": "2.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -10410,9 +10412,9 @@
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
"support": { "support": {
"issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
"source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0"
}, },
"time": "2023-12-08T13:03:43+00:00" "time": "2024-12-21T16:25:41+00:00"
}, },
{ {
"name": "twig/twig", "name": "twig/twig",

View File

@@ -273,7 +273,7 @@ return [
'header_exchange_rates', 'header_exchange_rates',
'exchange_rates_intro', 'exchange_rates_intro',
'exchange_rates_from_to', 'exchange_rates_from_to',
'exchange_rates_intro_rates' 'exchange_rates_intro_rates',
], ],
'form' => [ 'form' => [
'url', 'url',
@@ -291,7 +291,7 @@ return [
'webhook_trigger', 'webhook_trigger',
'webhook_delivery', 'webhook_delivery',
'from_currency_to_currency', 'from_currency_to_currency',
'to_currency_from_currency' 'to_currency_from_currency',
], ],
'list' => [ 'list' => [
'active', 'active',

12
package-lock.json generated
View File

@@ -7219,9 +7219,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/is-core-module": { "node_modules/is-core-module": {
"version": "2.16.0", "version": "2.16.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.0.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
"integrity": "sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -7442,9 +7442,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/json-stable-stringify": { "node_modules/json-stable-stringify": {
"version": "1.2.0", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.2.0.tgz", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.2.1.tgz",
"integrity": "sha512-ex8jk9BZHBolvbd5cRnAgwyaYcYB0qZldy1e+LCOdcF6+AUmVZ6LcGUMzsRTW83QMeu+GxZGrcLqxqrgfXGvIw==", "integrity": "sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {

View File

@@ -14,17 +14,14 @@
"/public/v1/js/app.js.LICENSE.txt": "/public/v1/js/app.js.LICENSE.txt", "/public/v1/js/app.js.LICENSE.txt": "/public/v1/js/app.js.LICENSE.txt",
"/public/v1/js/app_vue.js": "/public/v1/js/app_vue.js", "/public/v1/js/app_vue.js": "/public/v1/js/app_vue.js",
"/public/v1/js/app_vue.js.LICENSE.txt": "/public/v1/js/app_vue.js.LICENSE.txt", "/public/v1/js/app_vue.js.LICENSE.txt": "/public/v1/js/app_vue.js.LICENSE.txt",
"/public/v1/js/create.js": "/public/v1/js/create.js",
"/public/v1/js/create.js.LICENSE.txt": "/public/v1/js/create.js.LICENSE.txt",
"/public/v1/js/create_transaction.js": "/public/v1/js/create_transaction.js", "/public/v1/js/create_transaction.js": "/public/v1/js/create_transaction.js",
"/public/v1/js/create_transaction.js.LICENSE.txt": "/public/v1/js/create_transaction.js.LICENSE.txt", "/public/v1/js/create_transaction.js.LICENSE.txt": "/public/v1/js/create_transaction.js.LICENSE.txt",
"/public/v1/js/edit.js": "/public/v1/js/edit.js",
"/public/v1/js/edit.js.LICENSE.txt": "/public/v1/js/edit.js.LICENSE.txt",
"/public/v1/js/edit_transaction.js": "/public/v1/js/edit_transaction.js", "/public/v1/js/edit_transaction.js": "/public/v1/js/edit_transaction.js",
"/public/v1/js/edit_transaction.js.LICENSE.txt": "/public/v1/js/edit_transaction.js.LICENSE.txt", "/public/v1/js/edit_transaction.js.LICENSE.txt": "/public/v1/js/edit_transaction.js.LICENSE.txt",
"/public/v1/js/exchange-rates/index.js": "/public/v1/js/exchange-rates/index.js", "/public/v1/js/exchange-rates/index.js": "/public/v1/js/exchange-rates/index.js",
"/public/v1/js/exchange-rates/index.js.LICENSE.txt": "/public/v1/js/exchange-rates/index.js.LICENSE.txt", "/public/v1/js/exchange-rates/index.js.LICENSE.txt": "/public/v1/js/exchange-rates/index.js.LICENSE.txt",
"/public/v1/js/exchange-rates/rates.js": "/public/v1/js/exchange-rates/rates.js", "/public/v1/js/exchange-rates/rates.js": "/public/v1/js/exchange-rates/rates.js",
"/public/v1/js/exchange-rates/rates.js.LICENSE.txt": "/public/v1/js/exchange-rates/rates.js.LICENSE.txt",
"/public/v1/js/ff/accounts/create.js": "/public/v1/js/ff/accounts/create.js", "/public/v1/js/ff/accounts/create.js": "/public/v1/js/ff/accounts/create.js",
"/public/v1/js/ff/accounts/edit-reconciliation.js": "/public/v1/js/ff/accounts/edit-reconciliation.js", "/public/v1/js/ff/accounts/edit-reconciliation.js": "/public/v1/js/ff/accounts/edit-reconciliation.js",
"/public/v1/js/ff/accounts/edit.js": "/public/v1/js/ff/accounts/edit.js", "/public/v1/js/ff/accounts/edit.js": "/public/v1/js/ff/accounts/edit.js",
@@ -93,8 +90,6 @@
"/public/v1/js/ff/transactions/mass/edit-bulk.js": "/public/v1/js/ff/transactions/mass/edit-bulk.js", "/public/v1/js/ff/transactions/mass/edit-bulk.js": "/public/v1/js/ff/transactions/mass/edit-bulk.js",
"/public/v1/js/ff/transactions/mass/edit.js": "/public/v1/js/ff/transactions/mass/edit.js", "/public/v1/js/ff/transactions/mass/edit.js": "/public/v1/js/ff/transactions/mass/edit.js",
"/public/v1/js/ff/transactions/show.js": "/public/v1/js/ff/transactions/show.js", "/public/v1/js/ff/transactions/show.js": "/public/v1/js/ff/transactions/show.js",
"/public/v1/js/index.js": "/public/v1/js/index.js",
"/public/v1/js/index.js.LICENSE.txt": "/public/v1/js/index.js.LICENSE.txt",
"/public/v1/js/lib/Chart.bundle.min.js": "/public/v1/js/lib/Chart.bundle.min.js", "/public/v1/js/lib/Chart.bundle.min.js": "/public/v1/js/lib/Chart.bundle.min.js",
"/public/v1/js/lib/accounting.min.js": "/public/v1/js/lib/accounting.min.js", "/public/v1/js/lib/accounting.min.js": "/public/v1/js/lib/accounting.min.js",
"/public/v1/js/lib/bootstrap-multiselect.js": "/public/v1/js/lib/bootstrap-multiselect.js", "/public/v1/js/lib/bootstrap-multiselect.js": "/public/v1/js/lib/bootstrap-multiselect.js",
@@ -153,8 +148,6 @@
"/public/v1/js/lib/vue.js": "/public/v1/js/lib/vue.js", "/public/v1/js/lib/vue.js": "/public/v1/js/lib/vue.js",
"/public/v1/js/profile.js": "/public/v1/js/profile.js", "/public/v1/js/profile.js": "/public/v1/js/profile.js",
"/public/v1/js/profile.js.LICENSE.txt": "/public/v1/js/profile.js.LICENSE.txt", "/public/v1/js/profile.js.LICENSE.txt": "/public/v1/js/profile.js.LICENSE.txt",
"/public/v1/js/show.js": "/public/v1/js/show.js",
"/public/v1/js/show.js.LICENSE.txt": "/public/v1/js/show.js.LICENSE.txt",
"/public/v1/js/webhooks/create.js": "/public/v1/js/webhooks/create.js", "/public/v1/js/webhooks/create.js": "/public/v1/js/webhooks/create.js",
"/public/v1/js/webhooks/create.js.LICENSE.txt": "/public/v1/js/webhooks/create.js.LICENSE.txt", "/public/v1/js/webhooks/create.js.LICENSE.txt": "/public/v1/js/webhooks/create.js.LICENSE.txt",
"/public/v1/js/webhooks/edit.js": "/public/v1/js/webhooks/edit.js", "/public/v1/js/webhooks/edit.js": "/public/v1/js/webhooks/edit.js",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Reset webhook secret", "reset_webhook_secret": "Reset webhook secret",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Reiniciar el secret del webhook", "reset_webhook_secret": "Reiniciar el secret del webhook",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Restartovat tajn\u00fd kl\u00ed\u010d webhooku", "reset_webhook_secret": "Restartovat tajn\u00fd kl\u00ed\u010d webhooku",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Nulstil webhook-hemmelighed", "reset_webhook_secret": "Nulstil webhook-hemmelighed",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -130,9 +130,10 @@
"response": "Antwort", "response": "Antwort",
"visit_webhook_url": "Webhook-URL besuchen", "visit_webhook_url": "Webhook-URL besuchen",
"reset_webhook_secret": "Webhook Secret zur\u00fccksetzen", "reset_webhook_secret": "Webhook Secret zur\u00fccksetzen",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Wechselkurse",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III unterst\u00fctzt das Herunterladen und Verwenden von Wechselkursen. Lesen Sie mehr dar\u00fcber in <a href=\u201ehttps:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\u201c>der Dokumentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03bc\u03c5\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd webhook", "reset_webhook_secret": "\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03bc\u03c5\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd webhook",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL", "url": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Reset webhook secret", "reset_webhook_secret": "Reset webhook secret",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Reset webhook secret", "reset_webhook_secret": "Reset webhook secret",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between {from} and {to} (and the other way around)" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Restablecer secreto del webhook", "reset_webhook_secret": "Restablecer secreto del webhook",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Reset webhook secret", "reset_webhook_secret": "Reset webhook secret",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL-osoite", "url": "URL-osoite",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "R\u00e9initialiser le secret du webhook", "reset_webhook_secret": "R\u00e9initialiser le secret du webhook",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "Liens", "url": "Liens",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Webhook titok vissza\u00e1ll\u00edt\u00e1sa", "reset_webhook_secret": "Webhook titok vissza\u00e1ll\u00edt\u00e1sa",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Reset webhook secret", "reset_webhook_secret": "Reset webhook secret",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Reimposta il segreto del webhook", "reset_webhook_secret": "Reimposta il segreto del webhook",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Webhook\u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u30ea\u30bb\u30c3\u30c8", "reset_webhook_secret": "Webhook\u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u30ea\u30bb\u30c3\u30c8",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "\uc6f9\ud6c5 \uc2dc\ud06c\ub9bf \uc7ac\uc124\uc815", "reset_webhook_secret": "\uc6f9\ud6c5 \uc2dc\ud06c\ub9bf \uc7ac\uc124\uc815",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Tilbakestill Webhook n\u00f8kkel", "reset_webhook_secret": "Tilbakestill Webhook n\u00f8kkel",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "Nettadresse", "url": "Nettadresse",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Reset webhook-geheim", "reset_webhook_secret": "Reset webhook-geheim",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Tilbakestill Webhook hemmelegheit", "reset_webhook_secret": "Tilbakestill Webhook hemmelegheit",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "Nettadresse", "url": "Nettadresse",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Resetuj sekret webhooka", "reset_webhook_secret": "Resetuj sekret webhooka",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Redefinir chave do webhook", "reset_webhook_secret": "Redefinir chave do webhook",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Redefinir segredo webhook", "reset_webhook_secret": "Redefinir segredo webhook",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Resetare secret webhook", "reset_webhook_secret": "Resetare secret webhook",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "", "reset_webhook_secret": "",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "\u0421\u0441\u044b\u043b\u043a\u0430", "url": "\u0421\u0441\u044b\u043b\u043a\u0430",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Reset webhook secret", "reset_webhook_secret": "Reset webhook secret",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Ponastavi skrivno kodo webhooka", "reset_webhook_secret": "Ponastavi skrivno kodo webhooka",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Reset webhook secret", "reset_webhook_secret": "Reset webhook secret",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "L\u00e4nk", "url": "L\u00e4nk",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Reset webhook secret", "reset_webhook_secret": "Reset webhook secret",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "\u0412\u0456\u0434\u043d\u043e\u0432\u0438\u0442\u0438 \u0441\u0456\u043a\u0440\u0435\u0442 \u0432\u0435\u0431-\u0445\u0443\u043a\u0430", "reset_webhook_secret": "\u0412\u0456\u0434\u043d\u043e\u0432\u0438\u0442\u0438 \u0441\u0456\u043a\u0440\u0435\u0442 \u0432\u0435\u0431-\u0445\u0443\u043a\u0430",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL-\u0430\u0434\u0440\u0435\u0441\u0430", "url": "URL-\u0430\u0434\u0440\u0435\u0441\u0430",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "C\u00e0i l\u1ea1i kh\u00f3a webhook", "reset_webhook_secret": "C\u00e0i l\u1ea1i kh\u00f3a webhook",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "\u91cd\u7f6e webhook \u5bc6\u94a5", "reset_webhook_secret": "\u91cd\u7f6e webhook \u5bc6\u94a5",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "\u7f51\u5740", "url": "\u7f51\u5740",

View File

@@ -132,7 +132,8 @@
"reset_webhook_secret": "Reset webhook secret", "reset_webhook_secret": "Reset webhook secret",
"header_exchange_rates": "Exchange rates", "header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.", "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between :from and :to" "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates."
}, },
"form": { "form": {
"url": "URL", "url": "URL",

View File

@@ -91,7 +91,7 @@ return [
'notification_index' => 'Owner notifications', 'notification_index' => 'Owner notifications',
// exchange rates // exchange rates
'exchange_rates_index' => 'Exchange rates', 'exchange_rates_index' => 'Exchange rates',
'exchange_rates_rates' => 'Exchange rates between :from and :to (and the other way around)', 'exchange_rates_rates' => 'Exchange rates between :from and :to (and the other way around)',
]; ];

View File

@@ -1395,13 +1395,13 @@ return [
'discord_url_label' => 'Discord webhook URL', 'discord_url_label' => 'Discord webhook URL',
// exchange rates // exchange rates
'menu_exchange_rates_index' => 'Exchange rates', 'menu_exchange_rates_index' => 'Exchange rates',
'header_exchange_rates' => 'Exchange rates', 'header_exchange_rates' => 'Exchange rates',
'exchange_rates_intro' =>'Firefly III supports downloading and using exchange rates. Read more about this in <a href="https://docs.firefly-iii.org/LOL_NOT_FINISHED_YET_TODO">the documentation</a>.', 'exchange_rates_intro' => 'Firefly III supports downloading and using exchange rates. Read more about this in <a href="https://docs.firefly-iii.org/LOL_NOT_FINISHED_YET_TODO">the documentation</a>.',
'exchange_rates_from_to' => 'Between {from} and {to} (and the other way around)', 'exchange_rates_from_to' => 'Between {from} and {to} (and the other way around)',
'header_exchange_rates_rates' => 'Exchange rates', 'header_exchange_rates_rates' => 'Exchange rates',
'exchange_rates_intro_rates' => 'Firefly III bla bla bla exchange rates.', 'exchange_rates_intro_rates' => 'Firefly III bla bla bla exchange rates.',
'header_exchange_rates_table' => 'Table with exchange rates', 'header_exchange_rates_table' => 'Table with exchange rates',
// Financial administrations // Financial administrations
'administration_index' => 'Financial administration', 'administration_index' => 'Financial administration',

View File

@@ -113,8 +113,8 @@ return [
'tag' => 'Tag', 'tag' => 'Tag',
// exchange rates // exchange rates
'from_currency_to_currency' => '{from} &rarr; {to}', 'from_currency_to_currency' => '{from} &rarr; {to}',
'to_currency_from_currency' => '{to} &rarr; {from}', 'to_currency_from_currency' => '{to} &rarr; {from}',
'under' => 'Under', 'under' => 'Under',
'symbol' => 'Symbol', 'symbol' => 'Symbol',

View File

@@ -96,8 +96,8 @@ Route::group(
static function (): void { static function (): void {
Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
Route::get('{currency_code}', ['uses' => 'ShowController@show', 'as' => 'show']); Route::get('{currency_code}', ['uses' => 'ShowController@show', 'as' => 'show']);
// Route::post('', ['uses' => 'StoreController@store', 'as' => 'store']); // Route::post('', ['uses' => 'StoreController@store', 'as' => 'store']);
// //
// Route::put('{userGroup}', ['uses' => 'UpdateController@update', 'as' => 'update']); // Route::put('{userGroup}', ['uses' => 'UpdateController@update', 'as' => 'update']);
// Route::post('{userGroup}/use', ['uses' => 'UpdateController@useUserGroup', 'as' => 'use']); // Route::post('{userGroup}/use', ['uses' => 'UpdateController@useUserGroup', 'as' => 'use']);
// Route::put('{userGroup}/update-membership', ['uses' => 'UpdateController@updateMembership', 'as' => 'updateMembership']); // Route::put('{userGroup}/update-membership', ['uses' => 'UpdateController@updateMembership', 'as' => 'updateMembership']);
@@ -115,8 +115,8 @@ Route::group(
static function (): void { static function (): void {
Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
Route::get('{fromCurrencyCode}/{toCurrencyCode}', ['uses' => 'ShowController@show', 'as' => 'show']); Route::get('{fromCurrencyCode}/{toCurrencyCode}', ['uses' => 'ShowController@show', 'as' => 'show']);
// Route::post('', ['uses' => 'StoreController@store', 'as' => 'store']); // Route::post('', ['uses' => 'StoreController@store', 'as' => 'store']);
// //
// Route::put('{userGroup}', ['uses' => 'UpdateController@update', 'as' => 'update']); // Route::put('{userGroup}', ['uses' => 'UpdateController@update', 'as' => 'update']);
// Route::post('{userGroup}/use', ['uses' => 'UpdateController@useUserGroup', 'as' => 'use']); // Route::post('{userGroup}/use', ['uses' => 'UpdateController@useUserGroup', 'as' => 'use']);
// Route::put('{userGroup}/update-membership', ['uses' => 'UpdateController@updateMembership', 'as' => 'updateMembership']); // Route::put('{userGroup}/update-membership', ['uses' => 'UpdateController@updateMembership', 'as' => 'updateMembership']);
@@ -127,7 +127,7 @@ Route::group(
// V2 API route for Summary boxes // V2 API route for Summary boxes
// BASIC // BASIC
//Route::group( // Route::group(
// [ // [
// 'namespace' => 'FireflyIII\Api\V2\Controllers\Summary', // 'namespace' => 'FireflyIII\Api\V2\Controllers\Summary',
// 'prefix' => 'v2/summary', // 'prefix' => 'v2/summary',
@@ -136,11 +136,11 @@ Route::group(
// static function (): void { // static function (): void {
// // Route::get('basic', ['uses' => 'BasicController@basic', 'as' => 'basic']); // // Route::get('basic', ['uses' => 'BasicController@basic', 'as' => 'basic']);
// } // }
//); // );
//// V2 API route for all kinds of Transaction lists. // // V2 API route for all kinds of Transaction lists.
//// A lot of endpoints involve transactions. So any time Firefly III needs to list transactions // // A lot of endpoints involve transactions. So any time Firefly III needs to list transactions
//// it's coming from these endpoints. // // it's coming from these endpoints.
//Route::group( // Route::group(
// [ // [
// 'namespace' => 'FireflyIII\Api\V2\Controllers\Transaction\List', // 'namespace' => 'FireflyIII\Api\V2\Controllers\Transaction\List',
// 'prefix' => 'v2', // 'prefix' => 'v2',
@@ -154,12 +154,12 @@ Route::group(
// // note how the check is done on the user group, not the user itself. // // note how the check is done on the user group, not the user itself.
// // Route::get('accounts/{userGroupAccount}/transactions', ['uses' => 'AccountController@list', 'as' => 'accounts.transactions']); // // Route::get('accounts/{userGroupAccount}/transactions', ['uses' => 'AccountController@list', 'as' => 'accounts.transactions']);
// } // }
//); // );
// V2 API routes for auto complete // V2 API routes for auto complete
// //
//// V2 API route for net worth endpoint(s); // // V2 API route for net worth endpoint(s);
//Route::group( // Route::group(
// [ // [
// 'namespace' => 'FireflyIII\Api\V2\Controllers\Summary', // 'namespace' => 'FireflyIII\Api\V2\Controllers\Summary',
// 'prefix' => 'v2/net-worth', // 'prefix' => 'v2/net-worth',
@@ -168,24 +168,24 @@ Route::group(
// static function (): void { // static function (): void {
// // Route::get('', ['uses' => 'NetWorthController@get', 'as' => 'index']); // // Route::get('', ['uses' => 'NetWorthController@get', 'as' => 'index']);
// } // }
//); // );
// //
//// // V2 API route for accounts. // // // V2 API route for accounts.
//// Route::group( // // Route::group(
//// [ // // [
//// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Account', // // 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Account',
//// 'prefix' => 'v2/accounts', // // 'prefix' => 'v2/accounts',
//// 'as' => 'api.v2.accounts.', // // 'as' => 'api.v2.accounts.',
//// ], // // ],
//// static function (): void { // // static function (): void {
//// Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); // // Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
//// Route::get('{account}', ['uses' => 'ShowController@show', 'as' => 'show']); // // Route::get('{account}', ['uses' => 'ShowController@show', 'as' => 'show']);
//// Route::put('{account}', ['uses' => 'UpdateController@update', 'as' => 'update']); // // Route::put('{account}', ['uses' => 'UpdateController@update', 'as' => 'update']);
//// } // // }
//// ); // // );
// //
//// V2 API route for subscriptions. // // V2 API route for subscriptions.
//Route::group( // Route::group(
// [ // [
// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Bill', // 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Bill',
// 'prefix' => 'v2/subscriptions', // 'prefix' => 'v2/subscriptions',
@@ -197,10 +197,10 @@ Route::group(
// // Route::get('sum/paid', ['uses' => 'SumController@paid', 'as' => 'sum.paid']); // // Route::get('sum/paid', ['uses' => 'SumController@paid', 'as' => 'sum.paid']);
// // Route::get('sum/unpaid', ['uses' => 'SumController@unpaid', 'as' => 'sum.unpaid']); // // Route::get('sum/unpaid', ['uses' => 'SumController@unpaid', 'as' => 'sum.unpaid']);
// } // }
//); // );
// //
//// V2 API route for piggy banks. // // V2 API route for piggy banks.
//Route::group( // Route::group(
// [ // [
// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\PiggyBank', // 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\PiggyBank',
// 'prefix' => 'v2/piggy-banks', // 'prefix' => 'v2/piggy-banks',
@@ -209,10 +209,10 @@ Route::group(
// static function (): void { // static function (): void {
// // Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); // // Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
// } // }
//); // );
// //
//// V2 API route for transaction currencies // // V2 API route for transaction currencies
//Route::group( // Route::group(
// [ // [
// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Currency', // 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Currency',
// 'prefix' => 'v2/currencies', // 'prefix' => 'v2/currencies',
@@ -221,10 +221,10 @@ Route::group(
// static function (): void { // static function (): void {
// // Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); // // Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
// } // }
//); // );
// //
//// V2 API route for transactions // // V2 API route for transactions
//Route::group( // Route::group(
// [ // [
// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Transaction', // 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Transaction',
// 'prefix' => 'v2/transactions', // 'prefix' => 'v2/transactions',
@@ -235,9 +235,9 @@ Route::group(
// // Route::get('{userGroupTransaction}', ['uses' => 'ShowController@show', 'as' => 'show']); // // Route::get('{userGroupTransaction}', ['uses' => 'ShowController@show', 'as' => 'show']);
// // Route::put('{userGroupTransaction}', ['uses' => 'UpdateController@update', 'as' => 'update']); // // Route::put('{userGroupTransaction}', ['uses' => 'UpdateController@update', 'as' => 'update']);
// } // }
//); // );
//// infinite (transactions) list: // // infinite (transactions) list:
//Route::group( // Route::group(
// [ // [
// 'namespace' => 'FireflyIII\Api\V2\Controllers\Transaction\List', // 'namespace' => 'FireflyIII\Api\V2\Controllers\Transaction\List',
// 'prefix' => 'v2/infinite/transactions', // 'prefix' => 'v2/infinite/transactions',
@@ -246,10 +246,10 @@ Route::group(
// static function (): void { // static function (): void {
// // Route::get('', ['uses' => 'TransactionController@infiniteList', 'as' => 'list']); // // Route::get('', ['uses' => 'TransactionController@infiniteList', 'as' => 'list']);
// } // }
//); // );
// //
//// V2 API route for budgets and budget limits: // // V2 API route for budgets and budget limits:
//Route::group( // Route::group(
// [ // [
// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model', // 'namespace' => 'FireflyIII\Api\V2\Controllers\Model',
// 'prefix' => 'v2/budgets', // 'prefix' => 'v2/budgets',
@@ -264,10 +264,10 @@ Route::group(
// // Route::get('{budget}/budgeted', ['uses' => 'Budget\ShowController@budgeted', 'as' => 'budget.budgeted']); // // Route::get('{budget}/budgeted', ['uses' => 'Budget\ShowController@budgeted', 'as' => 'budget.budgeted']);
// // Route::get('{budget}/spent', ['uses' => 'Budget\ShowController@spent', 'as' => 'budget.spent']); // // Route::get('{budget}/spent', ['uses' => 'Budget\ShowController@spent', 'as' => 'budget.spent']);
// } // }
//); // );
// //
//// V2 API route for system // // V2 API route for system
//Route::group( // Route::group(
// [ // [
// 'namespace' => 'FireflyIII\Api\V2\Controllers\System', // 'namespace' => 'FireflyIII\Api\V2\Controllers\System',
// 'prefix' => 'v2', // 'prefix' => 'v2',
@@ -276,7 +276,7 @@ Route::group(
// static function (): void { // static function (): void {
// // Route::get('preferences/{preference}', ['uses' => 'PreferencesController@get', 'as' => 'preferences.get']); // // Route::get('preferences/{preference}', ['uses' => 'PreferencesController@get', 'as' => 'preferences.get']);
// } // }
//); // );
// //

View File

@@ -366,12 +366,12 @@ Route::group(
static function (): void { static function (): void {
Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
Route::get('{fromCurrencyCode}/{toCurrencyCode}', ['uses' => 'IndexController@rates', 'as' => 'rates']); Route::get('{fromCurrencyCode}/{toCurrencyCode}', ['uses' => 'IndexController@rates', 'as' => 'rates']);
// Route::get('create', ['uses' => 'CreateController@create', 'as' => 'create']); // Route::get('create', ['uses' => 'CreateController@create', 'as' => 'create']);
// Route::get('edit/{currency}', ['uses' => 'EditController@edit', 'as' => 'edit']); // Route::get('edit/{currency}', ['uses' => 'EditController@edit', 'as' => 'edit']);
// Route::get('delete/{currency}', ['uses' => 'DeleteController@delete', 'as' => 'delete']); // Route::get('delete/{currency}', ['uses' => 'DeleteController@delete', 'as' => 'delete']);
// Route::post('store', ['uses' => 'CreateController@store', 'as' => 'store']); // Route::post('store', ['uses' => 'CreateController@store', 'as' => 'store']);
// Route::post('update/{currency}', ['uses' => 'EditController@update', 'as' => 'update']); // Route::post('update/{currency}', ['uses' => 'EditController@update', 'as' => 'update']);
// Route::post('destroy/{currency}', ['uses' => 'DeleteController@destroy', 'as' => 'destroy']); // Route::post('destroy/{currency}', ['uses' => 'DeleteController@destroy', 'as' => 'destroy']);
} }
); );