j en ai marre y a rien qui marche comme je veux

pull/26/head
Kevin MONDEJAR 3 months ago
commit 7be821200b

@ -0,0 +1,13 @@
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/.idea.WF-WebAdmin.iml
/modules.xml
/contentModel.xml
/projectSettingsUpdater.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

@ -0,0 +1,12 @@
namespace WF_WebAdmin.Converter
{
public class DailyQuoteDTO
{
private int Id { get; set; }
public DailyQuoteDTO(int id)
{
this.Id = id;
}
}
}

@ -0,0 +1,13 @@
using WF_WebAdmin.Model;
namespace WF_WebAdmin.Converter
{
public class DailyQuoteExtension
{
public DailyQuoteDTO DailyQuoteToDTO(DailyQuote dq)
{
DailyQuoteDTO dailyQuote = new DailyQuoteDTO(dq.Id);
return dailyQuote;
}
}
}

@ -0,0 +1,43 @@
using Microsoft.AspNetCore.DataProtection.KeyManagement;
using System;
namespace WF_WebAdmin.Converter
{
public class QuoteDTO
{
public int Id { get; set; }
public string Content { get; set; }
public int Likes { get; set; }
public string Langue { get; set; }
public bool? IsValide { get; set; }
public string? Reason { get; set; }
public int? IdCaracter { get; set; }
public string NameCharac { get; set; }
public int? IdSource { get; set; }
public string TitleSrc { get; set; }
public DateTime DateSrc { get; set; }
public int? IdUserVerif { get; set; }
public string NameUser { get; set; }
public int? IdImg { get; set; }
public string ImgPath { get; set; }
public QuoteDTO(int id_quote,string content,int likes,string langue,bool? isValide,string? reason,int? id_caracter,string name_charac,int? id_source,string title,DateTime date,int? id_user_verif,string name_user ,int? id_img,string img_path)
{
this.Id = id_quote;
this.Content = content;
this.Likes = likes;
this.Langue = langue;
this.IsValide = isValide;
this.Reason = reason;
this.IdCaracter = id_caracter;
this.NameCharac = name_charac;
this.IdSource = id_source;
this.TitleSrc = title;
this.DateSrc = date;
this.IdUserVerif = id_user_verif;
this.NameUser = name_user;
this.IdImg = id_img;
this.ImgPath =img_path;
}
}
}

@ -0,0 +1,19 @@
using WF_WebAdmin.Model;
namespace WF_WebAdmin.Converter
{
public class QuoteExtension
{
public QuoteDTO QuoteToDTO(Quote q)
{
QuoteDTO quote = new QuoteDTO(q.Id, q.Content, q.Like, q.Langue, null,null, null,q.Charac,null,q.TitleSrc,q.DateSrc,null,q.UserProposition,null,q.ImgPath);
return quote;
}
public Quote DTOToQuote(QuoteDTO q)
{
Quote quote = new Quote(q.Id, q.Content,q.NameCharac,q.ImgPath,q.TitleSrc,q.DateSrc,q.Likes,q.Langue,q.NameUser);
return quote;
}
}
}

@ -0,0 +1,24 @@
using WF_WebAdmin.Model;
namespace WF_WebAdmin.Converter
{
public class UserDTO
{
public string Image { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public DateTime DateCreation { get; set; }
public Boolean IsAdmin { get; set; }
public List<Commentary> Comments { get; set; }
public UserDTO(string image, string name, string email, DateTime dateCreation)
{
this.Image = image;
this.Name = name;
this.Email = email;
this.DateCreation = dateCreation;
}
}
}

@ -0,0 +1,19 @@
using WF_WebAdmin.Model;
namespace WF_WebAdmin.Converter
{
public class UserExtension
{
public User UserToDTO(UserDTO u)
{
User user = new User(u.Image, u.Name, u.Email, u.DateCreation,u.IsAdmin);
return user;
}
public UserDTO DTOToUser(User u)
{
UserDTO user = new UserDTO(u.Image, u.Name, u.Email, u.DateCreation);
return user;
}
}
}

@ -0,0 +1,10 @@
namespace WF_WebAdmin.Model
{
public class Commentary
{
//public int Id { get; set; }
//public int IdUser { get; set; }
public string Text { get; set; }
public DateTime DateCreation { get; set; }
}
}

@ -0,0 +1,12 @@
namespace WF_WebAdmin.Model
{
public class DailyQuote
{
public int Id { get; set; }
public DailyQuote(int Id)
{
this.Id = Id;
}
}
}

@ -0,0 +1,14 @@
namespace WF_WebAdmin.Model
{
public class Quiz
{
public int Id { get; set; }
public string Question { get; set; }
public string AnswerA { get; set; }
public string AnswerB { get; set; }
public string AnswerC { get; set; }
public string AnswerD { get; set; }
public string CAnswer { get; set; }
public string UserProposition { get; set; }
}
}

@ -1,15 +1,67 @@
namespace WF_WebAdmin.Model using Microsoft.AspNetCore.DataProtection.KeyManagement;
namespace WF_WebAdmin.Model
{ {
public class Quote public class Quote
{ {
public int Id { get; set; } public int Id { get; set; }
public string Content { get; set; } public string Content { get; set; }
public int Like { get; set; }
public string Langue { get; set; }
public string Charac { get; set; } public string Charac { get; set; }
public string ImgPath { get; set; } public string ImgPath { get; set; }
public string TitleSrc { get; set; } public string TitleSrc { get; set; }
public DateTime DateSrc { get; set; } public DateTime DateSrc { get; set; }
public int Like { get; set; }
public string Langue { get; set; }
public string UserProposition { get; set; } public string UserProposition { get; set; }
public Quote(int id, string content, string charac, string imgPath, string titleSrc, DateTime dateSrc, int like, string langue, string userProposition)
{
Id = id;
Content = content;
Charac = charac;
ImgPath = imgPath;
TitleSrc = titleSrc;
DateSrc = dateSrc;
Like = like;
Langue = langue;
UserProposition = userProposition;
}
/*
public int Id { get; set; }
public string Content { get; set; }
public int Likes { get; set; }
public string Langue { get; set; }
public bool IsValide { get; set; }
public string? Reason { get; set; }
public int IdCaracter { get; set; }
public int IdSource { get; set; }
public int? IdUserVerif { get; set; }
public Quote(int id, string content, int likes, string langue, bool isValide, string? reason, int idCaracter, int idSource, int idUserVerif)
{
Id = id;
Content = content;
Likes = likes;
Langue = langue;
IsValide = isValide;
Reason = reason;
IdCaracter = idCaracter;
IdSource = idSource;
IdUserVerif = idUserVerif;
}
public Quote(int id, string content, int likes, string langue, bool isValide, string? reason, int idCaracter, int idSource, int? idUserVerif)
{
Id = id;
Content = content;
Likes = likes;
Langue = langue;
IsValide = isValide;
Reason = reason;
IdCaracter = idCaracter;
IdSource = idSource;
IdUserVerif = idUserVerif;
}
*/
} }
} }

@ -8,5 +8,19 @@
public string Email { get; set; } public string Email { get; set; }
public DateTime DateCreation { get; set; } public DateTime DateCreation { get; set; }
public Boolean IsAdmin { get; set; }
public List<Commentary> Comments { get; set; }
public User(string image, string name, string email, DateTime dateCreation, bool isAdmin)
{
this.Image = image;
this.Name = name;
this.Email = email;
this.DateCreation = dateCreation;
IsAdmin = isAdmin;
}
public User() { }
} }
} }

@ -0,0 +1,22 @@
using System;
namespace WF_WebAdmin.Model
{
public class UserLogin
{
public int Id { get; set; }
public string Image { get; set; }
public string Name { get; set;}
public Boolean IsAdmin { get; set; }
public string Mdp { get; set; }
public UserLogin(int id,string image, string name, bool isAdmin, string mdp)
{
Id = id;
this.Image = image;
this.Name = name;
this.IsAdmin = isAdmin;
this.Mdp = mdp;
}
public UserLogin() { }
}
}

