diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb
index ca5002af8..111cabc3d 100644
--- a/app/controllers/members_controller.rb
+++ b/app/controllers/members_controller.rb
@@ -17,9 +17,9 @@
class MembersController < ApplicationController
model_object Member
- before_filter :find_model_object, :except => [:index, :create, :autocomplete]
- before_filter :find_project_from_association, :except => [:index, :create, :autocomplete]
- before_filter :find_project_by_project_id, :only => [:index, :create, :autocomplete]
+ before_filter :find_model_object, :except => [:index, :new, :create, :autocomplete]
+ before_filter :find_project_from_association, :except => [:index, :new, :create, :autocomplete]
+ before_filter :find_project_by_project_id, :only => [:index, :new, :create, :autocomplete]
before_filter :authorize
accept_api_auth :index, :show, :create, :update, :destroy
@@ -46,6 +46,10 @@ class MembersController < ApplicationController
end
end
+ def new
+ @member = Member.new
+ end
+
def create
members = []
if params[:membership]
diff --git a/app/helpers/members_helper.rb b/app/helpers/members_helper.rb
index 36f823569..9036c6db0 100644
--- a/app/helpers/members_helper.rb
+++ b/app/helpers/members_helper.rb
@@ -19,12 +19,15 @@
module MembersHelper
def render_principals_for_new_members(project)
- scope = Principal.visible.sorted.not_member_of(project).like(params[:q])
+ scope = Principal.active.visible.sorted.not_member_of(project).like(params[:q])
principal_count = scope.count
principal_pages = Redmine::Pagination::Paginator.new principal_count, 100, params['page']
principals = scope.offset(principal_pages.offset).limit(principal_pages.per_page).to_a
- s = content_tag('div', principals_check_box_tags('membership[user_ids][]', principals), :id => 'principals')
+ s = content_tag('div',
+ content_tag('div', principals_check_box_tags('membership[user_ids][]', principals), :id => 'principals'),
+ :class => 'objects-selection'
+ )
links = pagination_links_full(principal_pages, principal_count, :per_page_links => false) {|text, parameters, options|
link_to text, autocomplete_project_memberships_path(project, parameters.merge(:q => params[:q], :format => 'js')), :remote => true
diff --git a/app/views/members/_new_form.html.erb b/app/views/members/_new_form.html.erb
new file mode 100644
index 000000000..9140da7c4
--- /dev/null
+++ b/app/views/members/_new_form.html.erb
@@ -0,0 +1,16 @@
+
+
diff --git a/app/views/members/_new_modal.html.erb b/app/views/members/_new_modal.html.erb
new file mode 100644
index 000000000..0338a953c
--- /dev/null
+++ b/app/views/members/_new_modal.html.erb
@@ -0,0 +1,9 @@
+<%= l(:label_member_new) %>
+
+<%= form_for @member, :as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post do |f| %>
+ <%= render :partial => 'new_form' %>
+
+ <%= submit_tag l(:button_add), :id => 'member-add-submit' %>
+ <%= submit_tag l(:button_cancel), :name => nil, :onclick => "hideModal(this);", :type => 'button' %>
+
+<% end %>
diff --git a/app/views/members/create.js.erb b/app/views/members/create.js.erb
index 11c468a76..d716743ef 100644
--- a/app/views/members/create.js.erb
+++ b/app/views/members/create.js.erb
@@ -2,10 +2,11 @@ $('#tab-content-members').html('<%= escape_javascript(render :partial => 'projec
hideOnLoad();
<% if @members.present? && @members.all? {|m| m.valid? } %>
+ hideModal();
<% @members.each do |member| %>
$("#member-<%= member.id %>").effect("highlight");
<% end %>
-<% else %>
+<% elsif @members.present? %>
<% errors = @members.collect {|m| m.errors.full_messages}.flatten.uniq.join(', ') %>
alert('<%= raw(escape_javascript(l(:notice_failed_to_save_members, :errors => errors))) %>');
<% end %>
diff --git a/app/views/members/new.html.erb b/app/views/members/new.html.erb
new file mode 100644
index 000000000..97dd380c7
--- /dev/null
+++ b/app/views/members/new.html.erb
@@ -0,0 +1,6 @@
+<%= l(:label_member_new) %>
+
+<%= form_for @member, :as => :membership, :url => project_memberships_path(@project), :method => :post do |f| %>
+ <%= render :partial => 'new_form' %>
+ <%= submit_tag l(:button_add), :name => nil %>
+<% end %>
diff --git a/app/views/members/new.js.erb b/app/views/members/new.js.erb
new file mode 100644
index 000000000..2d60e296a
--- /dev/null
+++ b/app/views/members/new.js.erb
@@ -0,0 +1,2 @@
+$('#ajax-modal').html('<%= escape_javascript(render :partial => 'members/new_modal') %>');
+showModal('ajax-modal', '700px');
diff --git a/app/views/principal_memberships/_new_form.html.erb b/app/views/principal_memberships/_new_form.html.erb
index 2a0d50dbc..c49d84993 100644
--- a/app/views/principal_memberships/_new_form.html.erb
+++ b/app/views/principal_memberships/_new_form.html.erb
@@ -1,6 +1,6 @@