diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 1e3d7258..e052e230 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -496,7 +496,7 @@ working_time_accumulated: working_time_accumulated}) render 'exercises/external_users/statistics' else # Show general statistic page for specific exercise - user_statistics = {} + user_statistics = {'InternalUser' => {}, 'ExternalUser' => {}} additional_filter = if policy(@exercise).detailed_statistics? '' elsif !policy(@exercise).detailed_statistics? && current_user.study_groups.count.positive? @@ -505,11 +505,11 @@ working_time_accumulated: working_time_accumulated}) # e.g. internal user without any study groups, show no submissions 'AND FALSE' end - query = "SELECT user_id, MAX(score) AS maximum_score, COUNT(id) AS runs - FROM submissions WHERE exercise_id = #{@exercise.id} #{additional_filter} AND user_type = 'ExternalUser' - GROUP BY user_id;" + query = "SELECT user_id, user_type, MAX(score) AS maximum_score, COUNT(id) AS runs + FROM submissions WHERE exercise_id = #{@exercise.id} #{additional_filter} + GROUP BY user_id, user_type;" ApplicationRecord.connection.execute(query).each do |tuple| - user_statistics[tuple['user_id'].to_i] = tuple + user_statistics[tuple['user_type']][tuple['user_id'].to_i] = tuple end render locals: { user_statistics: user_statistics, diff --git a/app/views/exercises/statistics.html.slim b/app/views/exercises/statistics.html.slim index afb78b3e..0fc2a847 100644 --- a/app/views/exercises/statistics.html.slim +++ b/app/views/exercises/statistics.html.slim @@ -73,7 +73,7 @@ h1 = @exercise tbody - users = symbol.to_s.classify.constantize.where(id: submissions.joins(symbol).group(:user_id).select(:user_id).distinct) - users.each do |user| - - if user_statistics[user.id] then us = user_statistics[user.id] else us = {"maximum_score" => nil, "runs" => nil} + - if user_statistics[user.class.name][user.id] then us = user_statistics[user.class.name][user.id] else us = {"maximum_score" => nil, "runs" => nil} - label = "#{user.displayname}" tr td = link_to_if symbol==:external_users && policy(user).statistics?, label, {controller: "exercises", action: "statistics", external_user_id: user.id, id: @exercise.id}