#encoding=utf-8 class ContestMembersController < ApplicationController helper :users helper :contest_members helper :contests before_filter :find_contest_member, :only => [:update, :destroy] def create @contest = Contest.find(params[:contest]) if params[:membership] && @contest @create_member_error_messages = "角色不能留空" unless params[:membership][:role_ids] @create_member_error_messages = "用户不能留空" unless params[:membership][:user_ids] members = [] if params[:membership][:user_ids] && params[:membership][:role_ids] attrs = params[:membership].dup user_ids = attrs.delete(:user_ids) role_ids = params[:membership][:role_ids] user_ids.each do |user_id| member = ContestMember.new(:user_id => user_id) members << member contest_member_roles = member.contest_member_roles if role_ids.include?('14') && role_ids.include?('13') contest_member_roles << ContestMemberRole.new(:role_id => 13) contest_member_roles << ContestMemberRole.new(:role_id => 14, :is_current => 0) else contest_member_roles << ContestMemberRole.new(:role_id => role_ids[0].to_i) end if role_ids.include?('15') ContestantForContest.create(:student_id => user_id, :contest_id => @contest.id) end #给新成员和老师发送加入课程的消息,发送者id放在CourseMessage的course_message_id字段中 #course_message_type设置为JoinCourse #status = 0 表示给学生发,status = 1表示给老师发 course_join = ContestMessage.new(:user_id =>user_id, :contest_message_id=>User.current.id,:contest_id => @contest.id,:contest_message_type=>"JoinContest", :content => role_ids, :viewed => false, :status => 0) course_join.save #ContestMessage.create(:user_id => User.current.id, :contest_message_id => user_id, :contest_message_id => @contest.id, :contest_message_type => "JoinContest",:content => role_ids, :viewed => false, :status => 1) end end @contest.contest_members << members members = @contest.member_principals.includes(:roles, :principal).all.sort end @roles = Role.where("id in (13, 14, 15)") respond_to do |format| format.html { redirect_to_settings_in_courses } format.js { @members = members;} format.api { @member = members.first if @member.valid? render :action => 'show', :status => :created, :location => membership_url(@member) else render_validation_errors(@member) end } end end def show end def contest_member_autocomplete @contest = Contest.find(params[:contest]) @flag = params[:flag] || false respond_to do |format| format.js end end def update if params[:membership] new_role_ids = params[:membership][:role_ids] if new_role_ids.size != 0 && new_role_ids != @contest_member.contest_member_roles.map{|ro| ro.role_id.to_s} destroy_member_roles = @contest_member.contest_member_roles if destroy_member_roles.any? destroy_member_roles.each(&:destroy) end contest_member_roles = @contest_member.contest_member_roles if new_role_ids.include?('14') && new_role_ids.include?('13') contest_member_roles << ContestMemberRole.new(:role_id => 13) contest_member_roles << ContestMemberRole.new(:role_id => 14, :is_current => 0) else contest_member_roles << ContestMemberRole.new(:role_id => new_role_ids[0].to_i) end joined = ContestantForContest.where('student_id = ? and contest_id = ?', @contest_member.user_id, @contest.id) joined.each do |join| join.destroy end if new_role_ids.include?('15') ContestantForContest.create(:student_id => @contest_member.user_id, :contest_id => @contest.id) end end @contest_member.save @members = @contest.member_principals.includes(:roles, :principal).all.sort @roles = Role.where("id in (13, 14, 15)") @member = @contest.contest_members.new end saved = @member.save respond_to do |format| format.html { redirect_to settings_contest_path(@contest) } format.js format.api { if saved render_api_ok else render_validation_errors(@member) end } end end def destroy if request.delete? && @contest_member.deletable? @contest_member.destroy joined = ContestantForContest.where('student_id = ? and contest_id = ?', @contest_member.user_id, @contest.id) joined.each do |join| join.destroy end @roles = Role.where("id in (13, 14, 15)") @members = @contest.member_principals.includes(:roles, :principal).all.sort #移出课程发送消息 ContestMessage.create(:user_id => @contest_member.user_id, :contest_id => @contest.id, :contest_message_type => "RemoveFromContest", :viewed => false, :contest_message_id => User.current.id) end respond_to do |format| format.html { redirect_to settings_contest_path(@contest) } format.js format.api { if @contest_member.destroyed? render_api_ok else head :unprocessable_entity end } end end private def find_contest_member @contest_member = ContestMember.find params[:id] @contest = @contest_member.contest end end