@ -1,39 +1,32 @@
@page "/" @page "/Accueil"
<PageTitle>Accueil</PageTitle> <PageTitle>Accueil</PageTitle>
<h1>Accueil</h1> <h2><strong>Bienvenu sur le tableau de bord de What the Fantasy</strong></h2>
<button>Mettre une citation aléatoire</button> <h4>Citation du jour</h4>
@if (quotes != null) @if (Dailyquote != null)
{ {
<table class="table"> @foreach(var quote in Dailyquote)
<thead>
<tr>
<th>Id</th>
<th>Content</th>
<th>Charactére</th>
<th>Title Source</th>
<th>Like</th>
<th>Langue</th>
<th>Date Source</th>
</tr>
</thead>
<tbody>
@foreach (var quote in quotes)
{ {
<tr> <div class="QuoteDiv">
<td>@quote.Id</td> <img class="imgProfil" src="@quote.ImgPath" />
<td>@quote.Content</td> <p class ="pseudo"> @quote.Content</p>
<td>@quote.Charac</td>
<td>@quote.TitleSrc</td> <p class="pseudo"><strong>Personnage :</strong> @quote.Charac</p>
<td>@quote.Like</td> <p class="pseudo"><strong>Source :</strong> @quote.TitleSrc</p>
<td>@quote.Langue</td>
<td>@quote.DateSrc.ToShortDateString()</td> </div>
</tr>
} }
</tbody>
</table>
} }
else
{
<p>Aucune citation du jour</p>
}
<h4>Changement de la citation manuellement</h4>
<button>Mettre une nouvellement citation aléatoire</button>

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Components; using Blazorise.DataGrid;
using Microsoft.AspNetCore.Components;
using WF_WebAdmin.Model; using WF_WebAdmin.Model;
@ -6,7 +7,7 @@ namespace WF_WebAdmin.Pages
{ {
public partial class Accueil public partial class Accueil
{ {
private Quote[] quotes; private Quote[] Dailyquote;
[Inject] [Inject]
public HttpClient Http { get; set; } public HttpClient Http { get; set; }
@ -16,7 +17,8 @@ namespace WF_WebAdmin.Pages
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
quotes = await Http.GetFromJsonAsync<Quote[]>($"{NavigationManager.BaseUri}fake-dataQuote.json"); Dailyquote = await Http.GetFromJsonAsync<Quote[]>($"{NavigationManager.BaseUri}fake-dataDailyQuote.json");
} }
} }
} }

@ -5,22 +5,58 @@
<h3>Gestion des utilisateurs</h3> <h3>Gestion des utilisateurs</h3>
@if (users != null) @if(users == null)
{
<p><strong>Aucun utilisateur présent sur le site</strong></p>
}
else
{ {
<p>Utilisateurs présents:</p> <p>Utilisateurs présents:</p>
@foreach (var user in users) @foreach (var user in users)
{ {
<div class="userDiv"> <div class="userDiv">
<img class="imgProfil" src="@user.Image" /> <img class="imgProfil" src="@user.Image" />
<p class="idUser"><strong>Identifiant d'utilisateur :</strong> @user.Id</p> @if (user.IsAdmin)
{
<p class="pseudo"><strong>Nom d'utilisateur :</strong> @user.Name <strong>(Administrateur)</strong></p>
}
else
{
<p class="pseudo"><strong>Nom d'utilisateur :</strong> @user.Name</p> <p class="pseudo"><strong>Nom d'utilisateur :</strong> @user.Name</p>
}
<p class="mail"><strong>Email de l'utilisateur :</strong> @user.Email</p> <p class="mail"><strong>Email de l'utilisateur :</strong> @user.Email</p>
<p class="dateCrea"><strong>Date de création de l'utilisateur :</strong> @user.DateCreation.ToShortDateString()</p> <p class="dateCrea"><strong>Date de création de l'utilisateur :</strong> @user.DateCreation.ToShortDateString()</p>
<button id="DeleteButton" @onclick="() => ShowDeleteConfirmation(user)">Supprimer l'utilisateur</button> @if (user.Comments != null)
{
<p class="titleComments"><strong>▶ Commentaire(s) posté(s) par @user.Name : </strong></p>
@foreach (var comment in user.Comments)
{
<p class="comments">@comment.DateCreation.ToShortDateString() - @comment.Text</p>
}
}
else
{
<p><i>Aucun commentaire sur le site</i></p>
}
<button id="DeleteButton" @onclick="() => ShowConfirmation(user)">Supprimer l'utilisateur</button>
<button id="ModifyButton" @onclick="() => ShowModifyConfirmation(user)">Modifier l'utilisateur</button> <button id="ModifyButton" @onclick="() => ShowModifyConfirmation(user)">Modifier l'utilisateur</button>
@if (!user.IsAdmin)
{
<button id="AdminButton" @onclick="() => ShowConfirmationAdmin(user)">Ajouter en tant qu'administrateur</button>
}
else
{
<button id="AdminButton" @onclick="() => ShowConfirmationAdmin(user)">Retirer en tant qu'administrateur</button>
}
</div> </div>
} }
@if (showDeletePopup) <!-- Fenêtre de confirmation de suppression -->
@if (showPopupDelete)
{ {
<div class="divPopup"> <div class="divPopup">
<div class="contentPopup"> <div class="contentPopup">
@ -47,7 +83,18 @@
</div> </div>
} }
} }
else
<!-- Fenêtre de confirmation d'ajout admin-->
@if (showPopupAdmin)
{ {
<p><strong>Aucun utilisateurs présents sur le site</strong></p> <div class="divPopup">
<div class="contentPopup">
<p>Êtes-vous sûr de vouloir changer le rôle de cet utilisateur ?</p>
<button @onclick="() => Admin()">Confirmer</button>
<button @onclick="ClosePopup">Annuler</button>
</div>
</div>
}
} }

@ -11,6 +11,9 @@ namespace WF_WebAdmin.Pages
private bool showModifyPopup = false; private bool showModifyPopup = false;
private User userToDelete = null; private User userToDelete = null;
private User selectedUser; private User selectedUser;
private bool showPopupDelete = false;
private bool showPopupAdmin = false;
private User userToAdmin = null;
[Inject] [Inject]
public HttpClient Http { get; set; } public HttpClient Http { get; set; }
@ -23,15 +26,20 @@ namespace WF_WebAdmin.Pages
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
userService = new UserServiceStub($"fake-dataUser.json"); userService = new UserServiceStub($"fake-dataUsers.json");
users = await userService.GetUsersJson(); users = await userService.GetUsersJson();
} }
private void ShowDeleteConfirmation(User user) private void ShowDeleteConfirmation(User user)
{ {
// Afficher la modale et mémoriser l'utilisateur à supprimer
}
// ------- Popup remove user -------
private void ShowConfirmation(User user)
{
userToDelete = user; userToDelete = user;
showDeletePopup = true; showPopupDelete = true;
} }
private void ShowModifyConfirmation(User user) private void ShowModifyConfirmation(User user)
@ -45,7 +53,7 @@ namespace WF_WebAdmin.Pages
{ {
if (userToDelete != null) if (userToDelete != null)
{ {
userService = new UserServiceStub($"fake-dataUser.json"); userService = new UserServiceStub($"fake-dataUsers.json");
await userService.DeleteUserJson(userToDelete.Id); await userService.DeleteUserJson(userToDelete.Id);
ClosePopup(); ClosePopup();
} }
@ -53,7 +61,7 @@ namespace WF_WebAdmin.Pages
private async Task ModifyUser() private async Task ModifyUser()
{ {
userService = new UserServiceStub($"fake-dataUser.json"); userService = new UserServiceStub($"fake-dataUsers.json");
await userService.UpdateUserJson(selectedUser); await userService.UpdateUserJson(selectedUser);
ClosePopup(); ClosePopup();
} }
@ -62,7 +70,33 @@ namespace WF_WebAdmin.Pages
{ {
showDeletePopup = false; showDeletePopup = false;
showModifyPopup = false; showModifyPopup = false;
showPopupDelete = false;
showPopupAdmin = false;
}
// ------- Popup admin -------
private void ShowConfirmationAdmin(User user)
{
userToAdmin = user;
showPopupAdmin = true;
}
private async Task Admin()
{
if (!userToAdmin.IsAdmin)
{
userToAdmin.IsAdmin = true;
ClosePopup();
}
else
{
userToAdmin.IsAdmin = false;
ClosePopup();
} }
} }
} }
}

@ -0,0 +1,29 @@
@page "/"
@using WF_WebAdmin.Model
<h1>▶ Connexion ◀</h1>
<div class="login">
<EditForm Model="userLogin" OnValidSubmit="validlogin">
<DataAnnotationsValidator />
<ValidationSummary />
<label for="name"><strong>Identifiant *</strong></label>
<InputText @bind-Value="userLogin.Name" id="name" placeholder="Entrez votre pseudo" class="connexion" required />
<label for="mdp"><strong>Mot de passe*</strong></label>
<InputText @bind-Value="@userLogin.Mdp" type="password" placeholder="Entrez votre mot de passe" class="connexion" required />
<div class="buttonSubmitDiv">
<button class="buttonSudmite"type="submit">Se Connecter</button>
</div>
<p class="ErrorMsg"><i>@ErrorConnexion</i></p>
</EditForm>
</div>
<p><i>Indice de connexion : admin / admin</i></p>
@code {
}

@ -0,0 +1,67 @@
using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Configuration.UserSecrets;
using WF_WebAdmin.Model;
namespace WF_WebAdmin.Pages
{
public partial class Login
{
private UserLogin userLogin = new UserLogin();
[Inject]
public UserLogin uLogin { get; set; }
private string ErrorConnexion;
private List<UserLogin> usersConnexion;
[Inject]
public HttpClient Http { get; set; }
[Inject]
public NavigationManager NavigationManager { get; set; }
protected override async Task OnInitializedAsync()
{
usersConnexion = await Http.GetFromJsonAsync<List<UserLogin>>($"{NavigationManager.BaseUri}fake-dataUserLogin.json");
}
public void validlogin()
{
if (!string.IsNullOrEmpty(userLogin.Name) || !string.IsNullOrEmpty(userLogin.Mdp))
{
foreach (var user in usersConnexion)
{
if(userLogin.Name == user.Name && userLogin.Mdp == user.Mdp)
{
if(user.IsAdmin)
{
uLogin.Id = userLogin.Id;
uLogin.Name = user.Name;
uLogin.Image = user.Image;
NavigationManager.NavigateTo(NavigationManager.BaseUri + "/accueil");
return;
}
else
{
ErrorConnexion = "Connexion échouée, le nom ou le mot de passe sont incorrectes";
}
}
else
{
ErrorConnexion = "Connexion échouée, le nom ou le mot de passe sont incorrectes";
}
}
}
}
}
}

