Show More
Commit Description:
fix error message when submission to closed problem
Commit Description:
fix error message when submission to closed problem
References:
File last commit:
Show/Diff file:
Action:
app/controllers/submissions_controller.rb
| 112 lines
| 2.9 KiB
| text/x-ruby
| RubyLexer
|
r596 | class SubmissionsController < ApplicationController | |||
r756 | before_action :check_valid_login | |||
r683 | before_action :submission_authorization, only: [:show, :download, :edit] | |||
r645 | before_action :admin_authorization, only: [:rejudge] | |||
r596 | ||||
# GET /submissions | ||||
# GET /submissions.json | ||||
r597 | # Show problem selection and user's submission of that problem | |||
r596 | def index | |||
@user = @current_user | ||||
@problems = @user.available_problems | ||||
if params[:problem_id]==nil | ||||
@problem = nil | ||||
@submissions = nil | ||||
else | ||||
@problem = Problem.find_by_id(params[:problem_id]) | ||||
if (@problem == nil) or (not @problem.available) | ||||
r797 | redirect_to list_main_path | |||
flash[:error] = 'Authorization error: You have no right to view submissions for this problem' | ||||
r596 | return | |||
end | ||||
r644 | @submissions = Submission.find_all_by_user_problem(@user.id, @problem.id).order(id: :desc) | |||
r596 | end | |||
end | ||||
# GET /submissions/1 | ||||
# GET /submissions/1.json | ||||
def show | ||||
@submission = Submission.find(params[:id]) | ||||
#log the viewing | ||||
user = User.find(session[:user_id]) | ||||
SubmissionViewLog.create(user_id: session[:user_id],submission_id: @submission.id) unless user.admin? | ||||
r645 | ||||
@task = @submission.task | ||||
r596 | end | |||
r621 | def download | |||
@submission = Submission.find(params[:id]) | ||||
send_data(@submission.source, {:filename => @submission.download_filename, :type => 'text/plain'}) | ||||
end | ||||
def compiler_msg | ||||
@submission = Submission.find(params[:id]) | ||||
respond_to do |format| | ||||
format.js | ||||
end | ||||
end | ||||
r597 | #on-site new submission on specific problem | |||
def direct_edit_problem | ||||
@problem = Problem.find(params[:problem_id]) | ||||
r683 | unless @current_user.can_view_problem?(@problem) | |||
unauthorized_redirect | ||||
return | ||||
end | ||||
r597 | @source = '' | |||
r683 | if (params[:view_latest]) | |||
sub = Submission.find_last_by_user_and_problem(@current_user.id,@problem.id) | ||||
r682 | @source = @submission.source.to_s if @submission and @submission.source | |||
end | ||||
r597 | render 'edit' | |||
r596 | end | |||
# GET /submissions/1/edit | ||||
def edit | ||||
@submission = Submission.find(params[:id]) | ||||
r597 | @source = @submission.source.to_s | |||
@problem = @submission.problem | ||||
@lang_id = @submission.language.id | ||||
r596 | end | |||
r597 | def get_latest_submission_status | |||
@problem = Problem.find(params[:pid]) | ||||
@submission = Submission.find_last_by_user_and_problem(params[:uid],params[:pid]) | ||||
r596 | respond_to do |format| | |||
r597 | format.js | |||
r596 | end | |||
end | ||||
r645 | # GET /submissions/:id/rejudge | |||
def rejudge | ||||
@submission = Submission.find(params[:id]) | ||||
@task = @submission.task | ||||
@task.status_inqueue! if @task | ||||
respond_to do |format| | ||||
format.js | ||||
end | ||||
end | ||||
r597 | protected | |||
r621 | ||||
r597 | def submission_authorization | |||
#admin always has privileged | ||||
if @current_user.admin? | ||||
return true | ||||
r596 | end | |||
r597 | ||||
sub = Submission.find(params[:id]) | ||||
r683 | if @current_user.available_problems.include? sub.problem | |||
r597 | return true if GraderConfiguration["right.user_view_submission"] or sub.user == @current_user | |||
end | ||||
r596 | ||||
r597 | #default to NO | |||
unauthorized_redirect | ||||
return false | ||||
r596 | end | |||
r617 | ||||
r597 | ||||
r596 | end | |||