diff --git a/app/controllers/main_controller.rb b/app/controllers/main_controller.rb --- a/app/controllers/main_controller.rb +++ b/app/controllers/main_controller.rb @@ -16,42 +16,26 @@ end def list - @problems = Problem.find_available_problems - @prob_submissions = Array.new - @user = User.find(session[:user_id]) - @problems.each do |p| - c, sub = Submission.find_by_user_and_problem(@user.id,p.id) - @prob_submissions << [c,sub] - end + prepare_list_information end def submit - submission = Submission.new(params[:submission]) - submission.user_id = session[:user_id] - submission.language_id = 0 - source = params['file'].read - if source.length > 100_000 - flash[:notice] = 'Error: file too long' - elsif (lang = Submission.find_language_in_source(source))==nil - flash[:notice] = 'Error: cannot determine language used' - elsif ((submission.problem_id==-1) and - !(problem=Submission.find_problem_in_source(source))) - flash[:notice] = 'Error: cannot determine problem submitted' - elsif ((submission.problem_id==-1) and - (problem.available == false)) - flash[:notice] = 'Error: problem is not available' - else - submission.problem_id = problem.id if submission.problem_id == -1 - submission.source = source - submission.language_id = lang.id - submission.submitted_at = Time.new - if submission.save == false + @submission = Submission.new(params[:submission]) + @submission.user_id = session[:user_id] + @submission.language_id = 0 + @submission.source = params['file'].read if params['file']!='' + @submission.submitted_at = Time.new + if @submission.valid? + if @submission.save == false flash[:notice] = 'Error saving your submission' - elsif Task.create(:submission_id => submission.id) == false + elsif Task.create(:submission_id => @submission.id, + :status => Task::STATUS_INQUEUE) == false flash[:notice] = 'Error adding your submission to task queue' end end - redirect_to :action => 'list' + + prepare_list_information + render :action => 'list' end def get_source @@ -65,4 +49,17 @@ flash[:notice] = 'Error viewing source' end end + + protected + def prepare_list_information + @problems = Problem.find_available_problems + @prob_submissions = Array.new + @user = User.find(session[:user_id]) + @problems.each do |p| + c, sub = Submission.find_by_user_and_problem(@user.id,p.id) + @prob_submissions << [c,sub] + end + end + end +