@ -3,7 +3,7 @@
<PageTitle>Corection des citation</PageTitle> <PageTitle>Corection des citation</PageTitle>
<h3>Corection des citation</h3> <h3>Correction des citations</h3>
<p>Ajouter une recherche</p> <p>Ajouter une recherche</p>

@ -1,4 +0,0 @@
@page "/Quiz"
<h3>Quiz</h3>

@ -0,0 +1,54 @@
@page "/ValidQuiz"
@using System.Dynamic
@using WF_WebAdmin.Model
<h3> Quiz à valider </h3>
@if (quizzes == null)
{
<p> Chargement des quiz ... </p>
}
else
{
<p> Quizs en attente de validation : </p>
<table>
<thead>
<tr>
<th>#</th>
<th>Question</th>
<th>Réponse A</th>
<th>Réponse B</th>
<th>Réponse C</th>
<th>Réponse D</th>
<th>Réponse Correcte</th>
<th>Utilisateur</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach (var quiz in quizzes)
{
<tr>
<td>@quiz.Id</td>
<td>@quiz.Question</td>
<td>@quiz.AnswerA</td>
<td>@quiz.AnswerB</td>
<td>@quiz.AnswerC</td>
<td>@quiz.AnswerD</td>
<td>@quiz.CAnswer</td>
<td>@quiz.UserProposition</td>
<div class="boutons">
<button style="background-color: darkseagreen" @onclick="() => OnValidButton(quiz)">
<img alt="validate" src="check.png"/>
</button>
<button style="background-color: indianred" @onclick="() => OnRejectButton(quiz)">
<img alt="reject" src="cross.png"/>
</button>
</div>
</tr>
}
</tbody>
</table>
}

@ -0,0 +1,43 @@
using Blazorise.DataGrid;
using Microsoft.AspNetCore.Components;
using WF_WebAdmin.Model;
namespace WF_WebAdmin.Pages
{
public partial class ValidQuiz
{
private Quiz[] quizzes;
private int totalQuizzes;
[Inject]
public HttpClient Http { get; set; }
[Inject]
public NavigationManager NavigationManager { get; set; }
protected override async Task OnInitializedAsync()
{
quizzes = await Http.GetFromJsonAsync<Quiz[]>($"{NavigationManager.BaseUri}fake-dataQuiz.json");
}
private void OnValidButton(Quiz quiz)
{
ValidateQuiz(quiz);
}
private void ValidateQuiz(Quiz quiz)
{
Console.WriteLine($"Quiz {quiz.Id} validated!");
}
private void OnRejectButton(Quiz quiz)
{
RejectQuiz(quiz);
}
private void RejectQuiz(Quiz quiz)
{
Console.WriteLine($"Quiz {quiz.Id} rejected!");
}
}
}

@ -7,10 +7,10 @@
{ {
<p>Chargement des citations...</p> <p>Chargement des citations...</p>
} }
else if (quotes.Count == 0) @* else if (quotes.Count == 0)
{ {
<p>Aucune citation en attente de validation.</p> <p>Aucune citation en attente de validation.</p>
} } *@
else else
{ {
<p>Citations en attente de validation :</p> <p>Citations en attente de validation :</p>
@ -21,16 +21,15 @@ else
<p><strong>ID :</strong> @quote.Id</p> <p><strong>ID :</strong> @quote.Id</p>
<p><strong>Contenu :</strong> @quote.Content</p> <p><strong>Contenu :</strong> @quote.Content</p>
<p><strong>Langue :</strong> @quote.Langue</p> <p><strong>Langue :</strong> @quote.Langue</p>
<p><strong>Likes :</strong> @quote.Like</p>
<p><strong>Personnage :</strong> @quote.Charac</p> <p><strong>Personnage :</strong> @quote.Charac</p>
<p><strong>Image :</strong> @quote.ImgPath</p> <p><strong>Image :</strong> @quote.ImgPath</p>
<p><strong>Source :</strong> @quote.TitleSrc</p> <p><strong>Source :</strong> @quote.TitleSrc</p>
<p><strong>Date de source :</strong> @quote.DateSrc.ToShortDateString()</p> <p><strong>Date de source :</strong> @quote.DateSrc.ToShortDateString()</p>
<p><strong>Utilisateur proposition :</strong> @quote.UserProposition</p> <p><strong>Utilisateur :</strong> @quote.UserProposition</p>
<button @onclick="() => ValiderQuote(quote.Id)">Valider</button> @* <button @onclick="() => ValiderQuote(quote.Id)">Valider</button>
<button @onclick="() => RejeterQuote(quote.Id)">Rejeter</button> <button @onclick="() => RejeterQuote(quote.Id)">Rejeter</button> *@
</div> </div>
} }
} }

@ -11,129 +11,17 @@ namespace WF_WebAdmin.Pages
{ {
public partial class ValidQuote public partial class ValidQuote
{ {
// Chaîne de connexion à adapter private Quote[] quotes;
private const string connectionString =
"Host=localhost;Port=5432;Database=wikifantasy3;Username=postgres;Password=postgres";
private List<Quote> quotes; [Inject]
public HttpClient Http { get; set; }
protected override async Task OnInitializedAsync() [Inject]
{ public NavigationManager NavigationManager { get; set; }
// On charge toutes les citations dont isValide = false
quotes = await LoadNotValidatedQuotesAsync();
}
/// <summary>
/// Charge toutes les citations non validées (isValide = false)
/// et mappe les colonnes vers ton modèle.
/// </summary>
private async Task<List<Quote>> LoadNotValidatedQuotesAsync()
{
var result = new List<Quote>();
try
{
using var con = new NpgsqlConnection(connectionString);
await con.OpenAsync();
// Sélection des colonnes réellement présentes en DB
// + placeholders pour les autres
var sql = @"
SELECT
id_quote AS Id,
content AS Content,
likes AS ""Like"",
langue AS Langue,
-- Champs pas vraiment en DB : placeholders
'' AS Charac,
'' AS ImgPath,
'' AS TitleSrc,
now() AS DateSrc,
'' AS UserProposition
FROM quote
WHERE isValide = false
";
using var cmd = new NpgsqlCommand(sql, con);
using var reader = await cmd.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
var q = new Quote
{
Id = reader.GetInt32(reader.GetOrdinal("Id")),
Content = reader.GetString(reader.GetOrdinal("Content")),
Like = reader.GetInt32(reader.GetOrdinal("Like")),
Langue = reader.GetString(reader.GetOrdinal("Langue")),
// placeholders
Charac = reader.GetString(reader.GetOrdinal("Charac")),
ImgPath = reader.GetString(reader.GetOrdinal("ImgPath")),
TitleSrc = reader.GetString(reader.GetOrdinal("TitleSrc")),
DateSrc = reader.GetDateTime(reader.GetOrdinal("DateSrc")),
UserProposition = reader.GetString(reader.GetOrdinal("UserProposition"))
};
result.Add(q);
}
}
catch (Exception ex)
{
Console.WriteLine($"[Erreur] LoadNotValidatedQuotesAsync : {ex.Message}");
}
return result;
}
/// <summary>
/// Met à jour isValide = true pour la citation.
/// </summary>
private async Task ValiderQuote(int quoteId)
{
try
{
using var con = new NpgsqlConnection(connectionString);
await con.OpenAsync();
var sql = "UPDATE quote SET isValide = true WHERE id_quote = @Id";
using var cmd = new NpgsqlCommand(sql, con);
cmd.Parameters.AddWithValue("Id", quoteId);
int rowsAffected = await cmd.ExecuteNonQueryAsync();
if (rowsAffected > 0)
{
// Supprime la quote de la liste pour l'enlever de l'affichage
quotes.RemoveAll(q => q.Id == quoteId);
}
}
catch (Exception ex)
{
Console.WriteLine($"[Erreur] ValiderQuote : {ex.Message}");
}
}
/// <summary> protected override async Task OnInitializedAsync()
/// Supprime complètement la citation de la base.
/// </summary>
private async Task RejeterQuote(int quoteId)
{
try
{
using var con = new NpgsqlConnection(connectionString);
await con.OpenAsync();
var sql = "DELETE FROM quote WHERE id_quote = @Id";
using var cmd = new NpgsqlCommand(sql, con);
cmd.Parameters.AddWithValue("Id", quoteId);
int rowsAffected = await cmd.ExecuteNonQueryAsync();
if (rowsAffected > 0)
{
quotes.RemoveAll(q => q.Id == quoteId);
}
}
catch (Exception ex)
{ {
Console.WriteLine($"[Erreur] RejeterQuote : {ex.Message}"); quotes = await Http.GetFromJsonAsync<Quote[]>($"{NavigationManager.BaseUri}fake-dataQuote.json");
}
} }
} }
} }

