diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 8fa46bda5..114d574d2 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -23,7 +23,7 @@ class CoursesController < ApplicationController before_filter :can_show_course, :except => [] before_filter :logged_user_by_apptoken,:only => [:show,:feedback] - before_filter :find_course, :except => [ :index, :search, :new,:join,:unjoin, :create, :new_join, :course,:join_private_courses] + before_filter :find_course, :except => [ :index, :search, :new,:join,:unjoin, :create, :new_join, :course,:join_private_courses, :join_course_multi_role] before_filter :authorize_course, :only => [:show, :settings, :update, :course] before_filter :authorize_course_global, :only => [:new,:create] before_filter :toggleCourse, :only => [:finishcourse, :restartcourse] @@ -81,6 +81,22 @@ class CoursesController < ApplicationController end + def join_course_multi_role + if User.current.logged? + cs = CoursesService.new + @user = User.current + join = cs.join_course_roles params,@user + @state = join[:state] + @course = join[:course] + else + @state = 5 #未登录 + end + @object_id = @course.id if @course + respond_to do |format| + format.js + end + end + def unjoin if User.current.logged? cs = CoursesService.new diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 4efa05a1e..2f1d6a4db 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -355,15 +355,21 @@ class UsersController < ApplicationController case params[:agree] when 'Y' apply_user = User.find(@msg.course_message_id) - + ids = @msg.content.split(",") # [@msg.content] msg content保存的是申请的职位角色 + integer_ids = [] + ids.each do |role_id| + integer_ids << role_id.to_i + end if apply_user.member_of_course?(Course.find(@msg.course_id)) #将角色改为老师或者教辅 member = Course.find(@msg.course_id).members.where(:user_id=>apply_user.id).all[0] - member.role_ids = [@msg.content] # msg content保存的是申请的职位角色 - #删除为学生的记录 - joined = StudentsForCourse.where('student_id = ? and course_id = ?', member.user_id,@msg.course_id) - joined.each do |join| - join.delete + member.role_ids = integer_ids + #删除为学生的记录 + unless member.role_ids.include?(10) + joined = StudentsForCourse.where('student_id = ? and course_id = ?', member.user_id,@msg.course_id) + joined.each do |join| + join.delete + end end member.course_group_id = 0 @@ -372,7 +378,7 @@ class UsersController < ApplicationController @msg.update_attributes(:status=>1,:viewed=>1) else members = [] - members << Member.new(:role_ids => [@msg.content.to_i], :user_id => @msg.course_message_id) + members << Member.new(:role_ids => integer_ids, :user_id => @msg.course_message_id) Course.find(@msg.course_id).members << members CourseMessage.create(:user_id => @msg.course_message_id, :course_id => @msg.course_id, :viewed => false,:content=> @msg.content,:course_message_id=>User.current.id,:content=>@msg.content,:course_message_type=>'CourseRequestDealResult',:status=>1) @msg.update_attributes(:status=>1,:viewed=>1) diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index ef304887f..cfc6fb1f6 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -794,7 +794,7 @@ module CoursesHelper if user.logged? joined = course.members.includes(:user).map{|member| member.user_id}.include? user.id text = joined ? l(:label_course_exit_student) : l(:label_course_join_student) - url = joined ? join_path(:object_id => course.id) : try_join_path(:object_id => course.id) + url = joined ? join_path(:object_id => course.id) : join_private_courses_courses_path() method = joined ? 'delete' : 'post' if joined link = link_to(text, url, :remote => true, :method => method, :class => "sy_btn_grey fl", :id => "#{course.id}", :confirm => l(:text_are_you_sure_out)) diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index d864b6462..fd3aa6ebf 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -389,6 +389,101 @@ class CoursesService {:state => @state,:course => course} end + #多个角色加入课程 + def join_course_roles params,current_user + course = Course.find_by_invite_code(params[:invite_code]) if params[:invite_code] + + @state = 10 + if course + if course_endTime_timeout? course + @state = 2 + else + if current_user.member_of_course?(course) #如果已经是成员 + @state = 3 + # member = course.members.where("user_id=#{current_user.id} and course_id=#{course.id}")[0] + # role_ids = params[:role] + # #roleName = member.roles[0].name if member + # #roleName = member.roles.map{|role| role.name}.join(",") if member + # if params[:invite_code].present? + # #如果加入角色为学生 并且当前是学生 + # if role_ids == "10" && roleName.include?("Student") && !roleName.include?("Teacher") && !roleName.include?("TeachingAsistant")&& !roleName.include?("Manager") + # @state = 3 + # #如果加入的角色为老师,并且当前已经是老师 + # elsif role_ids == "9" && roleName.include?("Teacher") && !roleName.include?("Student") + # @state = 8 + # #如果加入的角色教辅并且当前为教辅 + # elsif role_ids == "7" && roleName.include?("TeachingAsistant") && !roleName.include?("Student") + # @state = 9 + # elsif roleName.include?("Manager") + # @state = 10 + # #如果加入角色为教师或者教辅,并且当前是学生,或者是要成为教辅,当前不是教辅,或者要成为教师,当前不是教师。那么要发送请求 + # elsif (params[:role] != "10" && roleName == "Student") || (params[:role] == "7" && roleName != "TeachingAsistant" ) || (params[:role] == "9" && roleName != "Teacher" ) + # #如果已经发送过消息了,那么就要给个提示 + # if CourseMessage.where("course_message_type = 'JoinCourseRequest' and user_id = #{course.tea_id} and content = #{params[:role]} and course_message_id = #{User.current.id} and course_id = #{course.id} and status = 0 ").count != 0 + # @state = 7 + # else + # Mailer.run.join_course_request(course, User.current, params[:role]) + # CourseMessage.create(:user_id => course.tea_id, :course_id => course.id, :viewed => false,:content=> params[:role],:course_message_id=>User.current.id,:course_message_type=>'JoinCourseRequest',:status=>0) + # @state = 6 + # end + # #如果加入角色是学生,但是是当前课程的教师或者教辅 + # elsif params[:role] == "10" && roleName != "Student" + # member.role_ids = [params[:role]] + # member.save + # StudentsForCourse.create(:student_id => current_user.id, :course_id => course.id) + # @state = 0 + # end + # else + # @state = 1 + # end + else + if params[:invite_code].present? + role_ids = params[:role] + role_str = role_ids.join(",") + if role_ids.include?("10") && !role_ids.include?("7") && !role_ids.include?("9") + members = [] + members << Member.new(:role_ids => [10], :user_id => current_user.id) + course.members << members + StudentsForCourse.create(:student_id => current_user.id, :course_id => course.id) + @state = 0 + else + is_stu = false + if role_ids.include?("10") + members = [] + members << Member.new(:role_ids => [10], :user_id => current_user.id) + course.members << members + StudentsForCourse.create(:student_id => current_user.id, :course_id =>course.id) + is_stu = true + end + #如果已经发送过消息了,那么就要给个提示 + if CourseMessage.where("course_message_type = 'JoinCourseRequest' and user_id = #{course.tea_id} and content = '#{role_str}' and course_message_id = #{User.current.id} and course_id = #{course.id} and status = 0").count != 0 + if is_stu + @state = 12 + else + @state = 7 + end + else + Mailer.run.join_course_request(course, User.current, params[:role]) + CourseMessage.create(:user_id => course.tea_id, :course_id => course.id, :viewed => false,:content=> role_str,:course_message_id=>User.current.id,:course_message_type=>'JoinCourseRequest',:status=>0) + if is_stu + @state = 13 + else + @state = 6 + end + end + end + else + @state = 1 + end + end + end + else + @state = 4 + end + {:state => @state,:course => course} + end + + #作业列表 #已提交的作业数量获取 bid.homeworks.count #学生提问数量获取 bid.commit.nil? ? 0 : bid.commit diff --git a/app/views/courses/_join_private_course.html.erb b/app/views/courses/_join_private_course.html.erb index ec5d18c7e..f95129903 100644 --- a/app/views/courses/_join_private_course.html.erb +++ b/app/views/courses/_join_private_course.html.erb @@ -1,100 +1,52 @@ - - - - - 快速进入班级通道 - - - +
+ +
  • + + 确  定 + 取  消 - -
    -
    -
    -

    快速加入班级通道

    -

    只要持有班级邀请码,就可以快速加入所在班级。班级页面搜索不到的私有班级只能从此通道进入哦!

    -
    -
    - <%= form_tag({:controller => 'courses', - :action => 'join'}, - :remote => true, - :method => :post, - :id => 'new-watcher-form') do %> -
      -
    • - - - 班级邀请码: - - -
    • -
    • 班级邀请码是所在班级页面中显示的邀请码
    • -
    • - - <% if User.current.logged? && User.current.extensions && User.current.extensions.identity == 0%> - - <%else%> - - <%end%> -
    • -
    • - - <%= l(:label_new_join) %> - - - <%= l(:button_cancel)%> - -
    • -
    - <% end%> -
    -
    +
    +
  • + + <% end %> + - - - + \ No newline at end of file diff --git a/app/views/courses/join.js.erb b/app/views/courses/join.js.erb index ac8b717d1..52c1347a5 100644 --- a/app/views/courses/join.js.erb +++ b/app/views/courses/join.js.erb @@ -36,6 +36,10 @@ window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/co alert("您已经是该班级的管理员了"); hidden_join_course_form(); window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>" +<% elsif @state == 11%> +alert("该班级已被删除"); +hidden_join_course_form(); +window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>" <% else %> alert("未知错误,请稍后再试"); <% end %> diff --git a/app/views/courses/join_course_multi_role.js.erb b/app/views/courses/join_course_multi_role.js.erb new file mode 100644 index 000000000..97d6b33ce --- /dev/null +++ b/app/views/courses/join_course_multi_role.js.erb @@ -0,0 +1,52 @@ +<% if @object_id && @state != 6 && @state !=4 %> +$("#join_in_course_header").html("<%= escape_javascript(join_in_course_header(@course, @user)) %>"); +<% end %> +<% if @state %> +<% if @state == 0 %> +alert("加入成功"); +hideModal(); +$("#try_join_course_link").replaceWith(" 'index',:course=>@course.id, :host=>Setting.host_course)%>' target='_blank' class='blue_n_btn fr mt20'>提交作品"); +window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>" +<% elsif @state == 1 %> +alert("密码错误"); +<% elsif @state == 2 %> +alert("班级已过期\n请联系班级管理员重启班级。(在配置班级处)"); +<% elsif @state == 3 %> +alert("您已经加入了班级"); +window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>" +<% elsif @state == 4 %> +alert("您加入的班级不存在"); +<% elsif @state == 5 %> +alert("您还未登录"); +<% elsif @state == 6 %> +alert("申请成功,请等待审核"); +hidden_join_course_form(); +<% elsif @state == 7%> +alert("您已经发送过申请了,请耐心等待"); +hidden_join_course_form(); +<% elsif @state == 8%> +alert("您已经是该班级的教师了"); +hidden_join_course_form(); +window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>" +<% elsif @state == 9%> +alert("您已经是该班级的教辅了"); +hidden_join_course_form(); +window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>" +<% elsif @state == 10%> +alert("您已经是该班级的管理员了"); +hidden_join_course_form(); +window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>" +<% elsif @state == 11%> +alert("该班级已被删除"); +hidden_join_course_form(); +window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>" +<% elsif @state == 12 %> +alert("您已经发送过申请了,请耐心等待"); +window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>" +<% elsif @state == 13 %> +alert("申请成功,请等待审核"); +window.location.href= "<%= Setting.protocol%>://"+"<%= Setting.host_name%>"+"/courses/" + "<%= @course.id%>" +<% else %> +alert("未知错误,请稍后再试"); +<% end %> +<% end %> diff --git a/app/views/courses/join_private_courses.js.erb b/app/views/courses/join_private_courses.js.erb index 199cfb5ae..14402a9ff 100644 --- a/app/views/courses/join_private_courses.js.erb +++ b/app/views/courses/join_private_courses.js.erb @@ -1,11 +1,2 @@ -$('#topnav_course_menu').hide(); -$('#ajax-modal').html('<%= escape_javascript(render :partial => 'join_private_course') %>'); -showModal('ajax-modal', '540px'); -$('#ajax-modal').css('height','390px'); -//$('#ajax-modal').siblings().remove(); -$('#ajax-modal').siblings().hide(); -$('#ajax-modal').before("" + - ""); -$('#ajax-modal').parent().removeClass("alert_praise"); -$('#ajax-modal').parent().css("top","").css("left","").css("border","3px solid #269ac9"); -$('#ajax-modal').parent().addClass("alert_box"); +var htmlvalue = "<%= escape_javascript(render :partial => 'join_private_course') %>"; +pop_box_new(htmlvalue,460,40,50); diff --git a/app/views/layouts/_course_base_info.html.erb b/app/views/layouts/_course_base_info.html.erb index a6d267d76..6eab17656 100644 --- a/app/views/layouts/_course_base_info.html.erb +++ b/app/views/layouts/_course_base_info.html.erb @@ -13,9 +13,8 @@