Description:
- start adding testcases into database - fix download button for score report (grafted from aabe2eab4ee28760618043fc980bb5d5aaca5311)
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r658:e45cb8bba213 - - 7 files changed: 77 inserted, 6 deleted

@@ -0,0 +1,4
1 + class Testcase < ActiveRecord::Base
2 + belongs_to :problem
3 + attr_accessible :group, :input, :num, :score, :sol
4 + end
@@ -0,0 +1,15
1 + class CreateTestcases < ActiveRecord::Migration
2 + def change
3 + create_table :testcases do |t|
4 + t.references :problem
5 + t.integer :num
6 + t.integer :group
7 + t.integer :score
8 + t.text :input
9 + t.text :sol
10 +
11 + t.timestamps
12 + end
13 + add_index :testcases, :problem_id
14 + end
15 + end
@@ -0,0 +1,5
1 + require 'spec_helper'
2 +
3 + describe Testcases do
4 + pending "add some examples to (or delete) #{__FILE__}"
5 + end
@@ -1,3 +1,5
1 + require 'csv'
2 +
1 3 class ReportController < ApplicationController
2 4
3 5 before_filter :authenticate
@@ -23,7 +25,7
23 25 @scorearray = calculate_max_score(@problems, @users,0,0,true)
24 26
25 27 #rencer accordingly
26 - if params[:commit] == 'download csv' then
28 + if params[:button] == 'download' then
27 29 csv = gen_csv_from_scorearray(@scorearray,@problems)
28 30 send_data csv, filename: 'max_score.csv'
29 31 else
@@ -57,7 +59,7
57 59 @scorearray = calculate_max_score(@problems, @users,since_id,until_id)
58 60
59 61 #rencer accordingly
60 - if params[:commit] == 'download csv' then
62 + if params[:button] == 'download' then
61 63 csv = gen_csv_from_scorearray(@scorearray,@problems)
62 64 send_data csv, filename: 'max_score.csv'
63 65 else
@@ -485,4 +487,35
485 487 return scorearray
486 488 end
487 489
490 + def gen_csv_from_scorearray(scorearray,problem)
491 + CSV.generate do |csv|
492 + #add header
493 + header = ['User','Name', 'Activated?', 'Logged in', 'Contest']
494 + problem.each { |p| header << p.name }
495 + header += ['Total','Passed']
496 + csv << header
497 + #add data
498 + scorearray.each do |sc|
499 + total = num_passed = 0
500 + row = Array.new
501 + sc.each_index do |i|
502 + if i == 0
503 + row << sc[i].login
504 + row << sc[i].full_name
505 + row << sc[i].activated
506 + row << (sc[i].try(:contest_stat).try(:started_at)!=nil ? 'yes' : 'no')
507 + row << sc[i].contests.collect {|c| c.name}.join(', ')
508 + else
509 + row << sc[i][0]
510 + total += sc[i][0]
511 + num_passed += 1 if sc[i][1]
512 + end
513 + end
514 + row << total
515 + row << num_passed
516 + csv << row
517 + end
518 + end
519 + end
520 +
488 521 end
@@ -3,6 +3,7
3 3 belongs_to :description
4 4 has_and_belongs_to_many :contests, :uniq => true
5 5 has_many :test_pairs, :dependent => :delete_all
6 + has_many :testcases, :dependent => :destroy
6 7
7 8 validates_presence_of :name
8 9 validates_format_of :name, :with => /^\w+$/
@@ -11,7 +11,7
11 11 Select problem(s) that we wish to know the score.
12 12 = label_tag :problem_id, "Problems"
13 13 = select_tag 'problem_id[]',
14 - options_for_select(Problem.all.collect {|p| ["[#{p.name}] #{p.full_name}", p.id]}),
14 + options_for_select(Problem.all.collect {|p| ["[#{p.name}] #{p.full_name}", p.id]},params[:problem_id]),
15 15 { class: 'select2 form-control', multiple: "true" }
16 16 .col-md-4
17 17 .panel.panel-primary
@@ -41,8 +41,8
41 41 Only enabled users
42 42 .row
43 43 .col-md-12
44 - = button_tag 'Show', class: "btn btn-primary btn-large"
45 - = button_tag 'Download CSV', class: "btn btn-primary btn-large"
44 + = button_tag 'Show', class: "btn btn-primary btn-large", value: "show"
45 + = button_tag 'Download CSV', class: "btn btn-primary btn-large", value: "download"
46 46
47 47 - if @scorearray
48 48 %h2 Result
@@ -11,7 +11,7
11 11 #
12 12 # It's strongly recommended to check this file into your version control system.
13 13
14 - ActiveRecord::Schema.define(:version => 20161008050135) do
14 + ActiveRecord::Schema.define(:version => 20161014091417) do
15 15
16 16 create_table "announcements", :force => true do |t|
17 17 t.string "author"
@@ -236,6 +236,19
236 236
237 237 add_index "test_requests", ["user_id", "problem_id"], :name => "index_test_requests_on_user_id_and_problem_id"
238 238
239 + create_table "testcases", :force => true do |t|
240 + t.integer "problem_id"
241 + t.integer "num"
242 + t.integer "group"
243 + t.integer "score"
244 + t.text "input"
245 + t.text "sol"
246 + t.datetime "created_at", :null => false
247 + t.datetime "updated_at", :null => false
248 + end
249 +
250 + add_index "testcases", ["problem_id"], :name => "index_testcases_on_problem_id"
251 +
239 252 create_table "user_contest_stats", :force => true do |t|
240 253 t.integer "user_id"
241 254 t.datetime "started_at"
You need to be logged in to leave comments. Login now