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

r316:fdc96046b715 - - 2 files changed: 5 inserted, 5 deleted

@@ -1,68 +1,72
1 1 require 'yaml'
2 2
3 3 #
4 4 # This class also contains various login of the system.
5 5 #
6 6 class Configuration < ActiveRecord::Base
7 7
8 8 SYSTEM_MODE_CONF_KEY = 'system.mode'
9 9 TEST_REQUEST_EARLY_TIMEOUT_KEY = 'contest.test_request.early_timeout'
10 10 MULTICONTESTS_KEY = 'system.multicontests'
11 11 CONTEST_TIME_LIMIT_KEY = 'contest.time_limit'
12 12
13 13 cattr_accessor :config_cache
14 14 cattr_accessor :task_grading_info_cache
15 15 cattr_accessor :contest_time_str
16 16 cattr_accessor :contest_time
17 17
18 18 Configuration.config_cache = nil
19 19 Configuration.task_grading_info_cache = nil
20 20
21 + def self.config_cached?
22 + (defined? CONFIGURATION_CACHE_ENABLED) and (CONFIGURATION_CACHE_ENABLED)
23 + end
24 +
21 25 def self.get(key)
22 26 if Configuration.config_cached?
23 27 if Configuration.config_cache == nil
24 28 self.read_config
25 29 end
26 30 return Configuration.config_cache[key]
27 31 else
28 32 return Configuration.read_one_key(key)
29 33 end
30 34 end
31 35
32 36 def self.[](key)
33 37 self.get(key)
34 38 end
35 39
36 40 def self.reload
37 41 self.read_config
38 42 end
39 43
40 44 def self.clear
41 45 Configuration.config_cache = nil
42 46 end
43 47
44 48 #
45 49 # View decision
46 50 #
47 51 def self.show_submitbox_to?(user)
48 52 mode = get(SYSTEM_MODE_CONF_KEY)
49 53 return false if mode=='analysis'
50 54 if (mode=='contest')
51 55 return false if (user.site!=nil) and
52 56 ((user.site.started!=true) or (user.site.finished?))
53 57 end
54 58 return true
55 59 end
56 60
57 61 def self.show_tasks_to?(user)
58 62 if time_limit_mode?
59 63 return false if not user.contest_started?
60 64 end
61 65 return true
62 66 end
63 67
64 68 def self.show_grading_result
65 69 return (get(SYSTEM_MODE_CONF_KEY)=='analysis')
66 70 end
67 71
68 72 def self.allow_test_request(user)
@@ -87,90 +91,86
87 91 def self.standard_mode?
88 92 return get(SYSTEM_MODE_CONF_KEY) == 'standard'
89 93 end
90 94
91 95 def self.contest_mode?
92 96 return get(SYSTEM_MODE_CONF_KEY) == 'contest'
93 97 end
94 98
95 99 def self.indv_contest_mode?
96 100 return get(SYSTEM_MODE_CONF_KEY) == 'indv-contest'
97 101 end
98 102
99 103 def self.multicontests?
100 104 return get(MULTICONTESTS_KEY) == true
101 105 end
102 106
103 107 def self.time_limit_mode?
104 108 mode = get(SYSTEM_MODE_CONF_KEY)
105 109 return ((mode == 'contest') or (mode == 'indv-contest'))
106 110 end
107 111
108 112 def self.analysis_mode?
109 113 return get(SYSTEM_MODE_CONF_KEY) == 'analysis'
110 114 end
111 115
112 116 def self.contest_time_limit
113 117 contest_time_str = Configuration[CONTEST_TIME_LIMIT_KEY]
114 118
115 119 if not defined? Configuration.contest_time_str
116 120 Configuration.contest_time_str = nil
117 121 end
118 122
119 123 if Configuration.contest_time_str != contest_time_str
120 124 Configuration.contest_time_str = contest_time_str
121 125 if tmatch = /(\d+):(\d+)/.match(contest_time_str)
122 126 h = tmatch[1].to_i
123 127 m = tmatch[2].to_i
124 128
125 129 Configuration.contest_time = h.hour + m.minute
126 130 else
127 131 Configuration.contest_time = nil
128 132 end
129 133 end
130 134 return Configuration.contest_time
131 135 end
132 136
133 137 protected
134 138
135 - def self.config_cached?
136 - (defined? CONFIGURATION_CACHE_ENABLED) and (CONFIGURATION_CACHE_ENABLED)
137 - end
138 -
139 139 def self.convert_type(val,type)
140 140 case type
141 141 when 'string'
142 142 return val
143 143
144 144 when 'integer'
145 145 return val.to_i
146 146
147 147 when 'boolean'
148 148 return (val=='true')
149 149 end
150 150 end
151 151
152 152 def self.read_config
153 153 Configuration.config_cache = {}
154 154 Configuration.find(:all).each do |conf|
155 155 key = conf.key
156 156 val = conf.value
157 157 Configuration.config_cache[key] = Configuration.convert_type(val,conf.value_type)
158 158 end
159 159 end
160 160
161 161 def self.read_one_key(key)
162 162 conf = Configuration.find_by_key(key)
163 163 if conf
164 164 return Configuration.convert_type(conf.value,conf.value_type)
165 165 else
166 166 return nil
167 167 end
168 168 end
169 169
170 170 def self.read_grading_info
171 171 f = File.open(TASK_GRADING_INFO_FILENAME)
172 172 Configuration.task_grading_info_cache = YAML.load(f)
173 173 f.close
174 174 end
175 175
176 176 end
@@ -1,32 +1,32
1 1 - content_for :head do
2 2 = javascript_include_tag :defaults
3 3
4 4 %h1 System configuration
5 5
6 6 %table.info
7 7 %tr.info-head
8 8 %th Key
9 9 %th Type
10 10 %th Value
11 11 %th Description
12 12 - @configurations.each do |conf|
13 13 - @configuration = conf
14 14 %tr{:class => cycle("info-odd", "info-even")}
15 15 %td
16 16 = in_place_editor_field :configuration, :key, {}, :rows=>1
17 17 %td
18 18 = in_place_editor_field :configuration, :value_type, {}, :rows=>1
19 19 %td
20 20 = in_place_editor_field :configuration, :value, {}, :rows=>1
21 21 %td= conf.description
22 22
23 - - if Configuration.cache?
23 + - if Configuration.config_cached?
24 24 %br/
25 25 Your config is saved, but it does not automatically take effect.
26 26 %br/
27 27 If you have one mongrel process running, you can
28 28 = link_to '[click]', :action => 'reload'
29 29 here to reload.
30 30 %br/
31 31 If you have more than one process running, you should restart
32 32 them manually.
You need to be logged in to leave comments. Login now