@ -12,6 +12,7 @@
<link href="css/site.css" rel="stylesheet" /> <link href="css/site.css" rel="stylesheet" />
<link href="WF-WebAdmin.styles.css" rel="stylesheet" /> <link href="WF-WebAdmin.styles.css" rel="stylesheet" />
<component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" /> <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
<link rel="icon" type="image/svg" href="../Shared/iconwf.svg" />
</head> </head>
<body> <body>
@RenderBody() @RenderBody()
@ -33,5 +34,6 @@
<link href="_content/Blazorise/blazorise.css" rel="stylesheet" /> <link href="_content/Blazorise/blazorise.css" rel="stylesheet" />
<link href="_content/Blazorise.Bootstrap/blazorise.bootstrap.css" rel="stylesheet" /> <link href="_content/Blazorise.Bootstrap/blazorise.bootstrap.css" rel="stylesheet" />
</body> </body>
</html> </html>

@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.Web;
using WF_WebAdmin.Data; using WF_WebAdmin.Data;
using WF_WebAdmin.Service; using WF_WebAdmin.Service;
using WF_WebAdmin.Model;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
@ -14,10 +15,12 @@ builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>(); builder.Services.AddSingleton<WeatherForecastService>();
builder.Services.AddScoped<IQuoteService,QuoteServiceStub>(); builder.Services.AddScoped<IQuoteService,QuoteServiceStub>();
builder.Services.AddHttpClient(); builder.Services.AddHttpClient();
builder.Services.AddScoped<UserLogin>();
builder.Services builder.Services
.AddBlazorise() .AddBlazorise()
.AddBootstrapProviders() .AddBootstrapProviders()
.AddHttpClient()
.AddFontAwesomeIcons(); .AddFontAwesomeIcons();
var app = builder.Build(); var app = builder.Build();

@ -0,0 +1,25 @@
using WF_WebAdmin.Model;
namespace WF_WebAdmin.Service;
public class QuizService
{
public List<Quiz> GetQuizToConfirm()
{
var res = new List<Quiz>();
return res;
}
public bool AddQuiz(Quiz quiz)
{
var res = false;
return res;
}
public bool RemoveQuiz(Quiz quiz)
{
var res = false;
return res;
}
}

@ -0,0 +1,141 @@
using WF_WebAdmin.Converter;
using WF_WebAdmin.Model;
using Npgsql;
namespace WF_WebAdmin.Service
{
public class QuoteServiceLocal: IQuoteService
{
private readonly string? _connectionString = "Host=localhost;Port=5432;Username=loguichard3;Password=Reglisse15.;Database=dbloguichard3";
public async Task<QuoteDTO> AddQuoteAsync(Quote quote)
{
QuoteExtension extension = new QuoteExtension();
QuoteDTO quoteDTO = extension.QuoteToDTO(quote);
// Utilisation de NpgsqlConnection pour PostgreSQL
using (var connection = new NpgsqlConnection(_connectionString))
{
// Définir la requête SQL d'insertion
var commandText = "INSERT INTO Quote (content, langue, reason, id_source, id_caracter, id_user_verif, img_path) " +
"VALUES (@content, @langue, @reason, @source, @character, @user, @img_path)";
// Créer une commande Npgsql
var command = new NpgsqlCommand(commandText, connection);
/*
// Ajouter des paramètres à la commande
command.Parameters.AddWithValue("@content", quote.Content);
command.Parameters.AddWithValue("@langue", quote.Langue);
command.Parameters.AddWithValue("@reason", "À vérifier"); // Vous pouvez changer ça si nécessaire
command.Parameters.AddWithValue("@source", quote.Source);
command.Parameters.AddWithValue("@character", quote.Character);
command.Parameters.AddWithValue("@user", quote.User); // Assurez-vous que `quote.User` est correctement défini
command.Parameters.AddWithValue("@img_path", quote.ImgPath);
*/
try
{
// Ouvrir la connexion à la base de données
await connection.OpenAsync();
// Exécuter la commande d'insertion
await command.ExecuteNonQueryAsync();
}
catch (Exception ex)
{
// Gérer les erreurs ici (par exemple, afficher ou enregistrer les erreurs)
Console.WriteLine($"Une erreur est survenue lors de l'ajout de la citation : {ex.Message}");
}
finally
{
// Fermer la connexion (automatiquement géré avec `using`, mais ajouté pour explicitement montrer le processus)
await connection.CloseAsync();
}
}
// Retourner l'objet DTO pour que vous puissiez l'utiliser ailleurs dans votre application
return quoteDTO;
}
public Task RemoveQuote(Quote quote)
{
QuoteExtension extension = new QuoteExtension();
QuoteDTO quoteDTO = extension.QuoteToDTO(quote);
return Task.FromResult(quoteDTO);
}
public Task validQuote(Quote quote)
{
QuoteExtension extension = new QuoteExtension();
QuoteDTO quoteDTO = extension.QuoteToDTO(quote);
return Task.FromResult(quoteDTO);
}
public Task updateQuote(Quote quote)
{
QuoteExtension extension = new QuoteExtension();
QuoteDTO quoteDTO = extension.QuoteToDTO(quote);
return Task.FromResult(quoteDTO);
}
public Task addQuote(Quote quote)
{
throw new NotImplementedException();
}
public Task removeQuote(Quote quote)
{
throw new NotImplementedException();
}
public Task<List<Quote>> getAllQuote()
{
throw new NotImplementedException();
}
public Task<List<Quote>> getSomeQuote(int nb, int page)
{
throw new NotImplementedException();
}
public Task<List<Quote>> reserchQuote(string reserch, List<string> argument)
{
throw new NotImplementedException();
}
public Task<List<Quote>> getAllQuoteInvalid()
{
throw new NotImplementedException();
}
public Task<List<Quote>> getSomeQuoteInvalid(int nb, int page)
{
throw new NotImplementedException();
}
public Task<Quote> getOnequote(int id)
{
throw new NotImplementedException();
}
public Task<int> getNbQuote()
{
throw new NotImplementedException();
}
}
}

@ -1,4 +1,4 @@
using System.Text.Json; using System.Text.Json;
using WF_WebAdmin.Model; using WF_WebAdmin.Model;
namespace WF_WebAdmin.Service; namespace WF_WebAdmin.Service;
@ -83,7 +83,7 @@ namespace WF_WebAdmin.Service;
{ {
return q; return q;
} }
return new Quote(); return null;
} }
public async Task<List<Quote>> reserchQuote(string reserch, List<string> argument) public async Task<List<Quote>> reserchQuote(string reserch, List<string> argument)

@ -1,18 +1,36 @@
@inherits LayoutComponentBase @using WF_WebAdmin.Model
@inherits LayoutComponentBase
@inject UserLogin uLogin
<PageTitle>WF-WebAdmin</PageTitle> <PageTitle>WF-WebAdmin</PageTitle>
<div class="page"> <div class="page">
@if (uLogin.Name != null)
{
<div class="sidebar"> <div class="sidebar">
<NavMenu/> <NavMenu/>
</div> </div>
}
<main> <main>
<div class="top-row px-4"> <div class="top-row px-4">
<a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a> @if (!string.IsNullOrEmpty(uLogin.Name))
{
<button class="buttonProfil" type="button"> <img class="imageProfil" src="@uLogin.Image" height="90" width="480" /></button>
@* <img class="imageProfil" src="@uLogin.Image" /> *@
}
else
{
<img class="imageProfil" src="https://cdn-icons-png.flaticon.com/512/61/61205.png"/>
}
</div> </div>
<article class="content px-4"> <article class="content px-4">
@Body @Body
</article> </article>
</main> </main>
</div> </div>

@ -0,0 +1,13 @@
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Mvc;
using System;
using WF_WebAdmin.Model;
namespace WF_WebAdmin.Shared
{
public partial class MainLayout
{
}
}

