From 9dfe6b4529d3e74756477bbe7f3c129f020d3b65 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Fri, 29 Nov 2019 15:01:04 +0100 Subject: [PATCH] Add score and working time to feedback page --- app/controllers/exercises_controller.rb | 3 +++ app/models/exercise.rb | 5 +++++ app/views/exercises/feedback.html.slim | 10 ++++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 5505ef56..855ad5e6 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -105,6 +105,9 @@ class ExercisesController < ApplicationController def feedback authorize! @feedbacks = @exercise.user_exercise_feedbacks.paginate(page: params[:page]) + @submissions = @feedbacks.map do |feedback| + feedback.exercise.final_submission(feedback.user) + end end def import_proforma_xml diff --git a/app/models/exercise.rb b/app/models/exercise.rb index 3f4414e8..def5a098 100644 --- a/app/models/exercise.rb +++ b/app/models/exercise.rb @@ -493,12 +493,17 @@ class Exercise < ApplicationRecord def maximum_score(user = nil) if user + # FIXME: where(user: user) will not work here! submissions.where(user: user).where("cause IN ('submit','assess')").where("score IS NOT NULL").order("score DESC").first.score || 0 rescue 0 else files.teacher_defined_tests.sum(:weight) end end + def final_submission(user) + submissions.final.where(user_id: user.id, user_type: user.class.name).order(created_at: :desc).first + end + def has_user_solved(user) maximum_score(user).to_i == maximum_score.to_i end diff --git a/app/views/exercises/feedback.html.slim b/app/views/exercises/feedback.html.slim index 3405a542..9b1a5b85 100644 --- a/app/views/exercises/feedback.html.slim +++ b/app/views/exercises/feedback.html.slim @@ -4,12 +4,15 @@ h1 = link_to_if(policy(@exercise).show?, @exercise, exercise_path(@exercise)) .header = t('activerecord.attributes.exercise.description') .value = render_markdown(@exercise.description) - .header = t('activerecord.models.user_exercise_feedback.other') + span.header.col-sm-3.pl-0 = "#{t('activerecord.attributes.exercise.maximum_score')}" + span.col-sm-9 = @exercise.maximum_score + + .header.mt-3 = t('activerecord.models.user_exercise_feedback.other') - if @feedbacks.nil? or @feedbacks.size == 0 .no-feedback = t('user_exercise_feedback.no_feedback') ul.list-unstyled - - @feedbacks.each do |feedback| + - @feedbacks.each_with_index do |feedback, index| li.card.mt-2 .card-header role="tab" id="heading" div.clearfix.feedback-header @@ -22,6 +25,9 @@ h1 = link_to_if(policy(@exercise).show?, @exercise, exercise_path(@exercise)) .text = feedback.feedback_text .difficulty = "#{t('user_exercise_feedback.difficulty')} #{feedback.difficulty}" if feedback.difficulty .worktime = "#{t('user_exercise_feedback.working_time')} #{feedback.user_estimated_worktime}" if feedback.user_estimated_worktime + .card-footer + span.points = "#{t('exercises.statistics.score')}: #{@submissions[index].score}" + span.working_time.pull-right = "#{t('exercises.statistics.worktime')}: #{@exercise.average_working_time_for(feedback.user.id) or 0}" = render('shared/pagination', collection: @feedbacks)