diff --git a/app/Support/Preferences.php b/app/Support/Preferences.php index 99427071e5..6da4d74d00 100644 --- a/app/Support/Preferences.php +++ b/app/Support/Preferences.php @@ -47,16 +47,15 @@ class Preferences } return Preference::where('user_id', $user->id) - ->where('name', '!=', 'currencyPreference') - ->where(function (Builder $q) use ($user): void { - $q->whereNull('user_group_id'); - $q->orWhere('user_group_id', $user->user_group_id); - }) - ->get() - ; + ->where('name', '!=', 'currencyPreference') + ->where(function (Builder $q) use ($user): void { + $q->whereNull('user_group_id'); + $q->orWhere('user_group_id', $user->user_group_id); + }) + ->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 */ $user = auth()->user(); @@ -70,22 +69,32 @@ class Preferences 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. $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) { $preference->delete(); $preference = null; + Log::debug('Removed empty preference.'); } if (null !== $preference) { + Log::debug(sprintf('Found preference #%d for user #%d: %s', $preference->id, $user->id, $name)); return $preference; } // no preference found and default is null: if (null === $default) { + Log::debug('Return NULL, create no preference.'); // return NULL return null; } @@ -122,37 +131,42 @@ class Preferences 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); - $groupId = $this->getUserGroupId($user, $name); - $groupId = 0 === (int) $groupId ? null : (int) $groupId; + $fullName = sprintf('preference%s%s', $user->id, $name); + $userGroupId = $this->getUserGroupId($user, $name); + $userGroupId = 0 === (int) $userGroupId ? null : (int) $userGroupId; Cache::forget($fullName); - /** @var null|Preference $pref */ - $pref = Preference::where('user_group_id', $groupId)->where('user_id', $user->id)->where('name', $name)->first(['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); + } - if (null !== $pref && null === $value) { - $pref->delete(); + $preference = $query->first(['id', 'user_id', 'user_group_id', 'name', 'data', 'updated_at', 'created_at']); + + if (null !== $preference && null === $value) { + $preference->delete(); return new Preference(); } if (null === $value) { return new Preference(); } - if (null === $pref) { - $pref = new Preference(); - $pref->user_id = (int) $user->id; - $pref->user_group_id = $groupId; - $pref->name = $name; + if (null === $preference) { + $preference = new Preference(); + $preference->user_id = (int) $user->id; + $preference->user_group_id = $userGroupId; + $preference->name = $name; } - $pref->data = $value; - $pref->save(); - Cache::forever($fullName, $pref); + $preference->data = $value; + $preference->save(); + Cache::forever($fullName, $preference); - return $pref; + return $preference; } public function beginsWith(User $user, string $search): Collection @@ -174,13 +188,12 @@ class Preferences { $result = []; $preferences = Preference::where('user_id', $user->id) - ->where(function (Builder $q) use ($user): void { - $q->whereNull('user_group_id'); - $q->orWhere('user_group_id', $user->user_group_id); - }) - ->whereIn('name', $list) - ->get(['id', 'name', 'data']) - ; + ->where(function (Builder $q) use ($user): void { + $q->whereNull('user_group_id'); + $q->orWhere('user_group_id', $user->user_group_id); + }) + ->whereIn('name', $list) + ->get(['id', 'name', 'data']); /** @var Preference $preference */ foreach ($preferences as $preference) { @@ -222,7 +235,7 @@ class Preferences 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); if ('' === $result->data) { @@ -247,7 +260,7 @@ class Preferences 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 */ $user = auth()->user(); @@ -285,7 +298,7 @@ class Preferences 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 */ $user = auth()->user();