@ -1,6 +1,10 @@
<div class="top-row ps-3 navbar navbar-dark"> @using WF_WebAdmin.Model
@inject UserLogin uLogin
<div class="top-row ps-3 navbar navbar-dark">
<div class="container-fluid"> <div class="container-fluid">
<a class="navbar-brand" href="">Wiki Fantasy</a> <a class="navbar-brand" href="">What the Fantasy</a>
<button title="Navigation menu" class="navbar-toggler" @onclick="ToggleNavMenu"> <button title="Navigation menu" class="navbar-toggler" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
@ -9,19 +13,21 @@
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu"> <div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
<nav class="flex-column"> <nav class="flex-column">
<div class="nav-item px-3"> <div class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All"> <NavLink class="nav-link" href="Accueil">
<span class="oi oi-home" aria-hidden="true"></span> Accueil <span class="oi oi-plus" aria-hidden="true"></span> Accueil
</NavLink> </NavLink>
</div> </div>
<div class="nav-item px-3"> <div class="nav-item px-3">
<NavLink class="nav-link" href="Quiz"> <NavLink class="nav-link" href="ValidQuote">
<span class="oi oi-plus" aria-hidden="true"></span> Quiz <span class="oi oi-list-rich" aria-hidden="true"></span> Validation de citations
</NavLink> </NavLink>
</div> </div>
<div class="nav-item px-3"> <div class="nav-item px-3">
<NavLink class="nav-link" href="ValidQuote"> <NavLink class="nav-link" href="ValidQuiz">
<span class="oi oi-list-rich" aria-hidden="true"></span> Validation de citations <span class="oi oi-list-rich" aria-hidden="true"></span> Validation de quiz
</NavLink> </NavLink>
</div> </div>
@ -33,7 +39,7 @@
<div class="nav-item px-3"> <div class="nav-item px-3">
<NavLink class="nav-link" href="modifquote"> <NavLink class="nav-link" href="modifquote">
<span class="oi oi-list-rich" aria-hidden="true"></span> Corection des citation <span class="oi oi-list-rich" aria-hidden="true"></span> Correction des citations
</NavLink> </NavLink>
</div> </div>
@ -51,3 +57,5 @@
collapseNavMenu = !collapseNavMenu; collapseNavMenu = !collapseNavMenu;
} }
} }

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>

@ -9,3 +9,4 @@
@using WF_WebAdmin @using WF_WebAdmin
@using WF_WebAdmin.Shared @using WF_WebAdmin.Shared
@using Blazorise.DataGrid @using Blazorise.DataGrid

@ -5,5 +5,8 @@
"Microsoft.AspNetCore": "Warning" "Microsoft.AspNetCore": "Warning"
} }
}, },
"AllowedHosts": "*" "AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "Host=localhost;Port=5432;Database=wikifantasy3;Username=postgres;Password=postgres"
}
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

@ -1,4 +1,5 @@
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); @import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap');
html, body { html, body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
@ -123,3 +124,129 @@ button {
width: 300px; width: 300px;
text-align: center; text-align: center;
} }
table {
border-collapse: collapse;
width: 100%;
}
td {
padding: 10px 20px;
border: none;
}
.boutons {
display: flex;
justify-content: space-between;
gap: 10px;
}
.boutons button {
border: none;
background-color: transparent;
padding: 5px;
cursor: pointer;
}
.boutons button img {
width: 24px;
height: 24px;
object-fit: contain;
}
.buttonSubmitDiv {
text-align: center;
}
h1 {
text-align: center;
font-size: 32px;
margin-top: 10%;
font-family: "Roboto", serif;
}
p {
margin-bottom: 2%;
font-size: 20px;
font-family: "Roboto", serif;
}
.login {
width: 35vw;
margin-left: 30.5vw;
margin-top: 3vh;
border-radius: 25px;
padding: 2vw;
background-color: #cfcfcf;
}
/*Page login*/
.buttonSudmite {
border: none;
padding: 2%;
margin-top: 5%;
border-radius: 25px;
width: 50%;
font-size: 1.25em;
background-color: white;
font-family: "Roboto", serif;
}
.connexion {
width: 94%;
height: 40px;
padding-left: 3%;
margin-left: 1%;
margin-top: -1%;
border-radius: 25px;
border: none;
font-size: 15px;
}
.ErrorMsg {
color: red;
}
table {
border-collapse: collapse;
width: 100%;
}
td {
padding: 10px 20px;
border: none;
}
.boutons {
display: flex;
justify-content: space-between;
gap: 10px;
}
.boutons button {
border: none;
background-color: transparent;
padding: 5px;
cursor: pointer;
}
.boutons button img {
width: 24px;
height: 24px;
object-fit: contain;
}
.imageProfil {
height: auto;
width: 30px;
border-radius: 45%;
}
.buttonProfil{
background-color:transparent;
}

@ -0,0 +1,8 @@
[
{
"users": 1
},
{
"users": 4
}
]

@ -0,0 +1,52 @@
[
{
"id_caracter":82,
"caracter": "The Wolf",
"id_img": 1
},
{
"id_caracter":50,
"caracter": "Sirius Black",
"id_img": 2
},
{
"id_caracter":77,
"caracter": "Boromir",
"id_img": 3
},
{
"id_caracter": 29,
"caracter": "Maître Oogway",
"id_img": 4
},
{
"id_caracter":7,
"caracter": "Drago Malefoy",
"id_img": 5
},
{
"id_caracter":44,
"caracter": "TChalla / Black Panther",
"id_img": 6
},
{
"id_caracter":53,
"caracter": "Butch",
"id_img": 7
},
{
"id_caracter": 39,
"caracter": "Coco",
"id_img": 8
},
{
"id_caracter": 34,
"caracter": "John Coffey",
"id_img": 9
},
{
"id_caracter": 38,
"caracter": "Harold",
"id_img": 10
}
]

@ -0,0 +1,9 @@
[
{
"id_comment": 1,
"quote": 1,
"users": 1,
"dateC":"2024-10-10",
"comment": "coucou"
}
]

@ -0,0 +1,12 @@
[
{
"Id": "1",
"Content": "Dans le monde il ny a pas dun côté le bien et le mal, il y a une part de lumière et dombre en chacun de nous. Ce qui compte cest celle que lon choisit de montrer dans nos actes, ça cest ce que lon est vraiment.",
"Likes": 0,
"Langue": "fr",
"Charac": "Superman",
"TitleSrc": "SuperMan : le film",
"UserProposition": "joe",
"ImgPath": "https://tse4.mm.bing.net/th/id/OIP.fc5TQflh0cbxB1GUeOdk6gHaK8?w=123&h=180&c=7&r=0&o=5&pid=1.7"
}
]

@ -0,0 +1,82 @@
[
{
"id_img": 1,
"imgPath": "https://tse4.mm.bing.net/th/id/OIP.fc5TQflh0cbxB1GUeOdk6gHaK8?w=123&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 2,
"imgPath": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137&h=195&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 3,
"imgPath": "https://tse1.mm.bing.net/th/id/OIP._uHLsNbgnf1m1vK3ZWE2UAHaEo?w=217&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 4,
"imgPath": "https://tse4.mm.bing.net/th/id/OIP.QzDh_d2T5aADiDJ7uMFU6gHaHa?w=157&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 5,
"imgPath": "https://tse2.mm.bing.net/th/id/OIP.CthWIxuLm0a8THOguTDB_AAAAA?w=157&h=207&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 6,
"imgPath": "https://tse4.mm.bing.net/th/id/OIP.XNQPKwc1OUfvnSO9MsxDYgHaE7?w=202&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 7,
"imgPath": "https://tse1.mm.bing.net/th/id/OIP.luN_zVQJt2Kyf7H_kSrPyQHaJD?w=115&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 8,
"imgPath": "https://tse1.mm.bing.net/th/id/OIP.GPIbva8dEP6Kllx-sj5ysAHaK-?w=115&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 9,
"imgPath": "https://tse4.mm.bing.net/th/id/OIP.loqNhw71Vk_C-TiyWQJoKAHaKK?w=95&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 10,
"imgPath": "https://tse2.mm.bing.net/th/id/OIP._OiJHgI7cal4cWNHcCE9zAHaM2?w=115&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 11,
"imgPath": "https://tse2.mm.bing.net/th/id/OIP.B9RbuWnpmV-7fI8v-H0G8gHaEK?w=290&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 12,
"imgPath": "https://tse2.mm.bing.net/th/id/OIP.RrJkua2jY_o24eUG7wmk8QHaE-?w=232&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 13,
"imgPath": "https://tse3.mm.bing.net/th/id/OIP.-1Ds-2D5GPiu9uejDdmgNgHaH3?w=124&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 14,
"imgPath": "https://tse3.mm.bing.net/th/id/OIP.BeQYJEP1pQKzHDLGhTLBtgHaFj?w=243&h=182&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 15,
"imgPath": "https://tse3.mm.bing.net/th/id/OIP.lDzxwo1weGaA-hRMfV6bYwHaGp?w=194&h=174&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 16,
"imgPath": "https://tse2.mm.bing.net/th/id/OIP.3vXkEUJ9J8s-GsnBC6I3KAHaF0?w=185&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 17,
"imgPath": "https://tse4.mm.bing.net/th/id/OIP.omU-pPTNgHJEiTKJUpB1MAHaIw?w=114&h=180&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 18,
"imgPath": "https://tse2.mm.bing.net/th/id/OIP.Qoh2doQIigxyiOBuhgRx9gHaM7?w=115&h=186&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 19,
"imgPath": "https://tse3.mm.bing.net/th/id/OIP.hyDe8SvEEvDhmKfsQBqWEwHaJ8?w=194&h=261&c=7&r=0&o=5&pid=1.7"
},
{
"id_img": 20,
"imgPath": "https://tse3.mm.bing.net/th/id/OIP.S4q6m2na1Rxkc7xZ1lcfKQHaJe?w=135&h=180&c=7&r=0&o=5&pid=1.7"
}
]

