366 lines
12 KiB
Ruby
366 lines
12 KiB
Ruby
class HomeworkAttachController < ApplicationController
|
||
layout "course_base"
|
||
include CoursesHelper
|
||
###############################
|
||
before_filter :can_show_course,except: []
|
||
#判断当前角色权限时需先找到当前操作的project
|
||
before_filter :find_course_by_bid_id, :only => [:new]
|
||
before_filter :find_course_by_hoemwork_id, :only => [:edit,:update,:destroy,:show,:add_homework_users,:destory_homework_users]
|
||
#判断当前角色是否有操作权限
|
||
#勿删 before_filter :authorize, :only => [:new,:edit,:update,:destroy]
|
||
|
||
def find_course_by_bid_id
|
||
@bid = Bid.find(params[:id])
|
||
@course = @bid.courses[0]
|
||
rescue ActiveRecord::RecordNotFound
|
||
render_404
|
||
end
|
||
|
||
def find_course_by_hoemwork_id
|
||
@homework = HomeworkAttach.find(params[:id])
|
||
@course = @homework.bid.courses[0]
|
||
end
|
||
|
||
#获取作业的成员
|
||
def get_homework_member homework
|
||
@hoemwork_users = users_for_homework(@homework)
|
||
@members = members_for_homework(@homework,@hoemwork_users,params[:q])
|
||
@members = paginateHelper @members,10
|
||
end
|
||
|
||
def index
|
||
@homeworks = HomeworkAttach.all
|
||
respond_to do |format|
|
||
format.html # index.html.erb
|
||
format.json { render json: @homeworks }
|
||
end
|
||
end
|
||
|
||
#作业添加成员(参与人员)
|
||
def add_homework_users
|
||
if User.current.admin? || User.current.member_of_course?(@homework.bid.courses.first)
|
||
#@homework = HomeworkAttach.find(params[:id])
|
||
if params[:membership]
|
||
if params[:membership][:user_ids]
|
||
attrs = params[:membership].dup
|
||
user_ids = attrs.delete(:user_ids)
|
||
user_ids.each do |user_id|
|
||
@homework.homework_users.build(:user_id => user_id)
|
||
end
|
||
end
|
||
end
|
||
@homework.save
|
||
get_homework_member @homework
|
||
respond_to do |format|
|
||
format.js
|
||
end
|
||
else
|
||
render_403 :message => :notice_not_authorized
|
||
end
|
||
end
|
||
|
||
#作业删除成员(参与人员)
|
||
def destory_homework_users
|
||
#@homework = HomeworkAttach.find(params[:id])
|
||
if User.current.admin? || User.current.member_of_course?(@homework.bid.courses.first)
|
||
homework_user = @homework.homework_users.where("user_id = #{params[:user_id]}").first
|
||
homework_user.destroy
|
||
get_homework_member @homework
|
||
respond_to do |format|
|
||
format.js
|
||
end
|
||
else
|
||
render_403 :message => :notice_not_authorized
|
||
end
|
||
end
|
||
|
||
def create
|
||
bid = Bid.find params[:bid_id]
|
||
if User.current.admin? || User.current.member_of_course?(bid.courses.first) # modify by nwb
|
||
if bid.homeworks.where("user_id = ?",User.current).count == 0
|
||
user_id = params[:user_id]
|
||
bid_id = params[:bid_id]
|
||
if params[:homework_attach]
|
||
if params[:homework_attach][:project_id]
|
||
project_id = params[:homework_attach][:project_id]
|
||
else
|
||
project_id = 0
|
||
end
|
||
else
|
||
project_id = 0
|
||
end
|
||
sta = 0
|
||
name = params[:new_form][:name]
|
||
description = params[:new_form][:description]
|
||
options = {
|
||
:user_id => user_id,
|
||
:state => sta,
|
||
:name => name,
|
||
:description => description,
|
||
:bid_id => bid_id,
|
||
:project_id => project_id
|
||
}
|
||
|
||
|
||
#@homework_list = @bid.homeworks
|
||
|
||
@homework = HomeworkAttach.new(options)
|
||
@homework.save_attachments(params[:attachments])
|
||
render_attachment_warning_if_needed(@homework)
|
||
|
||
if @homework.save
|
||
respond_to do |format|
|
||
format.html { redirect_to course_for_bid_url @homework.bid }
|
||
format.json { head :no_content }
|
||
end
|
||
else
|
||
render_403 :message => :notice_not_authorized
|
||
end
|
||
else
|
||
render_403 :message => :notice_has_homework
|
||
end
|
||
else
|
||
render_403 :message => :notice_not_authorized
|
||
end
|
||
end
|
||
|
||
def new
|
||
@bid = Bid.find(params[:id])
|
||
if User.current.admin? || User.current.member_of_course?(@bid.courses.first) #nwb
|
||
#该课程的学生的集合(新建不实现功能:添加成员)
|
||
#@members = @bid.courses.first.members.joins(:member_roles).where("member_roles.role_id IN (:role_id) and user_id <> #{User.current.id}", {:role_id => [5, 10]})
|
||
|
||
#@members = paginateHelper @members,10
|
||
#@all_user = []
|
||
#@bid.courses.first.members.each do |member|
|
||
# @all_user << member.user
|
||
#end
|
||
@homework = HomeworkAttach.new
|
||
#@homework_user = members_for_homework(@homework) + User.current
|
||
#@members = @all_user - @homework_user
|
||
respond_to do |format|
|
||
format.html # new.html.erb
|
||
format.json { render json: @homework }
|
||
end
|
||
else
|
||
render_403 :message => :notice_not_authorized
|
||
end
|
||
end
|
||
|
||
#获取作业成员的集合
|
||
def get_homework_member_list
|
||
@homework = HomeworkAttach.find(params[:bid_id])
|
||
course = @homework.bid.courses.first
|
||
if User.current.admin? || User.current.member_of_course?(course)
|
||
get_homework_member @homework
|
||
else
|
||
raise "error"
|
||
end
|
||
respond_to do |format|
|
||
format.js
|
||
end
|
||
end
|
||
|
||
#获取指定作业的所有成员
|
||
def users_for_homework homework
|
||
homework.nil? ? [] : (homework.users + [homework.user])
|
||
end
|
||
|
||
#获取可选成员列表
|
||
#homework:作业
|
||
#users:该作业所有成员
|
||
#q:模糊匹配的用户的昵称
|
||
def members_for_homework homework,users,q
|
||
#homework.bid.courses.first.members.joins(:member_roles).where("member_roles.role_id IN (:role_id) and user_id not in (:users)", {:role_id => [5, 10],:users => users}).joins(:user).where("users.login like '%#{q}%'")
|
||
unpartin_users = homework.bid.courses.first.members.where("user_id not in (:users)", {:users => users}).joins(:user).where("users.login like '%#{q}%'")
|
||
canpartin_users = []
|
||
unpartin_users.each do |m|
|
||
if m.user.allowed_to?(:paret_in_homework,homework.bid.courses.first)
|
||
canpartin_users << m
|
||
end
|
||
end
|
||
canpartin_users
|
||
end
|
||
|
||
def edit
|
||
#@homework = HomeworkAttach.find(params[:id])
|
||
if User.current.admin? || User.current.member_of_course?(@homework.bid.courses.first)
|
||
#@members = @homework.bid.courses.first.members.joins(:member_roles).where("member_roles.role_id IN (:role_id)", {:role_id => [5, 10]})
|
||
get_homework_member @homework
|
||
else
|
||
render_403 :message => :notice_not_authorized
|
||
end
|
||
end
|
||
|
||
def update
|
||
#@homework = HomeworkAttach.find(params[:id])
|
||
course = @homework.bid.courses.first
|
||
if User.current.admin? || User.current.member_of_course?(course)
|
||
name = params[:homework_name]
|
||
description = params[:homework_description]
|
||
if params[:homework_attach]
|
||
if params[:homework_attach][:project_id]
|
||
project_id = params[:homework_attach][:project_id]
|
||
else
|
||
project_id = 0
|
||
end
|
||
else
|
||
project_id = 0
|
||
end
|
||
@homework.name = name
|
||
@homework.description = description
|
||
@homework.project_id = project_id
|
||
if params[:attachments]
|
||
@homework.save_attachments(params[:attachments])
|
||
end
|
||
if @homework.save
|
||
respond_to do |format|
|
||
format.html { redirect_to course_for_bid_url @homework.bid }
|
||
format.json { head :no_content }
|
||
end
|
||
else
|
||
end
|
||
else
|
||
render_403 :message => :notice_not_authorized
|
||
end
|
||
end
|
||
|
||
def destroy
|
||
#@homework = HomeworkAttach.find(params[:id])
|
||
if User.current.admin? || User.current == @homework.user
|
||
if @homework.destroy
|
||
respond_to do |format|
|
||
format.html { redirect_to course_for_bid_url @homework.bid }
|
||
format.json { head :no_content }
|
||
end
|
||
else
|
||
end
|
||
else
|
||
render_403 :message => :notice_not_authorized
|
||
end
|
||
end
|
||
|
||
#显示作业信息
|
||
def show
|
||
#@homework = HomeworkAttach.find(params[:id])
|
||
if User.current.admin? || User.current.member_of_course?(@homework.bid.courses.first)
|
||
# 打分统计
|
||
stars_reates = @homework.
|
||
rates(:quality)
|
||
stars_reates_count = stars_reates.count == 0 ? 1 : stars_reates.count
|
||
stars_status = stars_reates.select("stars, count(*) as scount").
|
||
group("stars")
|
||
@stars_status_map = Hash.new(0.0)
|
||
stars_status.each do |star_status|
|
||
percent = (star_status.scount * 1.0/ stars_reates_count) * 100.to_f
|
||
percent_m = format("%.2f", percent)
|
||
@stars_status_map["star#{star_status.stars.to_i}".to_sym] =
|
||
percent_m.to_s + "%"
|
||
end
|
||
#是否已经进行过评价
|
||
@has_evaluation = stars_reates.where("rater_id = ?",User.current).count > 0
|
||
#是否开启互评功能
|
||
@is_evaluation = @homework.bid.is_evaluation == 1 || @homework.bid.is_evaluation == nil
|
||
@limit = 10
|
||
@jours = @homework.journals_for_messages.where("is_comprehensive_evaluation is null").order("created_on DESC")
|
||
@feedback_count = @jours.count
|
||
@feedback_pages = Paginator.new @feedback_count, @limit, params['page']
|
||
@offset ||= @feedback_pages.offset
|
||
@jour = @jours[@offset, @limit]
|
||
@comprehensive_evaluation = @homework.journals_for_messages.where("is_comprehensive_evaluation is not null").order("created_on DESC")
|
||
|
||
@totle_score = score_for_homework @homework
|
||
@teaher_score = teacher_score_for_homework @homework
|
||
else
|
||
render_403 :message => :notice_not_authorized
|
||
end
|
||
end
|
||
|
||
#删除留言
|
||
def destroy_jour
|
||
@journal_destroyed = JournalsForMessage.delete_message(params[:object_id])
|
||
#@homework = HomeworkAttach.find(params[:id])
|
||
#@jours = @homework.journals_for_messages.order("created_on DESC")
|
||
#@limit = 10
|
||
#@feedback_count = @jours.count
|
||
#@feedback_pages = Paginator.new @feedback_count, @limit, params['page']
|
||
#@offset ||= @feedback_pages.offset
|
||
#@jour = @jours[@offset, @limit]
|
||
respond_to do |format|
|
||
format.js
|
||
end
|
||
end
|
||
|
||
#添加留言
|
||
def addjours
|
||
@homework = HomeworkAttach.find(params[:jour_id])
|
||
@add_jour = @homework.addjours User.current.id, params[:new_form][:user_message],0,params[:is_comprehensive_evaluation]
|
||
@jours = @homework.journals_for_messages.where("is_comprehensive_evaluation is null").order("created_on DESC")
|
||
@limit = 10
|
||
@feedback_count = @jours.count
|
||
@feedback_pages = Paginator.new @feedback_count, @limit, params['page']
|
||
@offset ||= @feedback_pages.offset
|
||
@jour = @jours[@offset, @limit]
|
||
@comprehensive_evaluation = @homework.journals_for_messages.where("is_comprehensive_evaluation is not null").order("created_on DESC")
|
||
|
||
@totle_score = score_for_homework @homework
|
||
@teaher_score = teacher_score_for_homework @homework
|
||
respond_to do |format|
|
||
format.js
|
||
end
|
||
end
|
||
|
||
#教师综评
|
||
def comprehensive_evaluation_jour
|
||
@homework = HomeworkAttach.find(params[:jour_id])
|
||
@add_jour = @homework.addjours User.current.id, params[:new_form][:user_message],0,params[:is_comprehensive_evaluation]
|
||
respond_to do |format|
|
||
format.html { redirect_to homework_attach_url @homework }
|
||
format.json { head :no_content }
|
||
end
|
||
end
|
||
|
||
#获取指定作业的平均得分
|
||
def score
|
||
#stars_reates = @homework.rates(:quality)
|
||
#percent = 0
|
||
#stars_reates.each do |star_reates|
|
||
# percent = percent + star_reates.stars
|
||
#end
|
||
#stars_reates_count = stars_reates.count == 0 ? 1 : stars_reates.count
|
||
#result = percent * 1.0 / stars_reates_count
|
||
#result
|
||
end
|
||
|
||
#添加回复
|
||
def add_jour_reply
|
||
parent_id = params[:reference_id]
|
||
author_id = User.current.id
|
||
reply_user_id = params[:reference_user_id]
|
||
reply_id = params[:reference_message_id] # 暂时不实现
|
||
content = params[:user_notes]
|
||
options = {:user_id => author_id,
|
||
:m_parent_id => parent_id,
|
||
:m_reply_id => reply_id,
|
||
:reply_id => reply_user_id,
|
||
:notes => content,
|
||
:is_readed => false}
|
||
@jfm = JournalsForMessage.new(options)
|
||
@jfm.save
|
||
respond_to do |format|
|
||
format.js{
|
||
@save_succ = true if @jfm.errors.empty?
|
||
}
|
||
end
|
||
end
|
||
|
||
#验证是否显示课程
|
||
def can_show_course
|
||
@first_page = FirstPage.find_by_page_type('project')
|
||
if @first_page.show_course == 2
|
||
render_404
|
||
end
|
||
end
|
||
end
|
||
|