Merge branch 'cxt_course' into develop

Conflicts:
	app/views/layouts/_course_base_info.html.erb
	db/schema.rb
dev_pull v20160729_04
cxt 9 years ago
commit e3d538c3fa

@ -2,43 +2,63 @@ class AppliedProjectController < ApplicationController
#申请加入项目 #申请加入项目
def applied_join_project def applied_join_project
@user_id = params[:user_id] @project = Project.find_by_id(params[:object_id])
@project = Project.find_by_id(params[:project_id]) # @user_id = params[:user_id]
if params[:project_join] # if params[:project_join]
if @project # if @project
user = User.find @user_id # user = User.find @user_id
if user.member_of?(@project) # if user.member_of?(@project)
@status = 3 # @status = 3
else # else
@applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id]) # @applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id])
if @applieds.count == 0 # if @applieds.count == 0
appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id]) # appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id])
Mailer.run.applied_project(appliedproject) # Mailer.run.applied_project(appliedproject)
@status = 2 # @status = 2
else # else
@status = 1 # @status = 1
end # end
end # end
else # else
@status = 0 # @status = 0
end # end
respond_to do |format| # respond_to do |format|
format.js # format.js
end # end
return # return
end # end
#
@applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id]) # @applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id])
if @applieds.count == 0 # if @applieds.count == 0
appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id]) # appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id])
Mailer.run.applied_project(appliedproject) # Mailer.run.applied_project(appliedproject)
end # end
#
# #redirect_to project_path(params[:project_id])
# #redirect_to_referer_or {render :text => ( 'applied success.'), :layout => true}
# respond_to do |format|
# format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
# format.js { render :partial => 'set_applied'}
# end
end
#redirect_to project_path(params[:project_id]) # @flage:提示语标志1邀请码错误2已经是项目成员 3角色没有选择; 4申请成功
#redirect_to_referer_or {render :text => ( 'applied success.'), :layout => true} # role:成员角色 => 01管理人员2开发人员3报告人员
respond_to do |format| # 申请成功则发送消息
format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}} def applied_project_info
format.js { render :partial => 'set_applied'} @project = Project.find(params[:project_id])
if params[:invite_code].to_s != @project.invite_code
@flag = 1
elsif User.current.member_of?(@project)
@flag = 2
elsif params[:member].nil?
@flag = 3
else
@flag = 4
role = params[:member] == "member_manager" ? 1 : (params[:member] = "member_developer" ? 2 : 3)
applied_project = AppliedProject.create(:user_id => User.current.id, :project_id => params[:project_id], :role => role)
# 申请成功则给项目管理员发送邮件及发送消息
Mailer.run.applied_project(applied_project)
end end
end end

@ -23,7 +23,7 @@ class CoursesController < ApplicationController
before_filter :can_show_course, :except => [] before_filter :can_show_course, :except => []
before_filter :logged_user_by_apptoken,:only => [:show,:feedback] 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, :only => [:show, :settings, :update, :course]
before_filter :authorize_course_global, :only => [:new,:create] before_filter :authorize_course_global, :only => [:new,:create]
before_filter :toggleCourse, :only => [:finishcourse, :restartcourse] before_filter :toggleCourse, :only => [:finishcourse, :restartcourse]
@ -81,6 +81,22 @@ class CoursesController < ApplicationController
end 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 def unjoin
if User.current.logged? if User.current.logged?
cs = CoursesService.new cs = CoursesService.new
@ -1136,6 +1152,21 @@ class CoursesController < ApplicationController
end end
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 private
def update_quotes attachment def update_quotes attachment
if attachment.copy_from if attachment.copy_from

