diff --git a/Project/adminBlazor/adminBlazor/Factories/UserFactory.cs b/Project/adminBlazor/adminBlazor/Factories/UserFactory.cs new file mode 100644 index 0000000..8b8cf04 --- /dev/null +++ b/Project/adminBlazor/adminBlazor/Factories/UserFactory.cs @@ -0,0 +1,59 @@ +using adminBlazor.Models; +using Blazorise; +using System.Data; +using System.Text.RegularExpressions; +using System.Xml.Linq; + +namespace adminBlazor.Factories +{ + public static class UserFactory + { + public static User ToModel(User user, byte[] imageContent) + { + return 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 + }; + } + + public static User Create(User user) + { + return 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 + }; + } + + public static void Update(User item, User user) + { + item.Id = user.Id; + item.Name = user.Name; + item.Surname = user.Surname; + item.Nickname = user.Nickname; + item.ExtraTime = user.ExtraTime; + item.Image = user.Image; + item.Group = user.Group; + item.Password = user.Password; + item.Email = user.Email; + item.Roles = user.Roles; + } + } +} diff --git a/Project/adminBlazor/adminBlazor/Pages/EditUser.razor b/Project/adminBlazor/adminBlazor/Pages/EditUser.razor index c40b69a..fc29423 100644 --- a/Project/adminBlazor/adminBlazor/Pages/EditUser.razor +++ b/Project/adminBlazor/adminBlazor/Pages/EditUser.razor @@ -3,4 +3,95 @@

Edit

-
My parameter: @Id
+ + + + +

+ +

+

+ +

+

+ +

+ @* +

+ Roles categories: +

+ @foreach (var item in roles) + { + + } +
+

+ *@ + +

+ roles +

+ @foreach (var role in roles) + { + var currentItem = role; // Capturer la variable locale pour éviter les problèmes de fermeture + @if (currentItem == "student") + { + + break; + } + +
+ } +
+

+

+ +

+

+ +

+

+ +

+

+ +

+

+ +

