feat : sécurité password bcrypt
continuous-integration/drone/push Build is passing Details

Multiplayer_Php
Maxence GUITARD 1 year ago
commit 0daa67fc3c

@ -5,7 +5,7 @@
<FocusOnNavigate RouteData="@routeData" Selector="h1" /> <FocusOnNavigate RouteData="@routeData" Selector="h1" />
</Found> </Found>
<NotFound> <NotFound>
<PageTitle>Not found</PageTitle> <PageTitle>Not found </PageTitle>
<LayoutView Layout="@typeof(MainLayout)"> <LayoutView Layout="@typeof(MainLayout)">
<p role="alert">Sorry, there's nothing at this address.</p> <p role="alert">Sorry, there's nothing at this address.</p>
</LayoutView> </LayoutView>

@ -28,6 +28,7 @@
<PackageReference Include="ChoETL.NETStandard" Version="1.2.1.64" /> <PackageReference Include="ChoETL.NETStandard" Version="1.2.1.64" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.1" /> <PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="8.0.0" />
<PackageReference Include="SuperConvert" Version="1.0.4.9" />
<PackageReference Include="System.Net.Http" Version="4.3.4" /> <PackageReference Include="System.Net.Http" Version="4.3.4" />
<PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" /> <PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" />
</ItemGroup> </ItemGroup>

@ -1,6 +1,29 @@
 <BackButton RedirectionPage="/questions"></BackButton>
<div class="card text-center">
@CardHeader <div class="text-center pb-2">
@CardBody <h3>Question n°@Question.Id</h3>
@CardFooter
</div> </div>
<div class="text-center pb-5 mt-3">
<h5>@Question.Content</h5>
</div>
<div class="container-fluid text-center justify-content-center row card-body">
@foreach (var answer in Answers)
{
<div class="col-3 text-center">
@if (answer.Id == Question.IdAnswerGood)
{
<p class="text-success"><strong>@answer.Content</strong></p>
}
else
{
<p class="text-danger">@answer.Content</p>
}
</div>
}
</div>
<div class="card-footer text-center text-muted">
Chapitre : @Question.ChapterName
</div>

@ -1,16 +1,15 @@
using Microsoft.AspNetCore.Components; using Blazor.Pages;
using Blazor.ViewClasses;
using Microsoft.AspNetCore.Components;
namespace Blazor.Components namespace Blazor.Components
{ {
public partial class CardViewQuestion public partial class CardViewQuestion
{ {
[Parameter] [Parameter]
public RenderFragment CardBody { get; set; } public Question Question { get; set; }
[Parameter] [Parameter]
public RenderFragment CardFooter { get; set; } public List<Answer> Answers { get; set; }
[Parameter]
public RenderFragment CardHeader { get; set; }
} }
} }

@ -1,7 +1,7 @@
@page "/addAdministrator" @page "/addAdministrator"
@using Blazor.Models @using Blazor.Models
@using Blazor.Components @using Blazor.Components
<PageTitle>@Localizer["PageTitle"]</PageTitle>
<BackButton RedirectionPage="/administrators"></BackButton> <BackButton RedirectionPage="/administrators"></BackButton>
<div class="container text-center"> <div class="container text-center">
@ -24,7 +24,7 @@
<label for="hashedPassword" class="col-form-label">@Localizer["Password"] :</label> <label for="hashedPassword" class="col-form-label">@Localizer["Password"] :</label>
</div> </div>
<div class="col-7"> <div class="col-7">
<InputText id="hashedPassword" @bind-Value="administratorModel.HashedPassword" class="form-control" /> <InputText id="hashedPassword" @bind-Value="administratorModel.HashedPassword" class="form-control" type="password"/>
</div> </div>
</div> </div>

@ -1,7 +1,7 @@
@page "/administrators" @page "/administrators"
@using Blazorise.DataGrid @using Blazorise.DataGrid
@using Blazor.ViewClasses @using Blazor.ViewClasses
<PageTitle>@Localizer["PageTitle"]</PageTitle>
<h3>@Localizer["Title"]</h3> <h3>@Localizer["Title"]</h3>
<div> <div>