@ -1,90 +0,0 @@
[
{
"Id": 1,
"ImgPath": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137&h=195&c=7&r=0&o=5&pid=1.7",
"Content": "Harry POTTER JE SUIS TON PERE",
"Charac": "Sirius Black",
"TitleSrc": "Harry Potter",
"Langue": "fr",
"UserProposition": "demo",
"DateSrc": "2001-01-01",
"Like": 20
},
{
"Id": 2,
"ImgPath": "https://tse2.mm.bing.net/th/id/OIP.zR4rzkK7q2wCcNwZd6jjegHaIC?w=163&h=180&c=7&r=0&o=5&pid=1.7",
"Content": "'Une autre citation'",
"Charac": "Un personnage",
"TitleSrc": "Un super film",
"Langue": "fr",
"DateSrc": "2002-02-02",
"Like": 0,
"UserProposition": "exploit"
},
{
"Id": 1,
"ImgPath": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137&h=195&c=7&r=0&o=5&pid=1.7",
"Content": "Harry POTTER JE SUIS TON PERE",
"Charac": "Sirius Black",
"TitleSrc": "Harry Potter",
"Langue": "fr",
"UserProposition": "demo",
"DateSrc": "2001-01-01",
"Like": 20
},
{
"Id": 2,
"ImgPath": "https://tse2.mm.bing.net/th/id/OIP.zR4rzkK7q2wCcNwZd6jjegHaIC?w=163&h=180&c=7&r=0&o=5&pid=1.7",
"Content": "'Une autre citation'",
"Charac": "Un personnage",
"TitleSrc": "Un super film",
"Langue": "fr",
"DateSrc": "2002-02-02",
"Like": 0,
"UserProposition": "exploit"
},
{
"Id": 1,
"ImgPath": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137&h=195&c=7&r=0&o=5&pid=1.7",
"Content": "Harry POTTER JE SUIS TON PERE",
"Charac": "Sirius Black",
"TitleSrc": "Harry Potter",
"Langue": "fr",
"UserProposition": "demo",
"DateSrc": "2001-01-01",
"Like": 20
},
{
"Id": 2,
"ImgPath": "https://tse2.mm.bing.net/th/id/OIP.zR4rzkK7q2wCcNwZd6jjegHaIC?w=163&h=180&c=7&r=0&o=5&pid=1.7",
"Content": "'Une autre citation'",
"Charac": "Un personnage",
"TitleSrc": "Un super film",
"Langue": "fr",
"DateSrc": "2002-02-02",
"Like": 0,
"UserProposition": "exploit"
},
{
"Id": 1,
"ImgPath": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137&h=195&c=7&r=0&o=5&pid=1.7",
"Content": "Harry POTTER JE SUIS TON PERE",
"Charac": "Sirius Black",
"TitleSrc": "Harry Potter",
"Langue": "fr",
"UserProposition": "demo",
"DateSrc": "2001-01-01",
"Like": 20
},
{
"Id": 2,
"ImgPath": "https://tse2.mm.bing.net/th/id/OIP.zR4rzkK7q2wCcNwZd6jjegHaIC?w=163&h=180&c=7&r=0&o=5&pid=1.7",
"Content": "'Une autre citation'",
"Charac": "Un personnage",
"TitleSrc": "Un super film",
"Langue": "fr",
"DateSrc": "2002-02-02",
"Like": 0,
"UserProposition": "exploit"
}
]

@ -0,0 +1,83 @@
[
{
"id_question": 1,
"texte": "May the Force be with you.",
"answerA": "Star Wars",
"answerB": "Star Trek",
"answerC": "The Matrix",
"answerD": "Blade Runner",
"cAnswer": "Star Wars"
},
{
"id_question": 2,
"texte": "I m gonna make him an offer he can t refuse.",
"answerA": "The Godfather",
"answerB": "Goodfellas",
"answerC": "Scarface",
"answerD": "The Sopranos",
"cAnswer": "The Godfather"
},
{
"id_question": 3,
"texte": "To infinity and beyond!",
"answerA": "Toy Story",
"answerB": "The Incredibles",
"answerC": "Finding Nemo",
"answerD": "Shrek",
"cAnswer": "Toy Story"
},
{
"id_question": 4,
"texte": "All we have to decide is what to do with the time that is given to us.",
"answerA": "The Lord of the Rings",
"answerB": "Harry Potter",
"answerC": "The Hobbit",
"answerD": "Narnia",
"cAnswer": "The Lord of the Rings"
},
{
"id_question": 5,
"texte": "I am your father.",
"answerA": "Star Wars",
"answerB": "Star Wars",
"answerC": "Star Trek",
"answerD": "Guardians of the Galaxy",
"cAnswer": "Star Wars"
},
{
"id_question": 6,
"texte": "It is a trap!",
"answerA": "Star Wars",
"answerB": "Battlestar Galactica",
"answerC": "Star Trek",
"answerD": "The Matrix",
"cAnswer": "Star Wars"
},
{
"id_question": 7,
"texte": "Winter is coming.",
"answerA": "Game of Thrones",
"answerB": "The Witcher",
"answerC": "Vikings",
"answerD": "The Mandalorian",
"cAnswer": "Game of Thrones"
},
{
"id_question": 8,
"texte": "Elementary, my dear Watson.",
"answerA": "Sherlock Holmes",
"answerB": "Agatha Christie",
"answerC": "Poirot",
"answerD": "The Hound of the Baskervilles",
"cAnswer": "Sherlock Holmes"
},
{
"id_question": 9,
"texte": "Here is looking at you, kid.",
"answerA": "Casablanca",
"answerB": "Gone with the Wind",
"answerC": "Citizen Kane",
"answerD": "The Maltese Falcon",
"cAnswer": "Casablanca"
}
]

