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_path @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_path @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_path @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_path @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.where("page_type = 'project'").first if @first_page.show_course == 2 render_404 end end end