Description:
- fix pdf loading fail
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r634:56cf4357ce2a - - 4 files changed: 11 inserted, 4 deleted

@@ -43,97 +43,97
43 43 redirect_to action: :index
44 44 else
45 45 render :action => 'new'
46 46 end
47 47 end
48 48
49 49 def quick_create
50 50 @problem = Problem.new(params[:problem])
51 51 @problem.full_name = @problem.name if @problem.full_name == ''
52 52 @problem.full_score = 100
53 53 @problem.available = false
54 54 @problem.test_allowed = true
55 55 @problem.output_only = false
56 56 @problem.date_added = Time.new
57 57 if @problem.save
58 58 flash[:notice] = 'Problem was successfully created.'
59 59 redirect_to action: :index
60 60 else
61 61 flash[:notice] = 'Error saving problem'
62 62 redirect_to action: :index
63 63 end
64 64 end
65 65
66 66 def edit
67 67 @problem = Problem.find(params[:id])
68 68 @description = @problem.description
69 69 end
70 70
71 71 def update
72 72 @problem = Problem.find(params[:id])
73 73 @description = @problem.description
74 74 if @description.nil? and params[:description][:body]!=''
75 75 @description = Description.new(params[:description])
76 76 if !@description.save
77 77 flash[:notice] = 'Error saving description'
78 78 render :action => 'edit' and return
79 79 end
80 80 @problem.description = @description
81 81 elsif @description
82 82 if !@description.update_attributes(params[:description])
83 83 flash[:notice] = 'Error saving description'
84 84 render :action => 'edit' and return
85 85 end
86 86 end
87 87 if params[:file] and params[:file].content_type != 'application/pdf'
88 88 flash[:notice] = 'Error: Uploaded file is not PDF'
89 89 render :action => 'edit' and return
90 90 end
91 - if @problem.update_attributes(params[:problem])
91 + if @problem.update_attributes(problem_params)
92 92 flash[:notice] = 'Problem was successfully updated.'
93 93 unless params[:file] == nil or params[:file] == ''
94 94 flash[:notice] = 'Problem was successfully updated and a new PDF file is uploaded.'
95 95 out_dirname = "#{Problem.download_file_basedir}/#{@problem.id}"
96 96 if not FileTest.exists? out_dirname
97 97 Dir.mkdir out_dirname
98 98 end
99 99
100 100 out_filename = "#{out_dirname}/#{@problem.name}.pdf"
101 101 if FileTest.exists? out_filename
102 102 File.delete out_filename
103 103 end
104 104
105 105 File.open(out_filename,"wb") do |file|
106 106 file.write(params[:file].read)
107 107 end
108 108 @problem.description_filename = "#{@problem.name}.pdf"
109 109 @problem.save
110 110 end
111 111 redirect_to :action => 'show', :id => @problem
112 112 else
113 113 render :action => 'edit'
114 114 end
115 115 end
116 116
117 117 def destroy
118 118 p = Problem.find(params[:id]).destroy
119 119 redirect_to action: :index
120 120 end
121 121
122 122 def toggle
123 123 @problem = Problem.find(params[:id])
124 124 @problem.update_attributes(available: !(@problem.available) )
125 125 respond_to do |format|
126 126 format.js { }
127 127 end
128 128 end
129 129
130 130 def toggle_test
131 131 @problem = Problem.find(params[:id])
132 132 @problem.update_attributes(test_allowed: !(@problem.test_allowed?) )
133 133 respond_to do |format|
134 134 format.js { }
135 135 end
136 136 end
137 137
138 138 def toggle_view_testcase
139 139 @problem = Problem.find(params[:id])
@@ -240,49 +240,55
240 240 return false
241 241 end
242 242 end
243 243
244 244 def change_date_added
245 245 problems = get_problems_from_params
246 246 year = params[:date_added][:year].to_i
247 247 month = params[:date_added][:month].to_i
248 248 day = params[:date_added][:day].to_i
249 249 date = Date.new(year,month,day)
250 250 problems.each do |p|
251 251 p.date_added = date
252 252 p.save
253 253 end
254 254 end
255 255
256 256 def add_to_contest
257 257 problems = get_problems_from_params
258 258 contest = Contest.find(params[:contest][:id])
259 259 if contest!=nil and contest.enabled
260 260 problems.each do |p|
261 261 p.contests << contest
262 262 end
263 263 end
264 264 end
265 265
266 266 def set_available(avail)
267 267 problems = get_problems_from_params
268 268 problems.each do |p|
269 269 p.available = avail
270 270 p.save
271 271 end
272 272 end
273 273
274 274 def get_problems_from_params
275 275 problems = []
276 276 params.keys.each do |k|
277 277 if k.index('prob-')==0
278 278 name, id, order = k.split('-')
279 279 problems << Problem.find(id)
280 280 end
281 281 end
282 282 problems
283 283 end
284 284
285 285 def get_problems_stat
286 286 end
287 287
288 + private
289 +
290 + def problem_params
291 + params.require(:problem).permit(:name, :full_name, :full_score, :date_added, :available, :test_allowed,:output_only, :url, :description)
288 292 end
293 +
294 + end
@@ -73,97 +73,97
73 73 items = line.chomp.split(',')
74 74 if items.length>=2
75 75 login = items[0]
76 76 full_name = items[1]
77 77 remark =''
78 78 user_alias = ''
79 79
80 80 added_random_password = false
81 81 if items.length >= 3 and items[2].chomp(" ").length > 0;
82 82 password = items[2].chomp(" ")
83 83 else
84 84 password = random_password
85 85 add_random_password=true;
86 86 end
87 87
88 88 if items.length>= 4 and items[3].chomp(" ").length > 0;
89 89 user_alias = items[3].chomp(" ")
90 90 else
91 91 user_alias = login
92 92 end
93 93
94 94 if items.length>=5
95 95 remark = items[4].strip;
96 96 end
97 97
98 98 user = User.find_by_login(login)
99 99 if (user)
100 100 user.full_name = full_name
101 101 user.password = password
102 102 user.remark = remark
103 103 else
104 104 user = User.new({:login => login,
105 105 :full_name => full_name,
106 106 :password => password,
107 107 :password_confirmation => password,
108 108 :alias => user_alias,
109 109 :remark => remark})
110 110 end
111 111 user.activated = true
112 112 user.save
113 113
114 114 if added_random_password
115 115 note << "'#{login}' (+)"
116 116 else
117 117 note << login
118 118 end
119 119 end
120 120 end
121 - flash[:notice] = 'User(s) ' + note.join(', ') +
121 + flash[:success] = 'User(s) ' + note.join(', ') +
122 122 ' were successfully created. ' +
123 123 '( (+) - created with random passwords.)'
124 124 redirect_to :action => 'index'
125 125 end
126 126
127 127 def edit
128 128 @user = User.find(params[:id])
129 129 end
130 130
131 131 def update
132 132 @user = User.find(params[:id])
133 133 if @user.update_attributes(user_params)
134 134 flash[:notice] = 'User was successfully updated.'
135 135 redirect_to :action => 'show', :id => @user
136 136 else
137 137 render :action => 'edit'
138 138 end
139 139 end
140 140
141 141 def destroy
142 142 User.find(params[:id]).destroy
143 143 redirect_to :action => 'index'
144 144 end
145 145
146 146 def user_stat
147 147 if params[:commit] == 'download csv'
148 148 @problems = Problem.all
149 149 else
150 150 @problems = Problem.available_problems
151 151 end
152 152 @users = User.includes(:contests, :contest_stat).where(enabled: true)
153 153 @scorearray = Array.new
154 154 @users.each do |u|
155 155 ustat = Array.new
156 156 ustat[0] = u
157 157 @problems.each do |p|
158 158 sub = Submission.find_last_by_user_and_problem(u.id,p.id)
159 159 if (sub!=nil) and (sub.points!=nil) and p and p.full_score
160 160 ustat << [(sub.points.to_f*100/p.full_score).round, (sub.points>=p.full_score)]
161 161 else
162 162 ustat << [0,false]
163 163 end
164 164 end
165 165 @scorearray << ustat
166 166 end
167 167 if params[:commit] == 'download csv' then
168 168 csv = gen_csv_from_scorearray(@scorearray,@problems)
169 169 send_data csv, filename: 'last_score.csv'
@@ -1,53 +1,54
1 1 <%= error_messages_for 'problem' %>
2 2
3 3 <!--[form:problem]-->
4 4 <p><label for="problem_name">Name</label><br/>
5 - <%= text_field 'problem', 'name' %></p>
5 + <%= text_field 'problem', 'name' %> Do not directly edit the problem name, unless you know what you are doing. If you want to change the name, use the name change button in the problem management menu instead.
6 + </p>
6 7
7 8 <p><label for="problem_full_name">Full name</label><br/>
8 9 <%= text_field 'problem', 'full_name' %></p>
9 10
10 11 <p><label for="problem_full_score">Full score</label><br/>
11 12 <%= text_field 'problem', 'full_score' %></p>
12 13
13 14 <p><label for="problem_date_added">Date added</label><br/>
14 15 <%= date_select 'problem', 'date_added' %></p>
15 16
16 17 <%
17 18 # TODO: these should be put in model Problem, but I can't think of
18 19 # nice default values for them. These values look fine only
19 20 # in this case (of lazily adding new problems).
20 21 @problem.available = true if @problem!=nil and @problem.available==nil
21 22 @problem.test_allowed = true if @problem!=nil and @problem.test_allowed==nil
22 23 @problem.output_only = false if @problem!=nil and @problem.output_only==nil
23 24 %>
24 25
25 26 <p>
26 27 <label for="problem_available">Available?</label>
27 28 <%= check_box :problem, :available %>
28 29
29 30 <label for="problem_test_allowed">Test allowed?</label>
30 31 <%= check_box :problem, :test_allowed %>
31 32
32 33 <label for="problem_output_only">Output only?</label>
33 34 <%= check_box :problem, :output_only %>
34 35 </p>
35 36
36 37 <%= error_messages_for 'description' %>
37 38
38 39 <p><label for="description_body">Description</label><br/>
39 40 <%= text_area :description, :body, :rows => 10, :cols => 80 %></p>
40 41
41 42 <p><label for="description_markdowned">Markdowned?</label>
42 43 <%= select "description",
43 44 "markdowned",
44 45 [['True',true],['False',false]],
45 46 {:selected => (@description) ? @description.markdowned : false }
46 47 %></p>
47 48
48 49 <p><label for="problem_url">URL</label><br/>
49 50 <%= text_field 'problem', 'url' %></p>
50 51
51 52 <p>Task PDF <%= file_field_tag 'file' %></p>
52 53
53 54
@@ -1,24 +1,24
1 1 <% for column in Problem.content_columns %>
2 2 <p>
3 3 <b><%= column.human_name %>:</b>
4 4 <%=h @problem.send(column.name) %>
5 5 </p>
6 6 <% end %>
7 7
8 8 <p>
9 9 <b>Description:</b><br/>
10 10 <% if @problem.description!=nil %>
11 11 <% if @problem.description.markdowned %>
12 12 <%= markdown(@problem.description.body) %>
13 13 <% else %>
14 14 <pre>
15 15 <%= @problem.description.body %>
16 16 </pre>
17 17 <% end %>
18 18 <% else %>
19 19 (not available)
20 20 <% end %>
21 21 </p>
22 22
23 23 <%= link_to 'Edit', :action => 'edit', :id => @problem %> |
24 - <%= link_to 'Back', :action => 'list' %>
24 + <%= link_to 'Back', problems_path %>
You need to be logged in to leave comments. Login now