socialforge/app/controllers/student_work_controller.rb

178 lines
5.5 KiB
Ruby

class StudentWorkController < ApplicationController
layout "base_courses"
include StudentWorkHelper
before_filter :find_homework, :only => [:new, :index, :create]
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score]
before_filter :member_of_course, :only => [:index, :new, :create, :show, :add_score]
before_filter :author_of_work, :only => [:edit, :update, :destroy]
def index
@stundet_works = @homework.student_works.order("final_score desc")
respond_to do |format|
format.html
end
end
def new
student_work = @homework.student_works.where("user_id = ?",User.current.id).first
if student_work.nil?
@stundet_work = StudentWork.new
respond_to do |format|
format.html
end
else
render_403
end
end
def create
if params[:student_work]
stundet_work = StudentWork.new
stundet_work.name = params[:student_work][:name]
stundet_work.description = params[:student_work][:description]
stundet_work.project_id = params[:student_work][:project_id]
stundet_work.homework_common_id = @homework.id
stundet_work.user_id = User.current.id
stundet_work.save_attachments(params[:attachments])
render_attachment_warning_if_needed(stundet_work)
if stundet_work.save
respond_to do |format|
format.html {
flash[:notice] = l(:notice_successful_create)
redirect_to student_work_index_url(:homework => @homework.id)
}
end
return
end
end
respond_to do |format|
format.html {
flash[:notice] = l(:notice_failed_create)
redirect_to new_student_work_url(:homework => @homework.id)
}
end
end
def edit
end
def update
end
def show
@score = student_work_score @work,User.current
respond_to do |format|
format.js
end
end
def destroy
end
#添加评分,已评分则为修改评分
def add_score
@score = student_work_score @work,User.current
if @score
@score.comment = params[:new_form][:user_message] if params[:new_form] && params[:new_form][:user_message] && params[:new_form][:user_message] != ""
@score.score = params[:score] if params[:score]
@is_new = false
else
@score = StudentWorksScore.new
@score.score = params[:score] if params[:score]
@score.comment = params[:new_form][:user_message] if params[:new_form] && params[:new_form][:user_message] && params[:new_form][:user_message] != ""
@score.user_id = User.current.id
@score.student_work_id = @work.id
role = User.current.members.where("course_id = ?",@course.id).first.roles.first.name
@score.reviewer_role = get_role_by_name(role)
@is_new = true
end
@score.save_attachments(params[:attachments])
render_attachment_warning_if_needed(@score)
if @score.save
case @score.reviewer_role
when 1 #教师评分:最后一个教师评分为最终评分
@work.teacher_score = @score.score
@work.final_score = @score.score
when 2 #教辅评分 教辅评分显示平均分
@work.teaching_asistant_score = @work.student_works_scores.where(:reviewer_role => 2).average(:score).try(:round, 2).to_f
if @work.teacher_score.nil?
if @work.student_score.nil?
@work.final_score = @work.teaching_asistant_score
else
@work.final_score = format("%.2f",@work.teaching_asistant_score * @homework.homework_detail_manual.ta_proportion + @work.student_score * (1 - @homework.homework_detail_manual.ta_proportion))
end
end
when 3 #学生评分 学生评分显示平均分
@work.student_score = @work.student_works_scores.where(:reviewer_role => 3).average(:score).try(:round, 2).to_f
if @work.teacher_score.nil?
if @work.teaching_asistant_score.nil?
@work.final_score = @work.student_score
else
@work.final_score = format("%.2f",@work.teaching_asistant_score * @homework.homework_detail_manual.ta_proportion + @work.student_score * (1 - @homework.homework_detail_manual.ta_proportion))
end
end
end
if @work.save
respond_to do |format|
format.js
end
end
end
end
#添加评分的回复
def add_score_reply
@score = StudentWorksScore.find params[:score_id]
@jour = @score.journals_for_messages.new(:user_id => User.current.id,:notes =>params[:message], :reply_id => 0)
if @jour.save
respond_to do |format|
format.js
end
end
end
#删除评分的回复
def destroy_score_reply
@jour = JournalsForMessage.find params[:jour_id]
if @jour.destroy
respond_to do |format|
format.js
end
end
end
private
#获取作业
def find_homework
@homework = HomeworkCommon.find params[:homework]
@course = @homework.course
rescue
render_404
end
#获取作品
def find_work
@work = StudentWork.find params[:id]
@homework = @work.homework_common
@course = @homework.course
rescue
render_404
end
#是不是当前课程的成员
#当前课程成员才可以看到作品列表
def member_of_course
render_403 unless User.current.member_of_course? @course
end
#判断是不是当前作品的提交者
#提交者可以编辑作品
def author_of_work
render_403 unless User.current.id == @work.user_id && (@homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 1 )
end
end