|
- #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
|