Add button to report bad correction
This commit is contained in:
parent
2e3760c23d
commit
1a5eea3bb2
7 changed files with 143 additions and 17 deletions
|
@ -32,7 +32,7 @@
|
|||
|
||||
let filteredResponses = [];
|
||||
$:{
|
||||
filteredResponses = responses.filter((r) => (notCorrected || !r.time_scored) && (!filter || ((filter[0] == '!' && !r.value.match(filter.substring(1))) || r.value.match(filter))));
|
||||
filteredResponses = responses.filter((r) => (notCorrected || r.time_scored <= r.time_reported || !r.time_scored) && (!filter || ((filter[0] == '!' && !r.value.match(filter.substring(1))) || r.value.match(filter))));
|
||||
}
|
||||
|
||||
export async function applyCorrections() {
|
||||
|
|
|
@ -1,6 +1,40 @@
|
|||
<script>
|
||||
import { user } from '../stores/user';
|
||||
import { ToastsStore } from '../stores/toasts';
|
||||
|
||||
export let response = null;
|
||||
export let survey = null;
|
||||
let reportInProgress = false;
|
||||
|
||||
function report() {
|
||||
reportInProgress = true;
|
||||
response.report(survey).then((res) => {
|
||||
reportInProgress = false;
|
||||
response.time_reported = res.time_reported;
|
||||
if (res.time_reported >= res.time_scored) {
|
||||
ToastsStore.addToast({
|
||||
msg: "Ton signalement a bien été pris en compte.",
|
||||
color: "success",
|
||||
title: "Signaler une erreur de correction",
|
||||
});
|
||||
} else if (!res.time_reported) {
|
||||
ToastsStore.addToast({
|
||||
msg: "La correction de ta réponse n'est maintenant plus signalée, signalement annulé.",
|
||||
color: "info",
|
||||
title: "Signaler une erreur de correction",
|
||||
});
|
||||
} else {
|
||||
ToastsStore.addErrorToast({
|
||||
msg: "Quelque chose s'est mal passé lors du signalement du problème.\nSi le problème persiste, contacte directement ton professeur.",
|
||||
});
|
||||
}
|
||||
}, (error) => {
|
||||
reportInProgress = false;
|
||||
ToastsStore.addErrorToast({
|
||||
msg: "Une erreur s'est produite durant le signalement du problème : " + error + "\nSi le problème persiste, contacte directement ton professeur.",
|
||||
});
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
{#if response.score !== undefined}
|
||||
|
@ -19,6 +53,45 @@
|
|||
</strong>
|
||||
</div>
|
||||
<div class="col">
|
||||
{#if response.id_user == $user.id}
|
||||
<button
|
||||
type="button"
|
||||
class="d-block btn btn-sm float-end"
|
||||
class:btn-outline-success={!response.time_reported && response.score >= 95}
|
||||
class:btn-outline-info={!response.time_reported && response.score < 95 && response.score >= 70}
|
||||
class:btn-outline-warning={!response.time_reported && response.score < 70 && response.score >= 45}
|
||||
class:btn-outline-danger={!response.time_reported && response.score < 45}
|
||||
class:btn-success={response.time_reported && response.score >= 95}
|
||||
class:btn-info={response.time_reported && response.score < 95 && response.score >= 70}
|
||||
class:btn-warning={response.time_reported && response.score < 70 && response.score >= 45}
|
||||
class:btn-danger={response.time_reported && response.score < 45}
|
||||
title="Signaler un problème avec la correction"
|
||||
disabled={reportInProgress}
|
||||
on:click={report}
|
||||
>
|
||||
{#if reportInProgress}
|
||||
<div class="spinner-border spinner-border-sm" role="status"></div>
|
||||
{:else if response.time_reported > response.time_scored}
|
||||
<i class="bi bi-exclamation-octagon-fill"></i>
|
||||
{:else}
|
||||
<i class="bi bi-exclamation-octagon"></i>
|
||||
{/if}
|
||||
</button>
|
||||
{:else if $user.is_admin && response.time_reported}
|
||||
{#if response.time_reported > response.time_scored}
|
||||
<i
|
||||
class="float-end bi bi-exclamation-octagon-fill"
|
||||
class:text-warning={response.score < 45}
|
||||
class:text-danger={response.score >= 45}
|
||||
></i>
|
||||
{:else}
|
||||
<i
|
||||
class="float-end bi bi-exclamation-octagon"
|
||||
class:text-warning={response.score < 45}
|
||||
class:text-danger={response.score >= 45}
|
||||
></i>
|
||||
{/if}
|
||||
{/if}
|
||||
{#if response.score_explaination}
|
||||
{response.score_explaination}
|
||||
{:else if response.score === 100}
|
||||
|
|
|
@ -5,7 +5,7 @@ export class Response {
|
|||
}
|
||||
}
|
||||
|
||||
update({ id, id_question, id_user, value, time_submit, score, score_explaination, id_corrector, time_scored }) {
|
||||
update({ id, id_question, id_user, value, time_submit, score, score_explaination, id_corrector, time_scored, time_reported }) {
|
||||
this.id = id;
|
||||
this.id_question = id_question;
|
||||
this.id_user = id_user;
|
||||
|
@ -15,6 +15,21 @@ export class Response {
|
|||
this.score_explaination = score_explaination;
|
||||
this.id_corrector = id_corrector;
|
||||
this.time_scored = time_scored;
|
||||
this.time_reported = time_reported;
|
||||
}
|
||||
|
||||
async report(survey) {
|
||||
const res = await fetch(`api/surveys/${survey.id}/responses/${this.id}/report`, {
|
||||
method: 'POST',
|
||||
headers: {'Accept': 'application/json'},
|
||||
});
|
||||
if (res.status == 200) {
|
||||
const data = await res.json();
|
||||
this.update(data);
|
||||
return data;
|
||||
} else {
|
||||
throw new Error((await res.json()).errmsg);
|
||||
}
|
||||
}
|
||||
|
||||
async save() {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { getQuestions } from './questions';
|
||||
import { Response } from './response';
|
||||
|
||||
export class Survey {
|
||||
constructor(res) {
|
||||
|
@ -49,7 +50,7 @@ export class Survey {
|
|||
headers: {'Accept': 'application/json'},
|
||||
});
|
||||
if (res.status == 200) {
|
||||
return await res.json();
|
||||
return (await res.json()).map((r) => new Response(r));
|
||||
} else {
|
||||
throw new Error((await res.json()).errmsg);
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
{:then responses}
|
||||
<td>
|
||||
{#if responses}
|
||||
{responses.filter((r) => !r.time_scored).length} /
|
||||
{responses.filter((r) => !r.time_scored || (r.time_reported && r.time_reported >= r.time_scored)).length} /
|
||||
{responses.length}
|
||||
{:else}
|
||||
0
|
||||
|
|
Reference in a new issue