From 7862c26e35898989e42c2e28ab17d21d0232d2bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Lavergne?= Date: Sat, 10 Jun 2023 23:59:41 +0200 Subject: [PATCH] Version finale --- Sources/GameAtlas/GameAtlas/App.xaml.cs | 17 +++- Sources/GameAtlas/GameAtlas/AppShell.xaml.cs | 8 +- Sources/GameAtlas/GameAtlas/MauiProgram.cs | 9 ++- .../GameAtlas/Views/PageAccueil.xaml.cs | 4 +- .../GameAtlas/Views/PageAdmin.xaml.cs | 47 ++++++++--- .../GameAtlas/Views/PageConnexion.xaml.cs | 62 +++++++++------ .../GameAtlas/Views/PageInscription.xaml.cs | 73 +++++++++++------ .../GameAtlas/GameAtlas/Views/PageJeu.xaml.cs | 31 +++++++- .../GameAtlas/Views/PageParcourir.xaml.cs | 79 +++++++++++-------- .../GameAtlas/Views/PageProfil.xaml.cs | 27 ++++++- Sources/GameAtlas/Models/Manager.cs | 4 +- 11 files changed, 259 insertions(+), 102 deletions(-) diff --git a/Sources/GameAtlas/GameAtlas/App.xaml.cs b/Sources/GameAtlas/GameAtlas/App.xaml.cs index 482eea9..a14480e 100644 --- a/Sources/GameAtlas/GameAtlas/App.xaml.cs +++ b/Sources/GameAtlas/GameAtlas/App.xaml.cs @@ -5,14 +5,29 @@ using GameAtlas.Views; namespace GameAtlas; +/// +/// Classe partielle pour l'application principale. +/// public partial class App : Application { - + /// + /// Nom du fichier de données. + /// public string FileName { get; set; } = "data.json"; // data.xml + /// + /// Chemin du fichier de données. + /// public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory); + /// + /// Gestionnaire principal de l'application. + /// public Manager MyManager { get; private set; } = new Manager(new Stub.Stub());//new Manager(new DataContractPersistance.DataContractPers()); + + /// + /// Constructeur de l'application. + /// public App() { InitializeComponent(); diff --git a/Sources/GameAtlas/GameAtlas/AppShell.xaml.cs b/Sources/GameAtlas/GameAtlas/AppShell.xaml.cs index ef60de8..59f2398 100644 --- a/Sources/GameAtlas/GameAtlas/AppShell.xaml.cs +++ b/Sources/GameAtlas/GameAtlas/AppShell.xaml.cs @@ -2,9 +2,15 @@ namespace GameAtlas; +/// +/// Classe partielle pour la base de l'application. +/// public partial class AppShell : Shell { - public AppShell() + /// + /// Constructeur de la base de l'application. + /// + public AppShell() { InitializeComponent(); diff --git a/Sources/GameAtlas/GameAtlas/MauiProgram.cs b/Sources/GameAtlas/GameAtlas/MauiProgram.cs index 89e00e6..64b4752 100644 --- a/Sources/GameAtlas/GameAtlas/MauiProgram.cs +++ b/Sources/GameAtlas/GameAtlas/MauiProgram.cs @@ -3,9 +3,16 @@ using Microsoft.Extensions.Logging; namespace GameAtlas; +/// +/// Classe principale du programme pour l'application Maui. +/// public static class MauiProgram { - public static MauiApp CreateMauiApp() + /// + /// Crée et configure l'application MAUI. + /// + /// L'application MAUI configurée. + public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder diff --git a/Sources/GameAtlas/GameAtlas/Views/PageAccueil.xaml.cs b/Sources/GameAtlas/GameAtlas/Views/PageAccueil.xaml.cs index da272ec..d095d00 100644 --- a/Sources/GameAtlas/GameAtlas/Views/PageAccueil.xaml.cs +++ b/Sources/GameAtlas/GameAtlas/Views/PageAccueil.xaml.cs @@ -3,7 +3,9 @@ using System.Collections.ObjectModel; namespace GameAtlas.Views; - +/// +/// Code-Behind pour la page d'accueil. +/// public partial class PageAcceuil : ContentPage { diff --git a/Sources/GameAtlas/GameAtlas/Views/PageAdmin.xaml.cs b/Sources/GameAtlas/GameAtlas/Views/PageAdmin.xaml.cs index f658b16..70d7cc8 100644 --- a/Sources/GameAtlas/GameAtlas/Views/PageAdmin.xaml.cs +++ b/Sources/GameAtlas/GameAtlas/Views/PageAdmin.xaml.cs @@ -10,29 +10,41 @@ using System.Diagnostics; namespace GameAtlas.Views; +/// +/// Code-Behind pour la page d'admin. +/// public partial class PageAdmin : ContentPage { + /// + /// Gestionnaire d'administration. + /// public Manager AdminManager => (App.Current as App).MyManager; + + /// + /// Constructeur de la page d'administration. + /// public PageAdmin() { InitializeComponent(); } - /** - * \brief Flèche de retour en arrière - * \return void - */ + /// + /// Méthode appelée lorsqu'on appuie sur la flèche de retour en arrière. + /// + /// L'objet qui a déclenché l'événement. + /// Les arguments de l'événement. async void Back_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e) { await Navigation.PopAsync(); } - /** - * \brief Bouton d'ajout de jeu - * Affiche une succession de pop-up, pour remplir les champs un par un. - * Traitement et vérification des champs. - * \return void - */ + /// + /// Méthode appelée lorsqu'on appuie sur le bouton d'ajout de jeu. + /// Affiche une succession de pop-up pour remplir les champs un par un. + /// Traite et vérifie les champs pour ajouter un jeu. + /// + /// L'objet qui a déclenché l'événement. + /// Les arguments de l'événement. private async void OnButtonClicked(object sender, EventArgs e) { string nom = string.Empty; @@ -145,6 +157,13 @@ public partial class PageAdmin : ContentPage } } + /// + /// Méthode appelée lorsqu'on appuie sur le bouton de suppression d'un jeu. + /// Affiche une liste de jeux à supprimer. + /// Supprime le jeu sélectionné. + /// + /// L'objet qui a déclenché l'événement. + /// Les arguments de l'événement. private async void OnDeleteClicked(object sender, EventArgs e) { var gameNames = GetGameNames().ToArray(); @@ -163,11 +182,19 @@ public partial class PageAdmin : ContentPage } } + /// + /// Retourne une liste de noms de jeux. + /// + /// La liste des noms de jeux. private List GetGameNames() { return AdminManager.ListJeux.Select(jeu => jeu.Nom).ToList(); } + /// + /// Retourne une liste de noms de jeux. + /// + /// La liste des noms de jeux. private Jeu GetGameByName(string name) { return AdminManager.ListJeux.FirstOrDefault(jeu => jeu.Nom == name); diff --git a/Sources/GameAtlas/GameAtlas/Views/PageConnexion.xaml.cs b/Sources/GameAtlas/GameAtlas/Views/PageConnexion.xaml.cs index 30aca9d..fabb959 100644 --- a/Sources/GameAtlas/GameAtlas/Views/PageConnexion.xaml.cs +++ b/Sources/GameAtlas/GameAtlas/Views/PageConnexion.xaml.cs @@ -10,21 +10,33 @@ using Models; using System.Diagnostics; using System.Text.RegularExpressions; +/// +/// Code-Behind pour la page de connexion. +/// public partial class PageConnexion : ContentPage { + private bool connexionWorked; + /// + /// Gestionnaire de connexion. + /// public Manager ConnexionManager => (App.Current as App).MyManager; + + /// + /// Constructeur de la page de connexion. + /// public PageConnexion() { InitializeComponent(); } - /** - * \brief Bouton "Connexion" - * Réaction au clic sur le bouton, vérification des champs non vide. - * \return void - */ + /// + /// Méthode appelée lorsqu'on appuie sur le bouton "Connexion". + /// Vérifie les champs non vides et effectue la vérification de la connexion. + /// + /// L'objet qui a déclenché l'événement. + /// Les arguments de l'événement. private async void OnSignInClicked(object sender, EventArgs e) { @@ -41,28 +53,28 @@ public partial class PageConnexion : ContentPage connexionWorked = Verification(username, password); if (connexionWorked) { - //await Navigation.PushAsync(new PageAcceuil()); await Navigation.PopAsync(); - //await Shell.Current.GoToAsync("//page/PageAccueil"); } } - /** - * \brief Texte "S'inscrire" - * Réaction au clic sur le texte, envoie sur le page d'Inscription. - * \return void - */ + /// + /// Méthode appelée lorsqu'on appuie sur le texte "S'inscrire". + /// Affiche la page d'inscription. + /// + /// L'objet qui a déclenché l'événement. + /// Les arguments de l'événement. private async void OnInscrire_Tapped(object sender, EventArgs e) { await Navigation.PushModalAsync(new PageInscription()); } - /** - * \brief Texte "Mot de Passe oublié" - * Réaction au clic sur le texte, affichage de pop-ups. - * \return void - */ + /// + /// Méthode appelée lorsqu'on appuie sur le texte "Mot de Passe oublié". + /// Affiche des pop-ups avec des messages. + /// + /// L'objet qui a déclenché l'événement. + /// Les arguments de l'événement. private async void OnMotDePasseOublie_Tapped(object sender, EventArgs e) { await DisplayAlert("Oh non !", "Le mot de passe va te revenir à force", "Concentration"); @@ -79,14 +91,14 @@ public partial class PageConnexion : ContentPage } } - /** - * \brief Vérification et Chargement - * Vérification de la présence de l'utilisateur dans la Liste d'Utilisateurs. - * Si c'est le cas, comparaison du mot de passe fournis par celui de l'utilisateur. - * Si tout est bon, chargement de l'utilisateur dans ConnectedUser. - * Dans le cas contraire, on renvoie un message d'erreur et termine la vérification. - * \return bool true si la connexion a fonctionnée, false sinon. - */ + /// + /// Vérifie la présence de l'utilisateur dans la liste des utilisateurs et effectue la vérification du mot de passe. + /// Charge l'utilisateur connecté si la vérification est réussie. + /// Affiche un message d'erreur sinon. + /// + /// Le nom d'utilisateur saisi. + /// Le mot de passe saisi. + /// True si la connexion a réussi, false sinon. public bool Verification(string username, string password) { foreach (Utilisateur user in ConnexionManager.Utilisateurs.Concat(ConnexionManager.Admins)) diff --git a/Sources/GameAtlas/GameAtlas/Views/PageInscription.xaml.cs b/Sources/GameAtlas/GameAtlas/Views/PageInscription.xaml.cs index c351322..13c388a 100644 --- a/Sources/GameAtlas/GameAtlas/Views/PageInscription.xaml.cs +++ b/Sources/GameAtlas/GameAtlas/Views/PageInscription.xaml.cs @@ -8,17 +8,32 @@ using CommunityToolkit.Maui.Core; using CommunityToolkit.Maui.Alerts; using Font = Microsoft.Maui.Font; +/// +/// Code-Behind pour la page d'inscription. +/// public partial class PageInscription : ContentPage { + /// + /// Chemin d'accès à l'image par défaut pour le profil utilisateur. + /// string ImagePath { get; set; } = "default_user.png"; + + /// + /// Gestionnaire d'inscription. + /// public Manager InscriptionManager => (App.Current as App).MyManager; + /// + /// Constructeur de la page d'inscription. + /// public PageInscription() { InitializeComponent(); } - + /// + /// Méthode appelée lorsqu'on appuie sur le bouton "S'inscrire". + /// private async void OnSignUpClicked(object sender, EventArgs e) { @@ -53,42 +68,48 @@ public partial class PageInscription : ContentPage await DisplayAlert("Compte créer avec succès !","Vous pouvez maintenant vous connecter.", cancel: "Ok"); await Shell.Current.GoToAsync("//page/PageAccueil"); + } + + /// + /// Vérifie si le mot de passe est assez fort. + /// + /// Le mot de passe à vérifier. + /// True si le mot de passe est assez fort, False sinon. + 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; - bool IsPasswordStrong(string password) + foreach (char c in password) { - // Vérifier si le mot de passe est assez long - if (password.Length < 8) + if (char.IsUpper(c)) { - return false; + hasUppercase = true; } - - // 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) + else if (char.IsLower(c)) { - if (char.IsUpper(c)) - { - hasUppercase = true; - } - else if (char.IsLower(c)) - { - hasLowercase = true; - } - else if (char.IsDigit(c)) - { - hasDigit = true; - } + hasLowercase = true; + } + else if (char.IsDigit(c)) + { + hasDigit = true; } - - return hasUppercase && hasLowercase && hasDigit; } + return hasUppercase && hasLowercase && hasDigit; } + /// + /// Méthode appelée lorsqu'on appuie sur le bouton "Sélectionner une photo". + /// private async void OnSelectPhotoClicked(object sender, EventArgs e) { var photo = await MediaPicker.PickPhotoAsync(); diff --git a/Sources/GameAtlas/GameAtlas/Views/PageJeu.xaml.cs b/Sources/GameAtlas/GameAtlas/Views/PageJeu.xaml.cs index b8d7f21..ab972e0 100644 --- a/Sources/GameAtlas/GameAtlas/Views/PageJeu.xaml.cs +++ b/Sources/GameAtlas/GameAtlas/Views/PageJeu.xaml.cs @@ -6,13 +6,24 @@ using Font = Microsoft.Maui.Font; namespace GameAtlas.Views; +/// +/// Code-Behind pour la page de jeu. +/// public partial class PageJeu : ContentPage { + /// + /// Modèle de jeu. + /// public Jeu JeuModel { get; set; } - //public Manager JeuManager { get; set; } = new Manager(); + /// + /// Gestionnaire de jeu. + /// public Manager JeuManager => (App.Current as App).MyManager; + /// + /// Constructeur de la page de jeu. + /// public PageJeu() { InitializeComponent(); @@ -20,6 +31,10 @@ public partial class PageJeu : ContentPage BindingContext = JeuManager; } + /// + /// Constructeur de la page de jeu avec un jeu spécifique. + /// + /// Le jeu qui doit être affiché. public PageJeu(Jeu jeu) { @@ -30,10 +45,11 @@ public partial class PageJeu : ContentPage InitializeComponent(); BindingContext = this; - - } + /// + /// Méthode appelée lorsqu'on appuie sur le bouton "Ajouter". + /// async void OnAddTapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e) { if (JeuManager.ConnectedUser != null) @@ -98,6 +114,9 @@ public partial class PageJeu : ContentPage } } + /// + /// Méthode appelée lorsqu'on appuie sur le bouton "Ajouter un commentaire". + /// async void OnAddCommentClicked(object sender, EventArgs args) { if (JeuManager.ConnectedUser != null) @@ -124,11 +143,17 @@ public partial class PageJeu : ContentPage } } + /// + /// Méthode appelée lorsqu'on appuie sur l'icône de retour. + /// async void Back_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e) { await Navigation.PopAsync(); } + /// + /// Affiche une alerte indiquant qu'il faut être connecté pour effectuer une action. (Snackbar MAUI Toolkit) + /// private async void Alert() { CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); diff --git a/Sources/GameAtlas/GameAtlas/Views/PageParcourir.xaml.cs b/Sources/GameAtlas/GameAtlas/Views/PageParcourir.xaml.cs index 4472ca9..4b56379 100644 --- a/Sources/GameAtlas/GameAtlas/Views/PageParcourir.xaml.cs +++ b/Sources/GameAtlas/GameAtlas/Views/PageParcourir.xaml.cs @@ -1,43 +1,60 @@ -namespace GameAtlas.Views; - -using Models; -using System.Collections.ObjectModel; - -public partial class PageParcourir : ContentPage +namespace GameAtlas.Views { + using Models; + using System.Collections.ObjectModel; - public Manager ParcourirManager => (App.Current as App).MyManager; - public PageParcourir() - { - InitializeComponent(); - BindingContext = ParcourirManager; - } - - async void OnGame_Tapped(System.Object sender, EventArgs e) + /// + /// Code-Behind pour la page parcourir. + /// + public partial class PageParcourir : ContentPage { - var selectedjeu = (sender as ImageButton)?.BindingContext as Jeu; - if (selectedjeu != null) + /// + /// Gestionnaire de parcours. + /// + public Manager ParcourirManager => (App.Current as App).MyManager; + + /// + /// Constructeur de la page de parcours. + /// + public PageParcourir() { - - await Navigation.PushAsync(new PageJeu(selectedjeu)); + InitializeComponent(); + BindingContext = ParcourirManager; } - - } - async void Back_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e) - { - await Navigation.PopAsync(); - } + /// + /// Méthode appelée lorsqu'un jeu est sélectionné. + /// + async void OnGame_Tapped(System.Object sender, EventArgs e) + { + var selectedjeu = (sender as ImageButton)?.BindingContext as Jeu; + if (selectedjeu != null) + { + await Navigation.PushAsync(new PageJeu(selectedjeu)); + } + } - private void SearchBar_TextChanged(object sender, TextChangedEventArgs e) - { - if(string.IsNullOrWhiteSpace(e.NewTextValue)) + /// + /// Méthode appelée lorsqu'on appuie sur l'icône de retour. + /// + async void Back_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e) { - searchResults.ItemsSource = ParcourirManager.ListJeux; + await Navigation.PopAsync(); } - else + + /// + /// Méthode appelée lorsque le texte de la barre de recherche change. + /// + private void SearchBar_TextChanged(object sender, TextChangedEventArgs e) { - searchResults.ItemsSource = ParcourirManager.ListJeux.Where(i => i.Nom.ToLower().Contains(e.NewTextValue.ToLower())); + if (string.IsNullOrWhiteSpace(e.NewTextValue)) + { + searchResults.ItemsSource = ParcourirManager.ListJeux; + } + else + { + searchResults.ItemsSource = ParcourirManager.ListJeux.Where(i => i.Nom.ToLower().Contains(e.NewTextValue.ToLower())); + } } } -} \ No newline at end of file +} diff --git a/Sources/GameAtlas/GameAtlas/Views/PageProfil.xaml.cs b/Sources/GameAtlas/GameAtlas/Views/PageProfil.xaml.cs index 0d903d1..fdd336a 100644 --- a/Sources/GameAtlas/GameAtlas/Views/PageProfil.xaml.cs +++ b/Sources/GameAtlas/GameAtlas/Views/PageProfil.xaml.cs @@ -2,21 +2,37 @@ using Models; namespace GameAtlas.Views; +/// +/// Code-Behind pour la page de profil. +/// public partial class PageProfil : ContentPage { + /// + /// Gestionnaire de profil. Manager + /// public Manager ProfilManager => (App.Current as App).MyManager; - public PageProfil() + + /// + /// Constructeur de la page de profil. + /// + public PageProfil() { InitializeComponent(); BindingContext = ProfilManager; } + /// + /// Méthode appelée lorsque la page est affichée. + /// protected override void OnAppearing() { base.OnAppearing(); SwitchPage(); } + /// + /// Méthode pour basculer vers une autre page en fonction de l'utilisateur connecté. + /// async void SwitchPage() { if (ProfilManager.ConnectedUser == null) @@ -29,6 +45,9 @@ public partial class PageProfil : ContentPage } } + /// + /// Méthode appelée lorsqu'un jeu est sélectionné. + /// async void OnGame_Tapped(System.Object sender, EventArgs e) { var selectedjeu = (sender as ImageButton)?.BindingContext as Jeu; @@ -40,11 +59,17 @@ public partial class PageProfil : ContentPage } + /// + /// Méthode appelée lorsqu'on appuie sur l'icône d'administration. + /// async void OnAdmin_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e) { await Shell.Current.GoToAsync(nameof(PageAdmin)); } + /// + /// Méthode appelée lorsqu'on appuie sur l'icône de déconnexion. + /// async void OnDisconnect_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e) { await Shell.Current.GoToAsync("//page/PageAccueil"); diff --git a/Sources/GameAtlas/Models/Manager.cs b/Sources/GameAtlas/Models/Manager.cs index 0f650dc..d5f122e 100644 --- a/Sources/GameAtlas/Models/Manager.cs +++ b/Sources/GameAtlas/Models/Manager.cs @@ -27,7 +27,7 @@ namespace Models private ObservableCollection topRatedGames; /// - /// Les jeux les mieux notés. + /// Les jeux les mieux notes. /// public ObservableCollection TopRatedGames { @@ -79,7 +79,7 @@ namespace Models } /// - /// Gestionnaire de persistance utilisé pour charger et sauvegarder les données. + /// Gestionnaire de persistance utilisé pour charger et sauvegarder les donnees. /// public IPersistanceManager Persistance { get; set; } -- 2.36.3