mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2024-12-24 08:00:12 -06:00
Fix various sonatype issues.
This commit is contained in:
parent
65764199fe
commit
8f98be32f9
@ -74,32 +74,45 @@ class MoveTransactionsRequest extends FormRequest
|
||||
// validate start before end only if both are there.
|
||||
$data = $validator->getData();
|
||||
if (array_key_exists('original_account', $data) && array_key_exists('destination_account', $data)) {
|
||||
$repository = app(AccountRepositoryInterface::class);
|
||||
$repository->setUser(auth()->user());
|
||||
$original = $repository->find((int) $data['original_account']);
|
||||
$destination = $repository->find((int) $data['destination_account']);
|
||||
if ($original->accountType->type !== $destination->accountType->type) {
|
||||
$validator->errors()->add('title', (string) trans('validation.same_account_type'));
|
||||
|
||||
return;
|
||||
}
|
||||
// get currency pref:
|
||||
$originalCurrency = $repository->getAccountCurrency($original);
|
||||
$destinationCurrency = $repository->getAccountCurrency($destination);
|
||||
if (null === $originalCurrency xor null === $destinationCurrency) {
|
||||
$validator->errors()->add('title', (string) trans('validation.same_account_currency'));
|
||||
|
||||
return;
|
||||
}
|
||||
if (null === $originalCurrency && null === $destinationCurrency) {
|
||||
// this is OK
|
||||
return;
|
||||
}
|
||||
if ($originalCurrency->code !== $destinationCurrency->code) {
|
||||
$validator->errors()->add('title', (string) trans('validation.same_account_currency'));
|
||||
}
|
||||
$this->validateMove($validator);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Validator $validator
|
||||
* @return void
|
||||
*/
|
||||
private function validateMove(Validator $validator): void {
|
||||
$data = $validator->getData();
|
||||
$repository = app(AccountRepositoryInterface::class);
|
||||
$repository->setUser(auth()->user());
|
||||
$original = $repository->find((int) $data['original_account']);
|
||||
$destination = $repository->find((int) $data['destination_account']);
|
||||
|
||||
// not the same type:
|
||||
if ($original->accountType->type !== $destination->accountType->type) {
|
||||
$validator->errors()->add('title', (string) trans('validation.same_account_type'));
|
||||
|
||||
return;
|
||||
}
|
||||
// get currency pref:
|
||||
$originalCurrency = $repository->getAccountCurrency($original);
|
||||
$destinationCurrency = $repository->getAccountCurrency($destination);
|
||||
|
||||
// check different scenario's.
|
||||
if (null === $originalCurrency xor null === $destinationCurrency) {
|
||||
$validator->errors()->add('title', (string) trans('validation.same_account_currency'));
|
||||
|
||||
return;
|
||||
}
|
||||
if (null === $originalCurrency && null === $destinationCurrency) {
|
||||
// this is OK
|
||||
return;
|
||||
}
|
||||
if ($originalCurrency->code !== $destinationCurrency->code) {
|
||||
$validator->errors()->add('title', (string) trans('validation.same_account_currency'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -215,56 +215,50 @@ class CurrencyController extends Controller
|
||||
public function disableCurrency(Request $request): JsonResponse
|
||||
{
|
||||
$currencyId = (int) $request->get('id');
|
||||
if ($currencyId > 0) {
|
||||
// valid currency?
|
||||
$currency = $this->repository->find($currencyId);
|
||||
if (null !== $currency) {
|
||||
app('preferences')->mark();
|
||||
$currency = $this->repository->find($currencyId);
|
||||
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
if (!$this->userRepository->hasRole($user, 'owner')) {
|
||||
|
||||
$request->session()->flash('error', (string) trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))]));
|
||||
Log::channel('audit')->info(sprintf('Tried to disable currency %s but is not site owner.', $currency->code));
|
||||
return response()->json([]);
|
||||
|
||||
}
|
||||
|
||||
if ($this->repository->currencyInUse($currency)) {
|
||||
|
||||
$location = $this->repository->currencyInUseAt($currency);
|
||||
$message = (string) trans(sprintf('firefly.cannot_disable_currency_%s', $location), ['name' => e($currency->name)]);
|
||||
|
||||
$request->session()->flash('error', $message);
|
||||
Log::channel('audit')->info(sprintf('Tried to disable currency %s but is in use.', $currency->code));
|
||||
return response()->json([]);
|
||||
}
|
||||
|
||||
$this->repository->disable($currency);
|
||||
Log::channel('audit')->info(sprintf('Disabled currency %s.', $currency->code));
|
||||
// if no currencies are enabled, enable the first one in the DB (usually the EUR)
|
||||
if (0 === $this->repository->get()->count()) {
|
||||
/** @var TransactionCurrency $first */
|
||||
$first = $this->repository->getAll()->first();
|
||||
if (null === $first) {
|
||||
throw new FireflyException('No currencies found.');
|
||||
}
|
||||
Log::channel('audit')->info(sprintf('Auto-enabled currency %s.', $first->code));
|
||||
$this->repository->enable($first);
|
||||
app('preferences')->set('currencyPreference', $first->code);
|
||||
app('preferences')->mark();
|
||||
}
|
||||
|
||||
if ('EUR' === $currency->code) {
|
||||
session()->flash('warning', (string) trans('firefly.disable_EUR_side_effects'));
|
||||
}
|
||||
|
||||
session()->flash('success', (string) trans('firefly.currency_is_now_disabled', ['name' => $currency->name]));
|
||||
}
|
||||
// valid currency?
|
||||
if (null === $currency) {
|
||||
return response()->json([]);
|
||||
}
|
||||
|
||||
return response()->json([]);
|
||||
app('preferences')->mark();
|
||||
|
||||
// user must be "owner"
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
if (!$this->userRepository->hasRole($user, 'owner')) {
|
||||
|
||||
$request->session()->flash('error', (string) trans('firefly.ask_site_owner', ['owner' => e(config('firefly.site_owner'))]));
|
||||
Log::channel('audit')->info(sprintf('Tried to disable currency %s but is not site owner.', $currency->code));
|
||||
return response()->json([]);
|
||||
|
||||
}
|
||||
|
||||
// currency cannot be in use.
|
||||
if ($this->repository->currencyInUse($currency)) {
|
||||
|
||||
$location = $this->repository->currencyInUseAt($currency);
|
||||
$message = (string) trans(sprintf('firefly.cannot_disable_currency_%s', $location), ['name' => e($currency->name)]);
|
||||
|
||||
$request->session()->flash('error', $message);
|
||||
Log::channel('audit')->info(sprintf('Tried to disable currency %s but is in use.', $currency->code));
|
||||
return response()->json([]);
|
||||
}
|
||||
|
||||
// currency disabled!
|
||||
$this->repository->disable($currency);
|
||||
Log::channel('audit')->info(sprintf('Disabled currency %s.', $currency->code));
|
||||
|
||||
$this->repository->ensureMinimalEnabledCurrencies();
|
||||
|
||||
// extra warning
|
||||
if ('EUR' === $currency->code) {
|
||||
session()->flash('warning', (string) trans('firefly.disable_EUR_side_effects'));
|
||||
}
|
||||
|
||||
session()->flash('success', (string) trans('firefly.currency_is_now_disabled', ['name' => $currency->name]));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -39,6 +39,7 @@ use FireflyIII\Services\Internal\Destroy\CurrencyDestroyService;
|
||||
use FireflyIII\Services\Internal\Update\CurrencyUpdateService;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Support\Collection;
|
||||
use JsonException;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
@ -200,6 +201,25 @@ class CurrencyRepository implements CurrencyRepositoryInterface
|
||||
$currency->save();
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function ensureMinimalEnabledCurrencies(): void
|
||||
{
|
||||
// if no currencies are enabled, enable the first one in the DB (usually the EUR)
|
||||
if (0 === $this->get()->count()) {
|
||||
/** @var TransactionCurrency $first */
|
||||
$first = $this->getAll()->first();
|
||||
if (null === $first) {
|
||||
throw new FireflyException('No currencies found. You broke Firefly III');
|
||||
}
|
||||
Log::channel('audit')->info(sprintf('Auto-enabled currency %s.', $first->code));
|
||||
$this->enable($first);
|
||||
app('preferences')->set('currencyPreference', $first->code);
|
||||
app('preferences')->mark();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find by currency code, return NULL if unfound.
|
||||
* Used in Import Currency!
|
||||
@ -274,7 +294,7 @@ class CurrencyRepository implements CurrencyRepositoryInterface
|
||||
*
|
||||
* @return TransactionCurrency
|
||||
* @throws FireflyException
|
||||
* @throws \JsonException
|
||||
* @throws JsonException
|
||||
*/
|
||||
public function findCurrency(?int $currencyId, ?string $currencyCode): TransactionCurrency
|
||||
{
|
||||
|
@ -35,7 +35,6 @@ use Illuminate\Support\Collection;
|
||||
*/
|
||||
interface CurrencyRepositoryInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* @param TransactionCurrency $currency
|
||||
*
|
||||
@ -80,6 +79,11 @@ interface CurrencyRepositoryInterface
|
||||
*/
|
||||
public function enable(TransactionCurrency $currency): void;
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function ensureMinimalEnabledCurrencies(): void;
|
||||
|
||||
/**
|
||||
* Find by ID, return NULL if not found.
|
||||
*
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="{{ trans('config.html_language') }}">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="robots" content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir">
|
||||
@ -18,7 +18,7 @@
|
||||
<body class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-10 col-lg-offset-1 col-md-12 col-sm-12 col-xs-12">
|
||||
<h1><a href="{{ route('index') }}"><b>Firefly</b>III</a></h1>
|
||||
<h1><a href="{{ route('index') }}"><strong>Firefly</strong>III</a></h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
<html>
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ trans('config.html_language') }}">
|
||||
<head>
|
||||
<title>{{ trans('firefly.debug_page') }}</title>
|
||||
</head>
|
||||
|
@ -1,8 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ trans('config.html_language') }}">
|
||||
<head>
|
||||
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
|
||||
|
||||
<title>Message</title>
|
||||
</head>
|
||||
<body>
|
||||
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="{{ trans('config.html_language') }}">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="robots" content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir">
|
||||
@ -29,7 +29,7 @@
|
||||
<body class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-10 col-lg-offset-1 col-md-12 col-sm-12 col-xs-12">
|
||||
<h1><s><b>Firefly</b>III</s> 404 Not Found :(</h1>
|
||||
<h1><s><strong>Firefly</strong>III</s> 404 Not Found :(</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="{{ trans('config.html_language') }}">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="robots" content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir">
|
||||
@ -29,7 +29,7 @@
|
||||
<body class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-10 col-lg-offset-1 col-md-12 col-sm-12 col-xs-12">
|
||||
<h1><a href="{{ route('index') }}"><b>Firefly</b>III</a></h1>
|
||||
<h1><a href="{{ route('index') }}"><strong>Firefly</strong>III</a></h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="{{ trans('config.html_language') }}">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="robots" content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir">
|
||||
@ -25,7 +25,7 @@
|
||||
<body class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-10 col-lg-offset-1 col-md-12 col-sm-12 col-xs-12">
|
||||
<h1><a href="{{ route('index') }}"><b>Firefly</b>III</a></h1>
|
||||
<h1><a href="{{ route('index') }}"><strong>Firefly</strong>III</a></h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="{{ trans('config.html_language') }}">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="robots" content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir">
|
||||
@ -29,7 +29,7 @@
|
||||
<body class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-10 col-lg-offset-1 col-md-12 col-sm-12 col-xs-12">
|
||||
<h1><a href="{{ route('index') }}"><b>Firefly</b>III</a></h1>
|
||||
<h1><a href="{{ route('index') }}"><strong>Firefly</strong>III</a></h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="{{ trans('config.html_language') }}">
|
||||
<head>
|
||||
<base href="{{ route('index') }}/">
|
||||
<meta charset="utf-8">
|
||||
|
@ -62,7 +62,7 @@
|
||||
{# mini logo for sidebar mini 50x50 pixels #}
|
||||
<span class="logo-mini">FF</span>
|
||||
{# logo for regular state and mobile devices #}
|
||||
<span class="logo-lg"><b>Firefly</b>III</span>
|
||||
<span class="logo-lg"><strong>Firefly</strong>III</span>
|
||||
</a>
|
||||
|
||||
<nav class="navbar navbar-static-top" role="navigation">
|
||||
|
@ -36,7 +36,7 @@
|
||||
<body class="login-page">
|
||||
<div class="login-box">
|
||||
<div class="login-logo">
|
||||
<a href="{{ route('index') }}"><b>Firefly</b>III</a>
|
||||
<a href="{{ route('index') }}"><strong>Firefly</strong>III</a>
|
||||
</div>
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
|
@ -46,7 +46,7 @@
|
||||
<body class="login-page">
|
||||
<div class="login-box">
|
||||
<div class="login-logo">
|
||||
<a href="{{ route('index') }}"><b>Firefly</b>III</a>
|
||||
<a href="{{ route('index') }}"><strong>Firefly</strong>III</a>
|
||||
</div>
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
|
@ -29,7 +29,7 @@
|
||||
<body class="login-page">
|
||||
<div class="login-box">
|
||||
<div class="login-logo">
|
||||
<b>Firefly</b>III<br />
|
||||
<strong>Firefly</strong>III<br />
|
||||
<span style="font-family: monospace;font-size:16pt;">installation and upgrade</span>
|
||||
</div>
|
||||
{% block content %}{% endblock %}
|
||||
|
Loading…
Reference in New Issue
Block a user