mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-15 16:57:09 +00:00
Fix #9863
This commit is contained in:
@@ -47,16 +47,15 @@ class Preferences
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Preference::where('user_id', $user->id)
|
return Preference::where('user_id', $user->id)
|
||||||
->where('name', '!=', 'currencyPreference')
|
->where('name', '!=', 'currencyPreference')
|
||||||
->where(function (Builder $q) use ($user): void {
|
->where(function (Builder $q) use ($user): void {
|
||||||
$q->whereNull('user_group_id');
|
$q->whereNull('user_group_id');
|
||||||
$q->orWhere('user_group_id', $user->user_group_id);
|
$q->orWhere('user_group_id', $user->user_group_id);
|
||||||
})
|
})
|
||||||
->get()
|
->get();
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get(string $name, null|array|bool|int|string $default = null): ?Preference
|
public function get(string $name, null | array | bool | int | string $default = null): ?Preference
|
||||||
{
|
{
|
||||||
/** @var null|User $user */
|
/** @var null|User $user */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
@@ -70,22 +69,32 @@ class Preferences
|
|||||||
return $this->getForUser($user, $name, $default);
|
return $this->getForUser($user, $name, $default);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getForUser(User $user, string $name, null|array|bool|int|string $default = null): ?Preference
|
public function getForUser(User $user, string $name, null | array | bool | int | string $default = null): ?Preference
|
||||||
{
|
{
|
||||||
|
Log::debug(sprintf('getForUser(#%d, "%s")', $user->id, $name));
|
||||||
// don't care about user group ID, except for some specific preferences.
|
// don't care about user group ID, except for some specific preferences.
|
||||||
$userGroupId = $this->getUserGroupId($user, $name);
|
$userGroupId = $this->getUserGroupId($user, $name);
|
||||||
$preference = Preference::where('user_group_id', $userGroupId)->where('user_id', $user->id)->where('name', $name)->first(['id', 'user_id', 'name', 'data', 'updated_at', 'created_at']);
|
$query = Preference::where('user_id', $user->id)->where('name', $name);
|
||||||
|
if (null !== $userGroupId) {
|
||||||
|
Log::debug('Include user group ID in query');
|
||||||
|
$query->where('user_group_id', $userGroupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
$preference = $query->first(['id', 'user_id', 'user_group_id', 'name', 'data', 'updated_at', 'created_at']);
|
||||||
|
|
||||||
if (null !== $preference && null === $preference->data) {
|
if (null !== $preference && null === $preference->data) {
|
||||||
$preference->delete();
|
$preference->delete();
|
||||||
$preference = null;
|
$preference = null;
|
||||||
|
Log::debug('Removed empty preference.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null !== $preference) {
|
if (null !== $preference) {
|
||||||
|
Log::debug(sprintf('Found preference #%d for user #%d: %s', $preference->id, $user->id, $name));
|
||||||
return $preference;
|
return $preference;
|
||||||
}
|
}
|
||||||
// no preference found and default is null:
|
// no preference found and default is null:
|
||||||
if (null === $default) {
|
if (null === $default) {
|
||||||
|
Log::debug('Return NULL, create no preference.');
|
||||||
// return NULL
|
// return NULL
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -122,37 +131,42 @@ class Preferences
|
|||||||
Cache::put($key, '', 5);
|
Cache::put($key, '', 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setForUser(User $user, string $name, null|array|bool|int|string $value): Preference
|
public function setForUser(User $user, string $name, null | array | bool | int | string $value): Preference
|
||||||
{
|
{
|
||||||
$fullName = sprintf('preference%s%s', $user->id, $name);
|
$fullName = sprintf('preference%s%s', $user->id, $name);
|
||||||
$groupId = $this->getUserGroupId($user, $name);
|
$userGroupId = $this->getUserGroupId($user, $name);
|
||||||
$groupId = 0 === (int) $groupId ? null : (int) $groupId;
|
$userGroupId = 0 === (int) $userGroupId ? null : (int) $userGroupId;
|
||||||
|
|
||||||
Cache::forget($fullName);
|
Cache::forget($fullName);
|
||||||
|
|
||||||
/** @var null|Preference $pref */
|
$query = Preference::where('user_id', $user->id)->where('name', $name);
|
||||||
$pref = Preference::where('user_group_id', $groupId)->where('user_id', $user->id)->where('name', $name)->first(['id', 'name', 'data', 'updated_at', 'created_at']);
|
if (null !== $userGroupId) {
|
||||||
|
Log::debug('Include user group ID in query');
|
||||||
|
$query->where('user_group_id', $userGroupId);
|
||||||
|
}
|
||||||
|
|
||||||
if (null !== $pref && null === $value) {
|
$preference = $query->first(['id', 'user_id', 'user_group_id', 'name', 'data', 'updated_at', 'created_at']);
|
||||||
$pref->delete();
|
|
||||||
|
if (null !== $preference && null === $value) {
|
||||||
|
$preference->delete();
|
||||||
|
|
||||||
return new Preference();
|
return new Preference();
|
||||||
}
|
}
|
||||||
if (null === $value) {
|
if (null === $value) {
|
||||||
return new Preference();
|
return new Preference();
|
||||||
}
|
}
|
||||||
if (null === $pref) {
|
if (null === $preference) {
|
||||||
$pref = new Preference();
|
$preference = new Preference();
|
||||||
$pref->user_id = (int) $user->id;
|
$preference->user_id = (int) $user->id;
|
||||||
$pref->user_group_id = $groupId;
|
$preference->user_group_id = $userGroupId;
|
||||||
$pref->name = $name;
|
$preference->name = $name;
|
||||||
|
|
||||||
}
|
}
|
||||||
$pref->data = $value;
|
$preference->data = $value;
|
||||||
$pref->save();
|
$preference->save();
|
||||||
Cache::forever($fullName, $pref);
|
Cache::forever($fullName, $preference);
|
||||||
|
|
||||||
return $pref;
|
return $preference;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function beginsWith(User $user, string $search): Collection
|
public function beginsWith(User $user, string $search): Collection
|
||||||
@@ -174,13 +188,12 @@ class Preferences
|
|||||||
{
|
{
|
||||||
$result = [];
|
$result = [];
|
||||||
$preferences = Preference::where('user_id', $user->id)
|
$preferences = Preference::where('user_id', $user->id)
|
||||||
->where(function (Builder $q) use ($user): void {
|
->where(function (Builder $q) use ($user): void {
|
||||||
$q->whereNull('user_group_id');
|
$q->whereNull('user_group_id');
|
||||||
$q->orWhere('user_group_id', $user->user_group_id);
|
$q->orWhere('user_group_id', $user->user_group_id);
|
||||||
})
|
})
|
||||||
->whereIn('name', $list)
|
->whereIn('name', $list)
|
||||||
->get(['id', 'name', 'data'])
|
->get(['id', 'name', 'data']);
|
||||||
;
|
|
||||||
|
|
||||||
/** @var Preference $preference */
|
/** @var Preference $preference */
|
||||||
foreach ($preferences as $preference) {
|
foreach ($preferences as $preference) {
|
||||||
@@ -222,7 +235,7 @@ class Preferences
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getEncryptedForUser(User $user, string $name, null|array|bool|int|string $default = null): ?Preference
|
public function getEncryptedForUser(User $user, string $name, null | array | bool | int | string $default = null): ?Preference
|
||||||
{
|
{
|
||||||
$result = $this->getForUser($user, $name, $default);
|
$result = $this->getForUser($user, $name, $default);
|
||||||
if ('' === $result->data) {
|
if ('' === $result->data) {
|
||||||
@@ -247,7 +260,7 @@ class Preferences
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getFresh(string $name, null|array|bool|int|string $default = null): ?Preference
|
public function getFresh(string $name, null | array | bool | int | string $default = null): ?Preference
|
||||||
{
|
{
|
||||||
/** @var null|User $user */
|
/** @var null|User $user */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
@@ -285,7 +298,7 @@ class Preferences
|
|||||||
Session::forget('first');
|
Session::forget('first');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function set(string $name, null|array|bool|int|string $value): Preference
|
public function set(string $name, null | array | bool | int | string $value): Preference
|
||||||
{
|
{
|
||||||
/** @var null|User $user */
|
/** @var null|User $user */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
|
Reference in New Issue
Block a user