Description:
fixed task info error in analysis mode
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r290:8a3bce2f983b - - 1 file changed: 5 inserted, 5 deleted

@@ -1,182 +1,182
1 require 'yaml'
1 require 'yaml'
2
2
3 #
3 #
4 # This class also contains various login of the system.
4 # This class also contains various login of the system.
5 #
5 #
6 class Configuration < ActiveRecord::Base
6 class Configuration < ActiveRecord::Base
7
7
8 SYSTEM_MODE_CONF_KEY = 'system.mode'
8 SYSTEM_MODE_CONF_KEY = 'system.mode'
9 TEST_REQUEST_EARLY_TIMEOUT_KEY = 'contest.test_request.early_timeout'
9 TEST_REQUEST_EARLY_TIMEOUT_KEY = 'contest.test_request.early_timeout'
10
10
11 cattr_accessor :cache
11 cattr_accessor :cache
12 cattr_accessor :config_cache
12 cattr_accessor :config_cache
13 - cattr_accessor :task_grading_info
13 + cattr_accessor :task_grading_info_cache
14 cattr_accessor :contest_time_str
14 cattr_accessor :contest_time_str
15 cattr_accessor :contest_time
15 cattr_accessor :contest_time
16
16
17 # set @@cache = true to only reload once.
17 # set @@cache = true to only reload once.
18 Configuration.cache = false
18 Configuration.cache = false
19
19
20 Configuration.config_cache = nil
20 Configuration.config_cache = nil
21 - Configuration.task_grading_info = nil
21 + Configuration.task_grading_info_cache = nil
22
22
23 def self.get(key)
23 def self.get(key)
24 if Configuration.cache
24 if Configuration.cache
25 if Configuration.config_cache == nil
25 if Configuration.config_cache == nil
26 self.read_config
26 self.read_config
27 end
27 end
28 return Configuration.config_cache[key]
28 return Configuration.config_cache[key]
29 else
29 else
30 return Configuration.read_one_key(key)
30 return Configuration.read_one_key(key)
31 end
31 end
32 end
32 end
33
33
34 def self.[](key)
34 def self.[](key)
35 self.get(key)
35 self.get(key)
36 end
36 end
37
37
38 def self.reload
38 def self.reload
39 self.read_config
39 self.read_config
40 end
40 end
41
41
42 def self.clear
42 def self.clear
43 Configuration.config_cache = nil
43 Configuration.config_cache = nil
44 end
44 end
45
45
46 def self.cache?
46 def self.cache?
47 Configuration.cache
47 Configuration.cache
48 end
48 end
49
49
50 def self.enable_caching
50 def self.enable_caching
51 Configuration.cache = true
51 Configuration.cache = true
52 end
52 end
53
53
54 #
54 #
55 # View decision
55 # View decision
56 #
56 #
57 def self.show_submitbox_to?(user)
57 def self.show_submitbox_to?(user)
58 mode = get(SYSTEM_MODE_CONF_KEY)
58 mode = get(SYSTEM_MODE_CONF_KEY)
59 return false if mode=='analysis'
59 return false if mode=='analysis'
60 if (mode=='contest')
60 if (mode=='contest')
61 return false if (user.site!=nil) and
61 return false if (user.site!=nil) and
62 ((user.site.started!=true) or (user.site.finished?))
62 ((user.site.started!=true) or (user.site.finished?))
63 end
63 end
64 return true
64 return true
65 end
65 end
66
66
67 def self.show_tasks_to?(user)
67 def self.show_tasks_to?(user)
68 if time_limit_mode?
68 if time_limit_mode?
69 return false if not user.contest_started?
69 return false if not user.contest_started?
70 end
70 end
71 return true
71 return true
72 end
72 end
73
73
74 def self.show_grading_result
74 def self.show_grading_result
75 return (get(SYSTEM_MODE_CONF_KEY)=='analysis')
75 return (get(SYSTEM_MODE_CONF_KEY)=='analysis')
76 end
76 end
77
77
78 def self.allow_test_request(user)
78 def self.allow_test_request(user)
79 mode = get(SYSTEM_MODE_CONF_KEY)
79 mode = get(SYSTEM_MODE_CONF_KEY)
80 early_timeout = get(TEST_REQUEST_EARLY_TIMEOUT_KEY)
80 early_timeout = get(TEST_REQUEST_EARLY_TIMEOUT_KEY)
81 if (mode=='contest')
81 if (mode=='contest')
82 return false if ((user.site!=nil) and
82 return false if ((user.site!=nil) and
83 ((user.site.started!=true) or
83 ((user.site.started!=true) or
84 (early_timeout and (user.site.time_left < 30.minutes))))
84 (early_timeout and (user.site.time_left < 30.minutes))))
85 end
85 end
86 return false if mode=='analysis'
86 return false if mode=='analysis'
87 return true
87 return true
88 end
88 end
89
89
90 def self.task_grading_info
90 def self.task_grading_info
91 - if Configuration.task_grading_info==nil
91 + if Configuration.task_grading_info_cache==nil
92 read_grading_info
92 read_grading_info
93 end
93 end
94 - return Configuration.task_grading_info
94 + return Configuration.task_grading_info_cache
95 end
95 end
96
96
97 def self.standard_mode?
97 def self.standard_mode?
98 return get(SYSTEM_MODE_CONF_KEY) == 'standard'
98 return get(SYSTEM_MODE_CONF_KEY) == 'standard'
99 end
99 end
100
100
101 def self.contest_mode?
101 def self.contest_mode?
102 return get(SYSTEM_MODE_CONF_KEY) == 'contest'
102 return get(SYSTEM_MODE_CONF_KEY) == 'contest'
103 end
103 end
104
104
105 def self.indv_contest_mode?
105 def self.indv_contest_mode?
106 return get(SYSTEM_MODE_CONF_KEY) == 'indv-contest'
106 return get(SYSTEM_MODE_CONF_KEY) == 'indv-contest'
107 end
107 end
108
108
109 def self.multicontests?
109 def self.multicontests?
110 return get('system.multicontests') == true
110 return get('system.multicontests') == true
111 end
111 end
112
112
113 def self.time_limit_mode?
113 def self.time_limit_mode?
114 mode = get(SYSTEM_MODE_CONF_KEY)
114 mode = get(SYSTEM_MODE_CONF_KEY)
115 return ((mode == 'contest') or (mode == 'indv-contest'))
115 return ((mode == 'contest') or (mode == 'indv-contest'))
116 end
116 end
117
117
118 def self.analysis_mode?
118 def self.analysis_mode?
119 return get(SYSTEM_MODE_CONF_KEY) == 'analysis'
119 return get(SYSTEM_MODE_CONF_KEY) == 'analysis'
120 end
120 end
121
121
122 def self.contest_time_limit
122 def self.contest_time_limit
123 contest_time_str = Configuration['contest.time_limit']
123 contest_time_str = Configuration['contest.time_limit']
124
124
125 if not defined? Configuration.contest_time_str
125 if not defined? Configuration.contest_time_str
126 Configuration.contest_time_str = nil
126 Configuration.contest_time_str = nil
127 end
127 end
128
128
129 if Configuration.contest_time_str != contest_time_str
129 if Configuration.contest_time_str != contest_time_str
130 Configuration.contest_time_str = contest_time_str
130 Configuration.contest_time_str = contest_time_str
131 if tmatch = /(\d+):(\d+)/.match(contest_time_str)
131 if tmatch = /(\d+):(\d+)/.match(contest_time_str)
132 h = tmatch[1].to_i
132 h = tmatch[1].to_i
133 m = tmatch[2].to_i
133 m = tmatch[2].to_i
134
134
135 Configuration.contest_time = h.hour + m.minute
135 Configuration.contest_time = h.hour + m.minute
136 else
136 else
137 Configuration.contest_time = nil
137 Configuration.contest_time = nil
138 end
138 end
139 end
139 end
140 return Configuration.contest_time
140 return Configuration.contest_time
141 end
141 end
142
142
143 protected
143 protected
144
144
145 def self.convert_type(val,type)
145 def self.convert_type(val,type)
146 case type
146 case type
147 when 'string'
147 when 'string'
148 return val
148 return val
149
149
150 when 'integer'
150 when 'integer'
151 return val.to_i
151 return val.to_i
152
152
153 when 'boolean'
153 when 'boolean'
154 return (val=='true')
154 return (val=='true')
155 end
155 end
156 end
156 end
157
157
158 def self.read_config
158 def self.read_config
159 Configuration.config_cache = {}
159 Configuration.config_cache = {}
160 Configuration.find(:all).each do |conf|
160 Configuration.find(:all).each do |conf|
161 key = conf.key
161 key = conf.key
162 val = conf.value
162 val = conf.value
163 Configuration.config_cache[key] = Configuration.convert_type(val,conf.value_type)
163 Configuration.config_cache[key] = Configuration.convert_type(val,conf.value_type)
164 end
164 end
165 end
165 end
166
166
167 def self.read_one_key(key)
167 def self.read_one_key(key)
168 conf = Configuration.find_by_key(key)
168 conf = Configuration.find_by_key(key)
169 if conf
169 if conf
170 return Configuration.convert_type(conf.value,conf.value_type)
170 return Configuration.convert_type(conf.value,conf.value_type)
171 else
171 else
172 return nil
172 return nil
173 end
173 end
174 end
174 end
175
175
176 def self.read_grading_info
176 def self.read_grading_info
177 f = File.open(TASK_GRADING_INFO_FILENAME)
177 f = File.open(TASK_GRADING_INFO_FILENAME)
178 - Configuration.task_grading_info = YAML.load(f)
178 + Configuration.task_grading_info_cache = YAML.load(f)
179 f.close
179 f.close
180 end
180 end
181
181
182 end
182 end
You need to be logged in to leave comments. Login now