@ -154,9 +154,11 @@ class MembersController < ApplicationController
user_ids = attrs.delete(:user_ids) user_ids = attrs.delete(:user_ids)
user_ids.each do |user_id| user_ids.each do |user_id|
member = Member.new(:role_ids => params[:membership][:role_ids], :user_id => 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?("10")
StudentsForCourse.create(:student_id => user_id, :course_id =>@course.id) StudentsForCourse.create(:student_id => user_id, :course_id =>@course.id)
end end
@ -252,7 +254,10 @@ class MembersController < ApplicationController
if (params[:membership][:role_ids]) if (params[:membership][:role_ids])
role = Role.find(params[:membership][:role_ids][0]) 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?("10")
StudentsForCourse.create(:student_id => @member.user_id, :course_id =>@course.id) StudentsForCourse.create(:student_id => @member.user_id, :course_id =>@course.id)
else else
joined = StudentsForCourse.where('student_id = ? and course_id = ?', @member.user_id,@course.id) joined = StudentsForCourse.where('student_id = ? and course_id = ?', @member.user_id,@course.id)

@ -41,7 +41,7 @@ class UsersController < ApplicationController
:activity_score_index, :influence_score_index, :score_index,:show_new_score, :topic_new_score_index, :project_new_score_index, :activity_score_index, :influence_score_index, :score_index,:show_new_score, :topic_new_score_index, :project_new_score_index,
:activity_new_score_index, :influence_new_score_index, :score_new_index,:user_projects_index,:user_resource, :activity_new_score_index, :influence_new_score_index, :score_new_index,:user_projects_index,:user_resource,
:user_courses4show,:user_projects4show,:user_course_activities,:user_project_activities,:user_feedback4show,:user_visitorlist,:user_messages,:edit_brief_introduction, :user_courses4show,:user_projects4show,:user_course_activities,:user_project_activities,:user_feedback4show,:user_visitorlist,:user_messages,:edit_brief_introduction,
:user_import_homeworks,:user_search_homeworks,:user_import_resource, :user_system_messages,:choose_user_course,:user_courselist,:user_projectlist] :user_import_homeworks,:user_search_homeworks,:user_import_resource, :user_system_messages,:choose_user_course,:user_courselist,:user_projectlist,:sort_syllabus_list]
before_filter :auth_user_extension, only: :show before_filter :auth_user_extension, only: :show
#before_filter :rest_user_score, only: :show #before_filter :rest_user_score, only: :show
#before_filter :select_entry, only: :user_projects #before_filter :select_entry, only: :user_projects
@ -133,6 +133,7 @@ class UsersController < ApplicationController
@user_activity_id = params[:user_activity_id] @user_activity_id = params[:user_activity_id]
@activity_id = params[:activity_id] @activity_id = params[:activity_id]
@homepage = params[:homepage] @homepage = params[:homepage]
@user_id = params[:user_id]
@type = 'BlogComment' @type = 'BlogComment'
when 'OrgDocumentComment' when 'OrgDocumentComment'
@reply = OrgDocumentComment.find params[:reply_id] @reply = OrgDocumentComment.find params[:reply_id]
@ -149,6 +150,9 @@ class UsersController < ApplicationController
@user_activity_id = params[:user_activity_id] @user_activity_id = params[:user_activity_id]
@activity_id = params[:activity_id] @activity_id = params[:activity_id]
@type = 'Issue' @type = 'Issue'
when 'Syllabus'
@reply = JournalsForMessage.find params[:reply_id]
@type = 'Syllabus'
end end
respond_to do |format| respond_to do |format|
format.js format.js
@ -351,15 +355,21 @@ class UsersController < ApplicationController
case params[:agree] case params[:agree]
when 'Y' when 'Y'
apply_user = User.find(@msg.course_message_id) 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)) 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 = Course.find(@msg.course_id).members.where(:user_id=>apply_user.id).all[0]
member.role_ids = [@msg.content] # msg content保存的是申请的职位角色 member.role_ids = integer_ids
#删除为学生的记录 #删除为学生的记录
joined = StudentsForCourse.where('student_id = ? and course_id = ?', member.user_id,@msg.course_id) unless member.role_ids.include?(10)
joined.each do |join| joined = StudentsForCourse.where('student_id = ? and course_id = ?', member.user_id,@msg.course_id)
join.delete joined.each do |join|
join.delete
end
end end
member.course_group_id = 0 member.course_group_id = 0
@ -368,7 +378,7 @@ class UsersController < ApplicationController
@msg.update_attributes(:status=>1,:viewed=>1) @msg.update_attributes(:status=>1,:viewed=>1)
else else
members = [] 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 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) 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) @msg.update_attributes(:status=>1,:viewed=>1)
@ -3225,7 +3235,35 @@ class UsersController < ApplicationController
end end
def user_courselist def user_courselist
@order, @c_sort,@type = params[:order] || 1, params[:sort] || 1, params[:type] || 1 @order, @c_sort, @type, @list_type = 1, 2, 1, 1
@my_syllabuses = @user.syllabuses
sy_courses = @user.courses.visible.where("is_delete =? and tea_id != ?", 0, @user.id)
syllabus_ids = sy_courses.empty? ? '(-1)' : "(" + sy_courses.map{|course| !course.syllabus_id.nil? && course.syllabus_id}.join(",") + ")"
@join_syllabuses = Syllabus.where("id in #{syllabus_ids} and user_id != #{@user.id}")
@my_syllabuses = syllabus_course_list_sort @my_syllabuses
@join_syllabuses = syllabus_course_list_sort @join_syllabuses
@my_syllabuses = @my_syllabuses.sort{|x,y| y[:last_update] <=> x[:last_update]}
@join_syllabuses = @join_syllabuses.sort{|x,y| y[:last_update] <=> x[:last_update]}
#分页
# @limit = 10
# @is_remote = true
# @atta_count = @syllabus.count
# @atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1
# @offset ||= @atta_pages.offset
# @syllabus = paginateHelper @syllabus,@limit
respond_to do |format|
format.html {render :layout => 'new_base_user'}
end
end
#课程列表的排序
def sort_syllabus_list
@order, @c_sort, @type, @list_type = params[:order] || 1, params[:sort] || 1, params[:type] || 1, params[:list_type] || 1
#确定 sort_type #确定 sort_type
if @order.to_i == @type.to_i if @order.to_i == @type.to_i
@ -3235,40 +3273,48 @@ class UsersController < ApplicationController
end end
sort_name = "updated_at" sort_name = "updated_at"
sort_type = @c_sort == 1 ? "asc" : "desc"
@courses = @user.courses.visible.where("is_delete =?", 0) if @list_type.to_i == 1
syllabus_ids = @courses.empty? ? '(-1)' : "(" + @courses.map{|course| !course.syllabus_id.nil? && course.syllabus_id}.join(",") + ")" @syllabuses = @user.syllabuses.order("updated_at desc")
@syllabus = Syllabus.where("id in #{syllabus_ids} or user_id = #{User.current.id}").order("#{sort_name} #{sort_type}") else
sy_courses = @user.courses.visible.where("is_delete =? and tea_id != ?", 0, @user.id)
syllabus_ids = sy_courses.empty? ? '(-1)' : "(" + sy_courses.map{|course| !course.syllabus_id.nil? && course.syllabus_id}.join(",") + ")"
@syllabuses = Syllabus.where("id in #{syllabus_ids} and user_id != #{@user.id}").order("updated_at desc")
end
#根据 作业+资源数排序 if @order.to_i == 1 #根据 班级更新时间排序
if @order.to_i == 2 @syllabuses = syllabus_course_list_sort @syllabuses
@c_sort == 1 ? (@syllabuses = @syllabuses.sort{|x,y| x[:last_update] <=> y[:last_update] }) : (@syllabuses = @syllabuses.sort{|x,y| y[:last_update] <=> x[:last_update]})
@type = 1
elsif @order.to_i == 2 #根据 作业+资源数排序
@type = 2 @type = 2
@syllabus.each do |syllabus| @syllabuses.each do |syllabus|
count = 0 count = 0
courses = @courses.where("syllabus_id = #{syllabus.id}") courses = syllabus.courses.not_deleted
courses.each do |c| courses.each do |c|
count += (User.current.admin? || User.current.allowed_to?(:as_teacher,c)) ? (c.homework_commons.count + visable_attachemnts_incourse(c).count) : (c.homework_commons.where("publish_time <= '#{Date.today}'").count + visable_attachemnts_incourse(c).count) count += (User.current.admin? || User.current.allowed_to?(:as_teacher,c)) ? (c.homework_commons.count + visable_attachemnts_incourse(c).count) : (c.homework_commons.where("publish_time <= '#{Date.today}'").count + visable_attachemnts_incourse(c).count)
end end
syllabus[:infocount] = count syllabus[:infocount] = count
end end
@c_sort == 1 ? (@syllabus = @syllabus.sort{|x,y| x[:infocount] <=> y[:infocount] }) : (@syllabus = @syllabus.sort{|x,y| y[:infocount] <=> x[:infocount]}) @c_sort == 1 ? (@syllabuses = @syllabuses.sort{|x,y| x[:infocount] <=> y[:infocount] }) : (@syllabuses = @syllabuses.sort{|x,y| y[:infocount] <=> x[:infocount]})
@syllabus = sortby_time_countcommon_nosticky @syllabus,sort_name @syllabuses = sortby_time_countcommon_nosticky @syllabuses,sort_name
else else
@type = 1 @type = 1
end end
#分页
@limit = 10
@is_remote = true
@atta_count = @syllabus.count
@atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1
@offset ||= @atta_pages.offset
@syllabus = paginateHelper @syllabus,@limit
respond_to do |format| respond_to do |format|
format.js format.js
format.html {render :layout => 'new_base_user'} end
end
#展开课程下的班级
def expand_courses
@syllabus = Syllabus.where("id = #{params[:syllabus_id]}").first
unless @syllabus.nil?
@courses = @syllabus.courses.not_deleted.select("courses.*,(SELECT MAX(updated_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS updatetime").order("updatetime desc")
respond_to do |format|
format.js
end
end end
end end
@ -3342,6 +3388,8 @@ class UsersController < ApplicationController
when 'Syllabus' when 'Syllabus'
obj = Syllabus.where('id = ?', params[:id].to_i).first obj = Syllabus.where('id = ?', params[:id].to_i).first
@journals = obj.journals_for_messages.reorder("created_on desc") @journals = obj.journals_for_messages.reorder("created_on desc")
@type = 'Syllabus'
@user_activity_id = params[:div_id].to_i if params[:div_id]
when 'JournalsForMessage' when 'JournalsForMessage'
obj = JournalsForMessage.where('id = ?', params[:id].to_i).first obj = JournalsForMessage.where('id = ?', params[:id].to_i).first
journals = [] journals = []
@ -3358,6 +3406,7 @@ class UsersController < ApplicationController
@user_activity_id = params[:div_id].to_i if params[:div_id] @user_activity_id = params[:div_id].to_i if params[:div_id]
@homepage = params[:homepage].to_i @homepage = params[:homepage].to_i
@type = 'BlogComment' @type = 'BlogComment'
@user_id = obj.author_id
comments = [] comments = []
@journals = get_all_children(comments, obj) @journals = get_all_children(comments, obj)
when 'HomeworkCommon' when 'HomeworkCommon'

