diff --git a/app/controllers/homework_attach_controller.rb b/app/controllers/homework_attach_controller.rb
index c4c1f8922..09d357ebf 100644
--- a/app/controllers/homework_attach_controller.rb
+++ b/app/controllers/homework_attach_controller.rb
@@ -2,7 +2,7 @@ class HomeworkAttachController < ApplicationController
###############################
#判断当前角色权限时需先找到当前操作的project
before_filter :find_project_by_bid_id, :only => [:new]
- before_filter :find_project_by_hoemwork_id, :only => [:edit,:update,:destroy]
+ before_filter :find_project_by_hoemwork_id, :only => [:edit,:update,:destroy,:show,:add_homework_users,:destory_homework_users]
#判断当前角色是否有操作权限
#勿删 before_filter :authorize, :only => [:new,:edit,:update,:destroy]
@@ -26,12 +26,45 @@ class HomeworkAttachController < ApplicationController
end
end
- def add_users users
- if users != nil && users.count > 0
- users.each do |user|
- @homework.homework_users.build(:user_id => user.id)
- @homework.save
+ #作业添加成员(参与人员)
+ def add_homework_users
+ if User.current.admin? || User.current == @homework.user
+ #@homework = HomeworkAttach.find(params[:id])
+ if params[:membership]
+ if params[:membership][:user_ids]
+ attrs = params[:membership].dup
+ user_ids = attrs.delete(:user_ids)
+ user_ids.each do |user_id|
+ @homework.homework_users.build(:user_id => user_id)
+ end
+ end
end
+ @homework.save
+ @hoemwork_users = users_for_homework(@homework)
+ @members = members_for_homework(@homework,@hoemwork_users,params[:q])
+ @members = paginateHelper @members,10
+ respond_to do |format|
+ format.js
+ end
+ else
+ render_403 :message => :notice_not_authorized
+ end
+ end
+
+ #作业删除成员(参与人员)
+ def destory_homework_users
+ #@homework = HomeworkAttach.find(params[:id])
+ if User.current.admin? || User.current == @homework.user
+ homework_user = @homework.homework_users.where("user_id = #{params[:user_id]}").first
+ homework_user.destroy
+ @hoemwork_users = users_for_homework(@homework)
+ @members = members_for_homework(@homework,@hoemwork_users,params[:q])
+ @members = paginateHelper @members,10
+ respond_to do |format|
+ format.js
+ end
+ else
+ render_403 :message => :notice_not_authorized
end
end
@@ -78,8 +111,10 @@ class HomeworkAttachController < ApplicationController
def new
@bid = Bid.find(params[:id])
if User.current.admin? || User.current.member_of?(@bid.courses.first)
- @members = @bid.courses.first.members.joins(:member_roles).where("member_roles.role_id IN (:role_id) and user_id <> #{User.current.id}", {:role_id => [5, 10]})
+ #该课程的学生的集合(新建不实现功能:添加成员)
+ #@members = @bid.courses.first.members.joins(:member_roles).where("member_roles.role_id IN (:role_id) and user_id <> #{User.current.id}", {:role_id => [5, 10]})
+ #@members = paginateHelper @members,10
#@all_user = []
#@bid.courses.first.members.each do |member|
# @all_user << member.user
@@ -96,30 +131,52 @@ class HomeworkAttachController < ApplicationController
end
end
- #获取指定作业的所有成员
- def members_for_homework homework
- people = []
- if homework != nil
- people << homework.user
- homework.homework_users do |homework_user|
- people << homework_user.user
- end
+ #获取作业成员的集合
+ def get_homework_member_list
+ @homework = HomeworkAttach.find(params[:bid_id])
+ course = @homework.bid.courses.first
+ if User.current.admin? || User.current.member_of?(course)
+ @hoemwork_users = users_for_homework(@homework)
+ @members = members_for_homework(@homework,@hoemwork_users,params[:q])
+ #该课程的学生的集合
+ #@members = course.members.joins(:member_roles).where("member_roles.role_id IN (:role_id)", {:role_id => [5, 10]})
+ @members = paginateHelper @members,10
else
+ raise "error"
end
- people
+ respond_to do |format|
+ format.js
+ end
+ end
+
+ #获取指定作业的所有成员
+ def users_for_homework homework
+ homework.nil? ? [] : (homework.users + [homework.user])
+ end
+
+ #获取可选成员列表
+ #homework:作业
+ #users:该作业所有成员
+ def members_for_homework homework,users,q
+ homework.bid.courses.first.members.joins(:member_roles).where("member_roles.role_id IN (:role_id) and user_id not in (:users)", {:role_id => [5, 10],:users => users}).joins(:user).where("users.login like '%#{q}%'")
end
def edit
- @homework = HomeworkAttach.find(params[:id])
+ #@homework = HomeworkAttach.find(params[:id])
if User.current.admin? || User.current.member_of?(@homework.bid.courses.first)
+ #@members = @homework.bid.courses.first.members.joins(:member_roles).where("member_roles.role_id IN (:role_id)", {:role_id => [5, 10]})
+ @hoemwork_users = users_for_homework(@homework)
+ @members = members_for_homework(@homework,@hoemwork_users,params[:q])
+ @members = paginateHelper @members,10
else
render_403 :message => :notice_not_authorized
end
end
def update
- @homework = HomeworkAttach.find(params[:id])
- if User.current.admin? || User.current.member_of?(@homework.bid.courses.first)
+ #@homework = HomeworkAttach.find(params[:id])
+ course = @homework.bid.courses.first
+ if User.current.admin? || User.current.member_of?(course)
name = params[:homework_name]
description = params[:homework_description]
@homework.name = name
@@ -140,7 +197,7 @@ class HomeworkAttachController < ApplicationController
end
def destroy
- @homework = HomeworkAttach.find(params[:id])
+ #@homework = HomeworkAttach.find(params[:id])
if User.current.admin? || User.current.member_of?(@homework.bid.courses.first)
if @homework.destroy
respond_to do |format|
@@ -156,7 +213,7 @@ class HomeworkAttachController < ApplicationController
#显示作业信息
def show
- @homework = HomeworkAttach.find(params[:id])
+ #@homework = HomeworkAttach.find(params[:id])
if User.current.admin? || User.current.member_of?(@homework.bid.courses.first)
# 打分统计
stars_reates = @homework.
diff --git a/app/helpers/bids_helper.rb b/app/helpers/bids_helper.rb
index a41867c64..a5c25ecb5 100644
--- a/app/helpers/bids_helper.rb
+++ b/app/helpers/bids_helper.rb
@@ -155,27 +155,6 @@ module BidsHelper
end
people.include?(User.current)
end
- #当前用户是不是指定课程的学生
- def is_cur_course_student? course
- #people = []
- #course.members.includes(:user, :roles).each do |member|
- # if [5,10].include? member.roles.first.id
- # people << member.user
- # end
- #end
- #people.include?(User.current)
- #修改:能新建占位且不能新建任务的角色判定为学生
- is_student = false
- @membership = User.current.memberships.all(:conditions => Project.visible_condition(User.current))
- @membership.each do |membership|
- unless(membership.project.project_type==0)
- if !User.current.allowed_to?({:controller => "projects", :action => "new_homework"}, membership.project, :global => false) && User.current.allowed_to?({:controller => "homework_attach", :action => "new"}, membership.project, :global => false)
- is_student = true
- end
- end
- end
- is_student
- end
# def select_option_helper option
# tmp = Hash.new
diff --git a/app/helpers/homework_attach_helper.rb b/app/helpers/homework_attach_helper.rb
index ed8d0949b..28bb48d3c 100644
--- a/app/helpers/homework_attach_helper.rb
+++ b/app/helpers/homework_attach_helper.rb
@@ -9,35 +9,49 @@ module HomeworkAttachHelper
end
#作业添加、编辑界面的tab页
def homework_settings_tabs f
- @project = Project.find 76
@f = f
- tabs = [{:name => 'info', :action => :edit_homework, :partial => 'homework_attach/edit_homework', :label => :label_information_plural},
- {:name => 'members', :action => :homework_member, :partial => 'homework_attach/homework_member', :label => :label_member_plural}
+ tabs = [{:name => 'info', :partial => 'homework_attach/edit_homework', :label => :label_information_plural},
+ {:name => 'members', :partial => 'homework_attach/homework_member', :label => :label_member_plural}
]
- #tabs.select {|tab| User.current.allowed_to?(tab[:action], @homework)}
end
#作业可选成员列表分页
def render_new_members_for_homework members
#scope = Principal.active.sorted.not_member_of(project).like(params[:q])
#scope = project.members
- principal_count = members.count
- limit = 10
- principal_pages = Redmine::Pagination::Paginator.new principal_count, limit, params['page'] #by young
- offset ||= principal_pages.offset
- principals = members[offset, limit]
- s = content_tag('div', member_check_box_tags_ex('membership[user_ids][]', principals), :id => 'principals')
- links = pagination_links_full(principal_pages, principal_count, :per_page_links => false,:remote => true)
-
- s + content_tag('div', content_tag('ul', links), :class => 'pagination_new')
+ #principals = paginateHelper members,10
+ #principals = members
+ #principal_count = members.count
+ #limit = 10
+ #principal_pages = Redmine::Pagination::Paginator.new principal_count, limit, params['page'] #by young
+ #offset ||= principal_pages.offset
+ #principals = members[offset, limit]
+ users = members.map(&:user)
+ s = content_tag('div', member_check_box_tags_ex('membership[user_ids][]', users), :id => 'principals')
+ links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false) {|text, parameters, options|
+ link_to text, get_homework_member_list_homework_attach_index_path( parameters.merge(:q => params[:q], bid_id: params[:id]||@homework)), :remote => true }
+ return s + content_tag('div', content_tag('ul', links), :class => 'pagination_new')
end
#扩展的checkbox生成
def member_check_box_tags_ex(name, principals)
s = ''
principals.each do |member|
- s << "\n"
+ s << "
"
end
s.html_safe
end
+
+ def paginateHelper obj, pre_size=20
+ @obj_count = obj.count
+ @obj_pages = Redmine::Pagination::Paginator.new @obj_count, pre_size, params['page']
+ if obj.kind_of? ActiveRecord::Base or obj.kind_of? ActiveRecord::Relation
+ obj.limit(@obj_pages.per_page).offset(@obj_pages.offset)
+ elsif obj.kind_of? Array
+ obj[@obj_pages.offset, @obj_pages.per_page]
+ else
+ logger.error "[ApplicationController] Error : application_controller#paginateHelper ===> unknow category: #{obj.class}"
+ raise RuntimeError, 'unknow type, Please input you type into this helper.'
+ end
+ end
end
\ No newline at end of file
diff --git a/app/models/homework_attach.rb b/app/models/homework_attach.rb
index ad59d107d..c801885b1 100644
--- a/app/models/homework_attach.rb
+++ b/app/models/homework_attach.rb
@@ -7,6 +7,7 @@ class HomeworkAttach < ActiveRecord::Base
belongs_to :bid
has_many :journals_for_messages, :as => :jour, :dependent => :destroy
has_many :homework_users, :dependent => :destroy
+ has_many :users, :through => :homework_users
seems_rateable :allow_update => true, :dimensions => :quality
safe_attributes "bid_id",
diff --git a/app/models/homework_user.rb b/app/models/homework_user.rb
index 0adef62c4..df75ef821 100644
--- a/app/models/homework_user.rb
+++ b/app/models/homework_user.rb
@@ -1,6 +1,6 @@
class HomeworkUser < ActiveRecord::Base
attr_accessible :homework_attach_id, :user_id
- belongs_to :homework_attach
+ belongs_to :homework_attach, :foreign_key => :homework_attach_id
belongs_to :user
end
diff --git a/app/models/user.rb b/app/models/user.rb
index 4255346b0..e85876618 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -73,7 +73,8 @@ class User < Principal
['none', :label_user_mail_option_none]
]
- belongs_to :homework_user
+ has_many :homework_users
+ has_many :homework_attaches, :through => :homework_users
has_and_belongs_to_many :groups, :after_add => Proc.new {|user, group| group.user_added(user)},
:after_remove => Proc.new {|user, group| group.user_removed(user)}
diff --git a/app/views/documents/show.html.erb b/app/views/documents/show.html.erb
index a7bbc3135..d626fe30c 100644
--- a/app/views/documents/show.html.erb
+++ b/app/views/documents/show.html.erb
@@ -16,8 +16,8 @@
<%= l(:label_user) %> | -<%= l(:label_role_plural) %> | -- <%= call_hook(:view_projects_settings_members_table_header, :project => @project) %> + |
---|
<%= l(:label_user) %> | +<%= l(:label_role_plural) %> | ++ | ||
---|---|---|---|---|
<%= link_to_user homework.user %> | +发布人员 | +|||
<%= link_to_user member.principal %> | -
-
- <%= h member.roles.sort.collect(&:to_s).join(', ') %>
-
- <%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member),
- :method => :put,
- :html => {:id => "member-#{member.id}-roles-form", :class => 'hol'}}
- ) do |f| %>
-
-
- <% roles.each do |role| %>
- <%= submit_tag l(:button_change), :class => "small" %> - <%= link_to_function l(:button_cancel), - "$('#member-#{member.id}-roles').show(); $('#member-#{member.id}-roles-form').hide(); return false;" - %> - <% end %> - |
-
- <% if @project.project_type == 1 %>
- <% if member.roles.first.to_s == "Manager" %>
- - <% else %> - | - <%= link_to_function l(:button_edit), - "$('#member-#{member.id}-roles').hide(); $('#member-#{member.id}-roles-form').show(); return false;", - :class => 'icon icon-edit' %> - <%= delete_link membership_path(member), - :remote => true, - :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {}) if member.deletable? %> - | - <% end %> - <% else %> -- <%= link_to_function l(:button_edit), - "$('#member-#{member.id}-roles').hide(); $('#member-#{member.id}-roles-form').show(); return false;", - :class => 'icon icon-edit' %> - <%= delete_link membership_path(member), - :remote => true, - :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {}) if member.deletable? %> - | + <% hoemwork_users.each do |user| %> +
<%= link_to_user user %> | +参与人员 | +<%= link_to l(:button_delete),destory_homework_users_homework_attach_path(:user_id=>user),:remote => true, :method => :post %> | <% end %> - - <%= call_hook(:view_projects_settings_members_table_row, {:project => @project, :member => member}) %>
<%= l(:label_no_data) %>
- <% end %> + <% end %> + +标 题: - <%= @f.text_field "name", :required => true, :size => 60, :style => "width:490px;" %> + <%= f.text_field "name", :required => true, :size => 60, :style => "width:490px;" %>
描 述: - <%= @f.text_area "description", :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;" %> + <%= f.text_area "description", :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;" %>
diff --git a/app/views/homework_attach/add_homework_users.js.erb b/app/views/homework_attach/add_homework_users.js.erb new file mode 100644 index 000000000..dc4b0cc56 --- /dev/null +++ b/app/views/homework_attach/add_homework_users.js.erb @@ -0,0 +1 @@ +$('#content2').html('<%= escape_javascript(render(:partial => 'homework_member', :locals => {:members => @members,:hoemwork_users =>@hoemwork_users,:homework => @homework} )) %>'); \ No newline at end of file diff --git a/app/views/homework_attach/destory_homework_users.js.erb b/app/views/homework_attach/destory_homework_users.js.erb new file mode 100644 index 000000000..dc4b0cc56 --- /dev/null +++ b/app/views/homework_attach/destory_homework_users.js.erb @@ -0,0 +1 @@ +$('#content2').html('<%= escape_javascript(render(:partial => 'homework_member', :locals => {:members => @members,:hoemwork_users =>@hoemwork_users,:homework => @homework} )) %>'); \ No newline at end of file diff --git a/app/views/homework_attach/edit.html.erb b/app/views/homework_attach/edit.html.erb index 80292340f..a36c1a8bf 100644 --- a/app/views/homework_attach/edit.html.erb +++ b/app/views/homework_attach/edit.html.erb @@ -1,35 +1,63 @@ -
<%=raw l(:label_new_homework)%>
-<%=raw l(:label_edit_homework)%>
+- 标 题: - <%= f.text_field :name, :required => true, :name => "homework_name", :size => 60, :style => "width:490px;"%> -
-- 描 述: - - <%= f.text_area :description, :rows => 8, :name => "homework_description", :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;" %> - -
--
- -- - <%= submit_tag t(:label_button_ok), :sta => 0, :class => "enterprise"%> - -
++ 标 题: + <%= f.text_field :name, :required => true, :name => "homework_name", :size => 60, :style => "width:490px;"%> +
++ 描 述: + + <%= f.text_area :description, :rows => 8, :name => "homework_description", :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;" %> + +
++
+ ++ + <%= submit_tag t(:label_button_ok), :sta => 0, :class => "enterprise"%> + +
<% end %> -+ +
<%= submit_tag t(:label_button_ok), :sta => 0, :class => "enterprise"%>
<% end %> -<%= notice %>
@@ -23,7 +23,16 @@高校课程实践社区 | +<%= l(:label_user_location) %> : | + +
<%= link_to request.host()+"/courses", :controller => 'projects', :action => 'course'%> | +<%=link_to "主页", home_path %> > <%=link_to l(:label_course_practice), :controller => 'projects', :action => 'course' %> > + <%= link_to(homework_attach.bid.courses.first.name.to_s, homework_project_path(homework_attach.bid.courses.first)) if homework_attach.bid.courses.first%> > + <%=link_to(homework_attach.bid.name, respond_path(homework_attach.bid)) %> > <%= link_to homework_attach.name.nil? ? homework_attach.attachments.first.filename : homework_attach.name,homework_attach_path(homework_attach)%> |
+