Description:
renamed model Configuration to GraderConfiguration, renamed rhtml views to erb, fixed other small errors
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r320:c31111f6e4b5 - - 61 files changed: 710 inserted, 654 deleted

@@ -0,0 +1,176
1 + require 'yaml'
2 +
3 + #
4 + # This class also contains various login of the system.
5 + #
6 + class GraderConfiguration < ActiveRecord::Base
7 +
8 + SYSTEM_MODE_CONF_KEY = 'system.mode'
9 + TEST_REQUEST_EARLY_TIMEOUT_KEY = 'contest.test_request.early_timeout'
10 + MULTICONTESTS_KEY = 'system.multicontests'
11 + CONTEST_TIME_LIMIT_KEY = 'contest.time_limit'
12 +
13 + cattr_accessor :config_cache
14 + cattr_accessor :task_grading_info_cache
15 + cattr_accessor :contest_time_str
16 + cattr_accessor :contest_time
17 +
18 + GraderConfiguration.config_cache = nil
19 + GraderConfiguration.task_grading_info_cache = nil
20 +
21 + def self.config_cached?
22 + (defined? CONFIGURATION_CACHE_ENABLED) and (CONFIGURATION_CACHE_ENABLED)
23 + end
24 +
25 + def self.get(key)
26 + if GraderConfiguration.config_cached?
27 + if GraderConfiguration.config_cache == nil
28 + self.read_config
29 + end
30 + return GraderConfiguration.config_cache[key]
31 + else
32 + return GraderConfiguration.read_one_key(key)
33 + end
34 + end
35 +
36 + def self.[](key)
37 + self.get(key)
38 + end
39 +
40 + def self.reload
41 + self.read_config
42 + end
43 +
44 + def self.clear
45 + GraderConfiguration.config_cache = nil
46 + end
47 +
48 + #
49 + # View decision
50 + #
51 + def self.show_submitbox_to?(user)
52 + mode = get(SYSTEM_MODE_CONF_KEY)
53 + return false if mode=='analysis'
54 + if (mode=='contest')
55 + return false if (user.site!=nil) and
56 + ((user.site.started!=true) or (user.site.finished?))
57 + end
58 + return true
59 + end
60 +
61 + def self.show_tasks_to?(user)
62 + if time_limit_mode?
63 + return false if not user.contest_started?
64 + end
65 + return true
66 + end
67 +
68 + def self.show_grading_result
69 + return (get(SYSTEM_MODE_CONF_KEY)=='analysis')
70 + end
71 +
72 + def self.allow_test_request(user)
73 + mode = get(SYSTEM_MODE_CONF_KEY)
74 + early_timeout = get(TEST_REQUEST_EARLY_TIMEOUT_KEY)
75 + if (mode=='contest')
76 + return false if ((user.site!=nil) and
77 + ((user.site.started!=true) or
78 + (early_timeout and (user.site.time_left < 30.minutes))))
79 + end
80 + return false if mode=='analysis'
81 + return true
82 + end
83 +
84 + def self.task_grading_info
85 + if GraderConfiguration.task_grading_info_cache==nil
86 + read_grading_info
87 + end
88 + return GraderConfiguration.task_grading_info_cache
89 + end
90 +
91 + def self.standard_mode?
92 + return get(SYSTEM_MODE_CONF_KEY) == 'standard'
93 + end
94 +
95 + def self.contest_mode?
96 + return get(SYSTEM_MODE_CONF_KEY) == 'contest'
97 + end
98 +
99 + def self.indv_contest_mode?
100 + return get(SYSTEM_MODE_CONF_KEY) == 'indv-contest'
101 + end
102 +
103 + def self.multicontests?
104 + return get(MULTICONTESTS_KEY) == true
105 + end
106 +
107 + def self.time_limit_mode?
108 + mode = get(SYSTEM_MODE_CONF_KEY)
109 + return ((mode == 'contest') or (mode == 'indv-contest'))
110 + end
111 +
112 + def self.analysis_mode?
113 + return get(SYSTEM_MODE_CONF_KEY) == 'analysis'
114 + end
115 +
116 + def self.contest_time_limit
117 + contest_time_str = GraderConfiguration[CONTEST_TIME_LIMIT_KEY]
118 +
119 + if not defined? GraderConfiguration.contest_time_str
120 + GraderConfiguration.contest_time_str = nil
121 + end
122 +
123 + if GraderConfiguration.contest_time_str != contest_time_str
124 + GraderConfiguration.contest_time_str = contest_time_str
125 + if tmatch = /(\d+):(\d+)/.match(contest_time_str)
126 + h = tmatch[1].to_i
127 + m = tmatch[2].to_i
128 +
129 + GraderConfiguration.contest_time = h.hour + m.minute
130 + else
131 + GraderConfiguration.contest_time = nil
132 + end
133 + end
134 + return GraderConfiguration.contest_time
135 + end
136 +
137 + protected
138 +
139 + def self.convert_type(val,type)
140 + case type
141 + when 'string'
142 + return val
143 +
144 + when 'integer'
145 + return val.to_i
146 +
147 + when 'boolean'
148 + return (val=='true')
149 + end
150 + end
151 +
152 + def self.read_config
153 + GraderConfiguration.config_cache = {}
154 + GraderConfiguration.find(:all).each do |conf|
155 + key = conf.key
156 + val = conf.value
157 + GraderConfiguration.config_cache[key] = GraderConfiguration.convert_type(val,conf.value_type)
158 + end
159 + end
160 +
161 + def self.read_one_key(key)
162 + conf = GraderConfiguration.find_by_key(key)
163 + if conf
164 + return GraderConfiguration.convert_type(conf.value,conf.value_type)
165 + else
166 + return nil
167 + end
168 + end
169 +
170 + def self.read_grading_info
171 + f = File.open(TASK_GRADING_INFO_FILENAME)
172 + GraderConfiguration.task_grading_info_cache = YAML.load(f)
173 + f.close
174 + end
175 +
176 + end
@@ -0,0 +1,52
1 + <%= error_messages_for 'problem' %>
2 +
3 + <!--[form:problem]-->
4 + <p><label for="problem_name">Name</label><br/>
5 + <%= text_field 'problem', 'name' %></p>
6 +
7 + <p><label for="problem_full_name">Full name</label><br/>
8 + <%= text_field 'problem', 'full_name' %></p>
9 +
10 + <p><label for="problem_full_score">Full score</label><br/>
11 + <%= text_field 'problem', 'full_score' %></p>
12 +
13 + <p><label for="problem_date_added">Date added</label><br/>
14 + <%= date_select 'problem', 'date_added' %></p>
15 +
16 + <%
17 + # TODO: these should be put in model Problem, but I can't think of
18 + # nice default values for them. These values look fine only
19 + # in this case (of lazily adding new problems).
20 + @problem.available = true if @problem!=nil and @problem.available==nil
21 + @problem.test_allowed = true if @problem!=nil and @problem.test_allowed==nil
22 + @problem.output_only = false if @problem!=nil and @problem.output_only==nil
23 + %>
24 +
25 + <p>
26 + <label for="problem_available">Available?</label>
27 + <%= check_box :problem, :available %>
28 +
29 + <label for="problem_test_allowed">Test allowed?</label>
30 + <%= check_box :problem, :test_allowed %>
31 +
32 + <label for="problem_output_only">Output only?</label>
33 + <%= check_box :problem, :output_only %>
34 + </p>
35 +
36 + <%= error_messages_for 'description' %>
37 +
38 + <p><label for="description_body">Description</label><br/>
39 + <%= text_area :description, :body, :rows => 10, :cols => 80 %></p>
40 +
41 + <p><label for="description_markdowned">Markdowned?</label>
42 + <%= select "description",
43 + "markdowned",
44 + [['True',true],['False',false]],
45 + {:selected => (@description) ? @description.markdowned : false }
46 + %></p>
47 +
48 + <p><label for="problem_url">URL</label><br/>
49 + <%= text_field 'problem', 'url' %></p>
50 +
51 +
52 + <!--[eoform:problem]-->
@@ -0,0 +1,9
1 + <h1>Editing problem</h1>
2 +
3 + <%= form_tag :action => 'update', :id => @problem do %>
4 + <%= render :partial => 'form' %>
5 + <%= submit_tag 'Edit' %>
6 + <% end %>
7 +
8 + <%= link_to 'Show', :action => 'show', :id => @problem %> |
9 + <%= link_to 'Back', :action => 'list' %>
@@ -0,0 +1,67
1 + <% content_for :head do %>
2 + <%= stylesheet_link_tag 'problems' %>
3 + <%= javascript_include_tag :defaults %>
4 + <% end %>
5 +
6 + <h1>Listing problems</h1>
7 +
8 + <p>
9 + <%= link_to '[New problem]', :action => 'new' %>
10 + <%= link_to '[Manage problems]', :action => 'manage' %>
11 + <%= link_to '[Import problems]', :action => 'import' %>
12 + <%= link_to '[Turn off all problems]', :action => 'turn_all_off' %>
13 + <%= link_to '[Turn on all problems]', :action => 'turn_all_on' %>
14 + </p>
15 +
16 + <div class="submitbox">
17 + <%= form_tag :action => 'quick_create' do %>
18 + <b>Quick New:</b>
19 + <label for="problem_name">Name</label>
20 + <%= text_field 'problem', 'name' %> |
21 + <label for="problem_full_name">Full name</label>
22 + <%= text_field 'problem', 'full_name' %>
23 + <%= submit_tag "Create" %>
24 + <% end %>
25 + </div>
26 +
27 + <table>
28 + <tr>
29 + <th>Name</th>
30 + <th>Full name</th>
31 + <th>Full score</th>
32 + <th>Date added</th>
33 + <th>Avail?</th>
34 + <th>Test?</th>
35 + <% if GraderConfiguration.multicontests? %>
36 + <th>Contests</th>
37 + <% end %>
38 + </tr>
39 +
40 + <% for problem in @problems %>
41 + <tr id="prob-<%= problem.id %>" name="prob-<%= problem.id %>" class="<%= (problem.available) ? "available" : "not-available" %>">
42 + <% @problem=problem %>
43 + <td><%= in_place_editor_field :problem, :name, {}, :rows=>1 %></td>
44 + <td><%= in_place_editor_field :problem, :full_name, {}, :rows=>1 %></td>
45 + <td><%= in_place_editor_field :problem, :full_score, {}, :rows=>1 %></td>
46 + <td><%= problem.date_added %></td>
47 + <td id="prob-<%= problem.id %>-avail"><%= problem.available %></td>
48 + <td><%= problem.test_allowed %></td>
49 +
50 + <% if GraderConfiguration.multicontests? %>
51 + <td>
52 + <%= problem.contests.collect { |c| c.name }.join(', ') %>
53 + </td>
54 + <% end %>
55 +
56 + <td><%= link_to_remote '[Toggle]', :url => {:action => 'toggle', :id => problem.id } %></td>
57 + <td><%= link_to '[Stat]', :action => 'stat', :id => problem.id %></td>
58 + <td><%= link_to '[Show]', :action => 'show', :id => problem %></td>
59 + <td><%= link_to '[Edit]', :action => 'edit', :id => problem %></td>
60 + <td><%= link_to '[Destroy]', { :action => 'destroy', :id => problem }, :confirm => 'Are you sure?', :method => :post %></td>
61 + </tr>
62 + <% end %>
63 + </table>
64 +
65 + <br />
66 +
67 + <%= link_to '[New problem]', :action => 'new' %>
@@ -0,0 +1,8
1 + <h1>New problem</h1>
2 +
3 + <%= form_tag :action => 'create' do %>
4 + <%= render :partial => 'form' %>
5 + <%= submit_tag "Create" %>
6 + <% end %>
7 +
8 + <%= link_to 'Back', :action => 'list' %>
@@ -0,0 +1,28
1 + <h1>Problem stat: <%= @problem.name %></h1>
2 +
3 + <i>This is just a hack. Really not efficient.</i><br/><br/>
4 +
5 + <% if @submissions!=nil %>
6 + <table class="info">
7 + <tr class="info-head">
8 + <th>login</th>
9 + <th>name</th>
10 + <th>submitted_at</th>
11 + <th>points</th>
12 + <th>comment</th>
13 + </tr>
14 + <% count = 0 %>
15 + <% @submissions.each do |sub| %>
16 + <tr class="<%= (count % 2 ==0) ? "info-even" : "info-odd" %>">
17 + <td><%= sub.user.login %></td>
18 + <td><%= sub.user.full_name if sub.user %></td>
19 + <td><%= sub.submitted_at.to_s %></td>
20 + <td><%= sub.points %></td>
21 + <td><div style="font-family: monospace"><%= sub.grader_comment %></div></td>
22 + </tr>
23 + <% count += 1 %>
24 + <% end %>
25 + </table>
26 + <% else %>
27 + No submission
28 + <% end %>
@@ -0,0 +1,22
1 + <%= error_messages_for 'user' %>
2 +
3 + <!--[form:user]-->
4 + <p><label for="user_name">Login</label><br/>
5 + <%= text_field 'user', 'login' %></p>
6 +
7 + <p><label for="user_name">Full name</label><br/>
8 + <%= text_field 'user', 'full_name' %></p>
9 +
10 + <p><label for="password">Password</label><br/>
11 + <%= password_field 'user', 'password' %></p>
12 +
13 + <p><label for="password_confirmation">Password (confirm)</label><br/>
14 + <%= password_field 'user', 'password_confirmation' %></p>
15 +
16 + <p><label for="user_email">E-mail</label><br/>
17 + <%= text_field 'user', 'email' %></p>
18 +
19 + <p><label for="user_alias">Alias</label><br/>
20 + <%= text_field 'user', 'alias' %></p>
21 + <!--[eoform:user]-->
22 +
@@ -0,0 +1,9
1 + <h1>Editing user</h1>
2 +
3 + <%= form_tag :action => 'update', :id => @user do %>
4 + <%= render :partial => 'form' %>
5 + <%= submit_tag 'Edit' %>
6 + <% end %>
7 +
8 + <%= link_to 'Show', :action => 'show', :id => @user %> |
9 + <%= link_to 'Back', :action => 'list' %>
@@ -0,0 +1,86
1 + <h1>Listing users</h1>
2 +
3 + <div class="submitbox">
4 + <b>Quick add</b>
5 + <%= form_tag :action => 'create' do %>
6 + <table border="0">
7 + <tr>
8 + <td><label for="user_login">Login</label></td>
9 + <td><label for="user_full_name">Full name</label></td>
10 + <td><label for="user_password">Password</label></td>
11 + <td><label for="user_password_confirmation">Confirm</label></td>
12 + <td><label for="user_email">Email</label></td>
13 + </tr>
14 + <tr>
15 + <td><%= text_field 'user', 'login', :size => 10 %></td>
16 + <td><%= text_field 'user', 'full_name', :size => 30 %></td>
17 + <td><%= password_field 'user', 'password', :size => 10 %></td>
18 + <td><%= password_field 'user', 'password_confirmation', :size => 10 %></td>
19 + <td><%= text_field 'user', 'email', :size => 15 %></td>
20 + <td><%= submit_tag "Create" %></td>
21 + </tr>
22 + </table>
23 + <% end %>
24 + <br/>
25 + <b>Import from site management</b>
26 + <%= form_tag({:action => 'import'}, :multipart => true) do %>
27 + File: <%= file_field_tag 'file' %> <%= submit_tag 'Import' %>
28 + <% end %>
29 + <br/>
30 + <b>What else: </b>
31 + <%= link_to '[New user]', :action => 'new' %>
32 + <%= link_to '[New list of users]', :action => 'new_list' %>
33 + <%= link_to '[View administrators]', :action => 'admin' %>
34 + <%= link_to '[Random passwords]', :action => 'random_all_passwords' %>
35 + <%= link_to '[View active users]', :action => 'active' %>
36 + <%= link_to '[Mass mailing]', :action => 'mass_mailing' %>
37 + <% if GraderConfiguration.multicontests? %>
38 + <br/><b>Multi-contest:</b>
39 + <%= link_to '[Manage bulk users in contests]', :action => 'contest_management' %>
40 + View users in:
41 + <% @contests.each do |contest| %>
42 + <%= link_to "[#{contest.name}]", :action => 'contests', :id => contest.id %>
43 + <% end %>
44 + <%= link_to "[no contest]", :action => 'contests', :id => 'none' %>
45 + <% end %>
46 + </div>
47 +
48 + Total <%= @user_count %> users |
49 + <% if !@paginated %>
50 + Display all users.
51 + <%= link_to '[show in pages]', :action => 'list', :page => '1' %>
52 + <% else %>
53 + Display in pages.
54 + <%= link_to '[display all]', :action => 'list', :page => 'all' %> |
55 + <%= will_paginate @users, :container => false %>
56 + <% end %>
57 + <table class="info">
58 + <tr class="info-head">
59 + <% for column in User.content_columns %>
60 + <% if !@hidden_columns.index(column.name) %>
61 + <th><%= column.human_name %></th>
62 + <% end %>
63 + <% end %>
64 + <th></th>
65 + <th></th>
66 + <th></th>
67 + </tr>
68 +
69 + <% for user in @users %>
70 + <tr class="info-<%= cycle("odd","even") %>">
71 + <% for column in User.content_columns %>
72 + <% if !@hidden_columns.index(column.name) %>
73 + <td><%=h user.send(column.name) %></td>
74 + <% end %>
75 + <% end %>
76 + <td><%= link_to 'Show', :action => 'show', :id => user %></td>
77 + <td><%= link_to 'Edit', :action => 'edit', :id => user %></td>
78 + <td><%= link_to 'Destroy', { :action => 'destroy', :id => user }, :confirm => 'Are you sure?', :method => :post %></td>
79 + </tr>
80 + <% end %>
81 + </table>
82 +
83 + <br />
84 +
85 + <%= link_to '[New user]', :action => 'new' %>
86 + <%= link_to '[New list of users]', :action => 'new_list' %>
@@ -0,0 +1,8
1 + <h1>New user</h1>
2 +
3 + <%= form_tag :action => 'create' do %>
4 + <%= render :partial => 'form' %>
5 + <%= submit_tag "Create" %>
6 + <% end %>
7 +
8 + <%= link_to 'Back', :action => 'list' %>
@@ -0,0 +1,8
1 + <h1>Adding list of users</h1>
2 +
3 + <%= form_tag :action => 'create_from_list' do %>
4 + <%= submit_tag 'create users' %><br/>
5 + List of user information in this format: <tt>user_id,name(,passwd(,alias))</tt><br/>
6 + Note that <tt>passwd</tt> and <tt>alias</tt> is optional.<br/>
7 + <%= text_area_tag 'user_list', nil, :rows => 50, :cols => 80 %>
8 + <% end %>
@@ -0,0 +1,10
1 + <h1>User information</h1>
2 +
3 + <% for column in User.content_columns %>
4 + <p>
5 + <b><%= column.human_name %>:</b> <%=h @user.send(column.name) %>
6 + </p>
7 + <% end %>
8 +
9 + <%= link_to 'Edit', :action => 'edit', :id => @user %> |
10 + <%= link_to 'Back', :action => 'list' %>
@@ -0,0 +1,43
1 + <h1>User grading results</h1>
2 +
3 + <table class="info">
4 + <tr class="info-head">
5 + <th>User</th>
6 + <th>Name</th>
7 + <th>Activated?</th>
8 + <th>Logged in</th>
9 + <th>Contest(s)</th>
10 + <% @problems.each do |p| %>
11 + <th><%= p.name %></th>
12 + <% end %>
13 + <th>Total</th>
14 + <th>Passed</th>
15 + </tr>
16 + <% counter = 0 %>
17 + <% @scorearray.each do |sc| %>
18 + <tr class="<%= (counter %2 ==0) ? "info-even" : "info-odd" %>">
19 + <% total = 0 %>
20 + <% num_passed = 0 %>
21 + <% sc.each_index do |i| %>
22 + <% if i==0 %>
23 + <td><%= sc[i].login %></td>
24 + <td><%= sc[i].full_name %></td>
25 + <td><%= sc[i].activated %></td>
26 + <td>
27 + <%= sc[i].try(:contest_stat).try(:started_at)!=nil ? 'yes' : 'no' %>
28 + </td>
29 + <td>
30 + <%= sc[i].contests.collect {|c| c.name}.join(', ') %>
31 + </td>
32 + <% else %>
33 + <td><%= sc[i][0] %></td>
34 + <% total += sc[i][0] %>
35 + <% num_passed += 1 if sc[i][1] %>
36 + <% end %>
37 + <% end %>
38 + <td><%= total %></td>
39 + <td><%= num_passed %></td>
40 + </tr>
41 + <% counter += 1 %>
42 + <% end %>
43 + </table>
@@ -0,0 +1,5
1 + class RenameConfigurationsToGraderConfigurations < ActiveRecord::Migration
2 + def change
3 + rename_table 'configurations', 'grader_configurations'
4 + end
5 + end
@@ -41,6 +41,7
41 41 gem "rdiscount", :require => "rdiscount"
42 42 gem "test-unit"
43 43 gem 'will_paginate', '~> 3.0.0'
44 + gem 'dynamic_form'
44 45
45 46 group :test, :development do
46 47 gem "rspec-rails", "~> 2.0"
@@ -38,6 +38,7
38 38 execjs
39 39 coffee-script-source (1.3.3)
40 40 diff-lcs (1.1.3)
41 + dynamic_form (1.1.4)
41 42 erubis (2.7.0)
42 43 execjs (1.4.0)
43 44 multi_json (~> 1.0)
@@ -122,6 +123,7
122 123
123 124 DEPENDENCIES
124 125 coffee-rails (~> 3.2.1)
126 + dynamic_form
125 127 haml
126 128 mysql2
127 129 prototype-rails
@@ -28,7 +28,7
28 28 end
29 29
30 30 # check if run in single user mode
31 - if Configuration[SINGLE_USER_MODE_CONF_KEY]
31 + if GraderConfiguration[SINGLE_USER_MODE_CONF_KEY]
32 32 user = User.find(session[:user_id])
33 33 if user==nil or (not user.admin?)
34 34 flash[:notice] = 'You cannot log in at this time'
@@ -38,7 +38,7
38 38 return true
39 39 end
40 40
41 - if Configuration.multicontests?
41 + if GraderConfiguration.multicontests?
42 42 user = User.find(session[:user_id])
43 43 return true if user.admin?
44 44 begin
@@ -8,12 +8,12
8 8 in_place_edit_for :configuration, :value
9 9
10 10 def index
11 - @configurations = Configuration.find(:all,
11 + @configurations = GraderConfiguration.find(:all,
12 12 :order => '`key`')
13 13 end
14 14
15 15 def reload
16 - Configuration.reload
16 + GraderConfiguration.reload
17 17 redirect_to :action => 'index'
18 18 end
19 19
@@ -7,7 +7,7
7 7 end
8 8
9 9 def user_stat
10 - if not Configuration.indv_contest_mode?
10 + if not GraderConfiguration.indv_contest_mode?
11 11 redirect_to :action => 'index' and return
12 12 end
13 13
@@ -27,7 +27,7
27 27 end
28 28
29 29 def clear_all_stat
30 - if not Configuration.indv_contest_mode?
30 + if not GraderConfiguration.indv_contest_mode?
31 31 redirect_to :action => 'index' and return
32 32 end
33 33
@@ -38,7 +38,7
38 38
39 39 def change_contest_mode
40 40 if ['standard', 'contest', 'indv-contest'].include? params[:id]
41 - config = Configuration.find_by_key('system.mode')
41 + config = GraderConfiguration.find_by_key('system.mode')
42 42 config.value = params[:id]
43 43 config.save
44 44 else
@@ -12,7 +12,7
12 12 session[:admin] = user.admin?
13 13
14 14 # clear forced logout flag for multicontests contest change
15 - if Configuration.multicontests?
15 + if GraderConfiguration.multicontests?
16 16 contest_stat = user.contest_stat
17 17 if contest_stat.respond_to? :forced_logout
18 18 if contest_stat.forced_logout
@@ -38,7 +38,7
38 38 # explicitly specify /login
39 39 #
40 40 # logger.info "PATH: #{request.path}"
41 - # if Configuration['system.single_user_mode'] and
41 + # if GraderConfiguration['system.single_user_mode'] and
42 42 # request.path!='/main/login'
43 43 # @hidelogin = true
44 44 # end
@@ -67,7 +67,7
67 67 end
68 68 @submission.submitted_at = Time.new.gmtime
69 69
70 - if Configuration.time_limit_mode? and user.contest_finished?
70 + if GraderConfiguration.time_limit_mode? and user.contest_finished?
71 71 @submission.errors.add_to_base "The contest is over."
72 72 prepare_list_information
73 73 render :action => 'list' and return
@@ -129,7 +129,7
129 129 end
130 130
131 131 def result
132 - if !Configuration.show_grading_result
132 + if !GraderConfiguration.show_grading_result
133 133 redirect_to :action => 'list' and return
134 134 end
135 135 @user = User.find(session[:user_id])
@@ -142,7 +142,7
142 142 end
143 143
144 144 def load_output
145 - if !Configuration.show_grading_result or params[:num]==nil
145 + if !GraderConfiguration.show_grading_result or params[:num]==nil
146 146 redirect_to :action => 'list' and return
147 147 end
148 148 @user = User.find(session[:user_id])
@@ -203,7 +203,7
203 203 protected
204 204
205 205 def prepare_announcements(recent=nil)
206 - if Configuration.show_tasks_to?(@user)
206 + if GraderConfiguration.show_tasks_to?(@user)
207 207 @announcements = Announcement.find_published(true)
208 208 else
209 209 @announcements = Announcement.find_published
@@ -216,7 +216,7
216 216
217 217 def prepare_list_information
218 218 @user = User.find(session[:user_id])
219 - if not Configuration.multicontests?
219 + if not GraderConfiguration.multicontests?
220 220 @problems = @user.available_problems
221 221 else
222 222 @contest_problems = @user.available_problems_group_by_contests
@@ -236,15 +236,15
236 236
237 237 def check_viewability
238 238 @user = User.find(session[:user_id])
239 - if (!Configuration.show_tasks_to?(@user)) and
239 + if (!GraderConfiguration.show_tasks_to?(@user)) and
240 240 ((action_name=='submission') or (action_name=='submit'))
241 241 redirect_to :action => 'list' and return
242 242 end
243 243 end
244 244
245 245 def prepare_grading_result(submission)
246 - if Configuration.task_grading_info.has_key? submission.problem.name
247 - grading_info = Configuration.task_grading_info[submission.problem.name]
246 + if GraderConfiguration.task_grading_info.has_key? submission.problem.name
247 + grading_info = GraderConfiguration.task_grading_info[submission.problem.name]
248 248 else
249 249 # guess task info from problem.full_score
250 250 cases = submission.problem.full_score / 10
@@ -353,12 +353,12
353 353
354 354 def confirm_and_update_start_time
355 355 user = User.find(session[:user_id])
356 - if (Configuration.indv_contest_mode? and
357 - Configuration['contest.confirm_indv_contest_start'] and
356 + if (GraderConfiguration.indv_contest_mode? and
357 + GraderConfiguration['contest.confirm_indv_contest_start'] and
358 358 !user.contest_started?)
359 359 redirect_to :action => 'confirm_contest_start' and return
360 360 end
361 - if not Configuration.analysis_mode?
361 + if not GraderConfiguration.analysis_mode?
362 362 user.update_start_time
363 363 end
364 364 end
@@ -368,7 +368,7
368 368 render :text => 'Access forbidden', :status => 403
369 369 end
370 370
371 - if Configuration.multicontests?
371 + if GraderConfiguration.multicontests?
372 372 user = User.find(session[:user_id])
373 373 if user.contest_stat.forced_logout
374 374 render :text => 'Access forbidden', :status => 403
@@ -19,7 +19,7
19 19 end
20 20 end
21 21
22 - @default_site = Site.first if !Configuration['contest.multisites']
22 + @default_site = Site.first if !GraderConfiguration['contest.multisites']
23 23
24 24 render :action => 'login', :layout => 'empty'
25 25 end
@@ -66,7 +66,7
66 66
67 67 def check_viewability
68 68 @user = User.find(session[:user_id])
69 - if @user==nil or !Configuration.show_tasks_to?(@user)
69 + if @user==nil or !GraderConfiguration.show_tasks_to?(@user)
70 70 redirect_to :controller => 'main', :action => 'list'
71 71 return false
72 72 end
@@ -24,14 +24,14
24 24 render :action => 'index' and return
25 25 end
26 26
27 - if Configuration.time_limit_mode?
27 + if GraderConfiguration.time_limit_mode?
28 28 if @user.contest_finished?
29 29 @submitted_test_request.errors.add_to_base('Contest is over.')
30 30 prepare_index_information
31 31 render :action => 'index' and return
32 32 end
33 33
34 - if !Configuration.allow_test_request(@user)
34 + if !GraderConfiguration.allow_test_request(@user)
35 35 prepare_index_information
36 36 flash[:notice] = 'Test request is not allowed during the last 30 minutes'
37 37 redirect_to :action => 'index' and return
@@ -107,10 +107,10
107 107
108 108 def check_viewability
109 109 user = User.find(session[:user_id])
110 - if !Configuration.show_tasks_to?(user)
110 + if !GraderConfiguration.show_tasks_to?(user)
111 111 redirect_to :controller => 'main', :action => 'list'
112 112 end
113 - if (!Configuration.show_submitbox_to?(user)) and (action_name=='submit')
113 + if (!GraderConfiguration.show_submitbox_to?(user)) and (action_name=='submit')
114 114 redirect_to :controller => 'test', :action => 'index'
115 115 end
116 116 end
@@ -1,14 +1,9
1 1 class UserAdminController < ApplicationController
2 2
3 - include MailHelperMethods
3 + #include MailHelperMethods
4 4
5 5 before_filter :admin_authorization
6 6
7 - def index
8 - list
9 - render :action => 'list'
10 - end
11 -
12 7 # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
13 8 verify :method => :post, :only => [ :destroy,
14 9 :create, :create_from_list,
@@ -18,6 +13,11
18 13 ],
19 14 :redirect_to => { :action => :list }
20 15
16 + def index
17 + list
18 + render :action => 'list'
19 + end
20 +
21 21 def list
22 22 @user_count = User.count
23 23 if params[:page] == 'all'
@@ -424,7 +424,7
424 424 end
425 425
426 426 def send_contest_update_notification_email(user, contest)
427 - contest_title_name = Configuration['contest.name']
427 + contest_title_name = GraderConfiguration['contest.name']
428 428 contest_name = contest.name
429 429 subject = t('contest.notification.email_subject', {
430 430 :contest_title_name => contest_title_name,
@@ -3,7 +3,7
3 3
4 4 class UsersController < ApplicationController
5 5
6 - include MailHelperMethods
6 + #include MailHelperMethods
7 7
8 8 before_filter :authenticate, :except => [:new,
9 9 :register,
@@ -23,7 +23,7
23 23 #in_place_edit_for :user, :email_for_editing
24 24
25 25 def index
26 - if !Configuration['system.user_setting_enabled']
26 + if !GraderConfiguration['system.user_setting_enabled']
27 27 redirect_to :controller => 'main', :action => 'list'
28 28 else
29 29 @user = User.find(session[:user_id])
@@ -59,7 +59,7
59 59 if send_confirmation_email(@user)
60 60 render :action => 'new_splash', :layout => 'empty'
61 61 else
62 - @admin_email = Configuration['system.admin_email']
62 + @admin_email = GraderConfiguration['system.admin_email']
63 63 render :action => 'email_error', :layout => 'empty'
64 64 end
65 65 else
@@ -112,14 +112,14
112 112 protected
113 113
114 114 def verify_online_registration
115 - if !Configuration['system.online_registration']
115 + if !GraderConfiguration['system.online_registration']
116 116 redirect_to :controller => 'main', :action => 'login'
117 117 end
118 118 end
119 119
120 120 def send_confirmation_email(user)
121 - contest_name = Configuration['contest.name']
122 - admin_email = Configuration['system.admin_email']
121 + contest_name = GraderConfiguration['contest.name']
122 + admin_email = GraderConfiguration['system.admin_email']
123 123 activation_url = url_for(:action => 'confirm',
124 124 :login => user.login,
125 125 :activation => user.activation_key)
@@ -140,8 +140,8
140 140 end
141 141
142 142 def send_new_password_email(user)
143 - contest_name = Configuration['contest.name']
144 - admin_email = Configuration['system.admin_email']
143 + contest_name = GraderConfiguration['contest.name']
144 + admin_email = GraderConfiguration['system.admin_email']
145 145 subject = "[#{contest_name}] Password recovery"
146 146 body = t('registration.password_retrieval.email_body', {
147 147 :full_name => user.full_name,
@@ -24,19 +24,19
24 24 append_to menu_items, "[#{I18n.t 'menu.main'}]", 'main', 'list'
25 25 append_to menu_items, "[#{I18n.t 'menu.messages'}]", 'messages', 'list'
26 26
27 - if (user!=nil) and (Configuration.show_tasks_to?(user))
27 + if (user!=nil) and (GraderConfiguration.show_tasks_to?(user))
28 28 append_to menu_items, "[#{I18n.t 'menu.tasks'}]", 'tasks', 'list'
29 29 append_to menu_items, "[#{I18n.t 'menu.submissions'}]", 'main', 'submission'
30 30 append_to menu_items, "[#{I18n.t 'menu.test'}]", 'test', 'index'
31 31 end
32 32 append_to menu_items, "[#{I18n.t 'menu.help'}]", 'main', 'help'
33 33
34 - if Configuration['system.user_setting_enabled']
34 + if GraderConfiguration['system.user_setting_enabled']
35 35 append_to menu_items, "[#{I18n.t 'menu.settings'}]", 'users', 'index'
36 36 end
37 37 append_to menu_items, "[#{I18n.t 'menu.log_out'}]", 'main', 'login'
38 38
39 - menu_items
39 + menu_items.html_safe
40 40 end
41 41
42 42 def append_to(option,label, controller, action)
@@ -76,7 +76,7
76 76
77 77 #
78 78 # if the contest is over
79 - if Configuration.time_limit_mode?
79 + if GraderConfiguration.time_limit_mode?
80 80 if user.contest_finished?
81 81 header = <<CONTEST_OVER
82 82 <tr><td colspan="2" align="center">
@@ -94,7 +94,7
94 94
95 95 #
96 96 # if the contest is in the anaysis mode
97 - if Configuration.analysis_mode?
97 + if GraderConfiguration.analysis_mode?
98 98 header = <<ANALYSISMODE
99 99 <tr><td colspan="2" align="center">
100 100 <span class="contest-over-msg">ANALYSIS MODE</span>
@@ -102,11 +102,11
102 102 ANALYSISMODE
103 103 end
104 104
105 - contest_name = Configuration['contest.name']
105 + contest_name = GraderConfiguration['contest.name']
106 106
107 107 #
108 108 # build real title bar
109 - <<TITLEBAR
109 + result = <<TITLEBAR
110 110 <div class="title">
111 111 <table>
112 112 #{header}
@@ -122,6 +122,7
122 122 </table>
123 123 </div>
124 124 TITLEBAR
125 + result.html_safe
125 126 end
126 127
127 128 end
@@ -10,7 +10,7
10 10 end
11 11
12 12 def time_left
13 - contest_time = Configuration.contest_time_limit
13 + contest_time = GraderConfiguration.contest_time_limit
14 14
15 15 return nil if contest_time == nil
16 16
@@ -35,7 +35,7
35 35 return false
36 36 end
37 37
38 - contest_time = Configuration.contest_time_limit
38 + contest_time = GraderConfiguration.contest_time_limit
39 39 if contest_time!=nil
40 40 return Time.now.gmtime > (self.start_time + contest_time)
41 41 else
@@ -136,11 +136,11
136 136
137 137
138 138 def contest_time_left
139 - if Configuration.contest_mode?
139 + if GraderConfiguration.contest_mode?
140 140 return nil if site==nil
141 141 return site.time_left
142 - elsif Configuration.indv_contest_mode?
143 - time_limit = Configuration.contest_time_limit
142 + elsif GraderConfiguration.indv_contest_mode?
143 + time_limit = GraderConfiguration.contest_time_limit
144 144 if time_limit == nil
145 145 return nil
146 146 end
@@ -161,10 +161,10
161 161 end
162 162
163 163 def contest_finished?
164 - if Configuration.contest_mode?
164 + if GraderConfiguration.contest_mode?
165 165 return false if site==nil
166 166 return site.finished?
167 - elsif Configuration.indv_contest_mode?
167 + elsif GraderConfiguration.indv_contest_mode?
168 168 return false if self.contest_stat(true)==nil
169 169 return contest_time_left == 0
170 170 else
@@ -173,10 +173,10
173 173 end
174 174
175 175 def contest_started?
176 - if Configuration.indv_contest_mode?
176 + if GraderConfiguration.indv_contest_mode?
177 177 stat = self.contest_stat
178 178 return ((stat != nil) and (stat.started_at != nil))
179 - elsif Configuration.contest_mode?
179 + elsif GraderConfiguration.contest_mode?
180 180 return true if site==nil
181 181 return site.started
182 182 else
@@ -228,7 +228,7
228 228 end
229 229
230 230 def available_problems
231 - if not Configuration.multicontests?
231 + if not GraderConfiguration.multicontests?
232 232 return Problem.find_available_problems
233 233 else
234 234 contest_problems = []
@@ -247,7 +247,7
247 247 end
248 248
249 249 def can_view_problem?(problem)
250 - if not Configuration.multicontests?
250 + if not GraderConfiguration.multicontests?
251 251 return problem.available
252 252 else
253 253 return problem_in_user_contests? problem
@@ -278,7 +278,7
278 278 # have to catch error when migrating (because self.site is not available).
279 279 begin
280 280 if self.contests.length == 0
281 - default_contest = Contest.find_by_name(Configuration['contest.default_contest_name'])
281 + default_contest = Contest.find_by_name(GraderConfiguration['contest.default_contest_name'])
282 282 if default_contest
283 283 self.contests = [default_contest]
284 284 end
@@ -20,7 +20,7
20 20 = in_place_editor_field :configuration, :value, {}, :rows=>1
21 21 %td= conf.description
22 22
23 - - if Configuration.config_cached?
23 + - if GraderConfiguration.config_cached?
24 24 %br/
25 25 Your config is saved, but it does not automatically take effect.
26 26 %br/
@@ -11,9 +11,9
11 11
12 12 .infobox
13 13 %b Web interface mode:
14 - - if (not Configuration.contest_mode?) and (not Configuration.indv_contest_mode?)
14 + - if (not GraderConfiguration.contest_mode?) and (not GraderConfiguration.indv_contest_mode?)
15 15 standard mode
16 - - elsif Configuration.contest_mode?
16 + - elsif GraderConfiguration.contest_mode?
17 17 normal contest mode.
18 18 - else
19 19 individual contest mode.
@@ -24,7 +24,7
24 24 = "[#{link_to 'contest', :action => 'change_contest_mode', :id => 'contest'}]"
25 25 = "[#{link_to 'individual contest', :action => 'change_contest_mode', :id => 'indv-contest'}]"
26 26
27 - - if Configuration.indv_contest_mode?
27 + - if GraderConfiguration.indv_contest_mode?
28 28 = render :partial => 'indv_contest_mode_index'
29 29
30 30 %br/
@@ -1,13 +1,20
1 1 <!DOCTYPE html>
2 2 <html>
3 3 <head>
4 - <title>CafeGraderWeb</title>
5 - <%= stylesheet_link_tag "application", :media => "all" %>
4 + <title><%= GraderConfiguration['contest.name'] %></title>
5 + <%= stylesheet_link_tag "application", :media => "all" %>
6 6 <%= javascript_include_tag "application" %>
7 7 <%= csrf_meta_tags %>
8 + <%= yield :head %>
8 9 </head>
9 10 <body>
10 11
12 + <div class="userbar">
13 + <%= user_header %>
14 + </div>
15 +
16 + <%= content_tag(:p,flash[:notice],:style => "color:green") if flash[:notice]!=nil %>
17 +
11 18 <%= yield %>
12 19
13 20 </body>
@@ -4,7 +4,7
4 4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5 5 <head>
6 6 <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
7 - <title><%= Configuration['contest.name'] %></title>
7 + <title><%= GraderConfiguration['contest.name'] %></title>
8 8 <%= stylesheet_link_tag 'application' %>
9 9 </head>
10 10 <body>
@@ -1,4 +1,4
1 - %b= Configuration['ui.front.welcome_message']
1 + %b= GraderConfiguration['ui.front.welcome_message']
2 2 %br/
3 3
4 4 - if !@hidelogin
@@ -25,7 +25,7
25 25 = submit_tag t('login.login_submit')
26 26 %br/
27 27
28 - - if Configuration['system.online_registration']
28 + - if GraderConfiguration['system.online_registration']
29 29 =t 'login.participation'
30 30 %b
31 31 = "#{t 'login.please'} "
@@ -9,7 +9,7
9 9 - if submission.graded_at!=nil
10 10 = "Graded at #{format_short_time(submission.graded_at)}."
11 11 %br/
12 - = "Score: #{(submission.points*100/submission.problem.full_score).to_i} " if Configuration['ui.show_score']
12 + = "Score: #{(submission.points*100/submission.problem.full_score).to_i} " if GraderConfiguration['ui.show_score']
13 13 = " ["
14 14 %tt
15 15 = submission.grader_comment
@@ -8,14 +8,14
8 8 - else
9 9 = t 'main.graded_at'
10 10 = "#{format_short_time(submission.graded_at.localtime)}, "
11 - - if Configuration['ui.show_score']
11 + - if GraderConfiguration['ui.show_score']
12 12 = t 'main.score'
13 13 = "#{(submission.points*100/submission.problem.full_score).to_i} "
14 14 = " ["
15 15 %tt
16 16 = submission.grader_comment
17 17 = "]"
18 - - if Configuration.show_grading_result
18 + - if GraderConfiguration.show_grading_result
19 19 = " | "
20 20 = link_to '[detailed result]', :action => 'result', :id => submission.id
21 21 = " | "
@@ -2,13 +2,13
2 2
3 3 .announcementbox
4 4 %span{:class => 'title'}
5 - =t 'help.how_to_submit'
5 + =raw t 'help.how_to_submit'
6 6 .announcement
7 7 %p
8 - =t 'help.must_specify_language'
8 + =raw t 'help.must_specify_language'
9 9
10 10 %p
11 - =t 'help.list_available_language'
11 + =raw t 'help.list_available_language'
12 12
13 13 %table{:border => '1'}
14 14 %tr
@@ -16,18 +16,18
16 16 %th{:width => '150px'} C++
17 17 %th{:width => '150px'} Pascal
18 18 %tr
19 - %td= "<tt>/*<br/>LANG: C<br/>*/</tt>"
20 - %td= "<tt>/*<br/>LANG: C++<br/>*/</tt>"
21 - %td= "<tt>{<br/>LANG: Pascal<br/>}</tt>"
19 + %td=raw "<tt>/*<br/>LANG: C<br/>*/</tt>"
20 + %td=raw "<tt>/*<br/>LANG: C++<br/>*/</tt>"
21 + %td=raw "<tt>{<br/>LANG: Pascal<br/>}</tt>"
22 22
23 23 %p
24 - =t 'help.accept_only_language_specified'
24 + =raw t 'help.accept_only_language_specified'
25 25
26 26 %p
27 - =t 'help.specifying_task'
27 + =raw t 'help.specifying_task'
28 28
29 29 %p
30 - =t 'help.example_cpp'
30 + =raw t 'help.example_cpp'
31 31
32 32 %table{:border => '1'}
33 33 %tr
@@ -35,7 +35,7
35 35 %tt <tt>/*<br/>LANG: C++<br/>TASK: mobiles<br/>*/</tt>
36 36
37 37 %p
38 - =t 'help.example_pas'
38 + =raw t 'help.example_pas'
39 39
40 40 %table{:border => '1'}
41 41 %tr
@@ -43,5 +43,5
43 43 %tt <tt>{<br/>LANG: Pascal<br/>TASK: mobiles<br/>}</tt>
44 44
45 45 %p
46 - = (t('help.ask_questions_at_messages',:message_link_name => (t 'menu.messages'),:url => url_for(:controller => 'messages', :action => 'list')))
46 + = raw(t('help.ask_questions_at_messages',:message_link_name => (t 'menu.messages'),:url => url_for(:controller => 'messages', :action => 'list')))
47 47
@@ -10,7 +10,7
10 10 #announcementbox-body
11 11 = render :partial => 'announcement', :collection => @announcements
12 12
13 - - if Configuration.show_submitbox_to?(@user)
13 + - if GraderConfiguration.show_submitbox_to?(@user)
14 14 .submitbox
15 15 = error_messages_for 'submission'
16 16 = render :partial => 'submission_box'
@@ -18,11 +18,11
18 18
19 19 %hr/
20 20
21 - - if (Configuration.contest_mode?) and (@user.site!=nil) and (@user.site.started!=true)
21 + - if (GraderConfiguration.contest_mode?) and (@user.site!=nil) and (@user.site.started!=true)
22 22 %p=t 'main.start_soon'
23 23
24 - - if Configuration.show_tasks_to?(@user)
25 - - if not Configuration.multicontests?
24 + - if GraderConfiguration.show_tasks_to?(@user)
25 + - if not GraderConfiguration.multicontests?
26 26 %table.info
27 27 %tr.info-head
28 28 %th
@@ -1,4 +1,4
1 - %h1= Configuration['ui.front.title']
1 + %h1= GraderConfiguration['ui.front.title']
2 2
3 3 %table
4 4 %tr
@@ -11,7 +11,7
11 11 %br/
12 12 = "Graded at #{format_short_time(@submission.graded_at)} "
13 13 %br/
14 - = "score: #{(@submission.points*100/@submission.problem.full_score).to_i} " if Configuration['ui.show_score']
14 + = "score: #{(@submission.points*100/@submission.problem.full_score).to_i} " if GraderConfiguration['ui.show_score']
15 15 = " ["
16 16 %tt
17 17 = @submission.grader_comment
@@ -17,7 +17,7
17 17 &nbsp;&nbsp;&nbsp;
18 18 = submit_tag 'Change', :name => 'change_date_added'
19 19
20 - - if Configuration.multicontests?
20 + - if GraderConfiguration.multicontests?
21 21 %li
22 22 Add to
23 23 = select("contest","id",Contest.all.collect {|c| [c.title, c.id]})
@@ -29,7 +29,7
29 29 %th Name
30 30 %th Full name
31 31 %th Date added
32 - - if Configuration.multicontests?
32 + - if GraderConfiguration.multicontests?
33 33 %th Contests
34 34
35 35 - for problem in @problems
@@ -38,7 +38,7
38 38 %td= problem.name
39 39 %td= problem.full_name
40 40 %td= problem.date_added
41 - - if Configuration.multicontests?
41 + - if GraderConfiguration.multicontests?
42 42 %td
43 43 - problem.contests.each do |contest|
44 44 = "(#{contest.name} [#{link_to 'x', :action => 'remove_contest', :id => problem.id, :contest_id => contest.id }])"
@@ -4,7 +4,7
4 4
5 5 <div class="test-desc">
6 6 <%=t 'test.intro' %><br/>
7 - <% if Configuration['contest.test_request.early_timeout'] %>
7 + <% if GraderConfiguration['contest.test_request.early_timeout'] %>
8 8 <%=t 'test.disabled_at_end_announcement' %>
9 9 <% end %>
10 10 </div>
@@ -37,7 +37,7
37 37 }
38 38 </script>
39 39
40 - <% if Configuration.show_submitbox_to?(@user) and Configuration.allow_test_request(@user) %>
40 + <% if GraderConfiguration.show_submitbox_to?(@user) and GraderConfiguration.allow_test_request(@user) %>
41 41 <div class="submitbox">
42 42 <%= error_messages_for 'submitted_test_request' %>
43 43 <% form_for :test_request, nil,
@@ -5,7 +5,7
5 5
6 6 <div class="submitbox">
7 7 <%= link_to '[View all users]', :action => 'list' %>
8 - <% if Configuration.multicontests? %>
8 + <% if GraderConfiguration.multicontests? %>
9 9 <%= link_to '[Manage bulk users in contests]', :action => 'contest_management' %>
10 10 <br/>
11 11 View users in:
@@ -32,7 +32,7
32 32 <th></th>
33 33 <th></th>
34 34 <th></th>
35 - <% if Configuration.multicontests? %>
35 + <% if GraderConfiguration.multicontests? %>
36 36 <th>Contests</th>
37 37 <th>Other enabled contests</th>
38 38 <% end %>
@@ -47,7 +47,7
47 47 <td><%= link_to 'Show', :action => 'show', :id => user %></td>
48 48 <td><%= link_to 'Edit', :action => 'edit', :id => user %></td>
49 49 <td><%= link_to 'Destroy', { :action => 'destroy', :id => user }, :confirm => 'Are you sure?', :method => :post %></td>
50 - <% if Configuration.multicontests? %>
50 + <% if GraderConfiguration.multicontests? %>
51 51 <td>
52 52 <% user.contests.each do |contest| %>
53 53 <%= contest.name %> [<%= link_to 'x', :action => 'remove_from_contest', :id => user.id, :contest_id => contest.id %>]
@@ -1,6 +1,6
1 1 .contest-title
2 2 %h1
3 - = "#{Configuration['contest.name']}: #{t 'registration.password_retrieval.header'}"
3 + = "#{GraderConfiguration['contest.name']}: #{t 'registration.password_retrieval.header'}"
4 4
5 5 - if flash[:notice]
6 6 %hr/
@@ -1,6 +1,6
1 1 .contest-title
2 2 %h1
3 - = "#{Configuration['contest.name']}: #{t 'registration.title'}"
3 + = "#{GraderConfiguration['contest.name']}: #{t 'registration.title'}"
4 4
5 5 .registration-desc
6 6 =t 'registration.description'
@@ -54,7 +54,7
54 54 config.active_record.whitelist_attributes = true
55 55
56 56 # Enable the asset pipeline
57 - config.assets.enabled = true
57 + config.assets.enabled = false
58 58
59 59 # Version of your assets, change this if you want to expire all your assets
60 60 config.assets.version = '1.0'
@@ -1,15 +1,17
1 - # This file is auto-generated from the current state of the database. Instead of editing this file,
2 - # please use the migrations feature of Active Record to incrementally modify your database, and
3 - # then regenerate this schema definition.
1 + # encoding: UTF-8
2 + # This file is auto-generated from the current state of the database. Instead
3 + # of editing this file, please use the migrations feature of Active Record to
4 + # incrementally modify your database, and then regenerate this schema definition.
4 5 #
5 - # Note that this schema.rb definition is the authoritative source for your database schema. If you need
6 - # to create the application database on another system, you should be using db:schema:load, not running
7 - # all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
6 + # Note that this schema.rb definition is the authoritative source for your
7 + # database schema. If you need to create the application database on another
8 + # system, you should be using db:schema:load, not running all the migrations
9 + # from scratch. The latter is a flawed and unsustainable approach (the more migrations
8 10 # you'll amass, the slower it'll run and the greater likelihood for issues).
9 11 #
10 12 # It's strongly recommended to check this file into your version control system.
11 13
12 - ActiveRecord::Schema.define(:version => 20100506163112) do
14 + ActiveRecord::Schema.define(:version => 20121001033508) do
13 15
14 16 create_table "announcements", :force => true do |t|
15 17 t.string "author"
@@ -23,13 +25,12
23 25 t.string "notes"
24 26 end
25 27
26 - create_table "configurations", :force => true do |t|
27 - t.string "key"
28 - t.string "value_type"
29 - t.string "value"
28 + create_table "codejom_statuses", :force => true do |t|
29 + t.integer "user_id"
30 + t.boolean "alive"
31 + t.integer "num_problems_passed"
30 32 t.datetime "created_at"
31 33 t.datetime "updated_at"
32 - t.text "description"
33 34 end
34 35
35 36 create_table "contests", :force => true do |t|
@@ -63,6 +64,15
63 64 t.datetime "updated_at"
64 65 end
65 66
67 + create_table "grader_configurations", :force => true do |t|
68 + t.string "key"
69 + t.string "value_type"
70 + t.string "value"
71 + t.datetime "created_at"
72 + t.datetime "updated_at"
73 + t.text "description"
74 + end
75 +
66 76 create_table "grader_processes", :force => true do |t|
67 77 t.string "host", :limit => 20
68 78 t.integer "pid"
@@ -95,16 +105,18
95 105 end
96 106
97 107 create_table "problems", :force => true do |t|
98 - t.string "name", :limit => 30
99 - t.string "full_name"
100 - t.integer "full_score"
101 - t.date "date_added"
102 - t.boolean "available"
103 - t.string "url"
104 - t.integer "description_id"
105 - t.boolean "test_allowed"
106 - t.boolean "output_only"
107 - t.string "description_filename"
108 + t.string "name", :limit => 30
109 + t.string "full_name"
110 + t.integer "full_score"
111 + t.date "date_added"
112 + t.boolean "available"
113 + t.string "url"
114 + t.integer "description_id"
115 + t.boolean "test_allowed"
116 + t.boolean "output_only"
117 + t.integer "level", :default => 0
118 + t.datetime "updated_at"
119 + t.string "description_filename"
108 120 end
109 121
110 122 create_table "rights", :force => true do |t|
@@ -150,6 +162,15
150 162 t.string "password"
151 163 end
152 164
165 + create_table "submission_statuses", :force => true do |t|
166 + t.integer "user_id"
167 + t.integer "problem_id"
168 + t.boolean "passed"
169 + t.integer "submission_count"
170 + t.datetime "created_at"
171 + t.datetime "updated_at"
172 + end
173 +
153 174 create_table "submissions", :force => true do |t|
154 175 t.integer "user_id"
155 176 t.integer "problem_id"
@@ -176,12 +197,24
176 197 t.datetime "updated_at"
177 198 end
178 199
200 + create_table "test_pair_assignments", :force => true do |t|
201 + t.integer "user_id"
202 + t.integer "problem_id"
203 + t.integer "test_pair_id"
204 + t.integer "test_pair_number"
205 + t.integer "request_number"
206 + t.datetime "created_at"
207 + t.datetime "updated_at"
208 + t.boolean "submitted"
209 + end
210 +
179 211 create_table "test_pairs", :force => true do |t|
180 212 t.integer "problem_id"
181 213 t.text "input", :limit => 16777215
182 214 t.text "solution", :limit => 16777215
183 215 t.datetime "created_at"
184 216 t.datetime "updated_at"
217 + t.integer "number"
185 218 end
186 219
187 220 create_table "test_requests", :force => true do |t|
@@ -215,17 +248,24
215 248 end
216 249
217 250 create_table "users", :force => true do |t|
218 - t.string "login", :limit => 50
251 + t.string "login", :limit => 50
219 252 t.string "full_name"
220 253 t.string "hashed_password"
221 - t.string "salt", :limit => 5
254 + t.string "salt", :limit => 5
222 255 t.string "alias"
223 256 t.string "email"
224 257 t.integer "site_id"
225 258 t.integer "country_id"
226 - t.boolean "activated", :default => false
259 + t.boolean "activated", :default => false
227 260 t.datetime "created_at"
228 261 t.datetime "updated_at"
262 + t.string "member1_full_name"
263 + t.string "member2_full_name"
264 + t.string "member3_full_name"
265 + t.boolean "high_school"
266 + t.string "member1_school_name"
267 + t.string "member2_school_name"
268 + t.string "member3_school_name"
229 269 end
230 270
231 271 add_index "users", ["login"], :name => "index_users_on_login", :unique => true
@@ -123,8 +123,8
123 123 value_type,
124 124 default_value,
125 125 description='')
126 - conf = (Configuration.find_by_key(key) ||
127 - Configuration.new(:key => key,
126 + conf = (GraderConfiguration.find_by_key(key) ||
127 + GraderConfiguration.new(:key => key,
128 128 :value_type => value_type,
129 129 :value => default_value))
130 130 conf.description = description
deleted file
deleted file
deleted file
deleted file
deleted file
deleted file
deleted file
deleted file
deleted file
deleted file
deleted file
deleted file
deleted file
You need to be logged in to leave comments. Login now