Fix run and score statistics for internal and external users
This commit is contained in:
@ -496,7 +496,7 @@ working_time_accumulated: working_time_accumulated})
|
|||||||
render 'exercises/external_users/statistics'
|
render 'exercises/external_users/statistics'
|
||||||
else
|
else
|
||||||
# Show general statistic page for specific exercise
|
# Show general statistic page for specific exercise
|
||||||
user_statistics = {}
|
user_statistics = {'InternalUser' => {}, 'ExternalUser' => {}}
|
||||||
additional_filter = if policy(@exercise).detailed_statistics?
|
additional_filter = if policy(@exercise).detailed_statistics?
|
||||||
''
|
''
|
||||||
elsif !policy(@exercise).detailed_statistics? && current_user.study_groups.count.positive?
|
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
|
# e.g. internal user without any study groups, show no submissions
|
||||||
'AND FALSE'
|
'AND FALSE'
|
||||||
end
|
end
|
||||||
query = "SELECT user_id, MAX(score) AS maximum_score, COUNT(id) AS runs
|
query = "SELECT user_id, user_type, MAX(score) AS maximum_score, COUNT(id) AS runs
|
||||||
FROM submissions WHERE exercise_id = #{@exercise.id} #{additional_filter} AND user_type = 'ExternalUser'
|
FROM submissions WHERE exercise_id = #{@exercise.id} #{additional_filter}
|
||||||
GROUP BY user_id;"
|
GROUP BY user_id, user_type;"
|
||||||
ApplicationRecord.connection.execute(query).each do |tuple|
|
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
|
end
|
||||||
render locals: {
|
render locals: {
|
||||||
user_statistics: user_statistics,
|
user_statistics: user_statistics,
|
||||||
|
@ -73,7 +73,7 @@ h1 = @exercise
|
|||||||
tbody
|
tbody
|
||||||
- users = symbol.to_s.classify.constantize.where(id: submissions.joins(symbol).group(:user_id).select(:user_id).distinct)
|
- users = symbol.to_s.classify.constantize.where(id: submissions.joins(symbol).group(:user_id).select(:user_id).distinct)
|
||||||
- users.each do |user|
|
- 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}"
|
- label = "#{user.displayname}"
|
||||||
tr
|
tr
|
||||||
td = link_to_if symbol==:external_users && policy(user).statistics?, label, {controller: "exercises", action: "statistics", external_user_id: user.id, id: @exercise.id}
|
td = link_to_if symbol==:external_users && policy(user).statistics?, label, {controller: "exercises", action: "statistics", external_user_id: user.id, id: @exercise.id}
|
||||||
|
Reference in New Issue
Block a user