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,112 @@ +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 + } + + # GET /submissions + # GET /submissions.json + 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 :action => 'list' + 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 + + # 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 + + # GET /submissions/1/edit + def edit + @submission = Submission.find(params[:id]) + 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 +end