Description:
add download score as csv
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r449:c1892413ee46 - - 2 files changed: 62 inserted, 5 deleted

@@ -1,5 +1,8
1 + require 'csv'
2 +
1 class UserAdminController < ApplicationController
3 class UserAdminController < ApplicationController
2
4
5 +
3 include MailHelperMethods
6 include MailHelperMethods
4
7
5 before_filter :admin_authorization
8 before_filter :admin_authorization
@@ -122,7 +125,11
122 end
125 end
123
126
124 def user_stat
127 def user_stat
125 - @problems = Problem.find_available_problems
128 + if params[:commit] == 'download csv'
129 + @problems = Problem.all
130 + else
131 + @problems = Problem.find_available_problems
132 + end
126 @users = User.find(:all, :include => [:contests, :contest_stat])
133 @users = User.find(:all, :include => [:contests, :contest_stat])
127 @scorearray = Array.new
134 @scorearray = Array.new
128 @users.each do |u|
135 @users.each do |u|
@@ -138,10 +145,21
138 end
145 end
139 @scorearray << ustat
146 @scorearray << ustat
140 end
147 end
148 +
149 + if params[:commit] == 'download csv' then
150 + csv = gen_csv_from_scorearray(@scorearray,@problems)
151 + send_data csv, filename: 'last_score.csv'
152 + else
153 + render template: 'user_admin/user_stat'
154 + end
141 end
155 end
142
156
143 def user_stat_max
157 def user_stat_max
144 - @problems = Problem.find_available_problems
158 + if params[:commit] == 'download csv'
159 + @problems = Problem.all
160 + else
161 + @problems = Problem.find_available_problems
162 + end
145 @users = User.find(:all, :include => [:contests, :contest_stat])
163 @users = User.find(:all, :include => [:contests, :contest_stat])
146 @scorearray = Array.new
164 @scorearray = Array.new
147 #set up range from param
165 #set up range from param
@@ -160,7 +178,12
160 @scorearray << ustat
178 @scorearray << ustat
161 end
179 end
162
180
163 - render template: 'user_admin/user_stat'
181 + if params[:commit] == 'download csv' then
182 + csv = gen_csv_from_scorearray(@scorearray,@problems)
183 + send_data csv, filename: 'max_score.csv'
184 + else
185 + render template: 'user_admin/user_stat'
186 + end
164 end
187 end
165
188
166 def import
189 def import
@@ -475,4 +498,35
475 end
498 end
476 return [@contest, @users]
499 return [@contest, @users]
477 end
500 end
501 +
502 + def gen_csv_from_scorearray(scorearray,problem)
503 + CSV.generate do |csv|
504 + #add header
505 + header = ['User','Name', 'Activated?', 'Logged in', 'Contest']
506 + problem.each { |p| header << p.name }
507 + header += ['Total','Passed']
508 + csv << header
509 + #add data
510 + scorearray.each do |sc|
511 + total = num_passed = 0
512 + row = Array.new
513 + sc.each_index do |i|
514 + if i == 0
515 + row << sc[i].login
516 + row << sc[i].full_name
517 + row << sc[i].activated
518 + row << (sc[i].try(:contest_stat).try(:started_at)!=nil ? 'yes' : 'no')
519 + row << sc[i].contests.collect {|c| c.name}.join(', ')
520 + else
521 + row << sc[i][0]
522 + total += sc[i][0]
523 + num_passed += 1 if sc[i][1]
524 + end
525 + end
526 + row << total
527 + row << num_passed
528 + csv << row
529 + end
530 + end
531 + end
478 end
532 end
@@ -18,10 +18,13
18
18
19 = render partial: 'submission_range'
19 = render partial: 'submission_range'
20
20
21 - - if params[:action] == 'user_stat'
21 + - if params[:action] == 'user_stat'
22 - = "latest score"
22 + %h3 Latest score
23 + = link_to '[download csv with all problems]', controller: :user_admin, action: :user_stat, commit: 'download csv'
23 - else
24 - else
25 + %h3 Max score
24 = link_to '[Show only latest submissions]', controller: :user_admin, action: :user_stat
26 = link_to '[Show only latest submissions]', controller: :user_admin, action: :user_stat
27 + = link_to '[download csv with all problems]', controller: :user_admin, action: :user_stat_max, commit: 'download csv'
25
28
26 %table.tablesorter-cafe#my_table
29 %table.tablesorter-cafe#my_table
27 %thead
30 %thead
You need to be logged in to leave comments. Login now