@ -0,0 +1,282 @@
[
{
"id": 1,
"question": "Voluptate nulla laborum pariatur excepteur consequat officia ea esse ut nisi amet non.",
"answerA": "sit ullamco",
"answerB": "deserunt reprehenderit",
"answerC": "cupidatat deserunt",
"answerD": "ullamco aliqua",
"cAnswer": "B",
"userProposition": "Lori Myers"
},
{
"id": 2,
"question": "Ea elit esse minim aute aliquip cillum amet cupidatat fugiat exercitation.",
"answerA": "ullamco excepteur",
"answerB": "aliquip occaecat",
"answerC": "incididunt duis",
"answerD": "sunt dolor",
"cAnswer": "A",
"userProposition": "Louella Robinson"
},
{
"id": 3,
"question": "Aute commodo est proident sunt nulla est cillum eiusmod est voluptate dolore sit aliqua incididunt.",
"answerA": "reprehenderit mollit",
"answerB": "laboris consectetur",
"answerC": "cillum deserunt",
"answerD": "deserunt fugiat",
"cAnswer": "B",
"userProposition": "Richmond Joyner"
},
{
"id": 4,
"question": "Fugiat duis excepteur non amet tempor deserunt ut occaecat cupidatat eiusmod et amet enim.",
"answerA": "amet aute",
"answerB": "excepteur ad",
"answerC": "laboris veniam",
"answerD": "veniam in",
"cAnswer": "B",
"userProposition": "Brady Patrick"
},
{
"id": 5,
"question": "Occaecat minim velit dolor est ad ut irure eu labore velit in dolore exercitation.",
"answerA": "eu aliqua",
"answerB": "labore ipsum",
"answerC": "labore reprehenderit",
"answerD": "anim excepteur",
"cAnswer": "C",
"userProposition": "Mavis Boone"
},
{
"id": 6,
"question": "Non laboris adipisicing anim fugiat labore excepteur tempor elit in.",
"answerA": "in excepteur",
"answerB": "nostrud dolor",
"answerC": "nisi aliqua",
"answerD": "sint nisi",
"cAnswer": "C",
"userProposition": "Douglas Dejesus"
},
{
"id": 7,
"question": "Lorem proident exercitation elit fugiat do amet aute labore consectetur pariatur consequat.",
"answerA": "eiusmod nulla",
"answerB": "eu id",
"answerC": "proident tempor",
"answerD": "amet proident",
"cAnswer": "A",
"userProposition": "Mia Peterson"
},
{
"id": 8,
"question": "Incididunt magna commodo laborum do incididunt commodo proident non cillum magna elit irure voluptate.",
"answerA": "laborum fugiat",
"answerB": "laboris est",
"answerC": "in ea",
"answerD": "duis ullamco",
"cAnswer": "A",
"userProposition": "Juliet Fox"
},
{
"id": 9,
"question": "Qui labore fugiat sint Lorem ut minim in ex dolor.",
"answerA": "et deserunt",
"answerB": "labore sit",
"answerC": "in eiusmod",
"answerD": "amet incididunt",
"cAnswer": "C",
"userProposition": "Earnestine Poole"
},
{
"id": 10,
"question": "Voluptate pariatur ipsum magna sint Lorem adipisicing.",
"answerA": "sint velit",
"answerB": "non culpa",
"answerC": "nisi ut",
"answerD": "excepteur labore",
"cAnswer": "B",
"userProposition": "Alexis Cross"
},
{
"id": 11,
"question": "In labore sunt est cupidatat cillum.",
"answerA": "ut ad",
"answerB": "non deserunt",
"answerC": "do officia",
"answerD": "ut nostrud",
"cAnswer": "C",
"userProposition": "Brooks Martinez"
},
{
"id": 12,
"question": "Irure occaecat sit laborum nulla ea dolore et aliqua sunt Lorem enim esse.",
"answerA": "excepteur occaecat",
"answerB": "pariatur in",
"answerC": "reprehenderit excepteur",
"answerD": "laborum adipisicing",
"cAnswer": "D",
"userProposition": "Shields Roth"
},
{
"id": 13,
"question": "Laboris sint in sit exercitation nisi id cillum ex ea culpa fugiat in cupidatat.",
"answerA": "labore mollit",
"answerB": "in veniam",
"answerC": "labore eiusmod",
"answerD": "consequat veniam",
"cAnswer": "B",
"userProposition": "Carmella Chase"
},
{
"id": 14,
"question": "Proident dolor Lorem anim proident laborum sint minim sit laborum aliquip.",
"answerA": "velit exercitation",
"answerB": "voluptate esse",
"answerC": "occaecat cupidatat",
"answerD": "enim adipisicing",
"cAnswer": "D",
"userProposition": "Johns Solomon"
},
{
"id": 15,
"question": "Do magna dolore enim laborum consequat reprehenderit nisi consequat nostrud.",
"answerA": "proident do",
"answerB": "labore minim",
"answerC": "in elit",
"answerD": "in irure",
"cAnswer": "A",
"userProposition": "Alana Moore"
},
{
"id": 16,
"question": "Culpa anim id elit dolore veniam.",
"answerA": "ipsum nisi",
"answerB": "officia voluptate",
"answerC": "in excepteur",
"answerD": "ullamco non",
"cAnswer": "B",
"userProposition": "Russo Rios"
},
{
"id": 17,
"question": "Ea est consectetur exercitation aute ut mollit pariatur irure aute adipisicing dolore.",
"answerA": "fugiat elit",
"answerB": "pariatur nulla",
"answerC": "exercitation ipsum",
"answerD": "exercitation laboris",
"cAnswer": "A",
"userProposition": "Bobbi Lara"
},
{
"id": 18,
"question": "Laborum consectetur incididunt ad fugiat fugiat proident culpa mollit laborum.",
"answerA": "elit duis",
"answerB": "amet aute",
"answerC": "culpa nostrud",
"answerD": "do pariatur",
"cAnswer": "D",
"userProposition": "Lewis Mullins"
},
{
"id": 19,
"question": "Culpa anim aliquip mollit non labore.",
"answerA": "labore incididunt",
"answerB": "laborum non",
"answerC": "sunt laborum",
"answerD": "est sunt",
"cAnswer": "B",
"userProposition": "Mccray Mccoy"
},
{
"id": 20,
"question": "Ex exercitation deserunt aute cillum dolor.",
"answerA": "proident magna",
"answerB": "pariatur exercitation",
"answerC": "ipsum veniam",
"answerD": "culpa quis",
"cAnswer": "C",
"userProposition": "Moss Jefferson"
},
{
"id": 21,
"question": "Do mollit aute dolore anim id non aliqua.",
"answerA": "ipsum aute",
"answerB": "irure ex",
"answerC": "ex duis",
"answerD": "ipsum cupidatat",
"cAnswer": "B",
"userProposition": "Roth Valdez"
},
{
"id": 22,
"question": "Commodo sunt reprehenderit tempor sit ut ea Lorem esse minim elit et sunt sint qui.",
"answerA": "et do",
"answerB": "officia culpa",
"answerC": "et commodo",
"answerD": "irure tempor",
"cAnswer": "D",
"userProposition": "Adrienne Carpenter"
},
{
"id": 23,
"question": "Excepteur cupidatat ut sit commodo magna elit.",
"answerA": "pariatur tempor",
"answerB": "proident non",
"answerC": "velit elit",
"answerD": "pariatur fugiat",
"cAnswer": "D",
"userProposition": "Mcknight Cain"
},
{
"id": 24,
"question": "Laborum eu nisi consequat voluptate in laboris cillum in aute sint excepteur aliqua Lorem in.",
"answerA": "pariatur in",
"answerB": "voluptate qui",
"answerC": "et cillum",
"answerD": "adipisicing id",
"cAnswer": "D",
"userProposition": "Gay Barlow"
},
{
"id": 25,
"question": "Laborum ullamco occaecat excepteur deserunt nostrud dolor.",
"answerA": "magna labore",
"answerB": "ullamco veniam",
"answerC": "reprehenderit irure",
"answerD": "magna dolore",
"cAnswer": "B",
"userProposition": "Hannah Battle"
},
{
"id": 26,
"question": "Commodo in amet laboris Lorem et qui anim ea ullamco dolor dolor commodo.",
"answerA": "amet nulla",
"answerB": "laborum mollit",
"answerC": "amet in",
"answerD": "irure amet",
"cAnswer": "D",
"userProposition": "Dawson Mcpherson"
},
{
"id": 27,
"question": "Veniam non consectetur sit cillum.",
"answerA": "aliqua cupidatat",
"answerB": "nostrud culpa",
"answerC": "anim ullamco",
"answerD": "adipisicing et",
"cAnswer": "A",
"userProposition": "Reeves Love"
},
{
"id": 28,
"question": "Ullamco laboris voluptate nostrud commodo Lorem enim ad ipsum.",
"answerA": "id aute",
"answerB": "aliquip incididunt",
"answerC": "duis elit",
"answerD": "mollit ad",
"cAnswer": "B",
"userProposition": "Michael Holmes"
}
]

@ -0,0 +1,38 @@
[
{
"quiz":1,
"question":1
},
{
"quiz":1,
"question":2
},
{
"quiz":1,
"question":3
},
{
"quiz":1,
"question":4
},
{
"quiz":2,
"question":5
},
{
"quiz":2,
"question":6
},
{
"quiz":2,
"question":7
},
{
"quiz":2,
"question":8
},
{
"quiz":2,
"question":9
}
]

@ -1,62 +1,112 @@
[ [
{ {
"Id": 1, "id_quote": "1",
"Content": "coucou", "content": "Dans le monde il ny a pas dun côté le bien et le mal, il y a une part de lumière et dombre en chacun de nous. Ce qui compte cest celle que lon choisit de montrer dans nos actes, ça cest ce que lon est vraiment.",
"Charac": "moi", "likes": 0,
"ImgPath": "img", "langue": "fr",
"TitleSrc": "G4", "isValide": true,
"DateSrc": "2001-01-01", "reason": "insertion de test",
"Like": 20, "id_caracter": 50,
"Langue": "fr" "id_source": 38,
}, "id_user_verif": 1
{ },
"Id": 2, {
"Content": "boujour", "id_quote": "22",
"Charac": "toi", "content": "Nous avons parié, mon père et moi. Je ne crois pas que tu tiendras dix minutes dans ce tournoi. Lui, il nest pas daccord, il croit que tu nen tiendras pas cinq.",
"ImgPath": "img", "likes": 0,
"TitleSrc": "G4", "langue": "fr",
"DateSrc": "2002-02-02", "isValide": true,
"Like": 0, "reason": "insertion de test",
"Langue": "fr" "id_caracter": 7,
}, "id_source": 58,
{ "id_user_verif": 1
"Id": 3, },
"Content": "coucou", {
"Charac": "moi", "id_quote": "45",
"ImgPath": "img", "content": "Je vous aurais suivi mon frère, mon capitaine, mon roi.",
"TitleSrc": "G4", "likes": 0,
"DateSrc": "2001-01-01", "langue": "fr",
"Like": 20, "isValide": true,
"Langue": "fr" "reason": "insertion de test",
}, "id_caracter": 77,
{ "id_source": 76,
"Id": 4, "id_user_verif": 1
"Content": "boujour", },
"Charac": "toi", {
"ImgPath": "img", "id_quote": "90",
"TitleSrc": "G4", "content": "Si vous le voulez bien, on se taillera des pipes plus tard, les enfants.",
"DateSrc": "2002-02-02", "likes": 0,
"Like": 0, "langue": "fr",
"Langue": "fr" "isValide": true,
}, "reason": "insertion de test",
{ "id_caracter": 82,
"Id": 5, "id_source": 9,
"Content": "coucou", "id_user_verif": 1
"Charac": "moi", },
"ImgPath": "img", {
"TitleSrc": "G4", "id_quote": "91",
"DateSrc": "2001-01-01", "content": "Je fais le mort dans la 5e.",
"Like": 20, "likes": 0,
"Langue": "fr" "langue": "fr",
}, "isValide": true,
{ "reason": "insertion de test",
"Id": 6, "id_caracter": 53,
"Content": "boujour", "id_source": 9,
"Charac": "toi", "id_user_verif": 1
"ImgPath": "img", },
"TitleSrc": "G4", {
"DateSrc": "2002-02-02", "id_quote": "110",
"Like": 0, "content": "Il les a tuées avec leur amour. Cest comme ça tous les jours dans le monde entier.",
"Langue": "fr" "likes": 0,
"langue": "fr",
"isValide": true,
"reason": "insertion de test",
"id_caracter": 34,
"id_source": 74,
"id_user_verif": 1
},
{
"id_quote": "118",
"content": "La vengeance est un déesse dévorante. Eux aussi en sont victimes… Je ne dois pas céder à son appel. La justice finira par triompher.",
"likes": 0,
"langue": "fr",
"isValide": false,
"reason": "insertion de test",
"id_caracter": 44,
"id_source": 30,
"id_user_verif": 1
},
{
"id_quote": "185",
"content": "Tu viens de me montrer au complet ?!",
"likes": 0,
"langue": "fr",
"isValide": false,
"reason": "insertion de test",
"id_caracter": 38,
"id_source": 10,
"id_user_verif": 1
},
{
"id_quote": "182",
"content": "Nouille ou pas nouille, tu te préoccupes trop de ce qui a été ou de ce qui sera.",
"likes": 0,
"langue": "fr",
"isValide": false,
"reason": "insertion de test",
"id_caracter": 29,
"id_source": 71,
"id_user_verif": 1
},
{
"id_quote": "175",
"content": "Arrête de faire ton Jean-Jacques !",
"likes": 0,
"langue": "fr",
"isValide": false,
"reason": "insertion de test",
"id_caracter": 39,
"id_source": 68,
"id_user_verif": 1
} }
] ]