+ + +
\ No newline at end of file diff --git a/Project/adminBlazor/adminBlazor/Pages/EditUser.razor.cs b/Project/adminBlazor/adminBlazor/Pages/EditUser.razor.cs index 1596a08..8e843b0 100644 --- a/Project/adminBlazor/adminBlazor/Pages/EditUser.razor.cs +++ b/Project/adminBlazor/adminBlazor/Pages/EditUser.razor.cs @@ -1,4 +1,9 @@ -using Microsoft.AspNetCore.Components; +using adminBlazor.Models; +using adminBlazor.Services; +using Blazored.LocalStorage; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Hosting; + namespace adminBlazor.Pages { @@ -7,5 +12,163 @@ namespace adminBlazor.Pages [Parameter] public int Id { get; set; } + //IDataService + + public IDataService DataService { get; set; } + //public ILocalStorageService LocalStorage { get; set; } + + [Inject] + public NavigationManager NavigationManager { get; set; } + + [Inject] + public IWebHostEnvironment WebHostEnvironment { get; set; } + + + /// + /// The default enchant categories. + /// + private List roles = new List() { "admin", "teacher", "student" }; + + + /// + /// The current item model + /// + private Models.User user = new Models.User() + { + Roles = new List() + }; + + private async void HandleValidSubmit() + { + await DataService.Update(Id, user); + + NavigationManager.NavigateTo("list"); + } + + + protected override async Task OnInitializedAsync() + { + var item = await DataService.GetById(Id); + + 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"); + } + + // 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 + }; + } + + /* + private async Task LoadImage(InputFileChangeEventArgs e) + { + // Set the content of the image to the model + using (var memoryStream = new MemoryStream()) + { + await e.File.OpenReadStream().CopyToAsync(memoryStream); + user.Image = memoryStream.ToArray(); + } + } + */ + private bool isStudentChecked = false; + private bool disableOtherCheckboxes = false; + + private void StudentCheckboxChange(string currentItem, object checkedValue) + { + if (currentItem == "student") + { + if (isStudentChecked) + { + // Activer les autres cases à cocher si "Étudiant" est cochée + disableOtherCheckboxes = true; + if (!user.Roles.Contains(currentItem)) + { + user.Roles.Add(currentItem); + } + } + else + { + // Désactiver les autres cases à cocher si "Étudiant" est décochée + disableOtherCheckboxes = false; + user.Roles.Remove(currentItem); + } + } + } + + private void OtherCheckboxChange(string currentItem) + { + if (isStudentChecked && currentItem != "student") + { + // Si "Étudiant" est coché, désactiver les autres cases + disableOtherCheckboxes = true; + if (!user.Roles.Contains(currentItem)) + { + user.Roles.Add(currentItem); + } + } + else + { + // Sinon, activer les autres cases + disableOtherCheckboxes = false; + user.Roles.Remove(currentItem); + } + } + private void RolesCategoriesChange(string item, object checkedValue) + { + if (item == "student") + { + isStudentChecked = (bool)checkedValue; + + if (isStudentChecked) + { + // Activer les autres cases à cocher si "Étudiant" est cochée + disableOtherCheckboxes = true; + if (!user.Roles.Contains(item)) + { + user.Roles.Add(item); + } + } + else + { + // Désactiver les autres cases à cocher si "Étudiant" est décochée + disableOtherCheckboxes = false; + user.Roles.Remove(item); + } + } + else + { + if (disableOtherCheckboxes) + { + //la case student a été coché ducoup on n'ajoute pas les autres rôles cochés + return; + if ((bool)checkedValue) + { + if (!user.Roles.Contains(item)) + { + user.Roles.Add(item); + } + } + else + { + user.Roles.Remove(item); + } + } + } + } } + } diff --git a/Project/adminBlazor/adminBlazor/Pages/List.razor.cs b/Project/adminBlazor/adminBlazor/Pages/List.razor.cs index 6b96194..47caae6 100644 --- a/Project/adminBlazor/adminBlazor/Pages/List.razor.cs +++ b/Project/adminBlazor/adminBlazor/Pages/List.razor.cs @@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Http.Features; using adminBlazor.Models; using System.Net.Http; using System.Net.Http.Json; +using adminBlazor.Services; namespace adminBlazor.Pages { @@ -23,6 +24,7 @@ namespace adminBlazor.Pages [Inject] public NavigationManager NavigationManager { get; set; } + protected override async Task OnAfterRenderAsync(bool firstRender) { // Do not treat this action if is not the first render diff --git a/Project/adminBlazor/adminBlazor/Services/DataLocalService.cs b/Project/adminBlazor/adminBlazor/Services/DataLocalService.cs index 340a7a0..ee85b12 100644 --- a/Project/adminBlazor/adminBlazor/Services/DataLocalService.cs +++ b/Project/adminBlazor/adminBlazor/Services/DataLocalService.cs @@ -1,4 +1,5 @@ -using adminBlazor.Models; +using adminBlazor.Factories; +using adminBlazor.Models; using Blazored.LocalStorage; using Blazorise.Extensions; using Microsoft.AspNetCore.Components; @@ -6,13 +7,26 @@ using Microsoft.AspNetCore.Hosting; namespace adminBlazor.Services { - public class DataLocalService + public class DataLocalService : IDataService { - [Inject] + public required ILocalStorageService LocalStorage { get; set; } [Inject] public required IWebHostEnvironment WebHostEnvironment { get; set; } + + public DataLocalService dataLocalService => throw new NotImplementedException(); + + public Task Add(User model) + { + throw new NotImplementedException(); + } + + public Task Count() + { + throw new NotImplementedException(); + } + public async Task GetById(int id) { // Get the current data @@ -28,6 +42,11 @@ namespace adminBlazor.Services return user; } + public Task> List(int currentPage, int pageSize) + { + throw new NotImplementedException(); + } + public async Task Update(int id, User model) { // Get the current data @@ -64,7 +83,8 @@ namespace adminBlazor.Services var fileName = new FileInfo($"{imagePathInfo}/{model.Name}.png"); // Write the file content - // await File.WriteAllBytesAsync(fileName.FullName, model.Image); + //await File.WriteAllBytesAsync(fileName.FullName, model.Image); + UserFactory.Update(user, model); // Modify the content of the item user.Nickname = model.Nickname; diff --git a/Project/adminBlazor/adminBlazor/Services/IDataService.cs b/Project/adminBlazor/adminBlazor/Services/IDataService.cs index bab3500..3edabec 100644 --- a/Project/adminBlazor/adminBlazor/Services/IDataService.cs +++ b/Project/adminBlazor/adminBlazor/Services/IDataService.cs @@ -3,8 +3,10 @@ using Microsoft.AspNetCore.Hosting; using Blazored.LocalStorage; namespace adminBlazor.Services { + public interface IDataService { + Task Add(User model); Task Count();