diff --git a/app/controllers/submissions_controller.rb b/app/controllers/submissions_controller.rb --- a/app/controllers/submissions_controller.rb +++ b/app/controllers/submissions_controller.rb @@ -1,27 +1,10 @@ class SubmissionsController < ApplicationController before_filter :authenticate - - before_filter(only: [:show]) { - #check if authenticated - return false unless authenticate - - #admin always has privileged - if @current_user.admin? - return true - end - - sub = Submission.find(params[:id]) - if sub.problem.available? - return true if GraderConfiguration["right.user_view_submission"] or sub.user == @current_user - end - - #default to NO - unauthorized_redirect - return false - } + 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 @@ -32,7 +15,7 @@ else @problem = Problem.find_by_id(params[:problem_id]) if (@problem == nil) or (not @problem.available) - redirect_to :action => 'list' + redirect_to main_list_path flash[:notice] = 'Error: submissions for that problem are not viewable.' return end @@ -50,63 +33,105 @@ SubmissionViewLog.create(user_id: session[:user_id],submission_id: @submission.id) unless user.admin? 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 + #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 - # POST /submissions - # POST /submissions.json - def create - @submission = Submission.new(params[:submission]) + 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| - 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 + format.js end end - # PUT /submissions/1 - # PUT /submissions/1.json - def update - @submission = Submission.find(params[:id]) +# # 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 - 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 +protected + def submission_authorization + #admin always has privileged + if @current_user.admin? + return true end - 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 - # 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 + #default to NO + unauthorized_redirect + return false end + end