This commit is contained in:
James Cole
2020-10-24 07:18:37 +02:00
parent a526559a0e
commit 048e5eeb31
4 changed files with 85 additions and 20 deletions

View File

@@ -186,7 +186,6 @@ class EditController extends Controller
$this->repository->update($account, $data); $this->repository->update($account, $data);
$request->session()->flash('success', (string) trans('firefly.updated_account', ['name' => $account->name])); $request->session()->flash('success', (string) trans('firefly.updated_account', ['name' => $account->name]));
app('preferences')->mark();
// store new attachment(s): // store new attachment(s):
$files = $request->hasFile('attachments') ? $request->file('attachments') : null; $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]); $redirect = redirect(route('accounts.edit', [$account->id]))->withInput(['return_to_edit' => 1]);
} }
app('preferences')->mark();
return $redirect; return $redirect;
} }

View File

@@ -119,7 +119,7 @@ class HomeController extends Controller
} }
$subTitle = (string) trans('firefly.welcome_back'); $subTitle = (string) trans('firefly.welcome_back');
$transactions = []; $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 */ /** @var Carbon $start */
$start = session('start', Carbon::now()->startOfMonth()); $start = session('start', Carbon::now()->startOfMonth());
/** @var Carbon $end */ /** @var Carbon $end */
@@ -128,6 +128,8 @@ class HomeController extends Controller
$accounts = $repository->getAccountsById($frontPage->data); $accounts = $repository->getAccountsById($frontPage->data);
$today = today(config('app.timezone')); $today = today(config('app.timezone'));
Log::debug('Frontpage accounts are ', $frontPage->data);
/** @var BillRepositoryInterface $billRepository */ /** @var BillRepositoryInterface $billRepository */
$billRepository = app(BillRepositoryInterface::class); $billRepository = app(BillRepositoryInterface::class);
$billCount = $billRepository->getBills()->count(); $billCount = $billRepository->getBills()->count();

View File

@@ -196,7 +196,9 @@ class AccountUpdateService
*/ */
private function updatePreferences(Account $account, array $data): void 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'])) { 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'); $preference = app('preferences')->getForUser($account->user, 'frontpageAccounts');
if (null !== $preference) { if (null !== $preference) {
$removeAccountId = (int)$account->id; $removeAccountId = (int)$account->id;
@@ -210,8 +212,13 @@ class AccountUpdateService
); );
Log::debug('Left with accounts', array_values($filtered)); Log::debug('Left with accounts', array_values($filtered));
app('preferences')->setForUser($account->user, 'frontpageAccounts', 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.');
} }
/** /**

View File

@@ -76,10 +76,6 @@ class Preferences
*/ */
public function findByName(string $name): Collection 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(); return Preference::where('name', $name)->get();
} }
@@ -91,9 +87,6 @@ class Preferences
*/ */
public function get(string $name, $default = null): ?Preference 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 */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
if (null === $user) { if (null === $user) {
@@ -106,6 +99,26 @@ class Preferences
return $this->getForUser($user, $name, $default); 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 \FireflyIII\User $user
* @param array $list * @param array $list
@@ -114,9 +127,6 @@ class Preferences
*/ */
public function getArrayForUser(User $user, array $list): array 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 = []; $result = [];
$preferences = Preference::where('user_id', $user->id)->whereIn('name', $list)->get(['id', 'name', 'data']); $preferences = Preference::where('user_id', $user->id)->whereIn('name', $list)->get(['id', 'name', 'data']);
/** @var Preference $preference */ /** @var Preference $preference */
@@ -133,9 +143,9 @@ class Preferences
} }
/** /**
* @param User $user * @param User $user
* @param string $name * @param string $name
* @param null|string $default * @param null|string $default
* *
* @return \FireflyIII\Models\Preference|null * @return \FireflyIII\Models\Preference|null
*/ */
@@ -143,9 +153,46 @@ class Preferences
{ {
$fullName = sprintf('preference%s%s', $user->id, $name); $fullName = sprintf('preference%s%s', $user->id, $name);
if (Cache::has($fullName)) { if (Cache::has($fullName)) {
Log::debug(sprintf('Retrieved preference "%s" from cache ("%s").', $name, $fullName));
return Cache::get($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']); $preference = Preference::where('user_id', $user->id)->where('name', $name)->first(['id', 'name', 'data', 'updated_at', 'created_at']);
if (null !== $preference && null === $preference->data) { if (null !== $preference && null === $preference->data) {
try { try {
@@ -175,9 +222,6 @@ class Preferences
*/ */
public function lastActivity(): string public function lastActivity(): string
{ {
if ('testing' === config('app.env')) {
Log::warning(sprintf('%s should NOT be called in the TEST environment!', __METHOD__));
}
$lastActivity = microtime(); $lastActivity = microtime();
$preference = $this->get('lastActivity', microtime()); $preference = $this->get('lastActivity', microtime());
@@ -221,6 +265,18 @@ class Preferences
return $this->setForUser(auth()->user(), $name, $value); 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 \FireflyIII\User $user
* @param string $name * @param string $name
@@ -251,7 +307,7 @@ class Preferences
if (null !== $pref) { if (null !== $pref) {
$pref->data = $value; $pref->data = $value;
$pref->save(); $pref->save();
Log::debug(sprintf('Saved new value under existing preference object. "%s"', $fullName));
Cache::forever($fullName, $pref); Cache::forever($fullName, $pref);
return $pref; return $pref;
@@ -263,7 +319,7 @@ class Preferences
$pref->user()->associate($user); $pref->user()->associate($user);
$pref->save(); $pref->save();
Log::debug(sprintf('Saved new value under new preference object. "%s"', $fullName));
Cache::forever($fullName, $pref); Cache::forever($fullName, $pref);
return $pref; return $pref;