班级主页身份切换、成员管理页面的多重身份

cxt_course
cxt 9 years ago
parent 0dfc887f74
commit 848c56d54e

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

@ -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)

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

@ -53,7 +53,15 @@ class Member < ActiveRecord::Base
new_role_ids = ids - role_ids
# Add new roles
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?

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

@ -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:

@ -36,7 +36,7 @@
</li>
<% @roles.each do |role| %>
<li>
<%= radio_button_tag 'membership[role_ids][]', role.id, role.name == "学生" || role.name == "Student" %>
<%= check_box_tag 'membership[role_ids][]', role.id, role.name == "学生" || role.name == "Student", :id => "add_member_checkbox_#{role.id}" %>
<label ><%= zh_course_role(h role) %></label>
</li>
<% end %>
@ -48,3 +48,35 @@
</div>
<% end%>
</div><!-- 右边 end-->
<script>
$(function() {
$("#add_member_checkbox_7").on('click', function(){
$("#add_member_checkbox_10").attr("checked",$("#add_member_checkbox_7").is(":checked"));
if($("#add_member_checkbox_7").is(":checked")) {
$("#add_member_checkbox_9").attr('disabled', 'disabled');
} else {
$("#add_member_checkbox_9").removeAttr('disabled');
}
});
$("#add_member_checkbox_9").on('click', function(){
$("#add_member_checkbox_10").attr("checked",$("#add_member_checkbox_9").is(":checked"));
if($("#add_member_checkbox_9").is(":checked")) {
$("#add_member_checkbox_7").attr('disabled', 'disabled');
} else {
$("#add_member_checkbox_7").removeAttr('disabled');
}
});
$("#add_member_checkbox_10").on('click', function(){
if($("#add_member_checkbox_10").is(":checked")) {
$("#add_member_checkbox_7").removeAttr('disabled');
$("#add_member_checkbox_9").removeAttr('disabled');
} else {
$("#add_member_checkbox_7").removeAttr('disabled');
$("#add_member_checkbox_9").removeAttr('disabled');
$("#add_member_checkbox_7").attr("checked",false);
$("#add_member_checkbox_9").attr("checked",false);
}
});
});
</script>

@ -10,7 +10,7 @@
) do |f| %>
<% @roles.each do |role| %>
<ul style="text-align: left;" class="ml45">
<%= radio_button_tag 'membership[role_ids][]', role.id, member.roles.include?(role),
<%= check_box_tag 'membership[role_ids][]', role.id, member.roles.include?(role), :id => "edit_member_role_#{member.id}_#{role.id}",
:disabled => member.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } %>
<label ><%= zh_course_role(h role) %></label>
</ul>
@ -35,4 +35,38 @@
:data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {confirm: l(:label_delete_confirm)}) if member.deletable? %>
<% end%>
</li>
<script>
$(function() {
$("#edit_member_role_<%=member.id %>_7").on('click', function(){
$("#edit_member_role_<%=member.id %>_10").attr("checked",$("#edit_member_role_<%=member.id %>_7").is(":checked"));
if($("#edit_member_role_<%=member.id %>_7").is(":checked")) {
$("#edit_member_role_<%=member.id %>_9").attr("checked",false);
$("#edit_member_role_<%=member.id %>_9").attr('disabled', 'disabled');
} else {
$("#edit_member_role_<%=member.id %>_9").removeAttr('disabled');
}
});
$("#edit_member_role_<%=member.id %>_9").on('click', function(){
$("#edit_member_role_<%=member.id %>_10").attr("checked",$("#edit_member_role_<%=member.id %>_9").is(":checked"));
if($("#edit_member_role_<%=member.id %>_9").is(":checked")) {
$("#edit_member_role_<%=member.id %>_7").attr('disabled', 'disabled');
$("#edit_member_role_<%=member.id %>_7").attr("checked",false);
} else {
$("#edit_member_role_<%=member.id %>_7").removeAttr('disabled');
}
});
$("#edit_member_role_<%=member.id %>_10").on('click', function(){
if($("#edit_member_role_<%=member.id %>_10").is(":checked")) {
$("#edit_member_role_<%=member.id %>_7").removeAttr('disabled');
$("#edit_member_role_<%=member.id %>_9").removeAttr('disabled');
} else {
$("#edit_member_role_<%=member.id %>_7").removeAttr('disabled');
$("#edit_member_role_<%=member.id %>_9").removeAttr('disabled');
$("#edit_member_role_<%=member.id %>_7").attr("checked",false);
$("#edit_member_role_<%=member.id %>_9").attr("checked",false);
}
});
});
</script>
<% end%>

@ -55,8 +55,15 @@
<span class=" mr15">学期:<span class="sy_cblack"><%= current_time_and_term @course %></span></span>
<span class=" mr15">单位:<span class="sy_cblack"><%= get_occupation_from_user(@course.teacher).blank? ? '无' : get_occupation_from_user(@course.teacher) %></span></span>
</p>
<!--<a href="javascript:void(0);" class="sy_btn_orange mr10" > 教师身份</a>-->
<% unless is_teacher %>
<% is_TA = get_user_member_roles_course @course, User.current, 7 %>
<% is_TE = get_user_member_roles_course @course, User.current, 9 %>
<% is_ST = get_user_member_roles_course @course, User.current, 10 %>
<% if !is_teacher && (is_TA || is_TE) %>
<%= link_to '教师身份', switch_role_course_path(@course, :user_id => User.current.id, :curr_role => 10, :tar_role => (is_TA ? 7 : 9)), :class => "sy_btn_orange mr10 fl" %>
<% elsif is_teacher && is_ST %>
<%= link_to '学生身份', switch_role_course_path(@course, :user_id => User.current.id, :curr_role => (is_TA ? 7 : 9), :tar_role => 10), :class => "sy_btn_orange mr10 fl" %>
<% end %>
<% unless (is_teacher || is_TA || is_TE) %>
<div id="join_in_course_header"><%= join_in_course_header(@course, User.current) %></div>
<% end %>
</div>

@ -1151,6 +1151,7 @@ RedmineApp::Application.routes.draw do
get "homework_search"
get "show_comparecode"
get "statistics_course"
get "switch_role"
end
collection do
match 'join_private_courses', :via => [:get, :post]

@ -1,16 +1,5 @@
class AddColumnToMemberRole < ActiveRecord::Migration
def change
add_column :member_roles, :multi_role, :integer, :default => 0
count = MemberRole.all.count / 30 + 2
transaction do
for i in 1 ... count do i
MemberRole.page(i).per(30).each do |mr|
if mr.role_id == 3
mr.update_column('multi_role', 1)
end
end
end
end
add_column :member_roles, :is_current, :integer, :default => 1
end
end

@ -1108,7 +1108,7 @@ ActiveRecord::Schema.define(:version => 20160727065357) do
t.integer "member_id", :null => false
t.integer "role_id", :null => false
t.integer "inherited_from"
t.integer "multi_role", :default => 0
t.integer "is_current", :default => 1
end
add_index "member_roles", ["member_id"], :name => "index_member_roles_on_member_id"

Loading…
Cancel
Save