Description:
[web] uploading output-only submission git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@189 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r100:2ce8f9387085 - - 2 files changed: 8 inserted, 0 deleted

@@ -17,97 +17,101
17 17
18 18 def login
19 19 saved_notice = flash[:notice]
20 20 reset_session
21 21 flash[:notice] = saved_notice
22 22
23 23 render :action => 'login', :layout => 'empty'
24 24 end
25 25
26 26 def list
27 27 prepare_list_information
28 28 end
29 29
30 30 def submit
31 31 user = User.find(session[:user_id])
32 32
33 33 @submission = Submission.new(params[:submission])
34 34 @submission.user = user
35 35 @submission.language_id = 0
36 36 if params['file']!=''
37 37 @submission.source = params['file'].read
38 38 @submission.source_filename = params['file'].original_filename
39 39 end
40 40 @submission.submitted_at = Time.new
41 41
42 42 if user.site!=nil and user.site.finished?
43 43 @submission.errors.add_to_base "The contest is over."
44 44 prepare_list_information
45 45 render :action => 'list' and return
46 46 end
47 47
48 48 if @submission.valid?
49 49 if @submission.save == false
50 50 flash[:notice] = 'Error saving your submission'
51 51 elsif Task.create(:submission_id => @submission.id,
52 52 :status => Task::STATUS_INQUEUE) == false
53 53 flash[:notice] = 'Error adding your submission to task queue'
54 54 end
55 55 else
56 56 prepare_list_information
57 57 render :action => 'list' and return
58 58 end
59 59 redirect_to :action => 'list'
60 60 end
61 61
62 62 def source
63 63 submission = Submission.find(params[:id])
64 64 if submission.user_id == session[:user_id]
65 + if submission.problem.output_only
66 + fname = submission.source_filename
67 + else
65 68 fname = submission.problem.name + '.' + submission.language.ext
69 + end
66 70 send_data(submission.source,
67 71 {:filename => fname,
68 72 :type => 'text/plain'})
69 73 else
70 74 flash[:notice] = 'Error viewing source'
71 75 redirect_to :action => 'list'
72 76 end
73 77 end
74 78
75 79 def compiler_msg
76 80 @submission = Submission.find(params[:id])
77 81 if @submission.user_id == session[:user_id]
78 82 render :action => 'compiler_msg', :layout => 'empty'
79 83 else
80 84 flash[:notice] = 'Error viewing source'
81 85 redirect_to :action => 'list'
82 86 end
83 87 end
84 88
85 89 def submission
86 90 @user = User.find(session[:user_id])
87 91 @problems = Problem.find_available_problems
88 92 if params[:id]==nil
89 93 @problem = nil
90 94 @submissions = nil
91 95 else
92 96 @problem = Problem.find_by_name(params[:id])
93 97 @submissions = Submission.find_all_by_user_problem(@user.id, @problem.id)
94 98 end
95 99 end
96 100
97 101 protected
98 102 def prepare_list_information
99 103 @problems = Problem.find_available_problems
100 104 @prob_submissions = Array.new
101 105 @user = User.find(session[:user_id])
102 106 @problems.each do |p|
103 107 sub = Submission.find_last_by_user_and_problem(@user.id,p.id)
104 108 if sub!=nil
105 109 @prob_submissions << { :count => sub.number, :submission => sub }
106 110 else
107 111 @prob_submissions << { :count => 0, :submission => nil }
108 112 end
109 113 end
110 114
111 115 @announcements = Announcement.find(:all,
112 116 :conditions => "published = 1",
113 117 :order => "created_at DESC")
@@ -54,51 +54,55
54 54
55 55 def update
56 56 @problem = Problem.find(params[:id])
57 57 @description = @problem.description
58 58 if @description == nil and params[:description][:body]!=''
59 59 @description = Description.new(params[:description])
60 60 if !@description.save
61 61 flash[:notice] = 'Error saving description'
62 62 render :action => 'edit' and return
63 63 end
64 64 @problem.description = @description
65 65 elsif @description!=nil
66 66 if !@description.update_attributes(params[:description])
67 67 flash[:notice] = 'Error saving description'
68 68 render :action => 'edit' and return
69 69 end
70 70 end
71 71 if @problem.update_attributes(params[:problem])
72 72 flash[:notice] = 'Problem was successfully updated.'
73 73 redirect_to :action => 'show', :id => @problem
74 74 else
75 75 render :action => 'edit'
76 76 end
77 77 end
78 78
79 79 def destroy
80 80 Problem.find(params[:id]).destroy
81 81 redirect_to :action => 'list'
82 82 end
83 83
84 84 def toggle_avail
85 85 problem = Problem.find(params[:id])
86 86 problem.available = !(problem.available)
87 87 problem.save
88 88 redirect_to :action => 'list'
89 89 end
90 90
91 91 def turn_all_off
92 92 Problem.find(:all,
93 93 :conditions => "available = 1").each do |problem|
94 94 problem.available = false
95 95 problem.save
96 96 end
97 97 redirect_to :action => 'list'
98 98 end
99 99
100 100 def stat
101 101 @problem = Problem.find(params[:id])
102 + if !@problem.available
103 + redirect_to :controller => 'main', :action => 'list'
104 + else
102 105 @submissions = Submission.find_all_last_by_problem(params[:id])
103 106 end
104 107 end
108 + end
You need to be logged in to leave comments. Login now