Version finale #73

Merged
remi.lavergne merged 2 commits from remi into master 2 years ago

@ -5,14 +5,29 @@ using GameAtlas.Views;
namespace GameAtlas;
/// <summary>
/// Classe partielle pour l'application principale.
/// </summary>
public partial class App : Application
{
/// <summary>
/// Nom du fichier de données.
/// </summary>
public string FileName { get; set; } = "data.json"; // data.xml
/// <summary>
/// Chemin du fichier de données.
/// </summary>
public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory);
/// <summary>
/// Gestionnaire principal de l'application.
/// </summary>
public Manager MyManager { get; private set; } = new Manager(new Stub.Stub());//new Manager(new DataContractPersistance.DataContractPers());
/// <summary>
/// Constructeur de l'application.
/// </summary>
public App()
{
InitializeComponent();

@ -2,9 +2,15 @@
namespace GameAtlas;
/// <summary>
/// Classe partielle pour la base de l'application.
/// </summary>
public partial class AppShell : Shell
{
public AppShell()
/// <summary>
/// Constructeur de la base de l'application.
/// </summary>
public AppShell()
{
InitializeComponent();

@ -3,9 +3,16 @@ using Microsoft.Extensions.Logging;
namespace GameAtlas;
/// <summary>
/// Classe principale du programme pour l'application Maui.
/// </summary>
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
/// <summary>
/// Crée et configure l'application MAUI.
/// </summary>
/// <returns>L'application MAUI configurée.</returns>
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder

@ -3,7 +3,9 @@ using System.Collections.ObjectModel;
namespace GameAtlas.Views;
/// <summary>
/// Code-Behind pour la page d'accueil.
/// </summary>
public partial class PageAcceuil : ContentPage
{

@ -10,29 +10,41 @@ using System.Diagnostics;
namespace GameAtlas.Views;
/// <summary>
/// Code-Behind pour la page d'admin.
/// </summary>
public partial class PageAdmin : ContentPage
{
/// <summary>
/// Gestionnaire d'administration.
/// </summary>
public Manager AdminManager => (App.Current as App).MyManager;
/// <summary>
/// Constructeur de la page d'administration.
/// </summary>
public PageAdmin()
{
InitializeComponent();
}
/**
* \brief Flèche de retour en arrière
* \return void
*/
/// <summary>
/// Méthode appelée lorsqu'on appuie sur la flèche de retour en arrière.
/// </summary>
/// <param name="sender">L'objet qui a déclenché l'événement.</param>
/// <param name="e">Les arguments de l'événement.</param>
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
*/
/// <summary>
/// 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.
/// </summary>
/// <param name="sender">L'objet qui a déclenché l'événement.</param>
/// <param name="e">Les arguments de l'événement.</param>
private async void OnButtonClicked(object sender, EventArgs e)
{
string nom = string.Empty;
@ -145,6 +157,13 @@ public partial class PageAdmin : ContentPage
}
}
/// <summary>
/// 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é.
/// </summary>
/// <param name="sender">L'objet qui a déclenché l'événement.</param>
/// <param name="e">Les arguments de l'événement.</param>
private async void OnDeleteClicked(object sender, EventArgs e)
{
var gameNames = GetGameNames().ToArray();
@ -163,11 +182,19 @@ public partial class PageAdmin : ContentPage
}
}
/// <summary>
/// Retourne une liste de noms de jeux.
/// </summary>
/// <returns>La liste des noms de jeux.</returns>
private List<string> GetGameNames()
{
return AdminManager.ListJeux.Select(jeu => jeu.Nom).ToList();
}
/// <summary>
/// Retourne une liste de noms de jeux.
/// </summary>
/// <returns>La liste des noms de jeux.</returns>
private Jeu GetGameByName(string name)
{
return AdminManager.ListJeux.FirstOrDefault(jeu => jeu.Nom == name);

@ -10,21 +10,33 @@ using Models;
using System.Diagnostics;
using System.Text.RegularExpressions;
/// <summary>
/// Code-Behind pour la page de connexion.
/// </summary>
public partial class PageConnexion : ContentPage
{
private bool connexionWorked;
/// <summary>
/// Gestionnaire de connexion.
/// </summary>
public Manager ConnexionManager => (App.Current as App).MyManager;
/// <summary>
/// Constructeur de la page de connexion.
/// </summary>
public PageConnexion()
{
InitializeComponent();
}
/**
* \brief Bouton "Connexion"
* Réaction au clic sur le bouton, vérification des champs non vide.
* \return void
*/
/// <summary>
/// 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.
/// </summary>
/// <param name="sender">L'objet qui a déclenché l'événement.</param>
/// <param name="e">Les arguments de l'événement.</param>
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
*/
/// <summary>
/// Méthode appelée lorsqu'on appuie sur le texte "S'inscrire".
/// Affiche la page d'inscription.
/// </summary>
/// <param name="sender">L'objet qui a déclenché l'événement.</param>
/// <param name="e">Les arguments de l'événement.</param>
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
*/
/// <summary>
/// Méthode appelée lorsqu'on appuie sur le texte "Mot de Passe oublié".
/// Affiche des pop-ups avec des messages.
/// </summary>
/// <param name="sender">L'objet qui a déclenché l'événement.</param>
/// <param name="e">Les arguments de l'événement.</param>
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.
*/
/// <summary>
/// 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.
/// </summary>
/// <param name="username">Le nom d'utilisateur saisi.</param>
/// <param name="password">Le mot de passe saisi.</param>
/// <returns>True si la connexion a réussi, false sinon.</returns>
public bool Verification(string username, string password)
{
foreach (Utilisateur user in ConnexionManager.Utilisateurs.Concat(ConnexionManager.Admins))

@ -8,17 +8,32 @@ using CommunityToolkit.Maui.Core;
using CommunityToolkit.Maui.Alerts;
using Font = Microsoft.Maui.Font;
/// <summary>
/// Code-Behind pour la page d'inscription.
/// </summary>
public partial class PageInscription : ContentPage
{
/// <summary>
/// Chemin d'accès à l'image par défaut pour le profil utilisateur.
/// </summary>
string ImagePath { get; set; } = "default_user.png";
/// <summary>
/// Gestionnaire d'inscription.
/// </summary>
public Manager InscriptionManager => (App.Current as App).MyManager;
/// <summary>
/// Constructeur de la page d'inscription.
/// </summary>
public PageInscription()
{
InitializeComponent();
}
/// <summary>
/// Méthode appelée lorsqu'on appuie sur le bouton "S'inscrire".
/// </summary>
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");
}
/// <summary>
/// Vérifie si le mot de passe est assez fort.
/// </summary>
/// <param name="password">Le mot de passe à vérifier.</param>
/// <returns>True si le mot de passe est assez fort, False sinon.</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;
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;
}
/// <summary>
/// Méthode appelée lorsqu'on appuie sur le bouton "Sélectionner une photo".
/// </summary>
private async void OnSelectPhotoClicked(object sender, EventArgs e)
{
var photo = await MediaPicker.PickPhotoAsync();

@ -6,13 +6,24 @@ using Font = Microsoft.Maui.Font;
namespace GameAtlas.Views;
/// <summary>
/// Code-Behind pour la page de jeu.
/// </summary>
public partial class PageJeu : ContentPage
{
/// <summary>
/// Modèle de jeu.
/// </summary>
public Jeu JeuModel { get; set; }
//public Manager JeuManager { get; set; } = new Manager();
/// <summary>
/// Gestionnaire de jeu.
/// </summary>
public Manager JeuManager => (App.Current as App).MyManager;
/// <summary>
/// Constructeur de la page de jeu.
/// </summary>
public PageJeu()
{
InitializeComponent();
@ -20,6 +31,10 @@ public partial class PageJeu : ContentPage
BindingContext = JeuManager;
}
/// <summary>
/// Constructeur de la page de jeu avec un jeu spécifique.
/// </summary>
/// <param name="jeu">Le jeu qui doit être affiché.</param>
public PageJeu(Jeu jeu)
{
@ -30,10 +45,11 @@ public partial class PageJeu : ContentPage
InitializeComponent();
BindingContext = this;
}
/// <summary>
/// Méthode appelée lorsqu'on appuie sur le bouton "Ajouter".
/// </summary>
async void OnAddTapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e)
{
if (JeuManager.ConnectedUser != null)
@ -98,6 +114,9 @@ public partial class PageJeu : ContentPage
}
}
/// <summary>
/// Méthode appelée lorsqu'on appuie sur le bouton "Ajouter un commentaire".
/// </summary>
async void OnAddCommentClicked(object sender, EventArgs args)
{
if (JeuManager.ConnectedUser != null)
@ -124,11 +143,17 @@ public partial class PageJeu : ContentPage
}
}
/// <summary>
/// Méthode appelée lorsqu'on appuie sur l'icône de retour.
/// </summary>
async void Back_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e)
{
await Navigation.PopAsync();
}
/// <summary>
/// Affiche une alerte indiquant qu'il faut être connecté pour effectuer une action. (Snackbar MAUI Toolkit)
/// </summary>
private async void Alert()
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();

@ -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)
/// <summary>
/// Code-Behind pour la page parcourir.
/// </summary>
public partial class PageParcourir : ContentPage
{
var selectedjeu = (sender as ImageButton)?.BindingContext as Jeu;
if (selectedjeu != null)
/// <summary>
/// Gestionnaire de parcours.
/// </summary>
public Manager ParcourirManager => (App.Current as App).MyManager;
/// <summary>
/// Constructeur de la page de parcours.
/// </summary>
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();
}
/// <summary>
/// Méthode appelée lorsqu'un jeu est sélectionné.
/// </summary>
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))
/// <summary>
/// Méthode appelée lorsqu'on appuie sur l'icône de retour.
/// </summary>
async void Back_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e)
{
searchResults.ItemsSource = ParcourirManager.ListJeux;
await Navigation.PopAsync();
}
else
/// <summary>
/// Méthode appelée lorsque le texte de la barre de recherche change.
/// </summary>
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()));
}
}
}
}
}