@ -0,0 +1,8 @@
[
{
"users":1,
"quiz":1,
"nbPoint":3,
"timeQ": 0
}
]

@ -0,0 +1,87 @@
[
{
"id_source": 1,
"title": "Cars",
"dateS": 2006
},
{
"id_source": 2,
"title": "Le Parrain, 3ème partie",
"dateS": 1972
},
{
"id_source": 3,
"title": "Hunger Games : la révolte - 1re partie",
"dateS": 2012
},
{
"id_source": 4,
"title": "Le hobbit : la désolation de Smaug",
"dateS": 2012
},
{
"id_source": 5,
"title": "Là-haut",
"dateS": 2009
},
{
"id_source": 6,
"title": "Raiponce",
"dateS": 2010
},
{
"id_source": 7,
"title": "Harry Potter et les reliques de la mort - 1re partie",
"dateS": 2001
},
{
"id_source": 8,
"title": "Le seigneur des anneaux : les deux tours",
"dateS": 2001
},
{
"id_source": 9,
"title": "Pulp Fiction",
"dateS": 1994
},
{
"id_source": 10,
"title": "Dragons",
"dateS": 2010
},
{
"id_source": 30,
"title": "Captain America : civil war",
"dateS": 2011
},
{
"id_source": 38,
"title": "Harry Potter et Lordre du Phoenix",
"dateS": 2001
},
{
"id_source": 58,
"title": "Harry Potter et les reliques de la mort - 2e partie",
"dateS": 2001
},
{
"id_source": 68,
"title": "Coco",
"dateS": 2017
},
{
"id_source": 71,
"title": "Kung Fu Panda",
"dateS": 2008
},
{
"id_source": 74,
"title": "La Ligne Verte",
"dateS": 1999
},
{
"id_source": 76,
"title": "Le seigneur des anneaux : la communauté de lanneau",
"dateS": 2001
}
]

@ -0,0 +1,16 @@
[
{
"Id": 1,
"Image": "https://tse4.mm.bing.net/th/id/OIP.fc5TQflh0cbxB1GUeOdk6gHaK8?w=123&h=180&c=7&r=0&o=5&pid=1.7",
"Name": "admin",
"IsAdmin": true,
"Mdp" : "admin"
},
{
"Id": 2,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137&h=195&c=7&r=0&o=5&pid=1.7",
"Name": "exploit",
"IsAdmin": true,
"Mdp": "passwd"
}
]

@ -0,0 +1,175 @@
[
{
"Id": 1,
"Image": "https://tse4.mm.bing.net/th/id/OIP.fc5TQflh0cbxB1GUeOdk6gHaK8?w=123\u0026h=180\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "admin",
"Email": "admin@gmail.com",
"DateCreation": "2024-12-12T00:00:00",
"IsAdmin": true,
"Comments": [
{
"Text": "Commentaire 1",
"DateCreation": "2024-12-12T00:00:00"
},
{
"Text": "Commentaire 2",
"DateCreation": "2024-11-12T00:00:00"
}
]
},
{
"Id": 2,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "exploit2",
"Email": "exploit@gmail.com",
"DateCreation": "2024-11-12T00:00:00",
"IsAdmin": true,
"Comments": null
},
{
"Id": 3,
"Image": "https://tse4.mm.bing.net/th/id/OIP.XNQPKwc1OUfvnSO9MsxDYgHaE7?w=202\u0026h=180\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "testeur",
"Email": "testeur@gmail.com",
"DateCreation": "2024-08-02T00:00:00",
"IsAdmin": false,
"Comments": [
{
"Text": "Premier test effectu\u00E9, tout semble OK.",
"DateCreation": "2024-08-02T00:00:00"
}
]
},
{
"Id": 4,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "dev",
"Email": "dev@gmail.com",
"DateCreation": "2024-10-10T00:00:00",
"IsAdmin": false,
"Comments": null
},
{
"Id": 5,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "jean_doe",
"Email": "jean.doe@gmail.com",
"DateCreation": "2024-06-25T00:00:00",
"IsAdmin": false,
"Comments": [
{
"Text": "Utilisateur tr\u00E8s actif, peut \u00EAtre un peu trop intrusif.",
"DateCreation": "2024-06-25T00:00:00"
}
]
},
{
"Id": 6,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "jane_smith",
"Email": "jane.smith@gmail.com",
"DateCreation": "2024-07-15T00:00:00",
"IsAdmin": false,
"Comments": null
},
{
"Id": 7,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "admin_joe",
"Email": "admin.joe@gmail.com",
"DateCreation": "2024-05-30T00:00:00",
"IsAdmin": true,
"Comments": null
},
{
"Id": 8,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "dev_anna",
"Email": "dev.anna@gmail.com",
"DateCreation": "2024-09-05T00:00:00",
"IsAdmin": false,
"Comments": null
},
{
"Id": 9,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "support_mark",
"Email": "support.mark@gmail.com",
"DateCreation": "2024-11-20T00:00:00",
"IsAdmin": false,
"Comments": [
{
"Text": "Support rapide et efficace, mais manquant un peu de d\u00E9tails.",
"DateCreation": "2024-11-20T00:00:00"
}
]
},
{
"Id": 10,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "dev_susan",
"Email": "dev.susan@gmail.com",
"DateCreation": "2024-08-12T00:00:00",
"IsAdmin": false,
"Comments": null
},
{
"Id": 11,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "designer_steve",
"Email": "designer.steve@gmail.com",
"DateCreation": "2024-07-01T00:00:00",
"IsAdmin": false,
"Comments": [
{
"Text": "Le design doit \u00EAtre retravaill\u00E9 pour plus de clart\u00E9.",
"DateCreation": "2024-07-01T00:00:00"
}
]
},
{
"Id": 12,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "admin_lucas",
"Email": "admin.lucas@gmail.com",
"DateCreation": "2024-09-22T00:00:00",
"IsAdmin": true,
"Comments": null
},
{
"Id": 13,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "manager_anna",
"Email": "manager.anna@gmail.com",
"DateCreation": "2024-05-01T00:00:00",
"IsAdmin": false,
"Comments": null
},
{
"Id": 14,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "developer_mike",
"Email": "developer.mike@gmail.com",
"DateCreation": "2024-11-02T00:00:00",
"IsAdmin": false,
"Comments": null
},
{
"Id": 15,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "test_user_01",
"Email": "test.user01@gmail.com",
"DateCreation": "2024-06-10T00:00:00",
"IsAdmin": false,
"Comments": null
},
{
"Id": 16,
"Image": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137\u0026h=195\u0026c=7\u0026r=0\u0026o=5\u0026pid=1.7",
"Name": "admin_kate",
"Email": "admin.kate@gmail.com",
"DateCreation": "2024-04-16T00:00:00",
"IsAdmin": true,
"Comments": null
}
]

@ -1,20 +0,0 @@
[
{
"Id": 1,
"ImgPath": "https://tse2.mm.bing.net/th/id/OIP.MMpXBB5RDRYQm05FJmevGAHaKl?w=137&h=195&c=7&r=0&o=5&pid=1.7",
"Content": "'Dans le monde il ny a pas dun côté le bien et le mal, il y a une part de lumière et dombre en chacun de nous. Ce qui compte cest celle que lon choisit de montrer dans nos actes, ça cest ce que lon est vraiment.'",
"Charac": "Sirius Black",
"TitleSrc": "Harry Potter et Lordre du Phoenix",
"Langue": "fr",
"UserProposition": "demo"
},
{
"Id": 2,
"ImgPath": "https://tse2.mm.bing.net/th/id/OIP.zR4rzkK7q2wCcNwZd6jjegHaIC?w=163&h=180&c=7&r=0&o=5&pid=1.7",
"Content": "'Une autre citation'",
"Charac": "Un personnage",
"TitleSrc": "Un super film",
"Langue": "fr",
"UserProposition": "exploit"
}
]
Loading…
Cancel
Save