@ -1,7 +1,7 @@
@page "/editAdministrator/{Id:int}" @page "/editAdministrator/{Id:int}"
@using Blazor.Components; @using Blazor.Components;
<PageTitle>@Localizer["PageTitle"]</PageTitle>
<BackButton RedirectionPage="/administrators"></BackButton> <BackButton RedirectionPage="/administrators"></BackButton>
<div class="container text-center"> <div class="container text-center">
@ -25,7 +25,7 @@
<label for="hashedPassword" class="col-form-label">@Localizer["HashedPassword"] :</label> <label for="hashedPassword" class="col-form-label">@Localizer["HashedPassword"] :</label>
</div> </div>
<div class="col-7"> <div class="col-7">
<InputText id="hashedPassword" @bind-Value="administratorModel.HashedPassword" class="form-control" /> <InputText id="hashedPassword" @bind-Value="administratorModel.HashedPassword" class="form-control" type="password"/>
</div> </div>
</div> </div>

@ -1,7 +1,7 @@
@page "/addChapter" @page "/addChapter"
@using Blazor.Models @using Blazor.Models
@using Blazor.Components @using Blazor.Components
<PageTitle>@Localizer["PageTitle"]</PageTitle>
<BackButton RedirectionPage="/chapters"></BackButton> <BackButton RedirectionPage="/chapters"></BackButton>
<div class="container text-center"> <div class="container text-center">

@ -2,7 +2,7 @@
@using Blazor.ViewClasses; @using Blazor.ViewClasses;
@using Blazorise.DataGrid @using Blazorise.DataGrid
@using Blazored.Modal; @using Blazored.Modal;
<PageTitle>@Localizer["PageTitle"]</PageTitle>
<h3>@Localizer["Title"]</h3> <h3>@Localizer["Title"]</h3>
<div> <div>
<NavLink class="btn btn-primary" href="addChapter" Match="NavLinkMatch.All"> <NavLink class="btn btn-primary" href="addChapter" Match="NavLinkMatch.All">

@ -1,7 +1,7 @@
@page "/editChapter/{Id:int}" @page "/editChapter/{Id:int}"
@using Blazor.Components; @using Blazor.Components;
<PageTitle>@Localizer["PageTitle"]</PageTitle>
<BackButton RedirectionPage="/chapters"></BackButton> <BackButton RedirectionPage="/chapters"></BackButton>

@ -3,7 +3,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<PageTitle>Error</PageTitle>
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

@ -1,9 +1,9 @@
@page "/" @page "/"
<PageTitle>Home</PageTitle> <PageTitle>@Localizer["PageTitle"]</PageTitle>
<div class="container row justify-content-center mb-5"> <div class="container text-center mb-5">
<img src="/images/mathseduc.png" alt="Logo MathsEduc" class=" col-4" /> <img src="/images/mathseduc.png" alt="Logo MathsEduc" height="150" />
</div> </div>
<h1 class="text-center">@Localizer["Title"]</h1> <h1 class="text-center">@Localizer["Title"]</h1>

@ -3,7 +3,7 @@
@using Blazor.Components @using Blazor.Components
<BackButton RedirectionPage="/players"></BackButton> <BackButton RedirectionPage="/players"></BackButton>
<PageTitle>@Localizer["PageTitle"]</PageTitle>
<div class="container text-center"> <div class="container text-center">
<div class="border border-dark p-4 d-inline-block"> <div class="border border-dark p-4 d-inline-block">
<h3>@Localizer["Title"]</h3> <h3>@Localizer["Title"]</h3>
@ -25,7 +25,7 @@
<label for="hashedPassword" class="col-form-label">@Localizer["HashedPassword"] :</label> <label for="hashedPassword" class="col-form-label">@Localizer["HashedPassword"] :</label>
</div> </div>
<div class="col-7"> <div class="col-7">
<InputText id="hashedPassword" @bind-Value="playerModel.HashedPassword" class="form-control"/> <InputText id="hashedPassword" @bind-Value="playerModel.HashedPassword" class="form-control" type="password" />
</div> </div>
</div> </div>

@ -3,7 +3,7 @@
@using Blazor.Components; @using Blazor.Components;
<BackButton RedirectionPage="/players"></BackButton> <BackButton RedirectionPage="/players"></BackButton>
<PageTitle>@Localizer["PageTitle"]</PageTitle>
<div class="container text-center"> <div class="container text-center">
<div class="border border-dark p-4 d-inline-block"> <div class="border border-dark p-4 d-inline-block">
<h3>@Localizer["Title"]</h3> <h3>@Localizer["Title"]</h3>
@ -24,7 +24,7 @@
<label for="hashedPassword" class="col-form-label">@Localizer["HashedPassword"] :</label> <label for="hashedPassword" class="col-form-label">@Localizer["HashedPassword"] :</label>
</div> </div>
<div class="col-7"> <div class="col-7">
<InputText id="hashedPassword" @bind-Value="playerModel.HashedPassword" class="form-control" /> <InputText id="hashedPassword" @bind-Value="playerModel.HashedPassword" class="form-control" type="password"/>
</div> </div>
</div> </div>