@ -112,6 +112,10 @@ class WordsController < ApplicationController
end end
@is_in_course = params[:is_in_course].to_i @is_in_course = params[:is_in_course].to_i
@course_activity = params[:course_activity].to_i @course_activity = params[:course_activity].to_i
elsif @journal_destroyed.jour_type == 'Syllabus'
@syllabus = Syllabus.find @journal_destroyed.jour_id
@count = @syllabus.journals_for_messages.count
@comments = @syllabus.journals_for_messages.reorder("created_on desc").limit(3)
end end
respond_to do |format| respond_to do |format|
format.js format.js
@ -352,6 +356,35 @@ class WordsController < ApplicationController
render_403 render_403
end end
end end
#课程大纲的二级回复
def reply_to_syllabus
if User.current.logged?
@user = User.current
reply = JournalsForMessage.find params[:id].to_i
@syllabus = Syllabus.find reply.jour_id
if params[:reply_message].size>0 && User.current.logged? && @user
options = {:notes => params[:reply_message], :reply_id => reply.user_id,:user_id => @user.id,:m_parent_id => params[:id].to_i,:m_reply_id => params[:id].to_i}
feedback = Syllabus.add_syllabus_jour(@user, params[:reply_message], reply.jour_id, options)
if (feedback.errors.empty?)
if params[:asset_id]
ids = params[:asset_id].split(',')
update_kindeditor_assets_owner ids,feedback[:id],OwnerTypeHelper::JOURNALSFORMESSAGE
end
@syllabus.update_column('updated_at', Time.now)
@count = @syllabus.journals_for_messages.count
@comments = @syllabus.journals_for_messages.reorder("created_on desc").limit(3)
respond_to do |format|
format.js
end
else
flash[:error] = feedback.errors.full_messages[0]
end
end
else
render_403
end
end
def add_brief_introdution def add_brief_introdution
user = User.current user = User.current