@ -2,21 +2,37 @@ using Models;
namespace GameAtlas.Views;
/// <summary>
/// Code-Behind pour la page de profil.
/// </summary>
public partial class PageProfil : ContentPage
{
/// <summary>
/// Gestionnaire de profil. Manager
/// </summary>
public Manager ProfilManager => (App.Current as App).MyManager;
public PageProfil()
/// <summary>
/// Constructeur de la page de profil.
/// </summary>
public PageProfil()
{
InitializeComponent();
BindingContext = ProfilManager;
}
/// <summary>
/// Méthode appelée lorsque la page est affichée.
/// </summary>
protected override void OnAppearing()
{
base.OnAppearing();
SwitchPage();
}
/// <summary>
/// Méthode pour basculer vers une autre page en fonction de l'utilisateur connecté.
/// </summary>
async void SwitchPage()
{
if (ProfilManager.ConnectedUser == null)
@ -29,6 +45,9 @@ public partial class PageProfil : ContentPage
}
}
/// <summary>
/// Méthode appelée lorsqu'un jeu est sélectionné.
/// </summary>
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
}
/// <summary>
/// Méthode appelée lorsqu'on appuie sur l'icône d'administration.
/// </summary>
async void OnAdmin_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e)
{
await Shell.Current.GoToAsync(nameof(PageAdmin));
}
/// <summary>
/// Méthode appelée lorsqu'on appuie sur l'icône de déconnexion.
/// </summary>
async void OnDisconnect_Tapped(System.Object sender, Microsoft.Maui.Controls.TappedEventArgs e)
{
await Shell.Current.GoToAsync("//page/PageAccueil");

@ -27,7 +27,7 @@ namespace Models
private ObservableCollection<Jeu> topRatedGames;
/// <summary>
/// Les jeux les mieux notés.
/// Les jeux les mieux notes.
/// </summary>
public ObservableCollection<Jeu> TopRatedGames
{
@ -79,7 +79,7 @@ namespace Models
}
/// <summary>
/// Gestionnaire de persistance utilisé pour charger et sauvegarder les données.
/// Gestionnaire de persistance utilisé pour charger et sauvegarder les donnees.
/// </summary>
public IPersistanceManager Persistance { get; set; }

Loading…
Cancel
Save