diff --git a/src/Controllers/HomeController.cs b/src/Controllers/HomeController.cs index 4578bfa..4cab327 100644 --- a/src/Controllers/HomeController.cs +++ b/src/Controllers/HomeController.cs @@ -75,7 +75,14 @@ public class HomeController : Controller [Authorize(Roles = "CanManageUsers")] [HttpGet("Users")] - public async Task UsersAsync([FromQuery] int page = 1, [FromQuery] int pageSize = 50) + public async Task UsersAsync( + [FromQuery] int page = 1, + [FromQuery] int pageSize = 50, + [FromQuery] string? username = null, + [FromQuery] string? title = null, + [FromQuery] string? name = null, + [FromQuery] string? surname = null, + [FromQuery] string? workplace = null) { page = Math.Max(1, page); pageSize = Math.Clamp(pageSize, 10, 100); @@ -83,6 +90,29 @@ public class HomeController : Controller // Fetch all users with jpegPhoto (but not userPassword) IEnumerable allUsers = await _ldap.ListUsersAsync([.. _ldap.UsersAttributes.Where(attr => attr != "userPassword")]); List usersList = allUsers.ToList(); + + // Apply filters + if (!string.IsNullOrWhiteSpace(username)) + { + usersList = usersList.Where(u => u.Uid?.Contains(username, StringComparison.OrdinalIgnoreCase) == true).ToList(); + } + if (!string.IsNullOrWhiteSpace(title)) + { + usersList = usersList.Where(u => u.Title?.Contains(title, StringComparison.OrdinalIgnoreCase) == true).ToList(); + } + if (!string.IsNullOrWhiteSpace(name)) + { + usersList = usersList.Where(u => u.Cn?.Contains(name, StringComparison.OrdinalIgnoreCase) == true).ToList(); + } + if (!string.IsNullOrWhiteSpace(surname)) + { + usersList = usersList.Where(u => u.Sn?.Contains(surname, StringComparison.OrdinalIgnoreCase) == true).ToList(); + } + if (!string.IsNullOrWhiteSpace(workplace)) + { + usersList = usersList.Where(u => u.Description?.Workplace?.Contains(workplace, StringComparison.OrdinalIgnoreCase) == true).ToList(); + } + int totalUsers = usersList.Count; List paginatedUsers = usersList diff --git a/src/Views/Home/Users.cshtml b/src/Views/Home/Users.cshtml index b41b72f..e888447 100644 --- a/src/Views/Home/Users.cshtml +++ b/src/Views/Home/Users.cshtml @@ -19,7 +19,7 @@ -
+
@Model.TotalUsers @T["users"] @T["total"] @if (Model.TotalPages > 1) { @@ -28,8 +28,40 @@
- -
+ @* Filter Section *@ +
+
+
@T["Filter Users"]
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ + + +
@@ -42,7 +74,7 @@ - + @{ foreach (UserTableViewModel userTableViewModel in Model.UserTableViewModels) { @@ -97,64 +129,224 @@ @* Pagination Controls *@ - @if (Model.TotalPages > 1) - { - + +
@T["Action"]