diff --git a/app/controllers/submissions_controller.rb b/app/controllers/submissions_controller.rb new file mode 100644 --- /dev/null +++ b/app/controllers/submissions_controller.rb @@ -0,0 +1,137 @@ +class SubmissionsController < ApplicationController + before_filter :authenticate + before_filter :submission_authorization, only: [:show, :direct_edit_submission] + + # GET /submissions + # GET /submissions.json + # Show problem selection and user's submission of that problem + 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) + redirect_to main_list_path + flash[:notice] = 'Error: submissions for that problem are not viewable.' + return + end + @submissions = Submission.find_all_by_user_problem(@user.id, @problem.id) + 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? + end + + #on-site new submission on specific problem + def direct_edit_problem + @problem = Problem.find(params[:problem_id]) + @source = '' + render 'edit' + end + + # GET /submissions/1/edit + def edit + @submission = Submission.find(params[:id]) + @source = @submission.source.to_s + @problem = @submission.problem + @lang_id = @submission.language.id + end + + + def get_latest_submission_status + @problem = Problem.find(params[:pid]) + @submission = Submission.find_last_by_user_and_problem(params[:uid],params[:pid]) + puts User.find(params[:uid]).login + puts Problem.find(params[:pid]).name + puts 'nil' unless @submission + respond_to do |format| + format.js + end + end + +# # GET /submissions/new +# # GET /submissions/new.json +# def new +# @submission = Submission.new +# +# respond_to do |format| +# format.html # new.html.erb +# format.json { render json: @submission } +# end +# end +# +# +# # POST /submissions +# # POST /submissions.json +# def create +# @submission = Submission.new(params[:submission]) +# +# respond_to do |format| +# if @submission.save +# format.html { redirect_to @submission, notice: 'Submission was successfully created.' } +# format.json { render json: @submission, status: :created, location: @submission } +# else +# format.html { render action: "new" } +# format.json { render json: @submission.errors, status: :unprocessable_entity } +# end +# end +# end +# +# # PUT /submissions/1 +# # PUT /submissions/1.json +# def update +# @submission = Submission.find(params[:id]) +# +# respond_to do |format| +# if @submission.update_attributes(params[:submission]) +# format.html { redirect_to @submission, notice: 'Submission was successfully updated.' } +# format.json { head :no_content } +# else +# format.html { render action: "edit" } +# format.json { render json: @submission.errors, status: :unprocessable_entity } +# end +# end +# end +# +# # DELETE /submissions/1 +# # DELETE /submissions/1.json +# def destroy +# @submission = Submission.find(params[:id]) +# @submission.destroy +# +# respond_to do |format| +# format.html { redirect_to submissions_url } +# format.json { head :no_content } +# end +# end + +protected + def submission_authorization + #admin always has privileged + if @current_user.admin? + return true + end + + sub = Submission.find(params[:id]) + if sub.problem.available? + puts "sub = #{sub.user.id}, current = #{@current_user.id}" + return true if GraderConfiguration["right.user_view_submission"] or sub.user == @current_user + end + + #default to NO + unauthorized_redirect + return false + end + +end