添加项目管理员审核已申请用户界面及逻辑

This commit is contained in:
nwb 2014-05-22 11:58:43 +08:00
parent 80e84069a1
commit dd4ef11b3d
12 changed files with 132 additions and 36 deletions

View File

@ -4,7 +4,11 @@ class AppliedProjectController < ApplicationController
def applied_join_project
@user_id = params[:user_id]
@project = Project.find(params[:project_id])
AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id])
@applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id])
if @applieds.count == 0
AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id])
end
#redirect_to project_path(params[:project_id])
#redirect_to_referer_or {render :text => ( 'applied success.'), :layout => true}
respond_to do |format|
@ -16,10 +20,11 @@ class AppliedProjectController < ApplicationController
#取消申请
def unapplied_join_project
@project = Project.find(params[:project_id])
@applied = AppliedProject.find(params[:id])
@applied.destroy
#redirect_to project_path(params[:project_id])
#redirect_to_referer_or {render :text => ( 'unsubscribe success.'), :layout => true}
#@applied = AppliedProject.find(params[:id])
#@applied.destroy
AppliedProject.deleteappiled(params[:user_id], params[:project_id])
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' }

View File

@ -46,42 +46,55 @@ class MembersController < ApplicationController
end
def create
members = []
project_info = []
user_grades = []
if params[:membership]
if params[:membership][:user_ids]
attrs = params[:membership].dup
user_ids = attrs.delete(:user_ids)
user_ids.each do |user_id|
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id)
user_grades << UserGrade.new(:user_id => user_id, :project_id => @project.id)
## added by nie
if(params[:membership][:role_ids] && params[:membership][:role_ids][0] == "3")
project_info << ProjectInfo.new(:user_id => user_id, :project_id => @project.id)
# ProjectInfo.create(:name => "test", :user_id => 123)
if params[:refusal_button]
if params[:membership]
if params[:membership][:user_ids]
attrs = params[:membership].dup
user_ids = attrs.delete(:user_ids)
user_ids.each do |user_id|
AppliedProject.deleteappiled(user_id, @project.id)
end
## end
end
else
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => params[:membership][:user_id])
user_grades << UserGrade.new(:user_id => params[:membership][:user_id], :project_id => @project.id)
## added by nie
if(params[:membership][:role_ids] && params[:membership][:role_ids][0] == "3")
project_info << ProjectInfo.new(:project_id => @project.id, :user_id => params[:membership][:user_id])
end
## end
end
@project.members << members
# added by nie
@project.project_infos << project_info
@project.user_grades << user_grades
# end
else
members = []
project_info = []
user_grades = []
if params[:membership]
if params[:membership][:user_ids]
attrs = params[:membership].dup
user_ids = attrs.delete(:user_ids)
user_ids.each do |user_id|
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => user_id)
user_grades << UserGrade.new(:user_id => user_id, :project_id => @project.id)
## added by nie
if (params[:membership][:role_ids] && params[:membership][:role_ids][0] == "3")
project_info << ProjectInfo.new(:user_id => user_id, :project_id => @project.id)
# ProjectInfo.create(:name => "test", :user_id => 123)
end
## end
AppliedProject.deleteappiled(user_id, @project.id)
end
else
members << Member.new(:role_ids => params[:membership][:role_ids], :user_id => params[:membership][:user_id])
user_grades << UserGrade.new(:user_id => params[:membership][:user_id], :project_id => @project.id)
## added by nie
if (params[:membership][:role_ids] && params[:membership][:role_ids][0] == "3")
project_info << ProjectInfo.new(:project_id => @project.id, :user_id => params[:membership][:user_id])
end
## end
end
@project.members << members
# added by nie
@project.project_infos << project_info
@project.user_grades << user_grades
# end
end
end
respond_to do |format|
format.html { redirect_to_settings_in_projects }
format.js { @members = members }
format.js { @members = members;@applied_members = members; }
format.api {
@member = members.first
if @member.valid?

View File

@ -767,6 +767,7 @@ class ProjectsController < ApplicationController
@subPage_title = l :label_member_list
@members = @project.member_principals.includes(:roles, :principal).all
@members = sort_project_members(@project, @members)
@applied_members = appied_project_members(@project, @members)
end
@members = paginateHelper @members
render :layout => 'base_courses' if @project.project_type == 1
@ -797,7 +798,20 @@ class ProjectsController < ApplicationController
end
memberlist
end
def appied_project_members (project, members)
users = AppliedProject.where(:project_id => project.id).
memberlist = []
users.each do |user|
members.each do |member|
if member[:user_id] == user[:user_id]
memberlist << member
end
end
end
memberlist
end
def file
end

View File

@ -32,4 +32,21 @@ module MembersHelper
s + content_tag('div', content_tag('ul', links), :class => 'pagination_new')
end
# 当前申请加入的成员名单
def render_principals_for_applied_members(project)
scope = Principal.active.sorted.applied_members(project).like(params[:q])
principal_count = scope.count
principal_pages = Redmine::Pagination::Paginator.new principal_count, 10, params['page']
principals = scope.offset(principal_pages.offset).limit(principal_pages.per_page).all
s = content_tag('div', principals_check_box_tags_ex('membership[user_ids][]', principals), :id => 'principals')
links = pagination_links_full(principal_pages, principal_count, :per_page_links => false) {|text, parameters, options|
link_to text, appliedproject_project_memberships_path(project, parameters.merge(:q => params[:q], :format => 'js')), :remote => true
}
s + content_tag('div', content_tag('ul', links), :class => 'applied_new')
end
end

View File

@ -2,5 +2,14 @@ class AppliedProject < ActiveRecord::Base
attr_accessible :project_id, :user_id
belongs_to :user
belongs_to :project
belongs_to :project
#删除用户申请
def self.deleteappiled(userid, projectid)
@applieds = AppliedProject.where("user_id = ? and project_id = ?", userid, projectid)
@applieds.each do |applied|
applied.destroy
end
end
end

View File

@ -72,6 +72,12 @@ class Principal < ActiveRecord::Base
}
scope :sorted, lambda { order(*Principal.fields_for_order_statement)}
scope :applied_members, lambda {|project|
id = project.id
ids1 = project.applied_projects.map(&:user_id)
where("#{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE user_id in (?))", ids1)
}
before_create :set_default_empty_values
def name(formatter = nil)

