mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-08-29 09:16:15 +00:00
Fix #3974
This commit is contained in:
@@ -186,7 +186,6 @@ class EditController extends Controller
|
||||
$this->repository->update($account, $data);
|
||||
|
||||
$request->session()->flash('success', (string) trans('firefly.updated_account', ['name' => $account->name]));
|
||||
app('preferences')->mark();
|
||||
|
||||
// store new attachment(s):
|
||||
$files = $request->hasFile('attachments') ? $request->file('attachments') : null;
|
||||
@@ -209,6 +208,7 @@ class EditController extends Controller
|
||||
|
||||
$redirect = redirect(route('accounts.edit', [$account->id]))->withInput(['return_to_edit' => 1]);
|
||||
}
|
||||
app('preferences')->mark();
|
||||
|
||||
return $redirect;
|
||||
}
|
||||
|
@@ -119,7 +119,7 @@ class HomeController extends Controller
|
||||
}
|
||||
$subTitle = (string) trans('firefly.welcome_back');
|
||||
$transactions = [];
|
||||
$frontPage = app('preferences')->get('frontPageAccounts', $repository->getAccountsByType([AccountType::ASSET])->pluck('id')->toArray());
|
||||
$frontPage = app('preferences')->getFresh('frontPageAccounts', $repository->getAccountsByType([AccountType::ASSET])->pluck('id')->toArray());
|
||||
/** @var Carbon $start */
|
||||
$start = session('start', Carbon::now()->startOfMonth());
|
||||
/** @var Carbon $end */
|
||||
@@ -128,6 +128,8 @@ class HomeController extends Controller
|
||||
$accounts = $repository->getAccountsById($frontPage->data);
|
||||
$today = today(config('app.timezone'));
|
||||
|
||||
Log::debug('Frontpage accounts are ', $frontPage->data);
|
||||
|
||||
/** @var BillRepositoryInterface $billRepository */
|
||||
$billRepository = app(BillRepositoryInterface::class);
|
||||
$billCount = $billRepository->getBills()->count();
|
||||
|
@@ -196,7 +196,9 @@ class AccountUpdateService
|
||||
*/
|
||||
private function updatePreferences(Account $account, array $data): void
|
||||
{
|
||||
Log::debug(sprintf('Now in updatePreferences(#%d)', $account->id));
|
||||
if (array_key_exists('active', $data) && (false === $data['active'] || 0 === $data['active'])) {
|
||||
Log::debug('Account was marked as inactive.');
|
||||
$preference = app('preferences')->getForUser($account->user, 'frontpageAccounts');
|
||||
if (null !== $preference) {
|
||||
$removeAccountId = (int)$account->id;
|
||||
@@ -210,8 +212,13 @@ class AccountUpdateService
|
||||
);
|
||||
Log::debug('Left with accounts', array_values($filtered));
|
||||
app('preferences')->setForUser($account->user, 'frontpageAccounts', array_values($filtered));
|
||||
app('preferences')->forget($account->user, 'frontpageAccounts');
|
||||
return;
|
||||
}
|
||||
Log::debug("Found no frontpageAccounts preference, do nothing.");
|
||||
return;
|
||||
}
|
||||
Log::debug('Account was not marked as inactive, do nothing.');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -76,10 +76,6 @@ class Preferences
|
||||
*/
|
||||
public function findByName(string $name): Collection
|
||||
{
|
||||
if ('testing' === config('app.env')) {
|
||||
Log::warning(sprintf('%s should NOT be called in the TEST environment!', __METHOD__));
|
||||
}
|
||||
|
||||
return Preference::where('name', $name)->get();
|
||||
}
|
||||
|
||||
@@ -91,9 +87,6 @@ class Preferences
|
||||
*/
|
||||
public function get(string $name, $default = null): ?Preference
|
||||
{
|
||||
if ('testing' === config('app.env')) {
|
||||
Log::warning(sprintf('%s("%s") should NOT be called in the TEST environment!', __METHOD__, $name));
|
||||
}
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
if (null === $user) {
|
||||
@@ -106,6 +99,26 @@ class Preferences
|
||||
return $this->getForUser($user, $name, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @param mixed $default
|
||||
*
|
||||
* @return \FireflyIII\Models\Preference|null
|
||||
*/
|
||||
public function getFresh(string $name, $default = null): ?Preference
|
||||
{
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
if (null === $user) {
|
||||
$preference = new Preference;
|
||||
$preference->data = $default;
|
||||
|
||||
return $preference;
|
||||
}
|
||||
|
||||
return $this->getFreshForUser($user, $name, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \FireflyIII\User $user
|
||||
* @param array $list
|
||||
@@ -114,9 +127,6 @@ class Preferences
|
||||
*/
|
||||
public function getArrayForUser(User $user, array $list): array
|
||||
{
|
||||
if ('testing' === config('app.env')) {
|
||||
Log::warning(sprintf('%s should NOT be called in the TEST environment!', __METHOD__));
|
||||
}
|
||||
$result = [];
|
||||
$preferences = Preference::where('user_id', $user->id)->whereIn('name', $list)->get(['id', 'name', 'data']);
|
||||
/** @var Preference $preference */
|
||||
@@ -133,9 +143,9 @@ class Preferences
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
* @param string $name
|
||||
* @param null|string $default
|
||||
* @param User $user
|
||||
* @param string $name
|
||||
* @param null|string $default
|
||||
*
|
||||
* @return \FireflyIII\Models\Preference|null
|
||||
*/
|
||||
@@ -143,9 +153,46 @@ class Preferences
|
||||
{
|
||||
$fullName = sprintf('preference%s%s', $user->id, $name);
|
||||
if (Cache::has($fullName)) {
|
||||
Log::debug(sprintf('Retrieved preference "%s" from cache ("%s").', $name, $fullName));
|
||||
|
||||
return Cache::get($fullName);
|
||||
}
|
||||
Log::debug(sprintf('Retrieved preference "%s" FRESH.', $name));
|
||||
$preference = Preference::where('user_id', $user->id)->where('name', $name)->first(['id', 'name', 'data', 'updated_at', 'created_at']);
|
||||
if (null !== $preference && null === $preference->data) {
|
||||
try {
|
||||
$preference->delete();
|
||||
} catch (Exception $e) {
|
||||
Log::debug(sprintf('Could not delete preference #%d: %s', $preference->id, $e->getMessage()));
|
||||
}
|
||||
$preference = null;
|
||||
}
|
||||
|
||||
if (null !== $preference) {
|
||||
Cache::forever($fullName, $preference);
|
||||
|
||||
return $preference;
|
||||
}
|
||||
// no preference found and default is null:
|
||||
if (null === $default) {
|
||||
// return NULL
|
||||
return null;
|
||||
}
|
||||
|
||||
return $this->setForUser($user, $name, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
* @param string $name
|
||||
* @param null|string $default
|
||||
*
|
||||
* @return \FireflyIII\Models\Preference|null
|
||||
*/
|
||||
public function getFreshForUser(User $user, string $name, $default = null): ?Preference
|
||||
{
|
||||
$fullName = sprintf('preference%s%s', $user->id, $name);
|
||||
Log::debug(sprintf('Retrieved preference "%s" FRESH.', $name));
|
||||
$preference = Preference::where('user_id', $user->id)->where('name', $name)->first(['id', 'name', 'data', 'updated_at', 'created_at']);
|
||||
if (null !== $preference && null === $preference->data) {
|
||||
try {
|
||||
@@ -175,9 +222,6 @@ class Preferences
|
||||
*/
|
||||
public function lastActivity(): string
|
||||
{
|
||||
if ('testing' === config('app.env')) {
|
||||
Log::warning(sprintf('%s should NOT be called in the TEST environment!', __METHOD__));
|
||||
}
|
||||
$lastActivity = microtime();
|
||||
$preference = $this->get('lastActivity', microtime());
|
||||
|
||||
@@ -221,6 +265,18 @@ class Preferences
|
||||
return $this->setForUser(auth()->user(), $name, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
* @param string $name
|
||||
*/
|
||||
public function forget(User $user, string $name): void
|
||||
{
|
||||
$key = sprintf('preference%s%s', $user->id, $name);
|
||||
Log::debug(sprintf('Going to forget key "%s"', $key));
|
||||
Cache::forget($key);
|
||||
Cache::put($key, '', 5);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \FireflyIII\User $user
|
||||
* @param string $name
|
||||
@@ -251,7 +307,7 @@ class Preferences
|
||||
if (null !== $pref) {
|
||||
$pref->data = $value;
|
||||
$pref->save();
|
||||
|
||||
Log::debug(sprintf('Saved new value under existing preference object. "%s"', $fullName));
|
||||
Cache::forever($fullName, $pref);
|
||||
|
||||
return $pref;
|
||||
@@ -263,7 +319,7 @@ class Preferences
|
||||
$pref->user()->associate($user);
|
||||
|
||||
$pref->save();
|
||||
|
||||
Log::debug(sprintf('Saved new value under new preference object. "%s"', $fullName));
|
||||
Cache::forever($fullName, $pref);
|
||||
|
||||
return $pref;
|
||||
|
Reference in New Issue
Block a user