@ -274,14 +274,19 @@ module CoursesHelper
#searchPeopleByRoles(project, TeacherRoles) #searchPeopleByRoles(project, TeacherRoles)
members = [] members = []
project.members.includes(:user).each do |m| 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 end
members members
end end
def TeacherAndAssistantCount course def TeacherAndAssistantCount course
students_count = course.student.count #students_count = course.student.count
number = course.members.count - students_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 end
def search_student_in_group(project, course_group_id) def search_student_in_group(project, course_group_id)
@ -789,7 +794,7 @@ module CoursesHelper
if user.logged? if user.logged?
joined = course.members.includes(:user).map{|member| member.user_id}.include? user.id 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) 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' method = joined ? 'delete' : 'post'
if joined 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)) link = link_to(text, url, :remote => true, :method => method, :class => "sy_btn_grey fl", :id => "#{course.id}", :confirm => l(:text_are_you_sure_out))
@ -831,6 +836,10 @@ module CoursesHelper
result = l(:label_student) result = l(:label_student)
elsif role == "Manager" elsif role == "Manager"
result = l(:field_admin) 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 end
result result
end end
@ -914,5 +923,15 @@ module CoursesHelper
resource_num*5 + journal_num + homework_journal_num ) desc limit 3;") resource_num*5 + journal_num + homework_journal_num ) desc limit 3;")
end 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 end

@ -54,6 +54,18 @@ module UsersHelper
end end
end end
# 获取消息角色
def applied_project_message_type role
case role
when 1
"管理员"
when 2
"开发人员"
when 3
"报告人员"
end
end
def get_resource_origin attach def get_resource_origin attach
type = attach.container_type type = attach.container_type
content = attach.container content = attach.container
@ -690,4 +702,18 @@ module UsersHelper
end end
result_ids result_ids
end end
#课程的班级列表最近更新时间
def syllabus_course_list_sort syllabuses
syllabuses.each do |sy|
updated_at = sy.updated_at
courses = sy.courses.not_deleted
unless courses.empty?
course_ids = "(" + courses.map { |course| course.id}.join(",") + ")"
updated_at = CourseActivity.where("course_id in #{course_ids}").order("updated_at desc").first.updated_at
end
sy[:last_update] = updated_at
end
syllabuses
end
end end

@ -364,22 +364,29 @@ module WatchersHelper
:class => "pr_join_a" ,:id=>id :class => "pr_join_a" ,:id=>id
end end
#申请加入项目 # 申请加入项目
def join_in_project_link(project, user, options=[]) def join_in_project_link(project, user, options=[])
return '' unless user && user.logged?
applied = project.applied_projects.find_by_user_id(user.id) applied = project.applied_projects.find_by_user_id(user.id)
text = applied ? l(:label_unapply_project) : l(:label_apply_project) text = applied ? l(:label_unapply_project) : l(:label_apply_project)
@applied_flag = project.instance_of?(Project) url = applied_join_project_path(:object_id => project.id)
method = 'post'
@applied_flag = project.instance_of?(Project)
if applied if applied
appliedid = applied.id link = "<a class ='pr_join_a'>#{text}</a>"
else
link = link_to(text, url, :remote => true, :method => method, :id => "#{project.id}", :class => "pr_join_a")
end end
id = applied_css(project) link.html_safe
url = appliedproject_path( # if applied
:id=>appliedid, # appliedid = applied.id
:user_id => user.id, # end
:project_id => project.id) # id = applied_css(project)
method = applied ? 'delete' : 'post' # url = appliedproject_path(
link_to text, url, :remote => true, :method => method , :class => "pr_join_a",:id => id # :id=>appliedid,
# :user_id => user.id,
# :project_id => project.id)
# method = applied ? 'delete' : 'post'
# link_to text, url, :remote => true, :method => method , :class => "pr_join_a",:id => id
end end
def paginateHelper obj, pre_size=20 def paginateHelper obj, pre_size=20

