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