ajout de la modification de compte
continuous-integration/drone/push Build is passing Details

Matheo
Vianney JOURDY 2 years ago
parent 4bc4b40226
commit df98379df7

@ -56,6 +56,11 @@
Title="Modification oeuvre" Title="Modification oeuvre"
ContentTemplate="{DataTemplate Views:modifyOeuvre}" ContentTemplate="{DataTemplate Views:modifyOeuvre}"
Route="modifyOeuvrePage"/> Route="modifyOeuvrePage"/>
<ShellContent
Title="Modification utilisateur"
ContentTemplate="{DataTemplate Views:loginModifyPage}"
Route="loginModifyPage"/>
</Tab> </Tab>
</TabBar> </TabBar>

@ -28,5 +28,6 @@ public partial class AppShell : Shell
Routing.RegisterRoute("connexionAdminPagedetails", typeof(loginAdminPage)); Routing.RegisterRoute("connexionAdminPagedetails", typeof(loginAdminPage));
Routing.RegisterRoute("createPagedetails", typeof(createOeuvre)); Routing.RegisterRoute("createPagedetails", typeof(createOeuvre));
Routing.RegisterRoute("modifyPagedetails", typeof(modifyOeuvre)); Routing.RegisterRoute("modifyPagedetails", typeof(modifyOeuvre));
Routing.RegisterRoute("loginModifyPagedetails", typeof(loginModifyPage));
} }
} }

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MangaMap.Views.loginModifyPage"
Title="loginModifyPage">
<StackLayout VerticalOptions="Center" HorizontalOptions="Center">
<Label Text="Modifier son compte MapManga" FontSize="Large" Margin="0,0,0,20" TextColor="#ffffff"/>
<Entry x:Name="nameEntry" Placeholder="Nom" Margin="0,0,0,10" Style="{StaticResource Champs}"/>
<Entry x:Name="firstNameEntry" Placeholder="Prénom" Margin="0,0,0,10" Style="{StaticResource Champs}"/>
<Entry x:Name="ageEntry" Placeholder="Âge" Margin="0,0,0,10" Style="{StaticResource Champs}"/>
<Entry x:Name="emailEntry" Placeholder="Email" Margin="0,0,0,10" Style="{StaticResource Champs}"/>
<Entry x:Name="usernameEntry" Placeholder="Nom d'utilisateur" Margin="0,0,0,10" Style="{StaticResource Champs}"/>
<Entry x:Name="passwordEntry" Placeholder="Mot de passe" Margin="0,0,0,10" Style="{StaticResource ChampsMdp}"/>
<Entry x:Name="confirmPasswordEntry" Placeholder="Confirmer le mot de passe" Margin="0,0,0,20" Style="{StaticResource ChampsMdp}"/>
<Button Text="Modifier" Clicked="OnModifiedClicked" Style="{StaticResource Bouton}"/>
</StackLayout>
</ContentPage>