@ -1,18 +1,16 @@
class AppliedProject < ActiveRecord::Base class AppliedProject < ActiveRecord::Base
attr_accessible :project_id, :user_id attr_accessible :project_id, :user_id, :role
belongs_to :user belongs_to :user
belongs_to :project belongs_to :project
has_many :forge_messages, :class_name => 'ForgeMessage', :as => :forge_message, :dependent => :destroy has_many :applied_messages, :class_name => 'AppliedMessage', :as => :applied, :dependent => :destroy
after_create :send_appliled_message after_create :send_appliled_message
# 仅仅给项目管理人员发送消息
def send_appliled_message def send_appliled_message
# if MessageAll.where("message_type = '#{self.class.to_s}' and message_id = '#{self.id}'").first.nil? self.project.managers.each do |member|
self.project.members.each do |m| self.applied_messages << AppliedMessage.new(:user_id => member.user_id, :status => true, :viewed => false)
if m.roles.first.to_s.include?("Manager")
self.forge_messages << ForgeMessage.new(:user_id => m.user_id, :project_id => self.project_id, :viewed => false)
end
end end
# end # end
end end

@ -53,7 +53,15 @@ class Member < ActiveRecord::Base
new_role_ids = ids - role_ids new_role_ids = ids - role_ids
# Add new roles # 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) # Remove roles (Rails' #role_ids= will not trigger MemberRole#on_destroy)
member_roles_to_destroy = member_roles.select {|mr| !ids.include?(mr.role_id)} member_roles_to_destroy = member_roles.select {|mr| !ids.include?(mr.role_id)}
if member_roles_to_destroy.any? if member_roles_to_destroy.any?

@ -16,6 +16,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class MemberRole < ActiveRecord::Base class MemberRole < ActiveRecord::Base
# multi_role 课程中的多重角色 0单角色/学生1管理员&学生2教师&学生3教辅&学生
belongs_to :member belongs_to :member
belongs_to :role belongs_to :role

@ -269,6 +269,11 @@ class Project < ActiveRecord::Base
notified.collect(&:mail) notified.collect(&:mail)
end end
# 返回为member类型数组
def managers
self.members.includes(:roles).select{|member| member.roles[0].try(:name) == "Manager"}
end
def initialize(attributes=nil, *args) def initialize(attributes=nil, *args)
super super
@ -905,6 +910,24 @@ class Project < ActiveRecord::Base
User.find(self.user_id) User.find(self.user_id)
end end
# 延迟生成邀请码
def invite_code
return generate_invite_code
end
# 生成邀请码
# 如果已有改邀请码,则重新生成
CODES = %W(2 3 4 5 6 7 8 9 A B C D E F G H J K L N M O P Q R S T U V W X Y Z)
def generate_invite_code
code = read_attribute(:invite_code)
if !code || code.size <5
code = CODES.sample(5).join
return generate_invite_code if Project.where(invite_code: code).present?
update_attribute(:invite_code, code)
end
code
end
private private
def after_parent_changed(parent_was) def after_parent_changed(parent_was)

@ -823,7 +823,7 @@ class User < Principal
# Find course membership # Find course membership
membership = coursemembership(course) membership = coursemembership(course)
if membership if membership
roles = membership.roles roles = membership.roles.where("is_current = 1")
else else
@role_non_member ||= Role.non_member @role_non_member ||= Role.non_member
roles << @role_non_member roles << @role_non_member
@ -918,6 +918,12 @@ class User < Principal
end end
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 # Return true if the user is allowed to do the specified action on a specific context
# Action can be: # Action can be:

@ -391,6 +391,101 @@ class CoursesService
{:state => @state,:course => course} {:state => @state,:course => course}
end 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.homeworks.count
#学生提问数量获取 bid.commit.nil? ? 0 : bid.commit #学生提问数量获取 bid.commit.nil? ? 0 : bid.commit

@ -0,0 +1,29 @@
<div class="sy_popup_top">
<h3 class="fl">欢迎加入项目</h3>
<a href="javascript:void(0);" class="sy_icons_close fr" onclick="hideModal()"></a>
<div class="cl"></div>
</div>
<div class="sy_popup_con" style="width:370px;">
<%= form_tag( url_for(:controller => 'applied_project', :action => 'applied_project_info', :project_id => @project.id), :remote => true, :id => 'project_applied_form') do %>
<ul class="sy_popup_add ">
<li>
<label >项目邀请码:</label>
<input name="invite_code" class=" sy_input_txt fl" placeholder="请输入六位项目邀请码" style="width:250px"/>
<div class="cl"></div>
</li>
<li>
<label >身份:</label>
<input name="member" value="member_manager" type="radio" class="ml5 mr5 " /><span class="mr10">管理人员</span>
<input name="member" value="member_developer" type="radio" class="ml5 mr5 " /><span class="mr10">开发人员</span>
<input name="member" value="member_reporter" type="radio" class="ml5 mr5 " /><span class="mr10">报告人员</span>
<div class="cl"></div>
</li>
<li>
<label>&nbsp;</label>
<div class="courseSendSubmit mr15"><a href="javascript:void(0);" class="sy_btn_blue fl" onclick="$('#project_applied_form').submit();hideModal()">确&nbsp;&nbsp;定</a></div>
<a href="javascript:void(0);" class="sy_btn_grey fl ml20" onclick="hideModal()">取&nbsp;&nbsp;消</a>
<div class="cl"></div>
</li>
</ul>
<% end %>
</div>