@ -2,7 +2,7 @@
@using Blazor.ViewClasses; @using Blazor.ViewClasses;
@using Blazorise.DataGrid @using Blazorise.DataGrid
@using Blazored.Modal; @using Blazored.Modal;
<PageTitle>@Localizer["PageTitle"]</PageTitle>
<h3>@Localizer["Title"]</h3> <h3>@Localizer["Title"]</h3>
<div> <div>
<NavLink class="btn btn-primary" href="addPlayer" Match="NavLinkMatch.All"> <NavLink class="btn btn-primary" href="addPlayer" Match="NavLinkMatch.All">

@ -3,7 +3,7 @@
@using Blazor.Components @using Blazor.Components
<BackButton RedirectionPage="/questions"></BackButton> <BackButton RedirectionPage="/questions"></BackButton>
<PageTitle>@Localizer["PageTitle"]</PageTitle>
<div class="container text-center"> <div class="container text-center">
<div class="border border-dark p-4 d-inline-block"> <div class="border border-dark p-4 d-inline-block">
<h3>@Localizer["Title"]</h3> <h3>@Localizer["Title"]</h3>

@ -2,36 +2,4 @@
@using Blazor.Components; @using Blazor.Components;
<CardViewQuestion> <CardViewQuestion Question="@question" Answers="@answers"></CardViewQuestion>
<CardHeader>
<div class="text-center pb-2">
<h3>Question n°@question.Id</h3>
</div>
<div class="text-center pb-5 mt-3">
<h5>@question.Content</h5>
</div>
</CardHeader>
<CardBody>
<div class="container-fluid text-center justify-content-center row">
@foreach (var answer in answers)
{
<div class="col-3 text-center">
@if (answer.Id == question.IdAnswerGood)
{
<p class="text-success"><strong>@answer.Content</strong></p>
}
else
{
<p class="text-danger">@answer.Content</p>
}
</div>
}
</div>
</CardBody>
<CardFooter>
<div class="card-footer text-muted">
Chapitre : @question.ChapterName
</div>
<BackButton RedirectionPage="/questions"></BackButton>
</CardFooter>
</CardViewQuestion>

