Feat : Import/export Question (API may not be implemented now)

pull/41/head
Jade VAN BRABANDT 2 years ago
parent e9fbf7c15a
commit 23da554720

@ -1,4 +1,4 @@
@page "/addAdministrator" @page "/addQuestion"
@using Blazor.Models @using Blazor.Models
<h3>AddQuestion</h3> <h3>AddQuestion</h3>

@ -1,4 +1,6 @@
<h3>EditQuestion</h3> @page "/editQuestion"
<h3>EditQuestion</h3>
@code { @code {

@ -8,6 +8,10 @@
<NavLink class="btn btn-primary" href="addQuestion" Match="NavLinkMatch.All"> <NavLink class="btn btn-primary" href="addQuestion" Match="NavLinkMatch.All">
<i class="fa fa-plus"></i> Ajouter <i class="fa fa-plus"></i> Ajouter
</NavLink> </NavLink>
<NavLink class="btn btn-primary" @onclick="Export">
<i class="fa fa-plus"></i> Exporter
</NavLink>
<InputFile OnChange="@SingleUpload" />
</div> </div>
<DataGrid TItem="Question" <DataGrid TItem="Question"

@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Components.Forms;
using Blazor.Modals; using Blazor.Modals;
using Blazored.Modal; using Blazored.Modal;
using Blazor.Pages.Admins; using Blazor.Pages.Admins;
using System.Text.RegularExpressions;
namespace Blazor.Pages.Questions; namespace Blazor.Pages.Questions;
@ -98,7 +99,7 @@ public partial class Questions
private async void Export() private async void Export()
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
HttpResponseMessage response = await Http.GetAsync("https://trusting-panini.87-106-126-109.plesk.page/api/chapters"); HttpResponseMessage response = await Http.GetAsync("https://trusting-panini.87-106-126-109.plesk.page/api/questionsExport");
var json = await response.Content.ReadAsStringAsync(); var json = await response.Content.ReadAsStringAsync();
using (var jsonFile = ChoJSONReader.LoadText(json)) using (var jsonFile = ChoJSONReader.LoadText(json))
{ {
@ -115,6 +116,7 @@ public partial class Questions
await IJSRuntime.InvokeVoidAsync("downloadFileFromStream", "data.csv", streamRef); await IJSRuntime.InvokeVoidAsync("downloadFileFromStream", "data.csv", streamRef);
} }
} }
private async Task SingleUpload(InputFileChangeEventArgs e) private async Task SingleUpload(InputFileChangeEventArgs e)
{ {
using (MemoryStream ms = new MemoryStream()) using (MemoryStream ms = new MemoryStream())
@ -123,53 +125,51 @@ public partial class Questions
var bytes = ms.ToArray(); var bytes = ms.ToArray();
string s = Encoding.UTF8.GetString(bytes); string s = Encoding.UTF8.GetString(bytes);
char[] invalidChars = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '\r', '\n', ',', ' ' }; s = s.Replace("\r\n", "\n");
var rows = s.Split('\n');
List<string> filteredStrings = new List<string>(); rows = rows.Skip(1).ToArray();
StringBuilder filteredString = new StringBuilder();
foreach (var c in s) foreach (var row in rows)
{ {
if (!invalidChars.Contains(c)) var field = row.Split(';');
var formData = new List<KeyValuePair<string, string>>();
formData.Add(new KeyValuePair<string, string>("content", field[0]));
formData.Add(new KeyValuePair<string, string>("answerContent1", field[2]));
formData.Add(new KeyValuePair<string, string>("answerContent2", field[3]));
formData.Add(new KeyValuePair<string, string>("answerContent3", field[4]));
formData.Add(new KeyValuePair<string, string>("answerContent4", field[5]));
formData.Add(new KeyValuePair<string, string>("idanswergood", field[6]));
string apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/chapters/name/"+field[1];
var response = await Http.GetAsync(apiUri);
if (response.IsSuccessStatusCode)
{ {
filteredString.Append(c); var responseBody = await response.Content.ReadAsStringAsync();
Match match = Regex.Match(responseBody, @"\d+");
int result = int.Parse(match.Value);
formData.Add(new KeyValuePair<string, string>("idchapter", result.ToString()));
} }
else else
{ {
if (filteredString.Length > 0) var errorResponse = await response.Content.ReadAsStringAsync();
{ formData.Add(new KeyValuePair<string, string>("idchapter", "Unknown_Chapter_Error"));
filteredStrings.Add(filteredString.ToString());
filteredString.Clear();
}
} }
}
if (filteredString.Length > 0)
{
filteredStrings.Add(filteredString.ToString());
}
foreach (var filteredStr in filteredStrings)
{
var formData = new List<KeyValuePair<string, string>>();
formData.Add(new KeyValuePair<string, string>("name", filteredStr));
var formContent = new FormUrlEncodedContent(formData); var formContent = new FormUrlEncodedContent(formData);
apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/add/questions";
string apiUri = "https://trusting-panini.87-106-126-109.plesk.page/api/add/chapters"; response = await Http.PostAsync(apiUri, formContent);
using (var httpClient = new HttpClient()) if (response.IsSuccessStatusCode)
{
var responseBody = await response.Content.ReadAsStringAsync();
}
else
{ {
var response = await httpClient.PostAsync(apiUri, formContent); var errorResponse = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
var responseBody = await response.Content.ReadAsStringAsync();
}
else
{
var errorResponse = await response.Content.ReadAsStringAsync();
}
} }
} }
} }

@ -28,7 +28,7 @@
<a href="" class="reload">Reload</a> <a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a> <a class="dismiss">🗙</a>
</div> </div>
<script src="Pages/Chapters/Chapters.razor.js"></script>
<script src="_framework/blazor.server.js"></script> <script src="_framework/blazor.server.js"></script>
</body> </body>
</html> </html>

@ -6,6 +6,8 @@
<script src="_content/Blazored.Modal/blazored.modal.js"></script> <script src="_content/Blazored.Modal/blazored.modal.js"></script>
<script src="_framework/blazor.server.js"></script> <script src="_framework/blazor.server.js"></script>
<script src="Pages/Chapters/Chapters.razor.js"></script>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css">

@ -6,5 +6,4 @@
Welcome to your new app. Welcome to your new app.
<SurveyPrompt Title="How is Blazor working for you?" /> <SurveyPrompt Title="How is Blazor working for you?" />
<script src="Pages/Chapters.razor.js"></script>
Loading…
Cancel
Save