diff --git a/app/controllers/user_admin_controller.rb b/app/controllers/user_admin_controller.rb --- a/app/controllers/user_admin_controller.rb +++ b/app/controllers/user_admin_controller.rb @@ -129,12 +129,33 @@ ustat = Array.new ustat[0] = u @problems.each do |p| - sub = Submission.find_last_by_user_and_problem(u.id,p.id) - if (sub!=nil) and (sub.points!=nil) - ustat << [(sub.points.to_f*100/p.full_score).round, (sub.points>=p.full_score)] - else - ustat << [0,false] - end + sub = Submission.find_last_by_user_and_problem(u.id,p.id) + if (sub!=nil) and (sub.points!=nil) + ustat << [(sub.points.to_f*100/p.full_score).round, (sub.points>=p.full_score)] + else + ustat << [0,false] + end + end + @scorearray << ustat + end + end + + def user_stat_max + @problems = Problem.find_available_problems + @users = User.find(:all, :include => [:contests, :contest_stat]) + @scorearray = Array.new + #set up range from param + since_id = params.fetch(:since_id, 0).to_i + until_id = params.fetch(:until_id, 0).to_i + @users.each do |u| + ustat = Array.new + ustat[0] = u + @problems.each do |p| + max_points = 0 + Submission.find_in_range_by_user_and_problem(u.id,p.id,since_id,until_id).each do |sub| + max_points = sub.points if sub and sub.points and (sub.points > max_points) + end + ustat << [(max_points.to_f*100/p.full_score).round, (max_points>=p.full_score)] end @scorearray << ustat end diff --git a/app/models/submission.rb b/app/models/submission.rb --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -34,6 +34,13 @@ "ORDER BY user_id") end + def self.find_in_range_by_user_and_problem(user_id, problem_id,since_id,until_id) + records = Submission.where(problem_id: problem_id,user_id: user_id) + records = records.where('id >= ?',since_id) if since_id > 0 + records = records.where('id <= ?',until_id) if until_id > 0 + records.all + end + def self.find_last_for_all_available_problems(user_id) submissions = Array.new problems = Problem.find_available_problems diff --git a/app/views/user_admin/user_stat.html.erb b/app/views/user_admin/user_stat.html.erb --- a/app/views/user_admin/user_stat.html.erb +++ b/app/views/user_admin/user_stat.html.erb @@ -1,4 +1,9 @@

User grading results

+

Show scores from latest submission

+ +<%= render 'submission_range' %> + +

Latest scores