Allow filtering external user statistics by tag
This commit is contained in:
@ -14,12 +14,12 @@ class ExternalUsersController < ApplicationController
|
||||
authorize!
|
||||
end
|
||||
|
||||
def working_time_query
|
||||
def working_time_query(tag=nil)
|
||||
"""
|
||||
SELECT user_id,
|
||||
exercise_id,
|
||||
bar.exercise_id,
|
||||
max(score) as maximum_score,
|
||||
count(id) as runs,
|
||||
count(bar.id) as runs,
|
||||
sum(working_time_new) AS working_time
|
||||
FROM
|
||||
(SELECT user_id,
|
||||
@ -42,9 +42,12 @@ class ExternalUsersController < ApplicationController
|
||||
AND user_type = 'ExternalUser'
|
||||
GROUP BY exercise_id,
|
||||
user_id,
|
||||
id) AS foo) AS bar
|
||||
id
|
||||
) AS foo
|
||||
) AS bar
|
||||
#{tag.nil? ? '' : ' JOIN exercise_tags et ON et.exercise_id = bar.exercise_id AND et.tag_id = ' + tag + ' '}
|
||||
GROUP BY user_id,
|
||||
exercise_id;
|
||||
bar.exercise_id;
|
||||
"""
|
||||
end
|
||||
|
||||
@ -54,7 +57,7 @@ class ExternalUsersController < ApplicationController
|
||||
|
||||
statistics = {}
|
||||
|
||||
ActiveRecord::Base.connection.execute(working_time_query).each do |tuple|
|
||||
ActiveRecord::Base.connection.execute(working_time_query(params[:tag])).each do |tuple|
|
||||
statistics[tuple["exercise_id"].to_i] = tuple
|
||||
end
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
h1 = t('.title')
|
||||
|
||||
- exercises = Exercise.where(:id => @user.submissions.group(:exercise_id).select(:exercise_id).distinct())
|
||||
- exercises = Exercise.where(:id => @user.submissions.group(:exercise_id).select(:exercise_id).distinct)
|
||||
|
||||
.table-responsive
|
||||
table.table.table-striped.sortable
|
||||
@ -10,7 +10,8 @@ h1 = t('.title')
|
||||
th.header = t(title)
|
||||
tbody
|
||||
- exercises.each do |exercise|
|
||||
- if statistics[exercise.id] then stats = statistics[exercise.id] else stats = {"working_time" => 0, "runs" => 0, "score" => 0}
|
||||
- if statistics[exercise.id]
|
||||
- stats = statistics[exercise.id]
|
||||
tr
|
||||
td = link_to exercise, controller: "exercises", action: "statistics", external_user_id: @user.id, id: exercise.id
|
||||
td = stats["maximum_score"] or 0
|
||||
|
Reference in New Issue
Block a user