diff --git a/Project/adminBlazor/adminBlazor/Factories/UserFactory.cs b/Project/adminBlazor/adminBlazor/Factories/UserFactory.cs index 3d53a3f..e435957 100644 --- a/Project/adminBlazor/adminBlazor/Factories/UserFactory.cs +++ b/Project/adminBlazor/adminBlazor/Factories/UserFactory.cs @@ -9,7 +9,7 @@ namespace adminBlazor.Factories { public static class UserFactory { - public static UserModel ToModel(User user/* byte[] imageContent*/) + public static UserModel ToModel(User user, byte[] imageContent) { return new UserModel { @@ -18,11 +18,12 @@ namespace adminBlazor.Factories Surname = user.Surname, Nickname = user.Nickname, ExtraTime = user.ExtraTime, - Image = user.Image, + //Image = imageContent, Group = user.Group, Password = user.Password, Email = user.Email, - Roles = user.Roles + Roles = user.Roles, + ImageBase64 = string.IsNullOrWhiteSpace(user.ImageBase64) ? Convert.ToBase64String(imageContent) : user.ImageBase64 }; } @@ -35,11 +36,12 @@ namespace adminBlazor.Factories Surname = user.Surname, Nickname = user.Nickname, ExtraTime = user.ExtraTime, - Image = user.Image, + //Image = user.Image, Group = user.Group, Password = user.Password, Email = user.Email, - Roles = user.Roles + Roles = user.Roles, + ImageBase64 = Convert.ToBase64String(user.Image) }; } public static void Update(User item, UserModel user) @@ -57,8 +59,6 @@ namespace adminBlazor.Factories item.ExtraTime = user.ExtraTime; - if (!string.IsNullOrEmpty(user.Image)) - item.Image = user.Image; if (user.Group != 0) item.Group = user.Group; @@ -69,6 +69,9 @@ namespace adminBlazor.Factories if (!string.IsNullOrEmpty(user.Email)) item.Email = user.Email; + if (user.ImageBase64 != null && user.Image != null) + item.ImageBase64 = Convert.ToBase64String(user.Image); + if (user.Roles != null) { diff --git a/Project/adminBlazor/adminBlazor/Models/User.cs b/Project/adminBlazor/adminBlazor/Models/User.cs index d4ac880..a3f052f 100644 --- a/Project/adminBlazor/adminBlazor/Models/User.cs +++ b/Project/adminBlazor/adminBlazor/Models/User.cs @@ -10,9 +10,9 @@ namespace adminBlazor.Models public string Name { get; set; } public string Surname { get; set; } public string Nickname { get; set; } - public string Image { get; set; } public bool ExtraTime { get; set; } public int Group { get; set; } public List Roles { get; set; } + public string? ImageBase64 { get; set; } } } diff --git a/Project/adminBlazor/adminBlazor/Models/UserModel.cs b/Project/adminBlazor/adminBlazor/Models/UserModel.cs index f050650..f152038 100644 --- a/Project/adminBlazor/adminBlazor/Models/UserModel.cs +++ b/Project/adminBlazor/adminBlazor/Models/UserModel.cs @@ -25,8 +25,8 @@ namespace adminBlazor.Models [StringLength(50, ErrorMessage = "Name length can't be more than 50.")] public string Nickname { get; set; } - [StringLength(50, ErrorMessage = "Name length can't be more than 50.")] - public string Image { get; set; } + + public byte[] Image { get; set; } public bool ExtraTime { get; set; } @@ -34,6 +34,7 @@ namespace adminBlazor.Models public int Group { get; set; } public List Roles { get; set; } + public string ImageBase64 { get; set; } } } diff --git a/Project/adminBlazor/adminBlazor/Pages/Add.razor b/Project/adminBlazor/adminBlazor/Pages/Add.razor index eec9a79..e2f5ea6 100644 --- a/Project/adminBlazor/adminBlazor/Pages/Add.razor +++ b/Project/adminBlazor/adminBlazor/Pages/Add.razor @@ -75,7 +75,7 @@

diff --git a/Project/adminBlazor/adminBlazor/Pages/Add.razor.cs b/Project/adminBlazor/adminBlazor/Pages/Add.razor.cs index 61b0159..8012534 100644 --- a/Project/adminBlazor/adminBlazor/Pages/Add.razor.cs +++ b/Project/adminBlazor/adminBlazor/Pages/Add.razor.cs @@ -41,7 +41,7 @@ namespace adminBlazor.Pages NavigationManager.NavigateTo("list"); } - /* + private async Task LoadImage(InputFileChangeEventArgs e) { // Set the content of the image to the model @@ -51,7 +51,7 @@ namespace adminBlazor.Pages user.Image = memoryStream.ToArray(); } } - */ + private bool isStudentChecked = false; private bool disableOtherCheckboxes = false; diff --git a/Project/adminBlazor/adminBlazor/Pages/EditUser.razor b/Project/adminBlazor/adminBlazor/Pages/EditUser.razor index ab8b6e8..8c47877 100644 --- a/Project/adminBlazor/adminBlazor/Pages/EditUser.razor +++ b/Project/adminBlazor/adminBlazor/Pages/EditUser.razor @@ -71,9 +71,15 @@

+

+ +

@@ -31,20 +31,20 @@ namespace adminBlazor.Pages /// private List roles = new List() { "admin", "teacher", "student" }; - - /// - /// The current item model - /// - private Models.User user = new Models.User() + private UserModel user = new UserModel() { Roles = new List() }; + /// + /// The current item model + /// + private async void HandleValidSubmit() { - UserModel item = UserFactory.ToModel(user); + - await DataService.Update(Id, item); + await DataService.Update(Id, user); NavigationManager.NavigateTo("list"); @@ -54,31 +54,15 @@ namespace adminBlazor.Pages protected override async Task OnInitializedAsync() { var item = await DataService.GetById(Id); - // currentUser = item; - // var fileContent = await File.ReadAllBytesAsync($"{WebHostEnvironment.WebRootPath}/images/default.png"); - if (File.Exists($"{WebHostEnvironment.WebRootPath}/images/{user.Name}.png")) - { - // fileContent = await File.ReadAllBytesAsync($"{WebHostEnvironment.WebRootPath}/images/{item.Name}.png"); - } + var fileContent = await File.ReadAllBytesAsync($"{WebHostEnvironment.WebRootPath}/images/default.png"); // Set the model with the item - user = new User - { - Id = user.Id, - Name = user.Name, - Surname = user.Surname, - Nickname = user.Nickname, - ExtraTime = user.ExtraTime, - Image = user.Image, - Group = user.Group, - Password = user.Password, - Email = user.Email, - Roles = user.Roles - }; + + user = UserFactory.ToModel(item,fileContent); } - /* + private async Task LoadImage(InputFileChangeEventArgs e) { // Set the content of the image to the model @@ -88,7 +72,7 @@ namespace adminBlazor.Pages user.Image = memoryStream.ToArray(); } } - */ + private bool isStudentChecked = false; private bool disableOtherCheckboxes = false; diff --git a/Project/adminBlazor/adminBlazor/Pages/List.razor b/Project/adminBlazor/adminBlazor/Pages/List.razor index d323583..8d31060 100644 --- a/Project/adminBlazor/adminBlazor/Pages/List.razor +++ b/Project/adminBlazor/adminBlazor/Pages/List.razor @@ -15,25 +15,36 @@ - - + + + @if (!string.IsNullOrWhiteSpace(context.ImageBase64)) + { + + } + else + { + + } + + - - - - - - - - + + + + + + + + - @if (context is UserModel user) + @if (context is User user) { @if (user.Roles != null && user.Roles.Any()) { @@ -46,7 +57,7 @@ } - + Editer diff --git a/Project/adminBlazor/adminBlazor/Pages/List.razor.cs b/Project/adminBlazor/adminBlazor/Pages/List.razor.cs index a3b3137..af8583b 100644 --- a/Project/adminBlazor/adminBlazor/Pages/List.razor.cs +++ b/Project/adminBlazor/adminBlazor/Pages/List.razor.cs @@ -14,7 +14,7 @@ namespace adminBlazor.Pages { public partial class List { - private List _users; + private List _users; private int totalUser; @@ -42,18 +42,18 @@ namespace adminBlazor.Pages return; } - var currentData = await LocalStorage.GetItemAsync("data"); + var currentData = await LocalStorage.GetItemAsync("data"); // Check if data exist in the local storage if (currentData == null) { // this code add in the local storage the fake data (we load the data sync for initialize the data before load the OnReadData method) - var originalData = Http.GetFromJsonAsync($"{NavigationManager.BaseUri}user.json").Result; + var originalData = Http.GetFromJsonAsync($"{NavigationManager.BaseUri}user.json").Result; await LocalStorage.SetItemAsync("data", originalData); } } - private async Task OnReadData(DataGridReadDataEventArgs e) + private async Task OnReadData(DataGridReadDataEventArgs e) { if (e.CancellationToken.IsCancellationRequested) { @@ -62,12 +62,12 @@ namespace adminBlazor.Pages // When you use a real API, we use this follow code //var response = await Http.GetJsonAsync( $"http://my-api/api/data?page={e.Page}&pageSize={e.PageSize}" ); - var response = (await LocalStorage.GetItemAsync("data")).Skip((e.Page - 1) * e.PageSize).Take(e.PageSize).ToList(); + var response = (await LocalStorage.GetItemAsync("data")).Skip((e.Page - 1) * e.PageSize).Take(e.PageSize).ToList(); if (!e.CancellationToken.IsCancellationRequested) { - totalUser = (await LocalStorage.GetItemAsync>("data")).Count; - _users = new List(response); // an actual data for the current page + totalUser = (await LocalStorage.GetItemAsync>("data")).Count; + _users = new List(response); // an actual data for the current page } } diff --git a/Project/adminBlazor/adminBlazor/Services/DataLocalService.cs b/Project/adminBlazor/adminBlazor/Services/DataLocalService.cs index c764098..e42d7f4 100644 --- a/Project/adminBlazor/adminBlazor/Services/DataLocalService.cs +++ b/Project/adminBlazor/adminBlazor/Services/DataLocalService.cs @@ -41,19 +41,7 @@ namespace adminBlazor.Services currentData.Add(UserFactory.Create(model)); // Save the image - var imagePathInfo = new DirectoryInfo($"{_webHostEnvironment.WebRootPath}/images"); - - // Check if the folder "images" exist - if (!imagePathInfo.Exists) - { - imagePathInfo.Create(); - } - - // Determine the image name - var fileName = new FileInfo($"{imagePathInfo}/{model.Name}.png"); - - // Write the file content - //await File.WriteAllBytesAsync(fileName.FullName, model.ImageContent); + // Save the data await _localStorage.SetItemAsync("data", currentData); @@ -69,7 +57,6 @@ namespace adminBlazor.Services public async Task GetById(int id) { - //var currentData = await LocalStorage.GetItemAsync("user.json"); var currentData = await _localStorage.GetItemAsync>("data"); var user = currentData.FirstOrDefault(w => w.Id == id); @@ -90,7 +77,7 @@ namespace adminBlazor.Services public async Task Update(int id, UserModel model) { // Get the current data - var currentData = await _localStorage.GetItemAsync("data"); + var currentData = await _localStorage.GetItemAsync>("data"); var user = currentData.FirstOrDefault(w => w.Id == id); @@ -101,30 +88,7 @@ namespace adminBlazor.Services // Save the image // - var imagePathInfo = new DirectoryInfo($"{_webHostEnvironment.WebRootPath}/images"); - - // Check if the folder "images" exist - // if (!imagePathInfo.Exists) - { - // imagePathInfo.Create(); - } - - // Delete the previous image - if (user.Name != model.Name) - { - // var oldFileName = new FileInfo($"{imagePathInfo}/{user.Name}.png"); - - // if (oldFileName.Exists) - { - // File.Delete(oldFileName.FullName); - } - } - - // Determine the image name - var fileName = new FileInfo($"{imagePathInfo}/{model.Name}.png"); - - // Write the file content - // await File.WriteAllBytesAsync(fileName.FullName, model.Image); + UserFactory.Update(user, model); // Modify the content of the item @@ -146,13 +110,7 @@ namespace adminBlazor.Services currentData.Remove(item); // Delete the image - var imagePathInfo = new DirectoryInfo($"{_webHostEnvironment.WebRootPath}/images"); - var fileName = new FileInfo($"{imagePathInfo}/{item.Name}.png"); - if (fileName.Exists) - { - File.Delete(fileName.FullName); - } // Save the data await _localStorage.SetItemAsync("data", currentData); diff --git a/Project/adminBlazor/adminBlazor/wwwroot/images/.png b/Project/adminBlazor/adminBlazor/wwwroot/images/.png new file mode 100644 index 0000000..b05a5f7 Binary files /dev/null and b/Project/adminBlazor/adminBlazor/wwwroot/images/.png differ diff --git a/Project/adminBlazor/adminBlazor/wwwroot/images/Alice.png b/Project/adminBlazor/adminBlazor/wwwroot/images/Alice.png new file mode 100644 index 0000000..7595e41 Binary files /dev/null and b/Project/adminBlazor/adminBlazor/wwwroot/images/Alice.png differ diff --git a/Project/adminBlazor/adminBlazor/wwwroot/images/Bob.png b/Project/adminBlazor/adminBlazor/wwwroot/images/Bob.png new file mode 100644 index 0000000..7595e41 Binary files /dev/null and b/Project/adminBlazor/adminBlazor/wwwroot/images/Bob.png differ diff --git a/Project/adminBlazor/adminBlazor/wwwroot/images/John.png b/Project/adminBlazor/adminBlazor/wwwroot/images/John.png new file mode 100644 index 0000000..7595e41 Binary files /dev/null and b/Project/adminBlazor/adminBlazor/wwwroot/images/John.png differ diff --git a/Project/adminBlazor/adminBlazor/wwwroot/images/apple.png b/Project/adminBlazor/adminBlazor/wwwroot/images/apple.png new file mode 100644 index 0000000..c864f6a Binary files /dev/null and b/Project/adminBlazor/adminBlazor/wwwroot/images/apple.png differ diff --git a/Project/adminBlazor/adminBlazor/wwwroot/images/banane.png b/Project/adminBlazor/adminBlazor/wwwroot/images/banane.png new file mode 100644 index 0000000..7595e41 Binary files /dev/null and b/Project/adminBlazor/adminBlazor/wwwroot/images/banane.png differ diff --git a/Project/adminBlazor/adminBlazor/wwwroot/images/default.png b/Project/adminBlazor/adminBlazor/wwwroot/images/default.png new file mode 100644 index 0000000..c864f6a Binary files /dev/null and b/Project/adminBlazor/adminBlazor/wwwroot/images/default.png differ diff --git a/Project/adminBlazor/adminBlazor/wwwroot/images/img_profil.jpeg b/Project/adminBlazor/adminBlazor/wwwroot/images/img_profil.jpeg new file mode 100644 index 0000000..43faded Binary files /dev/null and b/Project/adminBlazor/adminBlazor/wwwroot/images/img_profil.jpeg differ diff --git a/Project/adminBlazor/adminBlazor/wwwroot/user.json b/Project/adminBlazor/adminBlazor/wwwroot/user.json index ad3b9ee..a88d553 100644 --- a/Project/adminBlazor/adminBlazor/wwwroot/user.json +++ b/Project/adminBlazor/adminBlazor/wwwroot/user.json @@ -6,10 +6,10 @@ "name": "John", "surname": "Doe", "nickname": "JD", - "image": "user1.jpg", + "image": null, "extraTime": true, "group": 1, - "roles": [ "Admin", "Student" ] + "roles": [ "Admin", "Teacher" ] }, { "id": 2, @@ -18,7 +18,7 @@ "name": "Alice", "surname": "Smith", "nickname": "AS", - "image": "user2.jpg", + "image": null, "extraTime": false, "group": 2, "roles": [ "Student" ] @@ -30,9 +30,9 @@ "name": "Bob", "surname": "Johnson", "nickname": "BJ", - "image": "user3.jpg", + "image": null, "extraTime": true, "group": 3, "roles": [ "Teacher" ] } -] +] \ No newline at end of file