diff --git a/app/controllers/report_controller.rb b/app/controllers/report_controller.rb --- a/app/controllers/report_controller.rb +++ b/app/controllers/report_controller.rb @@ -12,6 +12,45 @@ admin_authorization } + def show_max_score + end + + def get_max_score + #process list of problems + + #process submission range + if params[:commit] == 'download csv' + @problems = Problem.all + else + @problems = Problem.find_available_problems + end + @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 + + if params[:commit] == 'download csv' then + csv = gen_csv_from_scorearray(@scorearray,@problems) + send_data csv, filename: 'max_score.csv' + else + render template: 'user_admin/user_stat' + end + + end + def score if params[:commit] == 'download csv' @problems = Problem.all