diff --git a/surveys.go b/surveys.go index fd3181e..ec3eb6d 100644 --- a/surveys.go +++ b/surveys.go @@ -80,7 +80,34 @@ func declareAPIAuthSurveysRoutes(router *gin.RouterGroup) { } s := c.MustGet("survey").(*Survey) - if (s.Promo == u.Promo && s.Shown) || (u != nil && u.IsAdmin) { + if u.IsAdmin { + questions, err := s.GetQuestions() + if err != nil { + log.Println("Unable to getQuestions:", err) + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "Unable to retrieve questions. Please try again later."}) + return + } + + itemCount := 0 + itemCorrected := 0 + for _, q := range questions { + res, err := q.GetResponses() + if err != nil { + log.Printf("Unable to GetResponses(qid=%d): %s", q.Id, err.Error()) + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs during responses retrieval."}) + return + } + + for _, r := range res { + itemCount += 1 + if r.TimeScored != nil && (r.TimeReported == nil || r.TimeScored.After(*r.TimeReported)) { + itemCorrected += 1 + } + } + } + + c.JSON(http.StatusOK, map[string]int{"count": itemCount, "corrected": itemCorrected}) + } else if s.Promo == u.Promo && s.Shown { score, err := s.GetScore(u) if err != nil { log.Printf("Unable to GetScore(uid=%d;sid=%d): %s", u.Id, s.Id, err.Error()) diff --git a/ui/src/lib/components/CorrectionResponseFooter.svelte b/ui/src/lib/components/CorrectionResponseFooter.svelte index 68af856..84d765a 100644 --- a/ui/src/lib/components/CorrectionResponseFooter.svelte +++ b/ui/src/lib/components/CorrectionResponseFooter.svelte @@ -38,14 +38,37 @@ for (const t of templates) { if (my_tpls[t.id] === undefined && cts[t.id.toString()]) { my_tpls[t.id] = cts[t.id.toString()][response.id_user] !== undefined; + + // Hack to autocorrect only if this has already been checked previously + if (autoCorrectionInProgress && cts[t.id.toString()][response.id_user] !== undefined) { + autoCorrectionInProgress = false; + } } } } } + + let element = null; + let scrollY = 0; + let autoCorrectionInProgress = true; + $: { + if (element && scrollY > element.offsetParent.offsetTop - 500 && !my_correction) { + let tmp = false; + [tmp, autoCorrectionInProgress] = [autoCorrectionInProgress, true]; + if (!tmp) { + autoCorrection(response.id_user, my_tpls).then((r) => { + my_correction = r; + autoCorrectionInProgress = false; + }) + } + } + } +
@@ -69,6 +92,7 @@ >