Merge branch 'release/5.4.1' into main

This commit is contained in:
James Cole 2020-09-21 19:52:26 +02:00
commit 229479b7ed
32 changed files with 83 additions and 67 deletions

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Http\Controllers\Account;
use Carbon\Carbon;
use Exception;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\Account;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
@ -32,7 +33,7 @@ use Illuminate\Contracts\View\Factory;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\View\View;
use Exception;
use Log;
/**
*
@ -41,8 +42,8 @@ use Exception;
class IndexController extends Controller
{
use BasicDataSupport;
/** @var AccountRepositoryInterface The account repository */
private $repository;
private AccountRepositoryInterface $repository;
/**
* IndexController constructor.
@ -122,32 +123,31 @@ class IndexController extends Controller
* @param Request $request
* @param string $objectType
*
* @throws Exception
* @return Factory|View
* @throws Exception
*/
public function index(Request $request, string $objectType)
{
// reset account order:
Log::debug(sprintf('Now at %s', __METHOD__));
$objectType = $objectType ?? 'asset';
$subTitle = (string) trans(sprintf('firefly.%s_accounts', $objectType));
$subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $objectType));
$types = config(sprintf('firefly.accountTypesByIdentifier.%s', $objectType));
if (1 === random_int(0, 20)) {
Log::debug('Will reset order.');
$this->repository->resetAccountOrder($types);
}
$collection = $this->repository->getActiveAccountsByType($types);
$total = $collection->count();
$page = 0 === (int) $request->get('page') ? 1 : (int) $request->get('page');
$pageSize = (int) app('preferences')->get('listPageSize', 50)->data;
$accounts = $collection->slice(($page - 1) * $pageSize, $pageSize);
$inactiveCount = $this->repository->getInactiveAccountsByType($types)->count();
Log::debug(sprintf('Count of collection: %d, count of accounts: %d', $total, $accounts->count()));
unset($collection);
/** @var Carbon $start */
$start = clone session('start', Carbon::now()->startOfMonth());
@ -174,9 +174,14 @@ class IndexController extends Controller
}
);
// make paginator:
Log::debug(sprintf('Count of accounts before LAP: %d', $accounts->count()));
/** @var LengthAwarePaginator $accounts */
$accounts = new LengthAwarePaginator($accounts, $total, $pageSize, $page);
$accounts->setPath(route('accounts.index', [$objectType]));
Log::debug(sprintf('Count of accounts after LAP (1): %d', $accounts->count()));
Log::debug(sprintf('Count of accounts after LAP (2): %d', $accounts->getCollection()->count()));
return view('accounts.index', compact('objectType', 'inactiveCount', 'subTitleIcon', 'subTitle', 'page', 'accounts'));
}

View File

