Description:
fixed login error message recurring problem
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r229:c28a214e4637 - - 1 file changed: 1 inserted, 1 deleted

@@ -1,216 +1,216
1 class MainController < ApplicationController
1 class MainController < ApplicationController
2
2
3 before_filter :authenticate, :except => [:index, :login]
3 before_filter :authenticate, :except => [:index, :login]
4 before_filter :check_viewability, :except => [:index, :login]
4 before_filter :check_viewability, :except => [:index, :login]
5
5
6 # COMMENTED OUT: filter in each action instead
6 # COMMENTED OUT: filter in each action instead
7 # before_filter :verify_time_limit, :only => [:submit]
7 # before_filter :verify_time_limit, :only => [:submit]
8
8
9 verify :method => :post, :only => [:submit],
9 verify :method => :post, :only => [:submit],
10 :redirect_to => { :action => :index }
10 :redirect_to => { :action => :index }
11
11
12 # COMMENT OUT: only need when having high load
12 # COMMENT OUT: only need when having high load
13 # caches_action :index, :login
13 # caches_action :index, :login
14
14
15 # NOTE: This method is not actually needed, 'config/routes.rb' has
15 # NOTE: This method is not actually needed, 'config/routes.rb' has
16 # assigned action login as a default action.
16 # assigned action login as a default action.
17 def index
17 def index
18 redirect_to :action => 'login'
18 redirect_to :action => 'login'
19 end
19 end
20
20
21 def login
21 def login
22 saved_notice = flash[:notice]
22 saved_notice = flash[:notice]
23 reset_session
23 reset_session
24 - flash[:notice] = saved_notice
24 + flash.now[:notice] = saved_notice
25
25
26 # EXPERIMENT:
26 # EXPERIMENT:
27 # Hide login if in single user mode and the url does not
27 # Hide login if in single user mode and the url does not
28 # explicitly specify /login
28 # explicitly specify /login
29 #
29 #
30 # logger.info "PATH: #{request.path}"
30 # logger.info "PATH: #{request.path}"
31 # if Configuration['system.single_user_mode'] and
31 # if Configuration['system.single_user_mode'] and
32 # request.path!='/main/login'
32 # request.path!='/main/login'
33 # @hidelogin = true
33 # @hidelogin = true
34 # end
34 # end
35
35
36 @announcements = Announcement.find_for_frontpage
36 @announcements = Announcement.find_for_frontpage
37 render :action => 'login', :layout => 'empty'
37 render :action => 'login', :layout => 'empty'
38 end
38 end
39
39
40 def list
40 def list
41 prepare_list_information
41 prepare_list_information
42 end
42 end
43
43
44 def help
44 def help
45 @user = User.find(session[:user_id])
45 @user = User.find(session[:user_id])
46 end
46 end
47
47
48 def submit
48 def submit
49 user = User.find(session[:user_id])
49 user = User.find(session[:user_id])
50
50
51 @submission = Submission.new(params[:submission])
51 @submission = Submission.new(params[:submission])
52 @submission.user = user
52 @submission.user = user
53 @submission.language_id = 0
53 @submission.language_id = 0
54 if (params['file']) and (params['file']!='')
54 if (params['file']) and (params['file']!='')
55 @submission.source = params['file'].read
55 @submission.source = params['file'].read
56 @submission.source_filename = params['file'].original_filename
56 @submission.source_filename = params['file'].original_filename
57 end
57 end
58 @submission.submitted_at = Time.new.gmtime
58 @submission.submitted_at = Time.new.gmtime
59
59
60 if Configuration.time_limit_mode? and user.contest_finished?
60 if Configuration.time_limit_mode? and user.contest_finished?
61 @submission.errors.add_to_base "The contest is over."
61 @submission.errors.add_to_base "The contest is over."
62 prepare_list_information
62 prepare_list_information
63 render :action => 'list' and return
63 render :action => 'list' and return
64 end
64 end
65
65
66 if @submission.valid?
66 if @submission.valid?
67 if @submission.save == false
67 if @submission.save == false
68 flash[:notice] = 'Error saving your submission'
68 flash[:notice] = 'Error saving your submission'
69 elsif Task.create(:submission_id => @submission.id,
69 elsif Task.create(:submission_id => @submission.id,
70 :status => Task::STATUS_INQUEUE) == false
70 :status => Task::STATUS_INQUEUE) == false
71 flash[:notice] = 'Error adding your submission to task queue'
71 flash[:notice] = 'Error adding your submission to task queue'
72 end
72 end
73 else
73 else
74 prepare_list_information
74 prepare_list_information
75 render :action => 'list' and return
75 render :action => 'list' and return
76 end
76 end
77 redirect_to :action => 'list'
77 redirect_to :action => 'list'
78 end
78 end
79
79
80 def source
80 def source
81 submission = Submission.find(params[:id])
81 submission = Submission.find(params[:id])
82 if submission.user_id == session[:user_id]
82 if submission.user_id == session[:user_id]
83 send_data(submission.source,
83 send_data(submission.source,
84 {:filename => submission.download_filename,
84 {:filename => submission.download_filename,
85 :type => 'text/plain'})
85 :type => 'text/plain'})
86 else
86 else
87 flash[:notice] = 'Error viewing source'
87 flash[:notice] = 'Error viewing source'
88 redirect_to :action => 'list'
88 redirect_to :action => 'list'
89 end
89 end
90 end
90 end
91
91
92 def compiler_msg
92 def compiler_msg
93 @submission = Submission.find(params[:id])
93 @submission = Submission.find(params[:id])
94 if @submission.user_id == session[:user_id]
94 if @submission.user_id == session[:user_id]
95 render :action => 'compiler_msg', :layout => 'empty'
95 render :action => 'compiler_msg', :layout => 'empty'
96 else
96 else
97 flash[:notice] = 'Error viewing source'
97 flash[:notice] = 'Error viewing source'
98 redirect_to :action => 'list'
98 redirect_to :action => 'list'
99 end
99 end
100 end
100 end
101
101
102 def submission
102 def submission
103 @user = User.find(session[:user_id])
103 @user = User.find(session[:user_id])
104 @problems = Problem.find_available_problems
104 @problems = Problem.find_available_problems
105 if params[:id]==nil
105 if params[:id]==nil
106 @problem = nil
106 @problem = nil
107 @submissions = nil
107 @submissions = nil
108 else
108 else
109 @problem = Problem.find_by_name(params[:id])
109 @problem = Problem.find_by_name(params[:id])
110 if not @problem.available
110 if not @problem.available
111 redirect_to :action => 'list'
111 redirect_to :action => 'list'
112 flash[:notice] = 'Error: submissions for that problem are not viewable.'
112 flash[:notice] = 'Error: submissions for that problem are not viewable.'
113 return
113 return
114 end
114 end
115 @submissions = Submission.find_all_by_user_problem(@user.id, @problem.id)
115 @submissions = Submission.find_all_by_user_problem(@user.id, @problem.id)
116 end
116 end
117 end
117 end
118
118
119 def result
119 def result
120 if !Configuration.show_grading_result
120 if !Configuration.show_grading_result
121 redirect_to :action => 'list' and return
121 redirect_to :action => 'list' and return
122 end
122 end
123 @user = User.find(session[:user_id])
123 @user = User.find(session[:user_id])
124 @submission = Submission.find(params[:id])
124 @submission = Submission.find(params[:id])
125 if @submission.user!=@user
125 if @submission.user!=@user
126 flash[:notice] = 'You are not allowed to view result of other users.'
126 flash[:notice] = 'You are not allowed to view result of other users.'
127 redirect_to :action => 'list' and return
127 redirect_to :action => 'list' and return
128 end
128 end
129 prepare_grading_result(@submission)
129 prepare_grading_result(@submission)
130 end
130 end
131
131
132 def load_output
132 def load_output
133 if !Configuration.show_grading_result or params[:num]==nil
133 if !Configuration.show_grading_result or params[:num]==nil
134 redirect_to :action => 'list' and return
134 redirect_to :action => 'list' and return
135 end
135 end
136 @user = User.find(session[:user_id])
136 @user = User.find(session[:user_id])
137 @submission = Submission.find(params[:id])
137 @submission = Submission.find(params[:id])
138 if @submission.user!=@user
138 if @submission.user!=@user
139 flash[:notice] = 'You are not allowed to view result of other users.'
139 flash[:notice] = 'You are not allowed to view result of other users.'
140 redirect_to :action => 'list' and return
140 redirect_to :action => 'list' and return
141 end
141 end
142 case_num = params[:num].to_i
142 case_num = params[:num].to_i
143 out_filename = output_filename(@user.login,
143 out_filename = output_filename(@user.login,
144 @submission.problem.name,
144 @submission.problem.name,
145 @submission.id,
145 @submission.id,
146 case_num)
146 case_num)
147 if !FileTest.exists?(out_filename)
147 if !FileTest.exists?(out_filename)
148 flash[:notice] = 'Output not found.'
148 flash[:notice] = 'Output not found.'
149 redirect_to :action => 'list' and return
149 redirect_to :action => 'list' and return
150 end
150 end
151
151
152 response.headers['Content-Type'] = "application/force-download"
152 response.headers['Content-Type'] = "application/force-download"
153 response.headers['Content-Disposition'] = "attachment; filename=\"output-#{case_num}.txt\""
153 response.headers['Content-Disposition'] = "attachment; filename=\"output-#{case_num}.txt\""
154 response.headers["X-Sendfile"] = out_filename
154 response.headers["X-Sendfile"] = out_filename
155 response.headers['Content-length'] = File.size(out_filename)
155 response.headers['Content-length'] = File.size(out_filename)
156 render :nothing => true
156 render :nothing => true
157 end
157 end
158
158
159 def error
159 def error
160 @user = User.find(session[:user_id])
160 @user = User.find(session[:user_id])
161 end
161 end
162
162
163 # announcement refreshing and hiding methods
163 # announcement refreshing and hiding methods
164
164
165 def announcements
165 def announcements
166 if params.has_key? 'recent'
166 if params.has_key? 'recent'
167 prepare_announcements(params[:recent])
167 prepare_announcements(params[:recent])
168 else
168 else
169 prepare_announcements
169 prepare_announcements
170 end
170 end
171 render(:partial => 'announcement',
171 render(:partial => 'announcement',
172 :collection => @announcements,
172 :collection => @announcements,
173 :locals => {:announcement_effect => true})
173 :locals => {:announcement_effect => true})
174 end
174 end
175
175
176 protected
176 protected
177
177
178 def prepare_announcements(recent=nil)
178 def prepare_announcements(recent=nil)
179 if Configuration.show_tasks_to?(@user)
179 if Configuration.show_tasks_to?(@user)
180 @announcements = Announcement.find_published(true)
180 @announcements = Announcement.find_published(true)
181 else
181 else
182 @announcements = Announcement.find_published
182 @announcements = Announcement.find_published
183 end
183 end
184 if recent!=nil
184 if recent!=nil
185 recent_id = recent.to_i
185 recent_id = recent.to_i
186 @announcements = @announcements.find_all { |a| a.id > recent_id }
186 @announcements = @announcements.find_all { |a| a.id > recent_id }
187 end
187 end
188 end
188 end
189
189
190 def prepare_list_information
190 def prepare_list_information
191 @problems = Problem.find_available_problems
191 @problems = Problem.find_available_problems
192 @prob_submissions = Array.new
192 @prob_submissions = Array.new
193 @user = User.find(session[:user_id])
193 @user = User.find(session[:user_id])
194 @problems.each do |p|
194 @problems.each do |p|
195 sub = Submission.find_last_by_user_and_problem(@user.id,p.id)
195 sub = Submission.find_last_by_user_and_problem(@user.id,p.id)
196 if sub!=nil
196 if sub!=nil
197 @prob_submissions << { :count => sub.number, :submission => sub }
197 @prob_submissions << { :count => sub.number, :submission => sub }
198 else
198 else
199 @prob_submissions << { :count => 0, :submission => nil }
199 @prob_submissions << { :count => 0, :submission => nil }
200 end
200 end
201 end
201 end
202 prepare_announcements
202 prepare_announcements
203 end
203 end
204
204
205 def check_viewability
205 def check_viewability
206 @user = User.find(session[:user_id])
206 @user = User.find(session[:user_id])
207 if (!Configuration.show_tasks_to?(@user)) and
207 if (!Configuration.show_tasks_to?(@user)) and
208 ((action_name=='submission') or (action_name=='submit'))
208 ((action_name=='submission') or (action_name=='submit'))
209 redirect_to :action => 'list' and return
209 redirect_to :action => 'list' and return
210 end
210 end
211 end
211 end
212
212
213 def prepare_grading_result(submission)
213 def prepare_grading_result(submission)
214 if Configuration.task_grading_info.has_key? submission.problem.name
214 if Configuration.task_grading_info.has_key? submission.problem.name
215 grading_info = Configuration.task_grading_info[submission.problem.name]
215 grading_info = Configuration.task_grading_info[submission.problem.name]
216 else
216 else
You need to be logged in to leave comments. Login now