@ -0,0 +1,25 @@
<div id="sy_popup_box" style="width:380px;">
<div class="sy_popup_top sy_popup_top_tishi">
<h3 class="fl">提示</h3>
<a href="javascript:void(0);" class="sy_icons_close02 fr" onclick="hideModal()"></a>
<div class="cl"></div>
</div>
<div class="sy_popup_con02" >
<ul class="sy_popup_tishi ">
<li>
<% if @flag == 1 %>
<p>您输入的邀请码错误</p>
<% elsif @flag == 2 %>
<p>您已经是该项目成员</p>
<% elsif @flag == 3 %>
<p>请选择一个角色</p>
<% elsif @flag == 4 %>
<p>您的申请已提交,请等待项目管理员审批</p>
<% end %>
</li>
<li>
<a href="javascript:void(0);" class="sy_btn_blue " onclick="hideModal()">知道了</a>
</li>
</ul>
</div>
</div>

@ -1,14 +1,3 @@
// @status: 0 该项目不存在1 不重复加入2 成功加入; 3 已是项目成员;其它 加入失败 var htmlvalue = "<%= escape_javascript(render :partial => 'applied_join_project', locals: {:project_id => @project.id}) %>";
<% if @status == 0%> pop_box_new(htmlvalue,460,40,50);
alert("<%= l('project.join.tips.notexist') %>");
<% elsif @status == 1%>
alert("<%= l('project.join.tips.repeat') %>");
<% elsif @status == 2%>
alert("<%= l('project.join.tips.success') %>");
hideModal($("#popbox"));
$("#applied_project_link_<%= @project.id%>").replaceWith("<%=escape_javascript(link_to '取消申请',appliedproject_applied_path(:project_id => @project.id,:user_id => User.current.id),:class => "blue_n_btn fr mt20", :remote => "true",:method => "delete",:id => "applied_project_link_#{@project.id}")%>");
<% elsif @status == 3%>
alert("<%= l('project.join.tips.has') %>");
<%else%>
alert("<%= l('project.join.tips.fail') %>");
<%end%>

@ -0,0 +1,3 @@
var htmlvalue = "<%= escape_javascript(render :partial => 'applied_project/applied_project_tip', locals: {:project_id => @project.id}) %>";
pop_box_new(htmlvalue,380,40,50);
//$("#join_in_project").attr('href','<%#= join_in_project_link(@project, User.current) %>');

@ -92,7 +92,7 @@
<% end %> <% end %>
<% if options[:author] %> <% if options[:author] %>
<span class="author" title="<%= attachment.author%>"> <span class="author" title="<%= attachment.author%>">
<%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author),:class => "c_orange" %>, <%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author),:class => "link-blue" %>,
<%= format_time(attachment.created_on) %> <%= format_time(attachment.created_on) %>
</span> </span>
<% end %> <% end %>

@ -1,5 +1,5 @@
<% if @in_user_homepage %> <% if @in_user_homepage %>
<% homepage = BlogComment.find(User.current.blog.homepage_id) %> <% homepage = BlogComment.find(@user.blog.homepage_id) %>
$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'blogs/homepage', :locals => {:activity => @blog_comment, :user_activity_id => homepage.id}) %>"); $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'blogs/homepage', :locals => {:activity => @blog_comment, :user_activity_id => homepage.id}) %>");
<% else%> <% else%>
$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/user_blog', :locals => {:activity => @blog_comment,:user_activity_id =>@user_activity_id}) %>"); $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/user_blog', :locals => {:activity => @blog_comment,:user_activity_id =>@user_activity_id}) %>");

@ -1,6 +1,5 @@
<div class="resources mt10" id="user_activity_<%= user_activity_id%>" > <div class="resources mt10" id="user_activity_<%= user_activity_id%>" >
<div class="homepagePostBrief" onmouseover="$('#homepage_message_setting_<%=activity.id%>').show();" onmouseout="$('#homepage_message_setting_<%= activity.id%>').hide();"> <div class="homepagePostBrief" onmouseover="$('#homepage_message_setting_<%=activity.id%>').show();" onmouseout="$('#homepage_message_setting_<%= activity.id%>').hide();">
<div class="homepagePostDes">
<% if activity.author.id == User.current.id%> <% if activity.author.id == User.current.id%>
<div class="homepagePostSetting" id="homepage_message_setting_<%= activity.id%>" style="display: none"> <div class="homepagePostSetting" id="homepage_message_setting_<%= activity.id%>" style="display: none">
<ul> <ul>
@ -35,7 +34,6 @@
</ul> </ul>
</div> </div>
<%end%> <%end%>
<div class="cl"></div>
<div class="homepagePostTitle hidden m_w530"> <div class="homepagePostTitle hidden m_w530">
<%= link_to activity.title.to_s.html_safe, user_blog_blog_comment_path(:user_id=>activity.author_id, <%= link_to activity.title.to_s.html_safe, user_blog_blog_comment_path(:user_id=>activity.author_id,
:blog_id=>activity.blog.id,:id=>activity), :class=> "postGrey", :style => 'text-align:center;' %> :blog_id=>activity.blog.id,:id=>activity), :class=> "postGrey", :style => 'text-align:center;' %>
@ -45,7 +43,6 @@
<div class="cl"></div> <div class="cl"></div>
<div id="intro_content_show_<%= user_activity_id%>" class="fr" style="display:none;"><a href="javascript:void(0);" class="linkBlue">[展开]</a></div> <div id="intro_content_show_<%= user_activity_id%>" class="fr" style="display:none;"><a href="javascript:void(0);" class="linkBlue">[展开]</a></div>
<div id="intro_content_hide_<%= user_activity_id%>" class="fr" style="display:none;"><a href="javascript:void(0);" class="linkBlue">[收起]</a></div> <div id="intro_content_hide_<%= user_activity_id%>" class="fr" style="display:none;"><a href="javascript:void(0);" class="linkBlue">[收起]</a></div>
</div>
<div class="cl"></div> <div class="cl"></div>
</div> </div>
<% all_comments = []%> <% all_comments = []%>
@ -57,7 +54,7 @@
<% comments = get_all_children(all_comments, activity)[0..2] %> <% comments = get_all_children(all_comments, activity)[0..2] %>
<% if count > 0 %> <% if count > 0 %>
<div class="" id="reply_div_<%= user_activity_id %>"> <div class="" id="reply_div_<%= user_activity_id %>">
<%= render :partial => 'users/message_replies', :locals => {:comments => comments, :user_activity_id => user_activity_id, :type => 'BlogComment', :activity_id =>activity.id, :homepage => 1}%> <%= render :partial => 'users/message_replies', :locals => {:comments => comments, :user_activity_id => user_activity_id, :type => 'BlogComment', :activity_id =>activity.id, :homepage => 1, :user_id => activity.author_id}%>
</div> </div>
<% end %> <% end %>

