Description:
fixed problem import from validation (thanks Witchakorn Kamolpornwijit)
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r310:6939525421a6 - - 1 file changed: 20 inserted, 14 deleted

@@ -15,16 +15,17
15
15
16 def self.find_available_problems
16 def self.find_available_problems
17 Problem.available.all(:order => "date_added DESC")
17 Problem.available.all(:order => "date_added DESC")
18 end
18 end
19
19
20 def self.create_from_import_form_params(params, old_problem=nil)
20 def self.create_from_import_form_params(params, old_problem=nil)
21 - problem = old_problem || Problem.new
21 + org_problem = old_problem || Problem.new
22 - import_params = Problem.extract_params_and_check(params, problem)
22 + import_params, problem = Problem.extract_params_and_check(params,
23 + org_problem)
23
24
24 - if not problem.valid?
25 + if problem.errors.length!=0
25 return problem, 'Error importing'
26 return problem, 'Error importing'
26 end
27 end
27
28
28 problem.full_score = 100
29 problem.full_score = 100
29 problem.date_added = Time.new
30 problem.date_added = Time.new
30 problem.test_allowed = true
31 problem.test_allowed = true
@@ -54,55 +55,60
54 end
55 end
55
56
56 protected
57 protected
57
58
58 def self.to_i_or_default(st, default)
59 def self.to_i_or_default(st, default)
59 if st!=''
60 if st!=''
60 - st.to_i
61 + result = st.to_i
61 - else
62 + end
62 - default
63 + result ||= default
63 end
64 end
65 +
66 + def self.to_f_or_default(st, default)
67 + if st!=''
68 + result = st.to_f
69 + end
70 + result ||= default
64 end
71 end
65
72
66 def self.extract_params_and_check(params, problem)
73 def self.extract_params_and_check(params, problem)
67 - time_limit = Problem.to_i_or_default(params[:time_limit],
74 + time_limit = Problem.to_f_or_default(params[:time_limit],
68 DEFAULT_TIME_LIMIT)
75 DEFAULT_TIME_LIMIT)
69 memory_limit = Problem.to_i_or_default(params[:memory_limit],
76 memory_limit = Problem.to_i_or_default(params[:memory_limit],
70 DEFAULT_MEMORY_LIMIT)
77 DEFAULT_MEMORY_LIMIT)
71
78
72 - if time_limit==0 and time_limit_s!='0'
79 + if time_limit<=0 or time_limit >60
73 - problem.errors.add_to_base('Time limit format errors.')
74 - elsif time_limit<=0 or time_limit >60
75 problem.errors.add_to_base('Time limit out of range.')
80 problem.errors.add_to_base('Time limit out of range.')
76 end
81 end
77
82
78 - if memory_limit==0 and memory_limit_s!='0'
83 + if memory_limit==0 and params[:memory_limit]!='0'
79 problem.errors.add_to_base('Memory limit format errors.')
84 problem.errors.add_to_base('Memory limit format errors.')
80 elsif memory_limit<=0 or memory_limit >512
85 elsif memory_limit<=0 or memory_limit >512
81 problem.errors.add_to_base('Memory limit out of range.')
86 problem.errors.add_to_base('Memory limit out of range.')
82 end
87 end
83
88
84 if params[:file]==nil or params[:file]==''
89 if params[:file]==nil or params[:file]==''
85 problem.errors.add_to_base('No testdata file.')
90 problem.errors.add_to_base('No testdata file.')
86 end
91 end
87
92
88 file = params[:file]
93 file = params[:file]
89
94
90 if problem.errors.length!=0
95 if problem.errors.length!=0
91 - return problem
96 + return nil, problem
92 end
97 end
93
98
94 problem.name = params[:name]
99 problem.name = params[:name]
95 if params[:full_name]!=''
100 if params[:full_name]!=''
96 problem.full_name = params[:full_name]
101 problem.full_name = params[:full_name]
97 else
102 else
98 problem.full_name = params[:name]
103 problem.full_name = params[:name]
99 end
104 end
100
105
101 - return {
106 + return [{
102 :time_limit => time_limit,
107 :time_limit => time_limit,
103 :memory_limit => memory_limit,
108 :memory_limit => memory_limit,
104 :file => file
109 :file => file
105 - }
110 + },
111 + problem]
106 end
112 end
107
113
108 end
114 end
You need to be logged in to leave comments. Login now