diff --git a/app/controllers/main_controller.rb b/app/controllers/main_controller.rb new file mode 100644 --- /dev/null +++ b/app/controllers/main_controller.rb @@ -0,0 +1,65 @@ +class MainController < ApplicationController + + before_filter :authenticate, :except => [:index, :login] + + verify :method => :post, :only => [:submit], + :redirect_to => { :action => :index } + + def index + end + + def login + reset_session + 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 + 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 + flash[:notice] = 'Error saving your submission' + elsif Task.create(:submission_id => submission.id) == false + flash[:notice] = 'Error adding your submission to task queue' + end + end + redirect_to :action => 'list' + end + + def get_source + submission = Submission.find(params[:id]) + if submission.user_id == session[:user_id] + fname = submission.problem.name + '.' + submission.language.ext + send_data(submission.source, + {:filename => fname, + :type => 'text/plain'}) + else + flash[:notice] = 'Error viewing source' + end + end +end