@ -0,0 +1,128 @@
using Models;
using System.Text.RegularExpressions;
namespace MangaMap.Views;
public partial class loginModifyPage : ContentPage
{
/// <summary>
/// Référence au gestionnaire de l'application.
/// </summary>
public Manager my_manager => (App.Current as App).MyManager;
public Utilisateur utilisateurModify;
public loginModifyPage(Utilisateur u)
{
utilisateurModify = u;
InitializeComponent();
}
/// <summary>
/// Gestionnaire d'événement lorsqu'un utilisateur clique sur le bouton "Inscription".
/// </summary>
/// <param name="sender">L'objet qui a déclenché l'événement.</param>
/// <param name="e">Arguments de l'événement.</param>
async void OnModifiedClicked(object sender, System.EventArgs e)
{
// Récupérer les valeurs des entrées
string nom = nameEntry.Text;
string prenom = firstNameEntry.Text;
int age = Convert.ToInt32(ageEntry.Text);
string email = emailEntry.Text;
string pseudo = usernameEntry.Text;
string password = passwordEntry.Text;
string confirmPassword = confirmPasswordEntry.Text;
foreach (Utilisateur u in my_manager.Utilisateurs)
{
if (u.Email == email || u.Pseudo == pseudo)
{
await DisplayAlert("Erreur", "L'utilisateur existe déjà.", "OK");
return;
}
}
// Vérifier si les mots de passe correspondent
if (password != confirmPassword)
{
await DisplayAlert("Erreur", "Les mots de passe ne correspondent pas", "OK");
return;
}
if (nom != null)
utilisateurModify.nom = nom;
if (prenom != null)
utilisateurModify.prenom = prenom;
if (age > 0)
utilisateurModify.age = age;
if (email != null)
{
// Vérifier que l'e-mail a la bonne forme
if (!Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$"))
{
await DisplayAlert("Erreur", "L'e-mail n'est pas valide.", "OK");
return;
}
utilisateurModify.Email = email;
}
if (pseudo != null)
utilisateurModify.Pseudo = pseudo;
if (password != null)
{
if (IsPasswordStrong(password) == false)
{
await DisplayAlert("Erreur", "Le mot de passe n'est pas assez fort", "OK");
return;
}
utilisateurModify.MotDePasse = password;
}
my_manager.sauvegarder();
await Shell.Current.GoToAsync("//page/homePage");
return;
}
/// <summary>
/// Vérifie si un mot de passe est suffisamment fort.
/// </summary>
/// <param name="password">Le mot de passe à vérifier.</param>
/// <returns>True si le mot de passe est suffisamment fort, sinon False.</returns>
bool IsPasswordStrong(string password)
{
// Vérifier si le mot de passe est assez long
if (password.Length < 8)
{
return false;
}
// Vérifier si le mot de passe contient au moins une majuscule, une minuscule et un chiffre
bool hasUppercase = false;
bool hasLowercase = false;
bool hasDigit = false;
foreach (char c in password)
{
if (char.IsUpper(c))
{
hasUppercase = true;
}
else if (char.IsLower(c))
{
hasLowercase = true;
}
else if (char.IsDigit(c))
{
hasDigit = true;
}
}
return hasUppercase && hasLowercase && hasDigit;
}
}

@ -29,14 +29,18 @@ public partial class modifyOeuvre : ContentPage
int nbEp = Convert.ToInt32(nbEpisodeEntry.Text); int nbEp = Convert.ToInt32(nbEpisodeEntry.Text);
string description = descriptionEntry.Text; string description = descriptionEntry.Text;
if (nbEp < 0) if (nom != null)
{
foreach (Oeuvre o in my_manager.Oeuvres)
{
if (o.Nom == nom)
{ {
await DisplayAlert("Erreur", "Il faut avoir au moins 1 épisode pour l'application.", "OK"); await DisplayAlert("Erreur", "Ce nom existe déjà pour une autre oeuvre.", "OK");
return; return;
} }
if (nom != null)
oeuvreModifie.Nom = nom; oeuvreModifie.Nom = nom;
}
if (type != null) if (type != null)
oeuvreModifie.Type = type; oeuvreModifie.Type = type;
@ -52,3 +56,4 @@ public partial class modifyOeuvre : ContentPage
return; return;
} }
} }
}

@ -10,13 +10,15 @@
<StackLayout VerticalOptions="Center" HorizontalOptions="Center" Grid.Row="1"> <StackLayout VerticalOptions="Center" HorizontalOptions="Center" Grid.Row="1">
<Button Text="Modifier le compte" Clicked="ModifyAccountClicked" Margin="0,0,0,10" Style="{StaticResource Bouton}"/>
<Button Text="Deconnexion" Clicked="OnDisconnectClicked" Margin="0,0,0,30" Style="{StaticResource Bouton}"/> <Button Text="Deconnexion" Clicked="OnDisconnectClicked" Margin="0,0,0,30" Style="{StaticResource Bouton}"/>
<Button Text="Connexion Admin" Clicked="LoginAdminClicked" Style="{StaticResource Bouton}"/> <Button Text="Connexion Admin" Clicked="LoginAdminClicked" Style="{StaticResource Bouton}"/>
<Button Text="Ajouter une série" Clicked="AddClicked" Style="{StaticResource Bouton}"/> <Button Text="Ajouter une série" Clicked="AddClicked" Style="{StaticResource Bouton}"/>
<Entry x:Name="oeuvreEntry" Placeholder="Oeuvre à modifier" Margin="10" Style="{StaticResource Champs}"/> <Entry x:Name="oeuvreEntry" Placeholder="Oeuvre à modifier" Margin="0,10,0,0" Style="{StaticResource Champs}"/>
<Button Text="Modifier l'ouvre" Clicked="ModifyClicked" Style="{StaticResource Bouton}"/> <Button Text="Modifier l'ouvre" Clicked="ModifyClicked" Style="{StaticResource Bouton}"/>
</StackLayout> </StackLayout>

@ -95,4 +95,16 @@ public partial class settingsPage : ContentPage
await DisplayAlert("Erreur", "L'oeuvre n'existe pas.", "OK"); await DisplayAlert("Erreur", "L'oeuvre n'existe pas.", "OK");
return; return;
} }
private async void ModifyAccountClicked(object sender, System.EventArgs e)
{
if (my_manager.UtilisateurActuel.Email == null)
{
await DisplayAlert("Erreur", "Vous n'êtes pas connecté.", "OK");
return;
}
await Navigation.PushAsync(new loginModifyPage(my_manager.UtilisateurActuel));
return;
}
} }

@ -34,7 +34,7 @@ namespace Models
/// Obtient ou définit l'âge de l'utilisateur. /// Obtient ou définit l'âge de l'utilisateur.
/// </summary> /// </summary>
[DataMember] [DataMember]
public int age { get; private set; } public int age { get; set; }
/// <summary> /// <summary>
/// Obtient ou définit la liste des oeuvres en visionnage de l'utilisateur. /// Obtient ou définit la liste des oeuvres en visionnage de l'utilisateur.

Loading…
Cancel
Save