where('username', $username)->first(); return [ 'other_email' => $row?->other_email ?? '', 'phone' => $row?->phone ?? '', 'admin_note' => $row?->admin_note ?? '', 'avatar' => $row?->avatar ?? null, ]; } public function saveUserMeta(string $username, array $data): void { LdapUserMeta::query()->updateOrCreate( ['username' => $username], [ 'other_email' => $data['other_email'] ?? null, 'phone' => $data['phone'] ?? null, 'admin_note' => $data['admin_note'] ?? null, ] ); } public function saveUserSelfMeta(string $username, ?string $otherEmail, ?string $phone): void { $existing = LdapUserMeta::query()->where('username', $username)->first(); LdapUserMeta::query()->updateOrCreate( ['username' => $username], [ 'other_email' => $otherEmail, 'phone' => $phone, 'admin_note' => $existing?->admin_note, ] ); } public function saveAvatar(string $username, ?string $avatarBase64): void { LdapUserMeta::query()->updateOrCreate( ['username' => $username], ['avatar' => $avatarBase64], ); } public function getGroupMeta(string $groupKey): array { $row = LdapGroupMeta::query()->where('group_key', $groupKey)->first(); return [ 'admin_note' => $row?->admin_note ?? '', ]; } public function saveGroupMeta(string $groupKey, string $groupName, ?string $adminNote): void { LdapGroupMeta::query()->updateOrCreate( ['group_key' => $groupKey], [ 'group_name' => $groupName, 'admin_note' => $adminNote, ] ); } /** * @param list> $users * @return list> */ public function enrichUsers(array $users): array { if ($users === []) { return []; } $usernames = array_column($users, 'username'); $metaByUser = LdapUserMeta::query() ->whereIn('username', $usernames) ->get() ->keyBy('username'); foreach ($users as &$user) { $meta = $metaByUser->get($user['username']); $user['other_email'] = $meta?->other_email ?? ''; $user['phone'] = $meta?->phone ?? ''; $user['admin_note'] = $meta?->admin_note ?? ''; } return $users; } /** * @param list> $groups * @return list> */ public function enrichGroups(array $groups): array { if ($groups === []) { return []; } $keys = array_column($groups, 'route_key'); $metaByKey = LdapGroupMeta::query() ->whereIn('group_key', $keys) ->get() ->keyBy('group_key'); foreach ($groups as &$group) { $meta = $metaByKey->get($group['route_key']); $group['admin_note'] = $meta?->admin_note ?? ''; } return $groups; } /** * @param list> $users * @return list> */ /** * @return list */ public function findUsernamesByMetaSearch(string $search): array { $needle = '%'.addcslashes(trim($search), '%_\\').'%'; return LdapUserMeta::query() ->where(function ($query) use ($needle) { $query->where('other_email', 'like', $needle) ->orWhere('phone', 'like', $needle) ->orWhere('admin_note', 'like', $needle); }) ->pluck('username') ->all(); } public function filterUsersByExtendedSearch(array $users, string $search): array { $needle = mb_strtolower(trim($search)); if ($needle === '') { return $users; } return array_values(array_filter($users, function (array $user) use ($needle) { foreach (['other_email', 'phone', 'admin_note'] as $field) { if (str_contains(mb_strtolower((string) ($user[$field] ?? '')), $needle)) { return true; } } return false; })); } }