@ -1,8 +1,6 @@
using Blazor.Models; using Blazor.ViewClasses;
using Blazor.Pages;
using Blazor.ViewClasses;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using static System.Net.WebRequestMethods; using Microsoft.Extensions.Localization;
namespace Blazor.Pages.Questions namespace Blazor.Pages.Questions
{ {
@ -15,7 +13,8 @@ namespace Blazor.Pages.Questions
private List<Answer> answers = new(); private List<Answer> answers = new();
public List<Question> questions = new(); public List<Question> questions = new();
[Inject]
public IStringLocalizer<DisplayQuestions> Localizer { get; set; }
[Inject] [Inject]
public required HttpClient Http { get; set; } public required HttpClient Http { get; set; }

@ -2,7 +2,7 @@
<BackButton RedirectionPage="/questions"></BackButton> <BackButton RedirectionPage="/questions"></BackButton>
<PageTitle>@Localizer["PageTitle"]</PageTitle>
<div class="container text-center"> <div class="container text-center">
<div class="border border-dark p-4 d-inline-block"> <div class="border border-dark p-4 d-inline-block">
<h3>@Localizer["Title"]</h3> <h3>@Localizer["Title"]</h3>

@ -2,7 +2,7 @@
@using Blazor.ViewClasses; @using Blazor.ViewClasses;
@using Blazorise.DataGrid @using Blazorise.DataGrid
@using Blazored.Modal; @using Blazored.Modal;
<PageTitle>@Localizer["PageTitle"]</PageTitle>
<h3>@Localizer["Title"]</h3> <h3>@Localizer["Title"]</h3>
<div> <div>

@ -13,6 +13,7 @@ using Blazored.Modal;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Blazor.Components; using Blazor.Components;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using SuperConvert.Extensions;
namespace Blazor.Pages.Questions; namespace Blazor.Pages.Questions;
@ -100,25 +101,21 @@ public partial class Questions
selectedQuestions.Add(questions[i]); selectedQuestions.Add(questions[i]);
} }
questions = selectedQuestions; questions = selectedQuestions;
if (!response.IsNullOrEmpty())
{
totalQuestion = response[0].total_questions; totalQuestion = response[0].total_questions;
} }
} }
}
private async Task Export() private async Task Export()
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
HttpResponseMessage response = await Http.GetAsync(API.API_URL+"questionsExport/"+API.TOKEN); HttpResponseMessage response = await Http.GetAsync(API.API_URL+"questionsExport/"+API.TOKEN);
var json = await response.Content.ReadAsStringAsync(); var json = await response.Content.ReadAsStringAsync();
using (var jsonFile = ChoJSONReader.LoadText(json)) byte[] csv = json.ToCsv(';');
{ string csvString = Encoding.Unicode.GetString(csv);
using (var csvFile = new ChoCSVWriter(sb).WithFirstLineHeader()) var sentFile = new MemoryStream(Encoding.Unicode.GetBytes(csvString));
{
csvFile.Write(jsonFile);
}
}
var sentFile = new MemoryStream(Encoding.Unicode.GetBytes(sb.ToString()));
using (var streamRef = new DotNetStreamReference(stream: sentFile)) using (var streamRef = new DotNetStreamReference(stream: sentFile))
{ {
await IJSRuntime.InvokeVoidAsync("downloadFileFromStream", "data.csv", streamRef); await IJSRuntime.InvokeVoidAsync("downloadFileFromStream", "data.csv", streamRef);
@ -131,22 +128,24 @@ public partial class Questions
{ {
await e.File.OpenReadStream().CopyToAsync(ms); await e.File.OpenReadStream().CopyToAsync(ms);
var bytes = ms.ToArray(); var bytes = ms.ToArray();
string s = Encoding.UTF8.GetString(bytes); string s = Encoding.Unicode.GetString(bytes);
s = s.Replace("\r\n", "\n"); s = s.Replace("\"", string.Empty);
s = s.Replace("\0", string.Empty);
var rows = s.Split('\n'); var rows = s.Split('\n');
rows = rows.Skip(1).ToArray(); rows = rows.Skip(1).ToArray();
foreach (var row in rows) foreach (var row in rows)
{ {
var field = row.Split(';'); var field = row.Split(';');
field[1] = field[1].Replace(" ", "+");
var formData = new List<KeyValuePair<string, string>>(); var formData = new List<KeyValuePair<string, string>>();
formData.Add(new KeyValuePair<string, string>("content", field[0])); formData.Add(new KeyValuePair<string, string>("content", field[0]));
formData.Add(new KeyValuePair<string, string>("answerContent1", field[2])); formData.Add(new KeyValuePair<string, string>("answerContent1", field[3]));
formData.Add(new KeyValuePair<string, string>("answerContent2", field[3])); formData.Add(new KeyValuePair<string, string>("answerContent2", field[4]));
formData.Add(new KeyValuePair<string, string>("answerContent3", field[4])); formData.Add(new KeyValuePair<string, string>("answerContent3", field[5]));
formData.Add(new KeyValuePair<string, string>("answerContent4", field[5])); formData.Add(new KeyValuePair<string, string>("answerContent4", field[6]));
formData.Add(new KeyValuePair<string, string>("idanswergood", field[6])); formData.Add(new KeyValuePair<string, string>("idanswergood", field[2]));
string apiUri = API.API_URL+"chapters/name/"+field[1] + "/" + API.TOKEN; string apiUri = API.API_URL+"chapters/name/"+field[1] + "/" + API.TOKEN;
@ -167,7 +166,7 @@ public partial class Questions
} }
var formContent = new FormUrlEncodedContent(formData); var formContent = new FormUrlEncodedContent(formData);
apiUri = API.API_URL+"add/questions/"+API.TOKEN; apiUri = API.API_URL+"add/question/"+API.TOKEN;
response = await Http.PostAsync(apiUri, formContent); response = await Http.PostAsync(apiUri, formContent);

@ -117,6 +117,9 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="PageTitle" xml:space="preserve">
<value>Ajouter administrateur</value>
</data>
<data name="Password" xml:space="preserve"> <data name="Password" xml:space="preserve">
<value>Mot de passe</value> <value>Mot de passe</value>
</data> </data>

@ -117,6 +117,9 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="PageTitle" xml:space="preserve">
<value>Add Admnistrator</value>
</data>
<data name="Password" xml:space="preserve"> <data name="Password" xml:space="preserve">
<value>Password</value> <value>Password</value>
</data> </data>

@ -126,6 +126,9 @@
<data name="Edit" xml:space="preserve"> <data name="Edit" xml:space="preserve">
<value>Editer</value> <value>Editer</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Administrateurs</value>
</data>
<data name="Title" xml:space="preserve"> <data name="Title" xml:space="preserve">
<value>Administrateurs</value> <value>Administrateurs</value>
</data> </data>

@ -126,6 +126,9 @@
<data name="Edit" xml:space="preserve"> <data name="Edit" xml:space="preserve">
<value>Edit</value> <value>Edit</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Administrators</value>
</data>
<data name="Title" xml:space="preserve"> <data name="Title" xml:space="preserve">
<value>Administrators</value> <value>Administrators</value>
</data> </data>

@ -120,6 +120,9 @@
<data name="HashedPassword" xml:space="preserve"> <data name="HashedPassword" xml:space="preserve">
<value>Mot de passe</value> <value>Mot de passe</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Editer Administrateur</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Valider</value> <value>Valider</value>
</data> </data>

@ -120,6 +120,9 @@
<data name="HashedPassword" xml:space="preserve"> <data name="HashedPassword" xml:space="preserve">
<value>Password</value> <value>Password</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Edit Administrator</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Submit</value> <value>Submit</value>
</data> </data>

@ -120,6 +120,9 @@
<data name="Name" xml:space="preserve"> <data name="Name" xml:space="preserve">
<value>Nom</value> <value>Nom</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Ajouter Chapitre</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Valider</value> <value>Valider</value>
</data> </data>

@ -120,6 +120,9 @@
<data name="Name" xml:space="preserve"> <data name="Name" xml:space="preserve">
<value>Name</value> <value>Name</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Add Chapter</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Submit</value> <value>Submit</value>
</data> </data>

@ -132,6 +132,9 @@
<data name="Name" xml:space="preserve"> <data name="Name" xml:space="preserve">
<value>Nom</value> <value>Nom</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Chapitres</value>
</data>
<data name="Title" xml:space="preserve"> <data name="Title" xml:space="preserve">
<value>Chapitres</value> <value>Chapitres</value>
</data> </data>

@ -132,6 +132,9 @@
<data name="Name" xml:space="preserve"> <data name="Name" xml:space="preserve">
<value>Name</value> <value>Name</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Chapters</value>
</data>
<data name="Title" xml:space="preserve"> <data name="Title" xml:space="preserve">
<value>Chapters</value> <value>Chapters</value>
</data> </data>

@ -120,6 +120,9 @@
<data name="Name" xml:space="preserve"> <data name="Name" xml:space="preserve">
<value>Nom</value> <value>Nom</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Editer Chapitre</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Valider</value> <value>Valider</value>
</data> </data>

@ -120,6 +120,9 @@
<data name="Name" xml:space="preserve"> <data name="Name" xml:space="preserve">
<value>Name</value> <value>Name</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Edit Chapter</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Submit</value> <value>Submit</value>
</data> </data>

@ -117,6 +117,9 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="PageTitle" xml:space="preserve">
<value>Acceuil</value>
</data>
<data name="Text" xml:space="preserve"> <data name="Text" xml:space="preserve">
<value>C'est la partie administrateur de l'application MathsEduc. Vous pouvez modifier/ajouter/supprimer des questions ou gérer les joueurs, les administrateurs et les chapitres.</value> <value>C'est la partie administrateur de l'application MathsEduc. Vous pouvez modifier/ajouter/supprimer des questions ou gérer les joueurs, les administrateurs et les chapitres.</value>
</data> </data>

@ -117,6 +117,9 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="PageTitle" xml:space="preserve">
<value>Home</value>
</data>
<data name="Text" xml:space="preserve"> <data name="Text" xml:space="preserve">
<value>This is the administrator part of the MathsEduc application. You can edit/add/delete questions or manage players, admins and chapters.</value> <value>This is the administrator part of the MathsEduc application. You can edit/add/delete questions or manage players, admins and chapters.</value>
</data> </data>

@ -123,6 +123,9 @@
<data name="Nickname" xml:space="preserve"> <data name="Nickname" xml:space="preserve">
<value>Pseudo</value> <value>Pseudo</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Ajouter Joueur</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Envoyer</value> <value>Envoyer</value>
</data> </data>

@ -123,6 +123,9 @@
<data name="Nickname" xml:space="preserve"> <data name="Nickname" xml:space="preserve">
<value>Nickname</value> <value>Nickname</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Add Player</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Submit</value> <value>Submit</value>
</data> </data>

@ -123,6 +123,9 @@
<data name="Nickname" xml:space="preserve"> <data name="Nickname" xml:space="preserve">
<value>Pseudo</value> <value>Pseudo</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Editer Joueur</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Valider</value> <value>Valider</value>
</data> </data>

@ -123,6 +123,9 @@
<data name="Nickname" xml:space="preserve"> <data name="Nickname" xml:space="preserve">
<value>Nickname</value> <value>Nickname</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Edit Player</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Submit</value> <value>Submit</value>
</data> </data>

@ -129,6 +129,9 @@
<data name="Nickname" xml:space="preserve"> <data name="Nickname" xml:space="preserve">
<value>Pseudo</value> <value>Pseudo</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Joueurs</value>
</data>
<data name="Title" xml:space="preserve"> <data name="Title" xml:space="preserve">
<value>Joueurs</value> <value>Joueurs</value>
</data> </data>

@ -129,6 +129,9 @@
<data name="Nickname" xml:space="preserve"> <data name="Nickname" xml:space="preserve">
<value>Nickname</value> <value>Nickname</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Players</value>
</data>
<data name="Title" xml:space="preserve"> <data name="Title" xml:space="preserve">
<value>Players</value> <value>Players</value>
</data> </data>

@ -126,6 +126,9 @@
<data name="Content" xml:space="preserve"> <data name="Content" xml:space="preserve">
<value>Contenu</value> <value>Contenu</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Ajouter Question</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Valider</value> <value>Valider</value>
</data> </data>

@ -127,6 +127,9 @@
<data name="Content" xml:space="preserve"> <data name="Content" xml:space="preserve">
<value>Content</value> <value>Content</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Add Question</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Submit</value> <value>Submit</value>
</data> </data>

@ -129,6 +129,9 @@
<data name="Correct" xml:space="preserve"> <data name="Correct" xml:space="preserve">
<value>Correcte</value> <value>Correcte</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Editer Question</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Valider</value> <value>Valider</value>
</data> </data>

@ -129,6 +129,9 @@
<data name="Correct" xml:space="preserve"> <data name="Correct" xml:space="preserve">
<value>Correct</value> <value>Correct</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Edit Question</value>
</data>
<data name="Submit" xml:space="preserve"> <data name="Submit" xml:space="preserve">
<value>Submit</value> <value>Submit</value>
</data> </data>

@ -135,6 +135,9 @@
<data name="Export" xml:space="preserve"> <data name="Export" xml:space="preserve">
<value>Exporter</value> <value>Exporter</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Questions</value>
</data>
<data name="Show" xml:space="preserve"> <data name="Show" xml:space="preserve">
<value>Afficher</value> <value>Afficher</value>
</data> </data>

@ -135,6 +135,9 @@
<data name="Export" xml:space="preserve"> <data name="Export" xml:space="preserve">
<value>Export</value> <value>Export</value>
</data> </data>
<data name="PageTitle" xml:space="preserve">
<value>Questions</value>
</data>
<data name="Show" xml:space="preserve"> <data name="Show" xml:space="preserve">
<value>Show</value> <value>Show</value>
</data> </data>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -6,6 +6,7 @@ namespace Test
[TestMethod] [TestMethod]
public void TestMethod1() public void TestMethod1()
{ {
Assert.IsTrue(true);
} }
} }
} }

@ -43,6 +43,14 @@ Les principaux objectifs incluent :
- Intégrer des fonctionnalités de suivi des progrès pour que les étudiants puissent mesurer leur compréhension au fil du temps. - Intégrer des fonctionnalités de suivi des progrès pour que les étudiants puissent mesurer leur compréhension au fil du temps.
- Assurer la compatibilité avec différents dispositifs et navigateurs pour une accessibilité optimale. - Assurer la compatibilité avec différents dispositifs et navigateurs pour une accessibilité optimale.
## Le backoffice
Une partie administrateur est disponible pour gérer l'ajout/la suppression des questions, des chapitres, des administrateurs et des joueurs.
Un export/import des questions au format csv est disponible.
Nous avons créé un composant complexe pour afficher les détails des questions.
Le blazor, utilisant une api, un fichier de configuration API.cs est nécessaire (n'hésitez à nous le demander).
## Les Parties Prenantes et leurs Rôles ## Les Parties Prenantes et leurs Rôles
1. **GUITARD Maxence** - Développeur polyvalent 1. **GUITARD Maxence** - Développeur polyvalent

Loading…
Cancel
Save