119 lines
5.5 KiB
Ruby
119 lines
5.5 KiB
Ruby
#
|
|
# Copyright (C) 2011 Instructure, Inc.
|
|
#
|
|
# This file is part of Canvas.
|
|
#
|
|
# Canvas is free software: you can redistribute it and/or modify it under
|
|
# the terms of the GNU Affero General Public License as published by the Free
|
|
# Software Foundation, version 3 of the License.
|
|
#
|
|
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
# details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License along
|
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
class RubricAssessmentsController < ApplicationController
|
|
before_filter :require_context
|
|
|
|
def index
|
|
@association = @context.rubric_associations.find(params[:rubric_association_id]) #Rubric.find(params[:rubric_id])
|
|
@assessments = @association.rubric_assessments
|
|
if authorized_action(@context, @current_user, :read)
|
|
@headers = false
|
|
render :action => "index"
|
|
end
|
|
end
|
|
|
|
def show
|
|
@association = @context.rubric_associations.find(params[:rubric_association_id]) #Rubric.find(params[:rubric_id])
|
|
@assessment = @association.rubric_assessments.find(params[:id]) rescue nil
|
|
@assessment_request = @association.assessment_requests.find_by_uuid(params[:id])
|
|
if @assessment_request && @association.purpose == "grading" && @association.association_type == 'Assignment'
|
|
redirect_to named_context_url(@context, :context_assignment_submission_url, @association.association_id, @assessment_request.user_id)
|
|
return
|
|
end
|
|
if @assessment_request || authorized_action(@context, @current_user, :read)
|
|
unless @assessment
|
|
raise "Assessment Request required" unless @assessment_request
|
|
@assessment = @assessment_request.rubric_assessment
|
|
@user = @assessment_request.asset.user rescue nil
|
|
@assessment ||= @association.assess(:assessor => (@current_user || @assessment_request.user), :user => @user, :artifact => @assessment_request.asset, :assessment => {:assessment_type => 'invited_assessment'})
|
|
session[:rubric_assessment_ids] = ((session[:rubric_assessment_ids] || []) + [@assessment.id]).uniq
|
|
@assessment_request.attributes = {:rubric_assessment => @assessment, :user => @assessment.assessor}
|
|
@assessment_request.complete
|
|
@assessing = true
|
|
end
|
|
@assessments = [@assessment]
|
|
if @assessment.artifact && @assessment.artifact.is_a?(Submission)
|
|
redirect_to named_context_url(@assessment.artifact.context, :context_assignment_submission_url, @assessment.artifact.assignment_id, @assessment.artifact.user_id)
|
|
else
|
|
@headers = false
|
|
render :action => "index"
|
|
end
|
|
end
|
|
end
|
|
|
|
def create
|
|
update
|
|
end
|
|
|
|
def invite
|
|
@association = @context.rubric_associations.find(params[:rubric_association_id])
|
|
@rubric = @association.rubric
|
|
assessor_email = params[:rubric_assessment][:assessor_email]
|
|
# If an email address is specified, this is an invitation for someone to assess
|
|
if authorized_action(@association, @current_user, :manage)
|
|
@assessment_requests = @association.invite_assessors(@current_user, assessor_email, @association.association.find_asset_for_assessment(@association, @current_user.id)[0])
|
|
@assessment_request = @assessment_requests.first
|
|
render :json => @assessment_request.to_json(:methods => :assessor_name)
|
|
end
|
|
end
|
|
|
|
def remind
|
|
@association = @context.rubric_associations.find(params[:rubric_association_id])
|
|
@rubric = @association.rubric
|
|
@request = @association.assessment_requests.find(params[:assessment_request_id])
|
|
if authorized_action(@association, @current_user, :manage)
|
|
@request.send_reminder!
|
|
render :json => @request.to_json
|
|
end
|
|
end
|
|
|
|
def update
|
|
@association = @context.rubric_associations.find(params[:rubric_association_id])
|
|
@assessment = @association.rubric_assessments.find(params[:id]) rescue nil
|
|
@association_object = @association.association
|
|
# Funky flow to avoid a double-render, re-work it if you like
|
|
@association.assessing_user_id = params[:rubric_assessment][:user_id] rescue nil
|
|
if @assessment && !authorized_action(@assessment, @current_user, :update)
|
|
return
|
|
elsif @assessment || authorized_action(@association, @current_user, :assess)
|
|
@asset, @user = @association_object.find_asset_for_assessment(@association, @assessment ? @assessment.user_id : params[:rubric_assessment][:user_id])
|
|
@assessment = @association.assess(:assessor => @current_user, :user => @user, :artifact => @asset, :assessment => params[:rubric_assessment])
|
|
@asset.reload
|
|
artifact_includes = @asset.is_a?(Submission) ? {
|
|
:artifact => Submission.json_serialization_full_parameters,
|
|
:rubric_association => {}
|
|
} : [:artifact, :rubric_association]
|
|
render :json => @assessment.to_json(:methods => [:ratings, :assessor_name, :related_group_submissions_and_assessments], :include => artifact_includes, :include_root => false)
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@association = @context.rubric_associations.find(params[:rubric_association_id])
|
|
@rubric = @association.rubric
|
|
@assessment = @rubric.rubric_assessments.find(params[:id])
|
|
if authorized_action(@assessment, @current_user, :delete)
|
|
if @assessment.destroy
|
|
render :json => @assessment.to_json
|
|
else
|
|
render :json => @assessment.errors.to_json, :status => :bad_request
|
|
end
|
|
end
|
|
end
|
|
end
|