Description:
fix compiler message add testing database
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r621:3b5645cfc80e - - 9 files changed: 125 inserted, 106 deleted

@@ -1,81 +1,82
1 1 source 'https://rubygems.org'
2 2
3 3 gem 'rails', '~>4.2.0'
4 4 gem 'activerecord-session_store'
5 5
6 6 gem 'select2-rails'
7 7
8 8 # Bundle edge Rails instead:
9 9 # gem 'rails', :git => 'git://github.com/rails/rails.git'
10 10
11 11 gem 'mysql2'
12 + gem 'sqlite3'
12 13
13 14 # Gems used only for assets and not required
14 15 # in production environments by default.
15 16 group :assets do
16 17 gem 'sass-rails'
17 18 gem 'coffee-rails'
18 19
19 20 # See https://github.com/sstephenson/execjs#readme for more supported runtimes
20 21 # gem 'therubyracer', :platforms => :ruby
21 22
22 23 gem 'uglifier'
23 24 end
24 25
25 26 # gem 'prototype-rails'
26 27
27 28 # To use ActiveModel has_secure_password
28 29 # gem 'bcrypt-ruby', '~> 3.0.0'
29 30
30 31 # To use Jbuilder templates for JSON
31 32 # gem 'jbuilder'
32 33
33 34 # Use unicorn as the app server
34 35 # gem 'unicorn'
35 36
36 37 # Deploy with Capistrano
37 38 # gem 'capistrano'
38 39
39 40 # To use debugger
40 41 # gem 'debugger'
41 42 #
42 43
43 44 #in-place editor
44 45 gem 'best_in_place', '~> 3.0.1'
45 46
46 47 # jquery addition
47 48 gem 'jquery-rails'
48 - gem 'jquery-ui-sass-rails'
49 + gem 'jquery-ui-rails'
49 50 gem 'jquery-timepicker-addon-rails'
50 51 gem 'jquery-tablesorter'
51 52 gem 'jquery-countdown-rails'
52 53
53 54 #syntax highlighter
54 55 gem 'rouge'
55 56
56 57 #add bootstrap
57 58 gem 'bootstrap-sass', '~> 3.2.0'
58 59 gem 'bootstrap-switch-rails'
59 60 gem 'bootstrap-toggle-rails'
60 61 gem 'autoprefixer-rails'
61 62
62 63 #bootstrap sortable
63 64 gem 'momentjs-rails'
64 65 gem 'rails_bootstrap_sortable'
65 66
66 67 #ace editor
67 68 gem 'ace-rails-ap'
68 69
69 70 gem 'haml'
70 71 gem 'haml-rails'
71 72 gem 'mail'
72 73 gem 'rdiscount'
73 74 gem 'test-unit'
74 75 gem 'will_paginate', '~> 3.0.7'
75 76 gem 'dynamic_form'
76 77 gem 'in_place_editing'
77 78 gem 'verification', :git => 'https://github.com/sikachu/verification.git'
78 79
79 80 group :test, :development do
80 81 gem 'rspec-rails'
81 82 end
@@ -58,186 +58,184
58 58 actionpack (>= 3.2)
59 59 railties (>= 3.2)
60 60 bootstrap-sass (3.2.0.2)
61 61 sass (~> 3.2)
62 62 bootstrap-switch-rails (3.3.3)
63 63 bootstrap-toggle-rails (2.2.1.0)
64 64 builder (3.2.2)
65 65 coffee-rails (4.2.1)
66 66 coffee-script (>= 2.2.0)
67 67 railties (>= 4.0.0, < 5.2.x)
68 68 coffee-script (2.4.1)
69 69 coffee-script-source
70 70 execjs
71 71 coffee-script-source (1.11.1)
72 72 concurrent-ruby (1.0.2)
73 73 diff-lcs (1.2.5)
74 74 dynamic_form (1.1.4)
75 75 erubis (2.7.0)
76 76 execjs (2.7.0)
77 77 globalid (0.3.7)
78 78 activesupport (>= 4.1.0)
79 79 haml (4.0.7)
80 80 tilt
81 81 haml-rails (0.9.0)
82 82 actionpack (>= 4.0.1)
83 83 activesupport (>= 4.0.1)
84 84 haml (>= 4.0.6, < 5.0)
85 85 html2haml (>= 1.0.1)
86 86 railties (>= 4.0.1)
87 87 html2haml (2.0.0)
88 88 erubis (~> 2.7.0)
89 89 haml (~> 4.0.0)
90 90 nokogiri (~> 1.6.0)
91 91 ruby_parser (~> 3.5)
92 92 i18n (0.7.0)
93 93 in_place_editing (1.2.0)
94 94 jquery-countdown-rails (2.0.2)
95 95 jquery-rails (4.2.1)
96 96 rails-dom-testing (>= 1, < 3)
97 97 railties (>= 4.2.0)
98 98 thor (>= 0.14, < 2.0)
99 99 jquery-tablesorter (1.23.1)
100 100 railties (>= 3.2, < 6)
101 101 jquery-timepicker-addon-rails (1.4.1)
102 102 railties (>= 3.1)
103 103 jquery-ui-rails (4.0.3)
104 104 jquery-rails
105 105 railties (>= 3.1.0)
106 - jquery-ui-sass-rails (4.0.3.0)
107 - jquery-rails
108 - jquery-ui-rails (= 4.0.3)
109 - railties (>= 3.1.0)
110 106 json (1.8.3)
111 107 loofah (2.0.3)
112 108 nokogiri (>= 1.5.9)
113 109 mail (2.6.4)
114 110 mime-types (>= 1.16, < 4)
115 111 mime-types (3.1)
116 112 mime-types-data (~> 3.2015)
117 113 mime-types-data (3.2016.0521)
118 114 mini_portile2 (2.1.0)
119 115 minitest (5.10.1)
120 116 momentjs-rails (2.15.1)
121 117 railties (>= 3.1)
122 118 multi_json (1.12.1)
123 119 mysql2 (0.4.5)
124 120 nokogiri (1.6.8.1)
125 121 mini_portile2 (~> 2.1.0)
126 122 power_assert (0.4.1)
127 123 rack (1.6.5)
128 124 rack-test (0.6.3)
129 125 rack (>= 1.0)
130 126 rails (4.2.7.1)
131 127 actionmailer (= 4.2.7.1)
132 128 actionpack (= 4.2.7.1)
133 129 actionview (= 4.2.7.1)
134 130 activejob (= 4.2.7.1)
135 131 activemodel (= 4.2.7.1)
136 132 activerecord (= 4.2.7.1)
137 133 activesupport (= 4.2.7.1)
138 134 bundler (>= 1.3.0, < 2.0)
139 135 railties (= 4.2.7.1)
140 136 sprockets-rails
141 137 rails-deprecated_sanitizer (1.0.3)
142 138 activesupport (>= 4.2.0.alpha)
143 139 rails-dom-testing (1.0.7)
144 140 activesupport (>= 4.2.0.beta, < 5.0)
145 141 nokogiri (~> 1.6.0)
146 142 rails-deprecated_sanitizer (>= 1.0.1)
147 143 rails-html-sanitizer (1.0.3)
148 144 loofah (~> 2.0)
149 145 rails_bootstrap_sortable (2.0.1)
150 146 momentjs-rails (>= 2.8.3)
151 147 railties (4.2.7.1)
152 148 actionpack (= 4.2.7.1)
153 149 activesupport (= 4.2.7.1)
154 150 rake (>= 0.8.7)
155 151 thor (>= 0.18.1, < 2.0)
156 152 rake (12.0.0)
157 153 rdiscount (2.2.0.1)
158 154 rouge (2.0.7)
159 155 rspec-core (3.5.4)
160 156 rspec-support (~> 3.5.0)
161 157 rspec-expectations (3.5.0)
162 158 diff-lcs (>= 1.2.0, < 2.0)
163 159 rspec-support (~> 3.5.0)
164 160 rspec-mocks (3.5.0)
165 161 diff-lcs (>= 1.2.0, < 2.0)
166 162 rspec-support (~> 3.5.0)
167 163 rspec-rails (3.5.2)
168 164 actionpack (>= 3.0)
169 165 activesupport (>= 3.0)
170 166 railties (>= 3.0)
171 167 rspec-core (~> 3.5.0)
172 168 rspec-expectations (~> 3.5.0)
173 169 rspec-mocks (~> 3.5.0)
174 170 rspec-support (~> 3.5.0)
175 171 rspec-support (3.5.0)
176 172 ruby_parser (3.8.3)
177 173 sexp_processor (~> 4.1)
178 174 sass (3.4.22)
179 175 sass-rails (5.0.6)
180 176 railties (>= 4.0.0, < 6)
181 177 sass (~> 3.1)
182 178 sprockets (>= 2.8, < 4.0)
183 179 sprockets-rails (>= 2.0, < 4.0)
184 180 tilt (>= 1.1, < 3)
185 181 select2-rails (4.0.3)
186 182 thor (~> 0.14)
187 183 sexp_processor (4.7.0)
188 184 sprockets (3.7.0)
189 185 concurrent-ruby (~> 1.0)
190 186 rack (> 1, < 3)
191 187 sprockets-rails (3.2.0)
192 188 actionpack (>= 4.0)
193 189 activesupport (>= 4.0)
194 190 sprockets (>= 3.0.0)
191 + sqlite3 (1.3.12)
195 192 test-unit (3.2.3)
196 193 power_assert
197 194 thor (0.19.4)
198 195 thread_safe (0.3.5)
199 196 tilt (2.0.5)
200 197 tzinfo (1.2.2)
201 198 thread_safe (~> 0.1)
202 199 uglifier (3.0.4)
203 200 execjs (>= 0.3.0, < 3)
204 201 will_paginate (3.0.12)
205 202
206 203 PLATFORMS
207 204 ruby
208 205
209 206 DEPENDENCIES
210 207 ace-rails-ap
211 208 activerecord-session_store
212 209 autoprefixer-rails
213 210 best_in_place (~> 3.0.1)
214 211 bootstrap-sass (~> 3.2.0)
215 212 bootstrap-switch-rails
216 213 bootstrap-toggle-rails
217 214 coffee-rails
218 215 dynamic_form
219 216 haml
220 217 haml-rails
221 218 in_place_editing
222 219 jquery-countdown-rails
223 220 jquery-rails
224 221 jquery-tablesorter
225 222 jquery-timepicker-addon-rails
226 - jquery-ui-sass-rails
223 + jquery-ui-rails
227 224 mail
228 225 momentjs-rails
229 226 mysql2
230 227 rails (~> 4.2.0)
231 228 rails_bootstrap_sortable
232 229 rdiscount
233 230 rouge
234 231 rspec-rails
235 232 sass-rails
236 233 select2-rails
234 + sqlite3
237 235 test-unit
238 236 uglifier
239 237 verification!
240 238 will_paginate (~> 3.0.7)
241 239
242 240 BUNDLED WITH
243 241 1.13.6
@@ -1,83 +1,96
1 1 class SubmissionsController < ApplicationController
2 2 before_filter :authenticate
3 - before_filter :submission_authorization, only: [:show, :direct_edit_submission]
3 + before_filter :submission_authorization, only: [:show, :direct_edit_submission, :download]
4 4
5 5 # GET /submissions
6 6 # GET /submissions.json
7 7 # Show problem selection and user's submission of that problem
8 8 def index
9 9 @user = @current_user
10 10 @problems = @user.available_problems
11 11
12 12 if params[:problem_id]==nil
13 13 @problem = nil
14 14 @submissions = nil
15 15 else
16 16 @problem = Problem.find_by_id(params[:problem_id])
17 17 if (@problem == nil) or (not @problem.available)
18 18 redirect_to main_list_path
19 19 flash[:notice] = 'Error: submissions for that problem are not viewable.'
20 20 return
21 21 end
22 22 @submissions = Submission.find_all_by_user_problem(@user.id, @problem.id)
23 23 end
24 24 end
25 25
26 26 # GET /submissions/1
27 27 # GET /submissions/1.json
28 28 def show
29 29 @submission = Submission.find(params[:id])
30 30
31 31 #log the viewing
32 32 user = User.find(session[:user_id])
33 33 SubmissionViewLog.create(user_id: session[:user_id],submission_id: @submission.id) unless user.admin?
34 34 end
35 35
36 + def download
37 + @submission = Submission.find(params[:id])
38 + send_data(@submission.source, {:filename => @submission.download_filename, :type => 'text/plain'})
39 + end
40 +
41 + def compiler_msg
42 + @submission = Submission.find(params[:id])
43 + respond_to do |format|
44 + format.js
45 + end
46 + end
47 +
36 48 #on-site new submission on specific problem
37 49 def direct_edit_problem
38 50 @problem = Problem.find(params[:problem_id])
39 51 @source = ''
40 52 render 'edit'
41 53 end
42 54
43 55 # GET /submissions/1/edit
44 56 def edit
45 57 @submission = Submission.find(params[:id])
46 58 @source = @submission.source.to_s
47 59 @problem = @submission.problem
48 60 @lang_id = @submission.language.id
49 61 end
50 62
51 63
52 64 def get_latest_submission_status
53 65 @problem = Problem.find(params[:pid])
54 66 @submission = Submission.find_last_by_user_and_problem(params[:uid],params[:pid])
55 67 puts User.find(params[:uid]).login
56 68 puts Problem.find(params[:pid]).name
57 69 puts 'nil' unless @submission
58 70 respond_to do |format|
59 71 format.js
60 72 end
61 73 end
62 74
63 75
64 76 protected
77 +
65 78 def submission_authorization
66 79 #admin always has privileged
67 80 if @current_user.admin?
68 81 return true
69 82 end
70 83
71 84 sub = Submission.find(params[:id])
72 85 if sub.problem.available?
73 86 puts "sub = #{sub.user.id}, current = #{@current_user.id}"
74 87 return true if GraderConfiguration["right.user_view_submission"] or sub.user == @current_user
75 88 end
76 89
77 90 #default to NO
78 91 unauthorized_redirect
79 92 return false
80 93 end
81 94
82 95
83 96 end
@@ -1,26 +1,26
1 1
2 2 - if submission.nil?
3 3 = "-"
4 4 - else
5 5 - unless submission.graded_at
6 6 = t 'main.submitted_at'
7 7 = format_short_time(submission.submitted_at.localtime)
8 8 - else
9 - = t 'main.graded_at'
10 - = "#{format_short_time(submission.graded_at.localtime)}, "
9 + %strong= t 'main.graded_at'
10 + = "#{format_short_time(submission.graded_at.localtime)} "
11 + %br
11 12 - if GraderConfiguration['ui.show_score']
12 - = t 'main.score'
13 + %strong=t 'main.score'
13 14 = "#{(submission.points*100/submission.problem.full_score).to_i} "
14 15 = " ["
15 16 %tt
16 17 = submission.grader_comment
17 18 = "]"
19 + %br
20 + %strong View:
18 21 - if GraderConfiguration.show_grading_result
19 - = " | "
20 22 = link_to '[detailed result]', :action => 'result', :id => submission.id
21 - = " | "
22 - = link_to("[#{t 'main.cmp_msg'}]", {:action => 'compiler_msg', :id => submission.id}, {:popup => true})
23 - = " | "
24 - = link_to("[#{t 'main.src_link'}]",{:action => 'source', :id => submission.id})
25 - //= " | "
26 - //= link_to "[#{t 'main.submissions_link'}]", main_submission_path(submission.problem.id)
23 + = link_to "#{t 'main.cmp_msg'}", {:action => 'compiler_msg', :id => submission.id}, {popup: true,class: 'btn btn-xs btn-info'}
24 + = link_to "#{t 'main.src_link'}", download_submission_path(submission.id), class: 'btn btn-xs btn-info'
25 + = link_to "#{t 'main.submissions_link'}", problem_submissions_path(problem_id), class: 'btn btn-xs btn-info'
26 +
@@ -1,26 +1,27
1 1
2 2 - if submission.nil?
3 3 = "-"
4 4 - else
5 5 - unless submission.graded_at
6 6 = t 'main.submitted_at'
7 7 = format_short_time(submission.submitted_at.localtime)
8 8 - else
9 9 %strong= t 'main.graded_at'
10 10 = "#{format_short_time(submission.graded_at.localtime)} "
11 11 %br
12 12 - if GraderConfiguration['ui.show_score']
13 13 %strong=t 'main.score'
14 14 = "#{(submission.points*100/submission.problem.full_score).to_i} "
15 15 = " ["
16 16 %tt
17 17 = submission.grader_comment
18 18 = "]"
19 19 %br
20 20 %strong View:
21 21 - if GraderConfiguration.show_grading_result
22 22 = link_to '[detailed result]', :action => 'result', :id => submission.id
23 - = link_to "#{t 'main.cmp_msg'}", {:action => 'compiler_msg', :id => submission.id}, {popup: true,class: 'btn btn-xs btn-info'}
23 + /= link_to "#{t 'main.cmp_msg'}", {:action => 'compiler_msg', :id => submission.id}, {popup: true,class: 'btn btn-xs btn-info'}
24 + = link_to "#{t 'main.cmp_msg'}", compiler_msg_submission_path(submission.id), {popup: true,remote: true,class: 'btn btn-xs btn-info'}
24 25 = link_to "#{t 'main.src_link'}",{:action => 'source', :id => submission.id}, class: 'btn btn-xs btn-info'
25 26 = link_to "#{t 'main.submissions_link'}", problem_submissions_path(problem_id), class: 'btn btn-xs btn-info'
26 27
@@ -1,82 +1,83
1 1 %h2 Live submit
2 2 %br
3 3
4 4 %textarea#text_haha{style: "display:none"}~ @source
5 5 .container
6 6 .row
7 7 .col-md-12
8 8 .alert.alert-info
9 9 Write your code in the following box, choose language, and click submit button when finished
10 10 .row
11 11 .col-md-8
12 12 %div#editor{style: 'height: 500px; border-radius: 7px; font-size: 14px;'}
13 13 .col-md-4
14 14 = form_tag({controller: :main, :action => 'submit'}, :multipart => true, class: 'form') do
15 15
16 16 = hidden_field_tag 'editor_text', @source
17 17 = hidden_field_tag 'submission[problem_id]', @problem.id
18 18 .form-group
19 19 = label_tag "Task:"
20 20 = text_field_tag 'asdf', "#{@problem.long_name}", class: 'form-control', disabled: true
21 21
22 22 .form-group
23 23 = label_tag 'Language'
24 24 = select_tag 'language_id', options_from_collection_for_select(Language.all, 'id', 'pretty_name', @lang_id || Language.find_by_pretty_name("Python").id || Language.first.id), class: 'form-control select', style: "width: 100px"
25 25 .form-group
26 26 = submit_tag 'Submit', class: 'btn btn-success', id: 'live_submit',
27 27 data: {confirm: "Submitting this source code for task #{@problem.long_name}?"}
28 28 .panel.panel-info
29 29 .panel-heading
30 30 Latest Submission Status
31 + = link_to "Refresh",get_latest_submission_status_submissions_path(@submission.user,@problem), class: "btn btn-default btn-sm", remote: true
31 32 .panel-body
32 33 - if @submission
33 34 = render :partial => 'submission_short',
34 - :locals => {:submission => @submission, :problem_name => @problem.name }
35 + :locals => {submission: @submission, problem_name: @problem.name, problem_id: @problem.id }
35 36 .row
36 37 .col-md-12
37 38 %h2 Console
38 39 %textarea#console{style: 'height: 100%; width: 100%;background-color:#000;color:#fff;font-family: consolas, monaco, "Droid Sans Mono";',rows: 20}
39 40
40 41 :javascript
41 42 $(document).ready(function() {
42 43 e = ace.edit("editor")
43 44 e.setValue($("#text_haha").val());
44 45 e.gotoLine(1);
45 46 $("#language_id").trigger('change');
46 47 brython();
47 48 });
48 49
49 50
50 51 %script#__main__{type:'text/python3'}
51 52 :plain
52 53 import sys
53 54 import traceback
54 55
55 56 from browser import document as doc
56 57 from browser import window, alert, console
57 58
58 59 _credits = """ Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands
59 60 for supporting Python development. See www.python.org for more information."""
60 61
61 62 _copyright = """Copyright (c) 2012, Pierre Quentel pierre.quentel@gmail.com
62 63 All Rights Reserved.
63 64
64 65 Copyright (c) 2001-2013 Python Software Foundation.
65 66 All Rights Reserved.
66 67
67 68 Copyright (c) 2000 BeOpen.com.
68 69 All Rights Reserved.
69 70
70 71 Copyright (c) 1995-2001 Corporation for National Research Initiatives.
71 72 All Rights Reserved.
72 73
73 74 Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
74 75 All Rights Reserved."""
75 76
76 77 _license = """Copyright (c) 2012, Pierre Quentel pierre.quentel@gmail.com
77 78 All rights reserved.
78 79
79 80 Redistribution and use in source and binary forms, with or without
80 81 modification, are permitted provided that the following conditions are met:
81 82
82 83 Redistributions of source code must retain the above copyright notice, this
@@ -40,64 +40,65
40 40 %strong Task
41 41 %td
42 42 - if @submission.problem!=nil
43 43 = link_to "[#{@submission.problem.name}]", stat_problem_path(@submission.problem)
44 44 = @submission.problem.full_name
45 45 - else
46 46 = "(n/a)"
47 47 %tr
48 48 %td.text-right
49 49 %strong Tries
50 50 %td= @submission.number
51 51 %tr
52 52 %td.text-right
53 53 %strong Language
54 54 %td= @submission.language.pretty_name
55 55 %tr
56 56 %td.text-right
57 57 %strong Submitted
58 58 %td #{time_ago_in_words(@submission.submitted_at)} ago (at #{@submission.submitted_at.to_formatted_s(:long)})
59 59 %tr
60 60 %td.text-right
61 61 %strong Graded
62 62 - if @submission.graded_at
63 63 %td #{time_ago_in_words(@submission.graded_at)} ago (at #{@submission.graded_at.to_formatted_s(:long)})
64 64 - else
65 65 %td -
66 66 %tr
67 67 %td.text-right
68 68 %strong Points
69 69 %td #{@submission.points}/#{@submission.problem.full_score}
70 70 %tr
71 71 %td.text-right
72 72 %strong Comment
73 73 %td #{@submission.grader_comment}
74 74 %tr
75 75 %td.text-right
76 76 %strong Runtime (s)
77 77 %td #{@submission.max_runtime}
78 78 %tr
79 79 %td.text-right
80 80 %strong Memory (kb)
81 81 %td #{@submission.peak_memory}
82 82 %tr
83 83 %td.text-right
84 84 %strong Compiler result
85 85 %td
86 86 %button.btn.btn-info.btn-xs{type: 'button', data: {toggle: 'modal', target: '#compiler'}}
87 87 view
88 + - if session[:admin]
89 + %tr
90 + %td.text-right
91 + %strong IP
92 + %td #{@submission.ip_address}
93 +
88 94 .modal.fade#compiler{tabindex: -1,role: 'dialog'}
89 95 .modal-dialog.modal-lg{role:'document'}
90 96 .modal-content
91 97 .modal-header
92 98 %button.close{type: 'button', data: {dismissed: :modal}, aria: {label: 'close'}}
93 99 %span{aria: {hidden: 'true'}, data: {dismiss: 'modal'}} &times;
94 100 %h4 Compiler message
95 101 .modal-body
96 - %pre= @submission.compiler_message
102 + %pre#compiler_msg= @submission.compiler_message
97 103 .modal-footer
98 104 %button.btn.btn-default{type: 'button', data: {dismiss: 'modal'}} Close
99 - - if session[:admin]
100 - %tr
101 - %td.text-right
102 - %strong IP
103 - %td #{@submission.ip_address}
@@ -1,73 +1,77
1 1 CafeGrader::Application.routes.draw do
2 2 get "sources/direct_edit"
3 3
4 4 root :to => 'main#login'
5 5
6 6 resources :contests
7 7
8 8 resources :sites
9 9
10 10 resources :announcements do
11 11 member do
12 12 get 'toggle','toggle_front'
13 13 end
14 14 end
15 15
16 16 resources :problems do
17 17 member do
18 18 get 'toggle'
19 19 get 'toggle_test'
20 20 get 'stat'
21 21 end
22 22 collection do
23 23 get 'turn_all_off'
24 24 get 'turn_all_on'
25 25 get 'import'
26 26 get 'manage'
27 27 end
28 28 end
29 29
30 30 resources :grader_configuration, controller: 'configurations'
31 31
32 32 resources :users do
33 33 member do
34 34 get 'toggle_activate', 'toggle_enable'
35 35 get 'stat'
36 36 end
37 37 end
38 38
39 39 resources :submissions do
40 + member do
41 + get 'download'
42 + get 'compiler_msg'
43 + end
40 44 collection do
41 45 get 'prob/:problem_id', to: 'submissions#index', as: 'problem'
42 46 get 'direct_edit_problem/:problem_id', to: 'submissions#direct_edit_problem', as: 'direct_edit_problem'
43 47 get 'get_latest_submission_status/:uid/:pid', to: 'submissions#get_latest_submission_status', as: 'get_latest_submission_status'
44 48 end
45 49 end
46 50
47 51 get 'tasks/view/:file.:ext' => 'tasks#view'
48 52 get 'tasks/download/:id/:file.:ext' => 'tasks#download'
49 53 get 'heartbeat/:id/edit' => 'heartbeat#edit'
50 54
51 55 #main
52 56 get "main/list"
53 57 get 'main/submission(/:id)', to: 'main#submission', as: 'main_submission'
54 58
55 59 #report
56 60 get 'report/current_score', to: 'report#current_score', as: 'report_current_score'
57 61 get 'report/problem_hof(/:id)', to: 'report#problem_hof', as: 'report_problem_hof'
58 62 get "report/login"
59 63 get 'report/max_score', to: 'report#max_score', as: 'report_max_score'
60 64 post 'report/show_max_score', to: 'report#show_max_score', as: 'report_show_max_score'
61 65
62 66 #grader
63 67 get 'graders/list', to: 'graders#list', as: 'grader_list'
64 68
65 69
66 70 get 'heartbeat/:id/edit' => 'heartbeat#edit'
67 71
68 72 # See how all your routes lay out with "rake routes"
69 73
70 74 # This is a legacy wild controller route that's not recommended for RESTful applications.
71 75 # Note: This route will make all actions in every controller accessible via GET requests.
72 76 match ':controller(/:action(/:id))(.:format)', via: [:get, :post]
73 77 end
@@ -1,280 +1,280
1 1 # encoding: UTF-8
2 2 # This file is auto-generated from the current state of the database. Instead
3 3 # of editing this file, please use the migrations feature of Active Record to
4 4 # incrementally modify your database, and then regenerate this schema definition.
5 5 #
6 6 # Note that this schema.rb definition is the authoritative source for your
7 7 # database schema. If you need to create the application database on another
8 8 # system, you should be using db:schema:load, not running all the migrations
9 9 # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10 10 # you'll amass, the slower it'll run and the greater likelihood for issues).
11 11 #
12 - # It's strongly recommended to check this file into your version control system.
12 + # It's strongly recommended that you check this file into your version control system.
13 13
14 - ActiveRecord::Schema.define(:version => 20161031063337) do
14 + ActiveRecord::Schema.define(version: 20161031063337) do
15 15
16 - create_table "announcements", :force => true do |t|
16 + create_table "announcements", force: :cascade do |t|
17 17 t.string "author"
18 18 t.text "body"
19 19 t.boolean "published"
20 - t.datetime "created_at", :null => false
21 - t.datetime "updated_at", :null => false
22 - t.boolean "frontpage", :default => false
23 - t.boolean "contest_only", :default => false
20 + t.datetime "created_at", null: false
21 + t.datetime "updated_at", null: false
22 + t.boolean "frontpage", default: false
23 + t.boolean "contest_only", default: false
24 24 t.string "title"
25 25 t.string "notes"
26 26 end
27 27
28 - create_table "contests", :force => true do |t|
28 + create_table "contests", force: :cascade do |t|
29 29 t.string "title"
30 30 t.boolean "enabled"
31 - t.datetime "created_at", :null => false
32 - t.datetime "updated_at", :null => false
31 + t.datetime "created_at", null: false
32 + t.datetime "updated_at", null: false
33 33 t.string "name"
34 34 end
35 35
36 - create_table "contests_problems", :id => false, :force => true do |t|
36 + create_table "contests_problems", id: false, force: :cascade do |t|
37 37 t.integer "contest_id"
38 38 t.integer "problem_id"
39 39 end
40 40
41 - create_table "contests_users", :id => false, :force => true do |t|
41 + create_table "contests_users", id: false, force: :cascade do |t|
42 42 t.integer "contest_id"
43 43 t.integer "user_id"
44 44 end
45 45
46 - create_table "countries", :force => true do |t|
46 + create_table "countries", force: :cascade do |t|
47 47 t.string "name"
48 - t.datetime "created_at", :null => false
49 - t.datetime "updated_at", :null => false
48 + t.datetime "created_at", null: false
49 + t.datetime "updated_at", null: false
50 50 end
51 51
52 - create_table "descriptions", :force => true do |t|
52 + create_table "descriptions", force: :cascade do |t|
53 53 t.text "body"
54 54 t.boolean "markdowned"
55 - t.datetime "created_at", :null => false
56 - t.datetime "updated_at", :null => false
55 + t.datetime "created_at", null: false
56 + t.datetime "updated_at", null: false
57 57 end
58 58
59 - create_table "grader_configurations", :force => true do |t|
59 + create_table "grader_configurations", force: :cascade do |t|
60 60 t.string "key"
61 61 t.string "value_type"
62 62 t.string "value"
63 - t.datetime "created_at", :null => false
64 - t.datetime "updated_at", :null => false
63 + t.datetime "created_at", null: false
64 + t.datetime "updated_at", null: false
65 65 t.text "description"
66 66 end
67 67
68 - create_table "grader_processes", :force => true do |t|
68 + create_table "grader_processes", force: :cascade do |t|
69 69 t.string "host"
70 70 t.integer "pid"
71 71 t.string "mode"
72 72 t.boolean "active"
73 - t.datetime "created_at", :null => false
74 - t.datetime "updated_at", :null => false
73 + t.datetime "created_at", null: false
74 + t.datetime "updated_at", null: false
75 75 t.integer "task_id"
76 76 t.string "task_type"
77 77 t.boolean "terminated"
78 78 end
79 79
80 - add_index "grader_processes", ["host", "pid"], :name => "index_grader_processes_on_ip_and_pid"
80 + add_index "grader_processes", ["host", "pid"], name: "index_grader_processes_on_ip_and_pid"
81 81
82 - create_table "heart_beats", :force => true do |t|
82 + create_table "heart_beats", force: :cascade do |t|
83 83 t.integer "user_id"
84 84 t.string "ip_address"
85 - t.datetime "created_at", :null => false
86 - t.datetime "updated_at", :null => false
85 + t.datetime "created_at", null: false
86 + t.datetime "updated_at", null: false
87 87 t.string "status"
88 88 end
89 89
90 - add_index "heart_beats", ["updated_at"], :name => "index_heart_beats_on_updated_at"
90 + add_index "heart_beats", ["updated_at"], name: "index_heart_beats_on_updated_at"
91 91
92 - create_table "languages", :force => true do |t|
93 - t.string "name", :limit => 10
92 + create_table "languages", force: :cascade do |t|
93 + t.string "name", limit: 10
94 94 t.string "pretty_name"
95 - t.string "ext", :limit => 10
95 + t.string "ext", limit: 10
96 96 t.string "common_ext"
97 97 end
98 98
99 - create_table "logins", :force => true do |t|
99 + create_table "logins", force: :cascade do |t|
100 100 t.integer "user_id"
101 101 t.string "ip_address"
102 - t.datetime "created_at", :null => false
103 - t.datetime "updated_at", :null => false
102 + t.datetime "created_at", null: false
103 + t.datetime "updated_at", null: false
104 104 end
105 105
106 - create_table "messages", :force => true do |t|
106 + create_table "messages", force: :cascade do |t|
107 107 t.integer "sender_id"
108 108 t.integer "receiver_id"
109 109 t.integer "replying_message_id"
110 110 t.text "body"
111 111 t.boolean "replied"
112 - t.datetime "created_at", :null => false
113 - t.datetime "updated_at", :null => false
112 + t.datetime "created_at", null: false
113 + t.datetime "updated_at", null: false
114 114 end
115 115
116 - create_table "problems", :force => true do |t|
117 - t.string "name", :limit => 30
116 + create_table "problems", force: :cascade do |t|
117 + t.string "name", limit: 30
118 118 t.string "full_name"
119 119 t.integer "full_score"
120 120 t.date "date_added"
121 121 t.boolean "available"
122 122 t.string "url"
123 123 t.integer "description_id"
124 124 t.boolean "test_allowed"
125 125 t.boolean "output_only"
126 126 t.string "description_filename"
127 127 end
128 128
129 - create_table "rights", :force => true do |t|
129 + create_table "rights", force: :cascade do |t|
130 130 t.string "name"
131 131 t.string "controller"
132 132 t.string "action"
133 133 end
134 134
135 - create_table "rights_roles", :id => false, :force => true do |t|
135 + create_table "rights_roles", id: false, force: :cascade do |t|
136 136 t.integer "right_id"
137 137 t.integer "role_id"
138 138 end
139 139
140 - add_index "rights_roles", ["role_id"], :name => "index_rights_roles_on_role_id"
140 + add_index "rights_roles", ["role_id"], name: "index_rights_roles_on_role_id"
141 141
142 - create_table "roles", :force => true do |t|
142 + create_table "roles", force: :cascade do |t|
143 143 t.string "name"
144 144 end
145 145
146 - create_table "roles_users", :id => false, :force => true do |t|
146 + create_table "roles_users", id: false, force: :cascade do |t|
147 147 t.integer "role_id"
148 148 t.integer "user_id"
149 149 end
150 150
151 - add_index "roles_users", ["user_id"], :name => "index_roles_users_on_user_id"
151 + add_index "roles_users", ["user_id"], name: "index_roles_users_on_user_id"
152 152
153 - create_table "sessions", :force => true do |t|
153 + create_table "sessions", force: :cascade do |t|
154 154 t.string "session_id"
155 155 t.text "data"
156 156 t.datetime "updated_at"
157 157 end
158 158
159 - add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
160 - add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
159 + add_index "sessions", ["session_id"], name: "index_sessions_on_session_id"
160 + add_index "sessions", ["updated_at"], name: "index_sessions_on_updated_at"
161 161
162 - create_table "sites", :force => true do |t|
162 + create_table "sites", force: :cascade do |t|
163 163 t.string "name"
164 164 t.boolean "started"
165 165 t.datetime "start_time"
166 - t.datetime "created_at", :null => false
167 - t.datetime "updated_at", :null => false
166 + t.datetime "created_at", null: false
167 + t.datetime "updated_at", null: false
168 168 t.integer "country_id"
169 169 t.string "password"
170 170 end
171 171
172 - create_table "submission_view_logs", :force => true do |t|
172 + create_table "submission_view_logs", force: :cascade do |t|
173 173 t.integer "user_id"
174 174 t.integer "submission_id"
175 - t.datetime "created_at", :null => false
176 - t.datetime "updated_at", :null => false
175 + t.datetime "created_at", null: false
176 + t.datetime "updated_at", null: false
177 177 end
178 178
179 - create_table "submissions", :force => true do |t|
179 + create_table "submissions", force: :cascade do |t|
180 180 t.integer "user_id"
181 181 t.integer "problem_id"
182 182 t.integer "language_id"
183 183 t.text "source"
184 184 t.binary "binary"
185 185 t.datetime "submitted_at"
186 186 t.datetime "compiled_at"
187 187 t.text "compiler_message"
188 188 t.datetime "graded_at"
189 189 t.integer "points"
190 190 t.text "grader_comment"
191 191 t.integer "number"
192 192 t.string "source_filename"
193 193 t.float "max_runtime"
194 194 t.integer "peak_memory"
195 195 t.integer "effective_code_length"
196 196 t.string "ip_address"
197 197 end
198 198
199 - add_index "submissions", ["user_id", "problem_id", "number"], :name => "index_submissions_on_user_id_and_problem_id_and_number", :unique => true
200 - add_index "submissions", ["user_id", "problem_id"], :name => "index_submissions_on_user_id_and_problem_id"
199 + add_index "submissions", ["user_id", "problem_id", "number"], name: "index_submissions_on_user_id_and_problem_id_and_number", unique: true
200 + add_index "submissions", ["user_id", "problem_id"], name: "index_submissions_on_user_id_and_problem_id"
201 201
202 - create_table "tasks", :force => true do |t|
202 + create_table "tasks", force: :cascade do |t|
203 203 t.integer "submission_id"
204 204 t.datetime "created_at"
205 205 t.integer "status"
206 206 t.datetime "updated_at"
207 207 end
208 208
209 - create_table "test_pairs", :force => true do |t|
209 + create_table "test_pairs", force: :cascade do |t|
210 210 t.integer "problem_id"
211 - t.text "input", :limit => 16777215
212 - t.text "solution", :limit => 16777215
213 - t.datetime "created_at", :null => false
214 - t.datetime "updated_at", :null => false
211 + t.text "input", limit: 16777215
212 + t.text "solution", limit: 16777215
213 + t.datetime "created_at", null: false
214 + t.datetime "updated_at", null: false
215 215 end
216 216
217 - create_table "test_requests", :force => true do |t|
217 + create_table "test_requests", force: :cascade do |t|
218 218 t.integer "user_id"
219 219 t.integer "problem_id"
220 220 t.integer "submission_id"
221 221 t.string "input_file_name"
222 222 t.string "output_file_name"
223 223 t.string "running_stat"
224 224 t.integer "status"
225 - t.datetime "updated_at", :null => false
225 + t.datetime "updated_at", null: false
226 226 t.datetime "submitted_at"
227 227 t.datetime "compiled_at"
228 228 t.text "compiler_message"
229 229 t.datetime "graded_at"
230 230 t.string "grader_comment"
231 - t.datetime "created_at", :null => false
231 + t.datetime "created_at", null: false
232 232 t.float "running_time"
233 233 t.string "exit_status"
234 234 t.integer "memory_usage"
235 235 end
236 236
237 - add_index "test_requests", ["user_id", "problem_id"], :name => "index_test_requests_on_user_id_and_problem_id"
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|
239 + create_table "testcases", force: :cascade do |t|
240 240 t.integer "problem_id"
241 241 t.integer "num"
242 242 t.integer "group"
243 243 t.integer "score"
244 244 t.text "input"
245 245 t.text "sol"
246 - t.datetime "created_at", :null => false
247 - t.datetime "updated_at", :null => false
246 + t.datetime "created_at", null: false
247 + t.datetime "updated_at", null: false
248 248 end
249 249
250 - add_index "testcases", ["problem_id"], :name => "index_testcases_on_problem_id"
250 + add_index "testcases", ["problem_id"], name: "index_testcases_on_problem_id"
251 251
252 - create_table "user_contest_stats", :force => true do |t|
252 + create_table "user_contest_stats", force: :cascade do |t|
253 253 t.integer "user_id"
254 254 t.datetime "started_at"
255 - t.datetime "created_at", :null => false
256 - t.datetime "updated_at", :null => false
255 + t.datetime "created_at", null: false
256 + t.datetime "updated_at", null: false
257 257 t.boolean "forced_logout"
258 258 end
259 259
260 - create_table "users", :force => true do |t|
261 - t.string "login", :limit => 50
260 + create_table "users", force: :cascade do |t|
261 + t.string "login", limit: 50
262 262 t.string "full_name"
263 263 t.string "hashed_password"
264 - t.string "salt", :limit => 5
264 + t.string "salt", limit: 5
265 265 t.string "alias"
266 266 t.string "email"
267 267 t.integer "site_id"
268 268 t.integer "country_id"
269 - t.boolean "activated", :default => false
269 + t.boolean "activated", default: false
270 270 t.datetime "created_at"
271 271 t.datetime "updated_at"
272 - t.boolean "enabled", :default => true
272 + t.boolean "enabled", default: true
273 273 t.string "remark"
274 274 t.string "last_ip"
275 275 t.string "section"
276 276 end
277 277
278 - add_index "users", ["login"], :name => "index_users_on_login", :unique => true
278 + add_index "users", ["login"], name: "index_users_on_login", unique: true
279 279
280 280 end
You need to be logged in to leave comments. Login now