@ -127,14 +127,6 @@ class LoginController extends Controller
*/
public function showLoginForm(Request $request)
{
$loginProvider = config('firefly.login_provider');
$authGuard = config('firefly.authentication_guard');
$route = request()->route()->getName();
if (('eloquent' !== $loginProvider || 'web' !== $authGuard) && 'logout' !== $route) {
throw new FireflyException('Using external identity provider. Cannot continue.');
}
Log::channel('audit')->info('Show login form (1.1).');
$count = DB::table('users')->count();

View File

@ -142,6 +142,10 @@ class DebugController extends Controller
$bcscale = bcscale();
$layout = env('FIREFLY_III_LAYOUT');
// expected + found DB version:
$expectedDBversion = config('firefly.db_version');
$foundDBversion = \FireflyConfig::get('db_version',1)->data;
// some new vars.
$telemetry = true === config('firefly.send_telemetry') && true === config('firefly.feature_flags.telemetry');
$defaultLanguage = (string) config('firefly.default_language');
@ -190,6 +194,8 @@ class DebugController extends Controller
compact(
'phpVersion',
'localeAttempts',
'expectedDBversion',
'foundDBversion',
'appEnv',
'appDebug',
'logChannel',

View File

@ -82,6 +82,7 @@ class ProfileController extends Controller
$loginProvider = config('firefly.login_provider');
$authGuard = config('firefly.authentication_guard');
$this->externalIdentity = 'eloquent' !== $loginProvider || 'web' !== $authGuard;
Log::debug(sprintf('ProfileController::__construct(). Login provider is "%s", authentication guard is "%s"',$loginProvider, $authGuard));
$this->middleware(IsDemoUser::class)->except(['index']);
}
@ -345,7 +346,6 @@ class ProfileController extends Controller
$userId = $user->id;
$enabled2FA = null !== $user->mfa_secret;
$mfaBackupCount = count(app('preferences')->get('mfa_recovery', [])->data);
$this->createOAuthKeys();
if (0 === $count) {

View File

@ -2,6 +2,17 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
## [5.4.1 (API 1.4.0)] - 2020-09-21
As usual, a same-day release fixing some exotic bugs.
### Added
- DB version info.
### Fixed
- [Issue 3809](https://github.com/firefly-iii/firefly-iii/issues/3809) Issue with LDAP logins fixed.
- [Issue 3816](https://github.com/firefly-iii/firefly-iii/issues/3816) Issue with account lists being empty.
## [5.4.0 (API 1.4.0)] - 2020-09-21
Some warnings before you install this version:
@ -9,7 +20,7 @@ Some warnings before you install this version:
- ⚠️ Some changes in this release may be backwards incompatible (see below).
- ⚠️ Invalid triggers in a non-strict rule will cause Firefly III to select ALL transactions.
- ⚠️ The `export` volume is no longer used (Docker).
- ⚠️ The `upload` volume is now located at `/var/www/public/storage/upload` (Docker).
- ⚠️ The `upload` volume is now located at `/var/www/html/storage/upload` (Docker).
Several alpha and beta releases preceded this release.

View File

@ -90,7 +90,7 @@ return [
'providers' => [
'users' => [
'driver' => envNonEmpty('LOGIN_PROVIDER', 'eloquent'), //'adldap',
'driver' => envNonEmpty('LOGIN_PROVIDER', 'eloquent'),
'model' => FireflyIII\User::class,
],
'remote_user_provider' => [

View File

@ -95,7 +95,7 @@ return [
],
//'encryption' => null === env('USE_ENCRYPTION') || true === env('USE_ENCRYPTION'),
'version' => '5.4.0',
'version' => '5.4.1',
'api_version' => '1.4.0',
'db_version' => 15,
'maxUploadSize' => 1073741824, // 1 GB

View File

@ -908,7 +908,7 @@ return [
'options' => 'Opties',
// budgets:
'budget_limit_not_in_range' => 'This amount applies from :start to :end:',
'budget_limit_not_in_range' => 'Dit bedrag is van toepassing op :start tot :end:',
'total_available_budget' => 'Totaal beschikbare budget (tussen :start en :end)',
'total_available_budget_in_currency' => 'Totaal beschikbare budget in :currency',
'see_below' => 'zie onder',

View File

@ -33,7 +33,7 @@
{% endif %}
</p>
{% endif %}
{% if account.transactions.count > 0 and account.accountType.type == 'Asset account' %}
{% if account.transactions.count() > 0 and account.accountType.type == 'Asset account' %}
<p class="text-success">
{{ trans_choice('firefly.save_transactions_by_moving', account.transactions|length ) }}
</p>

View File

@ -5,7 +5,7 @@
{% endblock %}
{% block content %}
{% if accounts.count > 0 %}
{% if accounts.count() > 0 %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box" id="account-index-{{ objectType }}">
@ -65,7 +65,7 @@
</div>
</div>
{% endif %}
{% if accounts.count == 0 and page == 1 %}
{% if accounts.count() == 0 and page == 1 %}
{% include 'partials.empty' with {objectType: objectType, type: 'accounts',route: route('accounts.create', [objectType])} %}
{% endif %}
{% endblock %}

View File

@ -7,7 +7,7 @@
{% block content %}
<div class="row">
<div class="{% if attachments.count == 0 %}col-lg-12 col-md-12 col-sm-12 col-xs-12{% else %}col-lg-8 col-md-6 col-sm-12 col-xs-12{% endif %}">
<div class="{% if attachments.count() == 0 %}col-lg-12 col-md-12 col-sm-12 col-xs-12{% else %}col-lg-8 col-md-6 col-sm-12 col-xs-12{% endif %}">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
@ -32,7 +32,7 @@
</div>
</div>
</div>
{% if attachments.count > 0 %}
{% if attachments.count() > 0 %}
<div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">
@ -115,7 +115,7 @@
</div>
</div>
{% endif %}
{% if account.notes.count == 1 %}
{% if account.notes.count() == 1 %}
<div class="col-lg-6">
<div class="box">
<div class="box-header with-border">

View File

@ -24,8 +24,8 @@
</p>
<p>
{% if bill.transactionjournals.count > 0 %}
{{ Lang.choice('form.bill_keep_transactions', bill.transactionjournals.count,{count: bill.transactionjournals.count}) }}
{% if bill.transactionjournals.count() > 0 %}
{{ Lang.choice('form.bill_keep_transactions', bill.transactionjournals.count(),{count: bill.transactionjournals.count()}) }}
{% endif %}
</p>
</div>

View File

@ -17,8 +17,8 @@
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div>
<div class="box-body">
{% if rules.count > 0 %}
{{ ExpandedForm.text('name',null, {helpText: trans_choice('firefly.bill_edit_rules', rules.count)}) }}
{% if rules.count() > 0 %}
{{ ExpandedForm.text('name',null, {helpText: trans_choice('firefly.bill_edit_rules', rules.count())}) }}
{% else %}
{{ ExpandedForm.text('name') }}
{% endif %}

View File

@ -85,7 +85,7 @@
<h3 class="box-title">{{ 'bill_related_rules'|_ }}</h3>
</div>
<div class="box-body">
{% if rules.count > 0 %}
{% if rules.count() > 0 %}
<ul>
{% for rule in rules %}
<li><a href="{{ route('rules.edit', [rule.id]) }}">{{ rule.title }}</a>
@ -116,7 +116,7 @@
{% endif %}
{% if attachments.count > 0 %}
{% if attachments.count() > 0 %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'attachments'|_ }}</h3>

View File

@ -25,8 +25,8 @@
</p>
<p>
{% if budget.transactionjournals.count > 0 %}
{{ Lang.choice('form.budget_keep_transactions', budget.transactionjournals.count, {count: budget.transactionjournals.count }) }}
{% if budget.transactionjournals.count() > 0 %}
{{ Lang.choice('form.budget_keep_transactions', budget.transactionjournals.count(), {count: budget.transactionjournals.count() }) }}
{% endif %}
</p>

View File

@ -197,7 +197,7 @@
{% endif %}
</div>
{% endif %}
{% if budgets|length == 0 and inactive.count == 0 %}
{% if budgets|length == 0 and inactive.count() == 0 %}
{% include 'partials.empty' with {objectType: 'default', type: 'budgets',route: route('budgets.create')} %}
{# make FF ignore demo for now. #}
{% set shownDemo = true %}
@ -243,7 +243,7 @@
<i class="fa fa-fw fa-calendar-plus-o" title="{{ 'auto_budget_rollover_icon'|_ }}"></i>
{% endif %}
{% endif %}
{% if budget.attachments.count > 0 %}
{% if budget.attachments.count() > 0 %}
<i class="fa fa-paperclip"></i>
{% endif %}
</td>
@ -284,7 +284,7 @@
style="display:none;"></span>
{% endfor %}
{% endif %}
{% if budget.budgeted|length < currencies.count %}
{% if budget.budgeted|length < currencies.count() %}
<a href="#" class="btn btn-light btn-xs create_bl" data-id="{{ budget.id }}">
<i class="fa fa-plus-circle"></i>
</a>
@ -394,7 +394,7 @@
</div>
</div>
</div>
{% if paginator.count > 0 and inactive.count > 0 %}
{% if paginator.count() > 0 and inactive.count() > 0 %}
<div class="col-lg-3 col-md-4 col-sm-12 col-xs-12">
<div class="box" id="createBudgetBox">
<div class="box-header with-border">

View File

@ -6,7 +6,7 @@
{% block content %}
<div class="row">
<div class="{% if attachments.count == 0 %}col-lg-12 col-md-12 col-sm-12 col-xs-12{% else %}col-lg-8 col-md-6 col-sm-12 col-xs-12{% endif %}">
<div class="{% if attachments.count() == 0 %}col-lg-12 col-md-12 col-sm-12 col-xs-12{% else %}col-lg-8 col-md-6 col-sm-12 col-xs-12{% endif %}">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
@ -38,7 +38,7 @@
{% endif %}
</div>
</div>
{% if attachments.count > 0 %}
{% if attachments.count() > 0 %}
<div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">

View File

@ -24,8 +24,8 @@
</p>
<p>
{% if category.transactionjournals.count > 0 %}
{{ Lang.choice('form.category_keep_transactions', category.transactionjournals.count, {count: category.transactionjournals.count }) }}
{% if category.transactionjournals.count() > 0 %}
{{ Lang.choice('form.category_keep_transactions', category.transactionjournals.count(), {count: category.transactionjournals.count() }) }}
{% endif %}
</p>
</div>

View File

@ -5,7 +5,7 @@
{% endblock %}
{% block content %}
{% if categories.count > 0 %}
{% if categories.count() > 0 %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">

View File

@ -8,7 +8,7 @@
<div class="row">
{% if Route.getCurrentRoute.getName == 'categories.show' %}
{# both charts #}
<div class="{% if attachments.count == 0 %}col-lg-6 col-md-12 col-sm-12 col-xs-12{% else %}col-lg-4 col-md-12 col-sm-12 col-xs-12{% endif %}">
<div class="{% if attachments.count() == 0 %}col-lg-6 col-md-12 col-sm-12 col-xs-12{% else %}col-lg-4 col-md-12 col-sm-12 col-xs-12{% endif %}">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
@ -20,7 +20,7 @@
</div>
</div>
</div>
<div class="{% if attachments.count == 0 %}col-lg-6 col-md-12 col-sm-12 col-xs-12{% else %}col-lg-4 col-md-12 col-sm-12 col-xs-12{% endif %}">
<div class="{% if attachments.count() == 0 %}col-lg-6 col-md-12 col-sm-12 col-xs-12{% else %}col-lg-4 col-md-12 col-sm-12 col-xs-12{% endif %}">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
@ -35,7 +35,7 @@
{% endif %}
{% if Route.getCurrentRoute.getName == 'categories.show.all' %}
{# all chart #}
<div class="{% if attachments.count == 0 %}col-lg-12 col-md-12 col-sm-12 col-xs-12{% else %}col-lg-8 col-md-12 col-sm-12 col-xs-12{% endif %}">
<div class="{% if attachments.count() == 0 %}col-lg-12 col-md-12 col-sm-12 col-xs-12{% else %}col-lg-8 col-md-12 col-sm-12 col-xs-12{% endif %}">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
@ -48,7 +48,7 @@
</div>
</div>
{% endif %}
{% if attachments.count > 0 %}
{% if attachments.count() > 0 %}
<div class="col-lg-4 col-md-12 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">

View File

@ -38,6 +38,7 @@ Debug information generated at {{ now }} for Firefly III version **{{ FF_VERSION
| BCscale | {{ bcscale }} |
| DB drivers | {{ drivers }} |
| Current driver | {{ currentDriver }} |
| DB version | {{ foundDBversion }} (exp. {{ expectedDBversion}}) |
| Login provider | {{ loginProvider }} |
| Trusted proxies (.env) | {{ trustedProxies }} |

View File

@ -36,7 +36,7 @@
{% if account.location %}
<i class="fa fa-fw fa-map-marker"></i>
{% endif %}
{% if account.attachments.count > 0 %}
{% if account.attachments.count() > 0 %}
<i class="fa fa-fw fa-paperclip"></i>
{% endif %}
</td>

View File

@ -38,7 +38,7 @@
{% endif %}
<a href="{{ route('bills.show',entry.id) }}" title="{{ entry.name }}">{{ entry.name }}</a>
{# count attachments #}
{% if entry.attachments.count > 0 %}
{% if entry.attachments.count() > 0 %}
<i class="fa fa-paperclip"></i>
{% endif %}

View File

@ -25,7 +25,7 @@
</td>
<td data-value="{{ category.name }}">
<a href="{{ route('categories.show', category.id) }}" title="{{ category.name }}">{{ category.name }}</a>
{% if category.attachments.count > 0 %}
{% if category.attachments.count() > 0 %}
<i class="fa fa-fw fa-paperclip"></i>
{% endif %}
</td>

View File

@ -41,7 +41,7 @@
</td>
<td>
<a href="{{ route('piggy-banks.show', piggy.id) }}" title="{{ piggy.account_name }}">{{ piggy.name }}</a>
{% if piggy.attachments.count > 0 %}
{% if piggy.attachments.count() > 0 %}
<i class="fa fa-fw fa-paperclip"></i>
{% endif %}

View File

@ -117,7 +117,7 @@
</div>
{% endif %}
{% if attachments.count > 0 %}
{% if attachments.count() > 0 %}
<div class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
<div class="box">
<div class="box-header with-border">

View File

@ -55,7 +55,7 @@
<em>{{ ruleGroup.description }}</em>
</p>
{% if ruleGroup.rules.count > 0 %}
{% if ruleGroup.rules.count() > 0 %}
<table class="table table-hover table-striped group-rules">
<thead>
<tr>
@ -120,7 +120,7 @@
<small><br />{% if rule.strict %}<span class="text-danger">{{ 'rule_is_strict'|_ }}</span>{% else %}<span class="text-success">{{ 'rule_is_not_strict'|_ }}</span>{% endif %}</small>
</td>
<td class="hidden-xs">
{% if rule.ruleTriggers.count > 0 %}
{% if rule.ruleTriggers.count() > 0 %}
<ul class="small" data-id="{{ rule.id }}">
{% for trigger in rule.ruleTriggers %}
{% if trigger.trigger_type != "user_action" %}
@ -141,7 +141,7 @@
{% endif %}
</td>
<td class="hidden-xs">
{% if rule.ruleActions.count > 0 %}
{% if rule.ruleActions.count() > 0 %}
<ul class="small" data-id="{{ rule.id }}">
{% for action in rule.ruleActions %}
<li

View File

@ -1,8 +1,8 @@
<p class="search_count">
{% if hasPages %}
{{ trans('firefly.search_found_more_transactions', {count: groups.perPage, time: searchTime}) }}
{{ trans('firefly.search_found_more_transactions', {count: groups.count(), time: searchTime}) }}
{% else %}
{{ trans_choice('firefly.search_found_transactions', groups.count, {time: searchTime}) }}
{{ trans_choice('firefly.search_found_transactions', groups.perPage(), {time: searchTime}) }}
{% endif %}
</p>

View File

@ -24,8 +24,8 @@
</p>
<p>
{% if tag.transactionjournals.count > 0 %}
{{ Lang.choice('form.tag_keep_transactions', tag.transactionjournals.count, {count: tag.transactionjournals.count}) }}
{% if tag.transactionjournals.count() > 0 %}
{{ Lang.choice('form.tag_keep_transactions', tag.transactionjournals.count(), {count: tag.transactionjournals.count()}) }}
{% endif %}
</p>
</div>

View File

@ -37,7 +37,7 @@
style="font-weight: normal;font-size:0.9em;"
title="{{ tagInfo.created_at.formatLocalized(monthAndDayFormat) }}"
href="{{ route('tags.show',tagInfo.id) }}">{% if tagInfo.location %}<i class="fa fa-fw fa-map-marker"></i>{% endif %}<i class="fa fa-fw fa-tag"></i>{{ tagInfo.tag }}{% if tagInfo.attachments.count > 0 %}<i class="fa fa-fw fa-paperclip"></i>{% endif %}</a></div>
href="{{ route('tags.show',tagInfo.id) }}">{% if tagInfo.location %}<i class="fa fa-fw fa-map-marker"></i>{% endif %}<i class="fa fa-fw fa-tag"></i>{{ tagInfo.tag }}{% if tagInfo.attachments.count() > 0 %}<i class="fa fa-fw fa-paperclip"></i>{% endif %}</a></div>
{% endfor %}
</div>

View File

@ -203,7 +203,7 @@
</div>
</div>
</div>
{% if attachments.count > 0 %}
{% if attachments.count() > 0 %}
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
<div class="box">

View File

@ -5203,13 +5203,14 @@ postcss-selector-parser@^3.0.0:
uniq "^1.0.1"
postcss-selector-parser@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c"
integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==
version "6.0.3"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.3.tgz#766d77728728817cc140fa1ac6da5e77f9fada98"
integrity sha512-0ClFaY4X1ra21LRqbW6y3rUbWcxnSVkDFG57R7Nxus9J9myPFlv+jYDMohzpkBx0RrjjiqjtycpchQ+PLGmZ9w==
dependencies:
cssesc "^3.0.0"
indexes-of "^1.0.1"
uniq "^1.0.1"
util-deprecate "^1.0.2"
postcss-svgo@^4.0.2:
version "4.0.2"
@ -6485,7 +6486,7 @@ use@^3.1.0:
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=