Description:
imports task description as pdf
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r271:69482b83f9d6 - - 8 files changed: 62 inserted, 9 deleted

@@ -0,0 +1,1
1 + [a-zA-Z]*
@@ -0,0 +1,9
1 + class AddDescriptionFilenameToProblems < ActiveRecord::Migration
2 + def self.up
3 + add_column :problems, :description_filename, :string
4 + end
5 +
6 + def self.down
7 + remove_column :problems, :description_filename
8 + end
9 + end
@@ -12,11 +12,15
12 12 end
13 13
14 14 def view
15 - base_filename = File.basename("#{params[:file]}.#{params[:ext]}")
16 - filename = "#{RAILS_ROOT}/data/tasks/#{base_filename}"
17 - #filename = "/home/ioi/web_grader/data/tasks/#{base_filename}"
18 - #filename = "/home/ioi/web_grader/public/images/rails.png"
19 - if !FileTest.exists?(filename)
15 + base_name = params[:file]
16 + if !check_user_viewability(base_name)
17 + redirect_to :action => 'index' and return
18 + end
19 +
20 + base_filename = File.basename("#{base_name}.#{params[:ext]}")
21 + filename = "#{Problem.download_file_basedir}/#{base_filename}"
22 +
23 + if !check_user_viewability(base_name) or !FileTest.exists?(filename)
20 24 redirect_to :action => 'index' and return
21 25 end
22 26
@@ -34,11 +38,17
34 38 protected
35 39
36 40 def check_viewability
37 - user = User.find(session[:user_id])
38 - if user==nil or !Configuration.show_tasks_to?(user)
41 + @user = User.find(session[:user_id])
42 + if @user==nil or !Configuration.show_tasks_to?(@user)
39 43 redirect_to :controller => 'main', :action => 'list'
40 44 return false
41 45 end
42 46 end
43 47
48 + def check_user_viewability(filename)
49 + # individual file access control shall be added here
50 + return false if not @user
51 + return Configuration.show_tasks_to?(@user)
44 52 end
53 +
54 + end
@@ -1,3 +1,18
1 1 module MainHelper
2 2
3 + def link_to_description_if_any(name, problem, options={})
4 + if !problem.url.blank?
5 + return link_to name, problem.url, options
6 + elsif !problem.description_filename.blank?
7 + basename, ext = problem.description_filename.split('.')
8 + options[:controller] = 'tasks'
9 + options[:action] = 'view'
10 + options[:file] = basename
11 + options[:ext] = ext
12 + return link_to name, options
13 + else
14 + return ''
3 15 end
16 + end
17 +
18 + end
@@ -47,6 +47,10
47 47 return problem, importer.log_msg
48 48 end
49 49
50 + def self.download_file_basedir
51 + return "#{RAILS_ROOT}/data/tasks"
52 + end
53 +
50 54 protected
51 55
52 56 def self.to_i_or_default(st, default)
@@ -4,7 +4,7
4 4 </td>
5 5 <td>
6 6 <%= "#{problem.full_name} (#{problem.name})" %>
7 - <%= link_to "[#{t 'main.problem_desc'}]", problem.url, :popup => true if (problem.url!=nil) and (problem.url!='') %>
7 + <%= link_to_description_if_any "[#{t 'main.problem_desc'}]", problem %>
8 8 </td>
9 9 <td align="center">
10 10 <%= @prob_submissions[problem_counter][:count] %>
@@ -9,7 +9,7
9 9 #
10 10 # It's strongly recommended to check this file into your version control system.
11 11
12 - ActiveRecord::Schema.define(:version => 20100216162940) do
12 + ActiveRecord::Schema.define(:version => 20100219014840) do
13 13
14 14 create_table "announcements", :force => true do |t|
15 15 t.string "author"
@@ -112,6 +112,7
112 112 t.boolean "output_only"
113 113 t.integer "level", :default => 0
114 114 t.datetime "updated_at"
115 + t.string "description_filename"
115 116 end
116 117
117 118 create_table "rights", :force => true do |t|
@@ -33,6 +33,7
33 33 end
34 34
35 35 @log_msg << import_problem_description(dirname)
36 + @log_msg << import_problem_pdf(dirname)
36 37
37 38 return true
38 39 end
@@ -135,4 +136,16
135 136 end
136 137 end
137 138
139 + def import_problem_pdf(dirname)
140 + pdf_files = Dir["#{dirname}/*.pdf"]
141 + if pdf_files.length != 0
142 + filename = pdf_files[0]
143 + out_filename = "#{Problem.download_file_basedir}/#{@problem.name}.pdf"
144 + File.rename(filename, out_filename)
145 + @problem.description_filename = "#{@problem.name}.pdf"
146 + @problem.save
147 + return "\nProblem pdf imported from #{filename}."
138 148 end
149 + end
150 +
151 + end
You need to be logged in to leave comments. Login now