View File

@ -66,6 +66,7 @@ class Project < ActiveRecord::Base
has_one :course_extra, :class_name => 'Course', :foreign_key => :extra,:primary_key => :identifier, :dependent => :destroy
has_many :applied_projects
# end
#ADDED BY NIE
has_many :project_infos, :dependent => :destroy

View File

@ -0,0 +1 @@
$('#principals_for_applied_member').html('<%= escape_javascript(render_principals_for_applied_members(@project)) %>');

View File

@ -120,6 +120,30 @@
<div class="splitcontentright">
<% if r.any? %>
<% if @project.applied_projects.any? %>
<div id="applied_project_block">
<%= form_for(@applied_members, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %>
<fieldset>
<legend><%= l(:label_apply_project) %></legend>
<div id="principals_for_applied_member">
<%= render_principals_for_applied_members(@project) %>
</div>
<!--show the roles which will select-->
<p style="padding-top: 5px"><%= l(:label_role_plural) %>:
<% r.each do |role| %>
<label><%= check_box_tag 'membership[role_ids][]', role.id %> <%= h role %></label>
<% end %></p>
<p><%= submit_tag l(:label_approve), :id => 'member-add-submit' %>
<%= submit_tag l(:label_refusal), :name => "refusal_button", :id => 'member-refusal-submit' %>
</p>
</fieldset>
<% end %>
</div>
<% end %>
<%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %>
<fieldset><legend><%=l(:label_member_new)%></legend>

View File

@ -147,6 +147,8 @@ en:
general_pdf_encoding: UTF-8
general_first_day_of_week: '7'
label_approve: Approve
label_refusal: Refusal
notice_account_updated: Account was successfully updated.
notice_account_invalid_creditentials: Invalid user or password
notice_account_password_updated: Password was successfully updated.

View File

@ -155,6 +155,9 @@ zh:
general_pdf_encoding: gb18030
general_first_day_of_week: '7'
label_approve: 批准
label_refusal: 拒绝
notice_account_updated: 帐号更新成功
notice_account_invalid_creditentials: 无效的用户名或密码
notice_account_invalid_creditentials_new: 您还未到邮箱激活

View File

@ -300,6 +300,7 @@ RedmineApp::Application.routes.draw do
resources :memberships, :shallow => true, :controller => 'members', :only => [:index, :show, :new, :create, :update, :destroy] do
collection do
get 'autocomplete'
get 'appliedproject'
end
end