@ -114,7 +114,7 @@
<label class="fl"> <label class="fl">
<input name="course_content_type[]" type="checkbox" value="1" class="resourceCopy"/> <input name="course_content_type[]" type="checkbox" value="1" class="resourceCopy"/>
资源</label> 资源</label>
<span class="c_red ml5 fl mb10">复制到新班级的资源将在1个月后发布请您调整资源的发布时间否则学生可能看不到资源。</span> <span class="c_red ml5 fl mb10">复制到新班级的资源将在1个月后发布请您调整资源的发布时间否则学生看不到资源。</span>
</li> </li>
</ul> </ul>
<!--<ul class="fl" id="copyResource2"> <!--<ul class="fl" id="copyResource2">

@ -36,7 +36,7 @@
</li> </li>
<% @roles.each do |role| %> <% @roles.each do |role| %>
<li> <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> <label ><%= zh_course_role(h role) %></label>
</li> </li>
<% end %> <% end %>
@ -47,4 +47,23 @@
</a> </a>
</div> </div>
<% end%> <% end%>
</div><!-- 右边 end--> </div><!-- 右边 end-->
<script>
$(function() {
$("#add_member_checkbox_7").on('click', function(){
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(){
if($("#add_member_checkbox_9").is(":checked")) {
$("#add_member_checkbox_7").attr('disabled', 'disabled');
} else {
$("#add_member_checkbox_7").removeAttr('disabled');
}
});
});
</script>

@ -1,100 +1,52 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <div id="sy_popup_box">
<html xmlns="http://www.w3.org/1999/xhtml"> <div class="sy_popup_top">
<head> <h3 class="fl">欢迎加入班级</h3>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <a href="javascript:void(0);" class="sy_icons_close fr" onclick="hideModal()"></a>
<title>快速进入班级通道</title> <div class="cl"></div>
<style> </div>
#popbox{ font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; background:#fff; font-style:normal;} <div class="sy_popup_con">
#popbox div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span{ margin:0; padding:0;} <%= form_tag({:controller => 'courses', :action => 'join_course_multi_role'}, :remote => true, :method => :post, :id => 'new-watcher-form') do %>
#popbox div,img,tr,td{ border:0;} <ul class="sy_popup_add ">
#popbox table,tr,td{border:0; cellspacing:0; cellpadding:0;} <li>
#popbox ul,li{ list-style-type:none} <label>班级邀请码:</label>
#popbox .cl{ clear:both; overflow:hidden; } <input class=" sy_input_txt fl" name="invite_code" placeholder="请输入五位班级邀请码">
#popbox a{ text-decoration:none; }
#popbox a:hover{}
.alert_box {width:488px;height:550px;position:fixed;z-index:1002;left:50%;top:40%;margin:-215px 0 0 -300px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; padding:5px; overflow:auto; } <div class="cl"></div>
#popbox{width:488px;height:368px;} </li>
.alert .C{width:476px;height:296px;position:absolute;left:5px;top:5px; } <li>
#popbox .C_top{ margin-top:20px; width:368px; height:100px; background:#e9e9e9; padding:0px 60px; } <label>身份:</label>
#popbox .C_top h2{ color:#1c1d1d; font-size:24px; font-style:normal; font-weight:normal;} <input type="checkbox" name="role[]" value="9" id="join_course_role_9" class="ml5 mr5 "/><span class="mr10">教师</span>
#popbox .C_top p{ color:#a9aaaa; line-height:22px;} <input type="checkbox" name="role[]" value="7" id="join_course_role_7" class="ml5 mr5"/><span class="mr10">助教</span>
#popbox .C_form{ margin:20px 0 0 60px;} <input type="checkbox" name="role[]" value="10" id="join_course_role_10" class="ml5 mr5"/><span class="mr10">学生</span>
#popbox .C_form ul li{ font-size:14px; color:#3f3a39; line-height:30px; }
#popbox .C_form ul li input{ margin-left:20px; border:0px; border:1px solid #e1e1e1; color:#898989; padding-left:5px; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; padding: 0 !important; }
#popbox .C_form ul li.mB5{ color:#898989; font-size:12px; padding-left:97px;}
#popbox .width190{ width:190px; height:26px; border-color:#e1e1e1;}
#popbox .C_form a{ font-size:12px; color:#15bccf; float:left; display:block; height:40px; width:200px; margin-top:25px;}
#popbox .C_form a:hover{ text-decoration:underline;}
#popbox .C_form a.btn_join{ display:block; width:100px; height:36px; padding-top:4px; text-align: center; background:#269ac9; color:#fff; font-size:14px; margin:20px 20px 0 95px;}
#popbox .C_form a.btn_join:hover{ background:#297fb8; text-decoration: none;}
#popbox .C_form a.btn_cancel{ display:block; width:100px; height:36px; padding-top:4px; text-align: center; background:#c1c1c1; color:#fff; font-size:14px; margin:20px 20px 0 95px;}
#popbox .C_form a.btn_cancel:hover{ background:#717171; text-decoration: none;}
#popbox .IDType {border:1px solid #e1e1e1; outline: none; width: 65px; height: 25px;}
</style>
<script type="text/javascript">
function submit_form(obj)
{
$("#new-watcher-form").submit();
}
function hidden_join_course_form() <div class="cl"></div>
{ </li>
hideModal($("#popbox")); <li>
} <label>&nbsp;</label>
</script> <a href="javascript:void(0);" class="sy_btn_blue fl" onclick="$('#new-watcher-form').submit();hideModal()">确&nbsp;&nbsp;定</a>
</head> <a href="javascript:void(0);" class="sy_btn_grey fl ml20" onclick="hideModal()">取&nbsp;&nbsp;消</a>
<body> <div class="cl"></div>
<div id="popbox"> </li>
<div class="C" > </ul>
<div class="C_top"> <% end %>
<h2>快速加入班级通道</h2> </div>
<p>只要持有班级邀请码,就可以快速加入所在班级。班级页面搜索不到的私有班级只能从此通道进入哦!</p>
</div>
<div class="C_form">
<%= form_tag({:controller => 'courses',
:action => 'join'},
:remote => true,
:method => :post,
:id => 'new-watcher-form') do %>
<ul>
<li>
<input type="text" style="display: none"/> <!--阻止表单自动填充 -->
<input type="password" style="display: none"/> <!--阻止表单自动填充 -->
<span class="tips" style="width: 90px; display: inline-block;">班级邀请码:</span>
<input class="width190" style="margin-left: 0px;" name="invite_code" id="object_id" type="text" value="" >
<input type="text" style="display: none"/>
</li>
<li class="mB5">班级邀请码是所在班级页面中显示的邀请码</li>
<li style="margin-top: 15px;">
<span style="margin-right: 5px;"><span style="margin-right:43px;">身</span><span>份</span></span>
<% if User.current.logged? && User.current.extensions && User.current.extensions.identity == 0%>
<select name="role" class="IDType">
<option value="9">教师</option>
<option value="7">教辅</option>
<option value="10">学生</option>
</select>
<%else%>
<select name="role" class="IDType">
<option value="10">学生</option>
<option value="7">教辅</option>
</select>
<%end%>
</li>
<li>
<a href="javascript:" class="btn_join" style="margin-left: 50px;" onclick="submit_form(this);">
<%= l(:label_new_join) %>
</a>
<a href="javascript:" class="btn_cancel" style="margin-left: 20px;" onclick="hideModal(this);">
<%= l(:button_cancel)%>
</a>
</li>
</ul>
<% end%>
</div>
</div><!---- C end---->
</div> </div>
</body> <script>
</html> $(function() {
$("#join_course_role_7").on('click', function(){
if($("#join_course_role_7").is(":checked")) {
$("#join_course_role_9").attr('disabled', 'disabled');
} else {
$("#join_course_role_9").removeAttr('disabled');
}
});
$("#join_course_role_9").on('click', function(){
if($("#join_course_role_9").is(":checked")) {
$("#join_course_role_7").attr('disabled', 'disabled');
} else {
$("#join_course_role_7").removeAttr('disabled');
}
});
});
</script>

@ -10,7 +10,7 @@
) do |f| %> ) do |f| %>
<% @roles.each do |role| %> <% @roles.each do |role| %>
<ul style="text-align: left;" class="ml45"> <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? } %> :disabled => member.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } %>
<label ><%= zh_course_role(h role) %></label> <label ><%= zh_course_role(h role) %></label>
</ul> </ul>
@ -35,4 +35,25 @@
:data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {confirm: l(:label_delete_confirm)}) if member.deletable? %> :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {confirm: l(:label_delete_confirm)}) if member.deletable? %>
<% end%> <% end%>
</li> </li>
<% end%>
<script>
$(function() {
$("#edit_member_role_<%=member.id %>_7").on('click', function(){
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(){
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');
}
});
});
</script>
<% end%>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save