This commit is contained in:
James Cole
2025-02-20 07:28:24 +01:00
parent adbf6defe5
commit f7f317a3b2

View File

@@ -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();