diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 21dac6ada..8fa46bda5 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -1133,6 +1133,21 @@ class CoursesController < ApplicationController end end + #切换身份 + def switch_role + members = @course.members.where("user_id = #{params[:user_id]}") + unless members.blank? + #role = MemberRole.where("member_id = #{members.first.id} and role_id = #{params[:role]}").first + curr_role = MemberRole.find_by_member_id_and_role_id(members.first.id, params[:curr_role]) + tar_role = MemberRole.find_by_member_id_and_role_id(members.first.id, params[:tar_role]) + unless (curr_role.nil? || tar_role.nil?) + curr_role.update_column('is_current', 0) + tar_role.update_column('is_current', 1) + end + end + redirect_to course_path(@course) + end + private def update_quotes attachment if attachment.copy_from diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 4dc2c52f5..9c6f606f6 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -154,9 +154,11 @@ class MembersController < ApplicationController user_ids = attrs.delete(:user_ids) user_ids.each do |user_id| member = Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id) - role = Role.find_by_id(params[:membership][:role_ids]) + + role_ids = attrs.delete(:role_ids) + #role = Role.find(params[:membership][:role_ids]) # 这里的判断只能通过角色名,可以弄成常量 - if role && (role.name == "学生" || role.name == "Student") + if role_ids && !role_ids.include?("9") && role_ids.include?("10") StudentsForCourse.create(:student_id => user_id, :course_id =>@course.id) end @@ -252,7 +254,10 @@ class MembersController < ApplicationController if (params[:membership][:role_ids]) role = Role.find(params[:membership][:role_ids][0]) # 这里的判断只能通过角色名,可以弄成常量 - if role.name == "学生" || role.name == "Student" + attrs = params[:membership].dup + role_ids = attrs.delete(:role_ids) + + if role_ids && !role_ids.include?("9") && role_ids.include?("10") StudentsForCourse.create(:student_id => @member.user_id, :course_id =>@course.id) else joined = StudentsForCourse.where('student_id = ? and course_id = ?', @member.user_id,@course.id) diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index 42511f218..46ad4bb1c 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -274,14 +274,19 @@ module CoursesHelper #searchPeopleByRoles(project, TeacherRoles) members = [] project.members.includes(:user).each do |m| - members << m if m && m.user && m.user.allowed_to?(:as_teacher,project) + #members << m if m && m.user && m.user.allowed_to?(:as_teacher,project) + members << m if m && m.user && m.user.has_teacher_role(project) end members end def TeacherAndAssistantCount course - students_count = course.student.count - number = course.members.count - students_count + #students_count = course.student.count + #number = course.members.count - students_count + member_ids = course.members.includes(:user).blank? ? "(-1)" : "(" + course.members.includes(:user).map { |mem| mem.id}.join(",") + ")" + role_ids = "(3, 7, 9)" + number = MemberRole.where("member_id in #{member_ids} and role_id in #{role_ids}").count + #number = (searchTeacherAndAssistant course).count end def search_student_in_group(project, course_group_id) @@ -811,6 +816,10 @@ module CoursesHelper result = l(:label_student) elsif role == "Manager" result = l(:field_admin) + elsif role.include?("TeachingAsistant") && role.include?("Student") + result = l(:label_TA) + " " + l(:label_student) + elsif role.include?("Teacher") && role.include?("Student") + result = l(:label_teacher) + " " + l(:label_student) end result end @@ -894,5 +903,15 @@ module CoursesHelper resource_num*5 + journal_num + homework_journal_num ) desc limit 3;") end + #用户在该课程是否具有某个角色 + def get_user_member_roles_course course, user, role + members = course.members.where("user_id = #{user.id}") + result = false + unless members.blank? + m_roles = MemberRole.where("member_id = #{members.first.id} and role_id = #{role}") + end + result = !m_roles.blank? + result + end end diff --git a/app/models/member.rb b/app/models/member.rb index 3cb70a8fe..cb15e067b 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -53,7 +53,15 @@ class Member < ActiveRecord::Base new_role_ids = ids - role_ids # Add new roles - new_role_ids.each {|id| member_roles << MemberRole.new(:role_id => id) } + if new_role_ids.include?(7) && new_role_ids.include?(10) + member_roles << MemberRole.new(:role_id => 7) + member_roles << MemberRole.new(:role_id => 10, :is_current => 0) + elsif new_role_ids.include?(9) && new_role_ids.include?(10) + member_roles << MemberRole.new(:role_id => 9) + member_roles << MemberRole.new(:role_id => 10, :is_current => 0) + else + new_role_ids.each {|id| member_roles << MemberRole.new(:role_id => id) } + end # Remove roles (Rails' #role_ids= will not trigger MemberRole#on_destroy) member_roles_to_destroy = member_roles.select {|mr| !ids.include?(mr.role_id)} if member_roles_to_destroy.any? diff --git a/app/models/member_role.rb b/app/models/member_role.rb index 4d493cb27..799720833 100644 --- a/app/models/member_role.rb +++ b/app/models/member_role.rb @@ -16,6 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class MemberRole < ActiveRecord::Base + # multi_role 课程中的多重角色 0:单角色/学生,1:管理员&学生,2:教师&学生,3:教辅&学生 belongs_to :member belongs_to :role diff --git a/app/models/user.rb b/app/models/user.rb index 996aa9be7..afd45e08b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -823,7 +823,7 @@ class User < Principal # Find course membership membership = coursemembership(course) if membership - roles = membership.roles + roles = membership.roles.where("is_current = 1") else @role_non_member ||= Role.non_member roles << @role_non_member @@ -918,6 +918,12 @@ class User < Principal end end + #是否具有老师角色 + def has_teacher_role(course) + member = course.members.where("user_id = #{self.id}").first + role = MemberRole.where("member_id = #{member.id} and role_id in (3, 7, 9)") + !role.blank? + end # Return true if the user is allowed to do the specified action on a specific context # Action can be: diff --git a/app/views/courses/_course_members.html.erb b/app/views/courses/_course_members.html.erb index 9f15405dc..563cbfff3 100644 --- a/app/views/courses/_course_members.html.erb +++ b/app/views/courses/_course_members.html.erb @@ -36,7 +36,7 @@ <% @roles.each do |role| %>